From 31a3521643dbf4bd218a6af10025f99ac3bf7e98 Mon Sep 17 00:00:00 2001 From: hop311 Date: Mon, 19 Feb 2024 20:56:21 +0000 Subject: Add TextureSprite base class --- src/openvic-simulation/interface/GFX.cpp | 42 +++++++++++++++++--------------- src/openvic-simulation/interface/GFX.hpp | 31 +++++++++++++++-------- src/openvic-simulation/interface/GUI.cpp | 4 +-- src/openvic-simulation/interface/GUI.hpp | 6 ++--- 4 files changed, 48 insertions(+), 35 deletions(-) (limited to 'src/openvic-simulation/interface') diff --git a/src/openvic-simulation/interface/GFX.cpp b/src/openvic-simulation/interface/GFX.cpp index ff2737c..06d4cd3 100644 --- a/src/openvic-simulation/interface/GFX.cpp +++ b/src/openvic-simulation/interface/GFX.cpp @@ -13,11 +13,11 @@ Font::Font( node_callback_t Sprite::expect_sprites(length_callback_t length_callback, callback_t&&> callback) { return expect_dictionary_keys_and_length( length_callback, - "spriteType", ZERO_OR_MORE, _expect_instance(callback), + "spriteType", ZERO_OR_MORE, _expect_instance(callback), "progressbartype", ZERO_OR_MORE, _expect_instance(callback), "PieChartType", ZERO_OR_MORE, _expect_instance(callback), "LineChartType", ZERO_OR_MORE, _expect_instance(callback), - "textSpriteType", ZERO_OR_MORE, _expect_instance(callback), + "textSpriteType", ZERO_OR_MORE, _expect_instance(callback), "maskedShieldType", ZERO_OR_MORE, _expect_instance(callback), "tileSpriteType", ZERO_OR_MORE, _expect_instance(callback), "corneredTileSpriteType", ZERO_OR_MORE, _expect_instance(callback), @@ -28,49 +28,51 @@ node_callback_t Sprite::expect_sprites(length_callback_t length_callback, callba ); } -TextureSprite::TextureSprite() : texture_file {}, no_of_frames { NO_FRAMES } {} +TextureSprite::TextureSprite() : texture_file {} {} bool TextureSprite::_fill_key_map(case_insensitive_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)), - "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, + "loadType", ZERO_OR_ONE, success_callback + ); + return ret; +} + +IconTextureSprite::IconTextureSprite() : no_of_frames { NO_FRAMES } {} + +bool IconTextureSprite::_fill_key_map(case_insensitive_key_map_t& key_map) { + bool ret = TextureSprite::_fill_key_map(key_map); + ret &= add_key_map_entries(key_map, + "noOfFrames", ZERO_OR_ONE, expect_uint(assign_variable_callback(no_of_frames)), + + "effectFile", 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 {} {} +TileTextureSprite::TileTextureSprite() : size {} {} bool TileTextureSprite::_fill_key_map(case_insensitive_key_map_t& key_map) { - bool ret = Sprite::_fill_key_map(key_map); + bool ret = TextureSprite::_fill_key_map(key_map); ret &= add_key_map_entries(key_map, - "texturefile", ONE_EXACTLY, expect_string(assign_variable_callback_string(texture_file)), - "size", ONE_EXACTLY, expect_ivec2(assign_variable_callback(size)), - - "norefcount", ZERO_OR_ONE, success_callback, - "loadType", ZERO_OR_ONE, success_callback + "size", ONE_EXACTLY, expect_ivec2(assign_variable_callback(size)) ); return ret; } -CorneredTileTextureSprite::CorneredTileTextureSprite() : texture_file {}, size {}, border_size {} {} +CorneredTileTextureSprite::CorneredTileTextureSprite() : size {}, border_size {} {} bool CorneredTileTextureSprite::_fill_key_map(case_insensitive_key_map_t& key_map) { - bool ret = Sprite::_fill_key_map(key_map); + bool ret = TextureSprite::_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", ONE_EXACTLY, expect_ivec2(assign_variable_callback(size)), - "borderSize", ONE_EXACTLY, expect_ivec2(assign_variable_callback(border_size)), - - "allwaystransparent", ZERO_OR_ONE, success_callback, - "loadType", ZERO_OR_ONE, success_callback + "borderSize", ONE_EXACTLY, expect_ivec2(assign_variable_callback(border_size)) ); return ret; } diff --git a/src/openvic-simulation/interface/GFX.hpp b/src/openvic-simulation/interface/GFX.hpp index 108ecb6..49691c1 100644 --- a/src/openvic-simulation/interface/GFX.hpp +++ b/src/openvic-simulation/interface/GFX.hpp @@ -46,13 +46,8 @@ namespace OpenVic::GFX { ); }; - class TextureSprite final : public Sprite { - friend std::unique_ptr std::make_unique(); - + class TextureSprite : public Sprite { std::string PROPERTY(texture_file); - frame_t PROPERTY(no_of_frames); - - // TODO - effectFile, allwaystransparent protected: TextureSprite(); @@ -63,13 +58,30 @@ namespace OpenVic::GFX { TextureSprite(TextureSprite&&) = default; virtual ~TextureSprite() = default; + OV_DETAIL_GET_BASE_TYPE(TextureSprite) OV_DETAIL_GET_TYPE }; - class TileTextureSprite final : public Sprite { + class IconTextureSprite final : public TextureSprite { + friend std::unique_ptr std::make_unique(); + + frame_t PROPERTY(no_of_frames); + + protected: + IconTextureSprite(); + + bool _fill_key_map(NodeTools::case_insensitive_key_map_t& key_map) override; + + public: + IconTextureSprite(IconTextureSprite&&) = default; + virtual ~IconTextureSprite() = default; + + OV_DETAIL_GET_TYPE + }; + + class TileTextureSprite final : public TextureSprite { friend std::unique_ptr std::make_unique(); - std::string PROPERTY(texture_file); ivec2_t PROPERTY(size); protected: @@ -84,10 +96,9 @@ namespace OpenVic::GFX { OV_DETAIL_GET_TYPE }; - class CorneredTileTextureSprite final : public Sprite { + class CorneredTileTextureSprite final : public TextureSprite { friend std::unique_ptr std::make_unique(); - std::string PROPERTY(texture_file); ivec2_t PROPERTY(size); ivec2_t PROPERTY(border_size); diff --git a/src/openvic-simulation/interface/GUI.cpp b/src/openvic-simulation/interface/GUI.cpp index 94e1fe3..ae4cf0e 100644 --- a/src/openvic-simulation/interface/GUI.cpp +++ b/src/openvic-simulation/interface/GUI.cpp @@ -240,7 +240,7 @@ bool TextEditBox::_fill_key_map(NodeTools::case_insensitive_key_map_t& key_map, Scrollbar::Scrollbar() : slider_button_name {}, track_button_name {}, less_button_name{}, more_button_name {}, size {}, border_size {}, - min_value {}, max_value {}, step_size {}, start_value {}, horizontal { false }, use_range_limit { false }, + min_value {}, max_value {}, step_size {}, start_value {}, horizontal { false }, range_limited { false }, range_limit_min {}, range_limit_max {}, range_limit_min_icon_name {}, range_limit_max_icon_name {} { scrollbar_elements.reserve(4); /* Space for 4 buttons, might need 2 more for range limit icons. */ } @@ -262,7 +262,7 @@ bool Scrollbar::_fill_key_map(NodeTools::case_insensitive_key_map_t& key_map, UI "stepSize", ONE_EXACTLY, expect_fixed_point(assign_variable_callback(step_size)), "startValue", ONE_EXACTLY, expect_fixed_point(assign_variable_callback(start_value)), "horizontal", ONE_EXACTLY, expect_int_bool(assign_variable_callback(horizontal)), - "useRangeLimit", ZERO_OR_ONE, expect_bool(assign_variable_callback(use_range_limit)), + "useRangeLimit", ZERO_OR_ONE, expect_bool(assign_variable_callback(range_limited)), "rangeLimitMin", ZERO_OR_ONE, expect_fixed_point(assign_variable_callback(range_limit_min)), "rangeLimitMax", ZERO_OR_ONE, expect_fixed_point(assign_variable_callback(range_limit_max)), "rangeLimitMinIcon", ZERO_OR_ONE, expect_string(assign_variable_callback_string(range_limit_min_icon_name)), diff --git a/src/openvic-simulation/interface/GUI.hpp b/src/openvic-simulation/interface/GUI.hpp index f044f7d..7551d1a 100644 --- a/src/openvic-simulation/interface/GUI.hpp +++ b/src/openvic-simulation/interface/GUI.hpp @@ -296,7 +296,7 @@ namespace OpenVic::GUI { fixed_point_t PROPERTY(start_value); bool PROPERTY_CUSTOM_PREFIX(horizontal, is) - bool PROPERTY(use_range_limit); + bool PROPERTY_CUSTOM_PREFIX(range_limited, is); fixed_point_t PROPERTY(range_limit_min); fixed_point_t PROPERTY(range_limit_max); std::string PROPERTY(range_limit_min_icon_name); @@ -314,8 +314,8 @@ namespace OpenVic::GUI { Scrollbar(Scrollbar&&) = default; virtual ~Scrollbar() = default; - Button const* get_slider_button() const; - Button const* get_track_button() const; + Button const* get_slider_button() const; /* The button you grab and move up and down the scrollbar. */ + Button const* get_track_button() const; /* The track/background the slider button moves along. */ Button const* get_less_button() const; Button const* get_more_button() const; -- cgit v1.2.3-56-ga3b1