aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/interface/GFX.cpp
blob: f9ae56b21dd89a1743d96269b2f8f72033a5fc70 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include "GFX.hpp"

using namespace OpenVic;
using namespace OpenVic::GFX;
using namespace OpenVic::NodeTools;

Font::Font(std::string_view new_identifier, colour_t new_colour, std::string_view new_fontname)
   : HasIdentifierAndColour { new_identifier, new_colour, false, true }, fontname { new_fontname } {}

node_callback_t Sprite::expect_sprite(callback_t<std::unique_ptr<Sprite>&&> callback) {
   return expect_dictionary_keys(
      "spriteType", ZERO_OR_MORE, _expect_instance<Sprite, TextureSprite>(callback),
      "progressbartype", ZERO_OR_MORE, _expect_instance<Sprite, ProgressBar>(callback),
      "PieChartType", ZERO_OR_MORE, _expect_instance<Sprite, PieChart>(callback),
      "LineChartType", ZERO_OR_MORE, _expect_instance<Sprite, LineChart>(callback),
      "textSpriteType", ZERO_OR_MORE, _expect_instance<Sprite, TextureSprite>(callback),
      "maskedShieldType", ZERO_OR_MORE, _expect_instance<Sprite, MaskedFlag>(callback),
      "tileSpriteType", ZERO_OR_MORE, _expect_instance<Sprite, TileTextureSprite>(callback),
      // TODO - add the rest of the sprite types
      "corneredTileSpriteType", ZERO_OR_MORE, success_callback,
      "BarChartType", ZERO_OR_MORE, success_callback,
      "scrollingSprite", ZERO_OR_MORE, success_callback
   );
}

TextureSprite::TextureSprite() : texture_file {}, no_of_frames { NO_FRAMES } {}

bool TextureSprite::_fill_key_map(key_map_t& key_map) {
   bool ret = Sprite::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "texturefile", ZERO_OR_ONE, expect_string(assign_variable_callback_string(texture_file)),
      "textureFile", ZERO_OR_ONE, expect_string(assign_variable_callback_string(texture_file)),
      "noOfFrames", ZERO_OR_ONE, expect_uint(assign_variable_callback(no_of_frames)),

      "norefcount", ZERO_OR_ONE, success_callback,
      "effectFile", ZERO_OR_ONE, success_callback,
      "allwaystransparent", ZERO_OR_ONE, success_callback,
      "transparencecheck", ZERO_OR_ONE, success_callback,
      "loadType", ZERO_OR_ONE, success_callback,
      "clicksound", ZERO_OR_ONE, success_callback
   );
   return ret;
}

TileTextureSprite::TileTextureSprite() : texture_file {}, size {} {}

bool TileTextureSprite::_fill_key_map(key_map_t& key_map) {
   bool ret = Sprite::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "texturefile", ZERO_OR_ONE, expect_string(assign_variable_callback_string(texture_file)),
      "size", ZERO_OR_ONE, expect_ivec2(assign_variable_callback(size)),

      "norefcount", ZERO_OR_ONE, success_callback,
      "loadType", ZERO_OR_ONE, success_callback
   );
   return ret;
}

ProgressBar::ProgressBar() : back_colour {}, progress_colour {} {}

bool ProgressBar::_fill_key_map(key_map_t& key_map) {
   bool ret = Sprite::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "color", ONE_EXACTLY, expect_colour(assign_variable_callback(back_colour)),
      "colortwo", ONE_EXACTLY, expect_colour(assign_variable_callback(progress_colour)),
      "textureFile1", ZERO_OR_ONE, expect_string(assign_variable_callback_string(progress_texture_file)),
      "textureFile2", ZERO_OR_ONE, expect_string(assign_variable_callback_string(back_texture_file)),
      "size", ONE_EXACTLY, expect_ivec2(assign_variable_callback(size)),

      "effectFile", ONE_EXACTLY, success_callback,
      "allwaystransparent", ZERO_OR_ONE, success_callback,
      "loadType", ZERO_OR_ONE, success_callback,
      "horizontal", ZERO_OR_ONE, success_callback
   );
   return ret;
}

PieChart::PieChart() : size {} {}

bool PieChart::_fill_key_map(key_map_t& key_map) {
   bool ret = Sprite::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map, "size", ONE_EXACTLY, expect_uint(assign_variable_callback(size)));
   return ret;
}

LineChart::LineChart() : size {}, linewidth {} {}

bool LineChart::_fill_key_map(key_map_t& key_map) {
   bool ret = Sprite::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "size", ONE_EXACTLY, expect_ivec2(assign_variable_callback(size)),
      "linewidth", ONE_EXACTLY, expect_uint(assign_variable_callback(linewidth)),
      "allwaystransparent", ZERO_OR_ONE, success_callback
   );
   return ret;
}

MaskedFlag::MaskedFlag() : overlay_file {}, mask_file {} {}

bool MaskedFlag::_fill_key_map(key_map_t& key_map) {
   bool ret = Sprite::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "textureFile1", ONE_EXACTLY, expect_string(assign_variable_callback_string(overlay_file)),
      "textureFile2", ONE_EXACTLY, expect_string(assign_variable_callback_string(mask_file)),
      "effectFile", ONE_EXACTLY, success_callback,
      "allwaystransparent", ZERO_OR_ONE, success_callback,
      "flipv", ZERO_OR_ONE, success_callback
   );
   return ret;
}