aboutsummaryrefslogtreecommitdiff
path: root/src/openvic-simulation/interface/GFXObject.cpp
blob: d873db143076bc60b81a4b8b6dc10d441f2937e2 (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include "GFXObject.hpp"

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

node_callback_t Object::expect_objects(length_callback_t length_callback, callback_t<std::unique_ptr<Object>&&> callback) {
   return expect_dictionary_keys_and_length(
      length_callback,

      "EMFXActorType", ZERO_OR_MORE, _expect_instance<Object, Actor>(callback),

      /* arrows.gfx */
      "arrowType", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "size", ONE_EXACTLY, success_callback,
         "textureFile", ONE_EXACTLY, success_callback,
         "bodytexture", ONE_EXACTLY, success_callback,
         "color", ONE_EXACTLY, success_callback,
         "colortwo", ONE_EXACTLY, success_callback,
         "endAt", ONE_EXACTLY, success_callback,
         "height", ONE_EXACTLY, success_callback,
         "type", ONE_EXACTLY, success_callback,
         "heading", ONE_EXACTLY, success_callback,
         "effect", ONE_EXACTLY, success_callback
      ),

      /* battlearrow.gfx */
      "battlearrow", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "textureFile", ONE_EXACTLY, success_callback,
         "textureFile1", ONE_EXACTLY, success_callback,
         "start", ONE_EXACTLY, success_callback,
         "stop", ONE_EXACTLY, success_callback,
         "x", ONE_EXACTLY, success_callback,
         "y", ONE_EXACTLY, success_callback,
         "font", ONE_EXACTLY, success_callback,
         "scale", ONE_EXACTLY, success_callback,
         "nofade", ZERO_OR_ONE, success_callback,
         "textureloop", ZERO_OR_ONE, success_callback
      ),
      "mapinfo", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "textureFile", ZERO_OR_ONE, success_callback,
         "scale", ZERO_OR_ONE, success_callback
      ),

      /* mapitems.gfx */
      "projectionType", ZERO_OR_MORE, success_callback,
      "progressbar3dType", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "color", ONE_EXACTLY, success_callback,
         "colortwo", ONE_EXACTLY, success_callback,
         "size", ONE_EXACTLY, success_callback,
         "effectFile", ONE_EXACTLY, success_callback
      ),
      "billboardType", ZERO_OR_MORE, expect_dictionary_keys<StringMapCaseInsensitive>(
         "name", ONE_EXACTLY, success_callback,
         "texturefile", ONE_EXACTLY, success_callback,
         "noOfFrames", ZERO_OR_ONE, success_callback,
         "scale", ONE_EXACTLY, success_callback,
         "font_size", ZERO_OR_ONE, success_callback,
         "offset2", ZERO_OR_ONE, success_callback,
         "font", ZERO_OR_ONE, success_callback
      ),

      "unitstatsBillboardType", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "textureFile", ONE_EXACTLY, success_callback,
         "mask", ONE_EXACTLY, success_callback,
         "effectFile", ONE_EXACTLY, success_callback,
         "scale", ONE_EXACTLY, success_callback,
         "noOfFrames", ONE_EXACTLY, success_callback,
         "font_size", ONE_EXACTLY, success_callback,
         "font", ONE_EXACTLY, success_callback
      ),

      /* core.gfx */
      "animatedmaptext", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "speed", ONE_EXACTLY, success_callback,
         "position", ZERO_OR_ONE, success_callback,
         "scale", ZERO_OR_ONE, success_callback,
         "textblock", ONE_EXACTLY, expect_dictionary_keys(
            "text", ONE_EXACTLY, success_callback,
            "color", ONE_EXACTLY, success_callback,
            "font", ONE_EXACTLY, success_callback,
            "position", ONE_EXACTLY, success_callback,
            "size", ONE_EXACTLY, success_callback,
            "format", ONE_EXACTLY, success_callback
         )
      ),
      "flagType", ZERO_OR_MORE, expect_dictionary_keys(
         "name", ONE_EXACTLY, success_callback,
         "size", ONE_EXACTLY, success_callback
      ),
      "provinceType", ZERO_OR_ONE, success_callback,
      "provinceWaterType", ZERO_OR_ONE, success_callback,
      "mapTextType", ZERO_OR_MORE, success_callback,
      "meshType", ZERO_OR_MORE, success_callback
   );
}

Actor::Attachment::Attachment() : node {}, attach_id { 0 } {}

bool Actor::Attachment::_fill_key_map(NodeTools::case_insensitive_key_map_t& key_map) {
   bool ret = Named::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "node", ONE_EXACTLY, expect_string(assign_variable_callback_string(node)),
      "attachId", ONE_EXACTLY, expect_uint(assign_variable_callback(attach_id))
   );
   return ret;
}

Actor::Animation::Animation() : file {}, default_time { 0 } {}

bool Actor::Animation::_fill_key_map(NodeTools::case_insensitive_key_map_t& key_map) {
   bool ret = Named::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "file", ONE_EXACTLY, expect_string(assign_variable_callback_string(file)),
      "defaultAnimationTime", ONE_EXACTLY, expect_fixed_point(assign_variable_callback(default_time))
   );
   return ret;
}

Actor::Actor() : model_file {}, idle_animation_file {}, move_animation_file {}, attack_animation_file {}, scale { 1 } {}

bool Actor::_fill_key_map(NodeTools::case_insensitive_key_map_t& key_map) {
   bool ret = Object::_fill_key_map(key_map);
   ret &= add_key_map_entries(key_map,
      "actorfile", ONE_EXACTLY, expect_string(assign_variable_callback_string(model_file)),
      "idle", ZERO_OR_ONE, expect_string(assign_variable_callback_string(idle_animation_file)),
      "move", ZERO_OR_ONE, expect_string(assign_variable_callback_string(move_animation_file)),
      "attack", ZERO_OR_ONE, expect_string(assign_variable_callback_string(attack_animation_file)),
      "scale", ONE_EXACTLY, expect_fixed_point(assign_variable_callback(scale)),
      "attach", ZERO_OR_MORE, Attachment::_expect_value<Attachment>([this](Attachment&& attachment) -> bool {
         return attachments.add_item(std::move(attachment));
      }),
      "animation", ZERO_OR_MORE, Animation::_expect_value<Animation>([this](Animation&& animation) -> bool {
         return animations.add_item(std::move(animation));
      })
   );
   return ret;
}