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;
}
|