From 79c3462396fd4e1dcb7d1c9a2ef7bad741afa3e3 Mon Sep 17 00:00:00 2001 From: hop311 Date: Fri, 22 Mar 2024 23:28:28 +0000 Subject: GFX objectTypes loading framework + Actor loading --- src/openvic-simulation/interface/GFXObject.cpp | 144 +++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/openvic-simulation/interface/GFXObject.cpp (limited to 'src/openvic-simulation/interface/GFXObject.cpp') diff --git a/src/openvic-simulation/interface/GFXObject.cpp b/src/openvic-simulation/interface/GFXObject.cpp new file mode 100644 index 0000000..d873db1 --- /dev/null +++ b/src/openvic-simulation/interface/GFXObject.cpp @@ -0,0 +1,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&&> callback) { + return expect_dictionary_keys_and_length( + length_callback, + + "EMFXActorType", ZERO_OR_MORE, _expect_instance(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( + "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([this](Attachment&& attachment) -> bool { + return attachments.add_item(std::move(attachment)); + }), + "animation", ZERO_OR_MORE, Animation::_expect_value([this](Animation&& animation) -> bool { + return animations.add_item(std::move(animation)); + }) + ); + return ret; +} -- cgit v1.2.3-56-ga3b1