diff --git a/src/tunnels_game_state.cpp b/src/tunnels_game_state.cpp new file mode 100644 index 0000000..c81a3a7 --- /dev/null +++ b/src/tunnels_game_state.cpp @@ -0,0 +1,38 @@ +#include "tunnels_game_state.hpp" +#include "character_data.hpp" +#include "utils/godot_macros.h" +#include + +namespace godot { +void TunnelsGameState::_bind_methods() { +#define CLASSNAME TunnelsGameState + GDPROPERTY_HINTED(weapons, Variant::ARRAY, PROPERTY_HINT_ARRAY_TYPE, GDRESOURCETYPE(WeaponData)); + GDPROPERTY_HINTED(characters, Variant::ARRAY, PROPERTY_HINT_ARRAY_TYPE, GDRESOURCETYPE(CharacterData)); +} + +void TunnelsGameState::set_weapons(Array weapons) { + this->weapons.clear(); + for(size_t i = 0; i < weapons.size(); ++i) + this->weapons.push_back(weapons[i]); +} + +Array TunnelsGameState::get_weapons() const { + Array array{}; + for(Ref weapon : this->weapons) + array.push_back(weapon); + return array; +} + +void TunnelsGameState::set_characters(Array characters) { + this->characters.clear(); + for(size_t i = 0; i < characters.size(); ++i) + this->characters.push_back(characters[i]); +} + +Array TunnelsGameState::get_characters() const { + Array array{}; + for(Ref character : this->characters) + array.push_back(character); + return array; +} +} diff --git a/src/tunnels_game_state.hpp b/src/tunnels_game_state.hpp new file mode 100644 index 0000000..54c7bb7 --- /dev/null +++ b/src/tunnels_game_state.hpp @@ -0,0 +1,24 @@ +#ifndef TUNNELS_GAME_STATE_HPP +#define TUNNELS_GAME_STATE_HPP + +#include "character_data.hpp" +#include "utils/game_state.hpp" +#include "weapon_data.hpp" +#include + +namespace godot { +class TunnelsGameState : public GameState { + GDCLASS(TunnelsGameState, GameState); + static void _bind_methods(); +public: + void set_weapons(Array weapons); + Array get_weapons() const; + void set_characters(Array characters); + Array get_characters() const; +private: + Vector> weapons{}; + Vector> characters{}; +}; +} + +#endif // !TUNNELS_GAME_STATE_HPP