feat: implemented singleton fully for game state
This commit is contained in:
parent
1828ebbe21
commit
8d07ee03fa
|
@ -1,11 +1,25 @@
|
||||||
#include "game_state.h"
|
#include "game_state.h"
|
||||||
#include "macros.h"
|
#include "macros.h"
|
||||||
|
|
||||||
|
GameState *GameState::singleton_instance{ nullptr };
|
||||||
|
|
||||||
void GameState::_bind_methods() {
|
void GameState::_bind_methods() {
|
||||||
BIND_PROPERTY(Variant::STRING, locale_uid);
|
BIND_PROPERTY(Variant::STRING, locale_uid);
|
||||||
BIND_PROPERTY(Variant::STRING, locale_entrance_path);
|
BIND_PROPERTY(Variant::STRING, locale_entrance_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GameState::GameState() {
|
||||||
|
self_type::singleton_instance = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameState::~GameState() {
|
||||||
|
self_type::singleton_instance = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
GameState *GameState::get_singleton() {
|
||||||
|
return self_type::singleton_instance;
|
||||||
|
}
|
||||||
|
|
||||||
void GameState::set_locale_uid(String const &value) {
|
void GameState::set_locale_uid(String const &value) {
|
||||||
this->locale_uid = value;
|
this->locale_uid = value;
|
||||||
}
|
}
|
||||||
|
@ -21,4 +35,3 @@ void GameState::set_locale_entrance_path(String const &value) {
|
||||||
String GameState::get_locale_entrance_path() const {
|
String GameState::get_locale_entrance_path() const {
|
||||||
return this->locale_uid;
|
return this->locale_uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,26 @@
|
||||||
#ifndef GAME_STATE_H
|
#ifndef GAME_STATE_H
|
||||||
#define GAME_STATE_H
|
#define GAME_STATE_H
|
||||||
|
|
||||||
#include "core/object/object.h"
|
|
||||||
#include "core/object/class_db.h"
|
#include "core/object/class_db.h"
|
||||||
|
#include "core/object/object.h"
|
||||||
|
|
||||||
class GameState : public Object {
|
class GameState : public Object {
|
||||||
GDCLASS(GameState, Object);
|
GDCLASS(GameState, Object);
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
static GameState *singleton_instance;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
GameState();
|
||||||
|
virtual ~GameState();
|
||||||
static GameState *get_singleton();
|
static GameState *get_singleton();
|
||||||
void set_locale_uid(String const &value);
|
void set_locale_uid(String const &value);
|
||||||
String get_locale_uid() const;
|
String get_locale_uid() const;
|
||||||
void set_locale_entrance_path(String const &value);
|
void set_locale_entrance_path(String const &value);
|
||||||
String get_locale_entrance_path() const;
|
String get_locale_entrance_path() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
String locale_uid{""};
|
String locale_uid{ "" };
|
||||||
String locale_entrance_path{""};
|
String locale_entrance_path{ "" };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !GAME_STATE_H
|
#endif // !GAME_STATE_H
|
||||||
|
|
|
@ -9,11 +9,12 @@ void LocaleMarker::_bind_methods() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocaleMarker::_notification(int what) {
|
void LocaleMarker::_notification(int what) {
|
||||||
if(Engine::get_singleton()->is_editor_hint()) {
|
if (Engine::get_singleton()->is_editor_hint()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch(what) {
|
switch (what) {
|
||||||
default: return;
|
default:
|
||||||
|
return;
|
||||||
case NOTIFICATION_READY:
|
case NOTIFICATION_READY:
|
||||||
this->ready();
|
this->ready();
|
||||||
return;
|
return;
|
||||||
|
@ -25,10 +26,11 @@ void LocaleMarker::ready() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LocaleMarker::on_input_event(Node *camera, Ref<InputEvent> event, Vector3 position, Vector3 normal, int shape_ind) {
|
void LocaleMarker::on_input_event(Node *camera, Ref<InputEvent> event, Vector3 position, Vector3 normal, int shape_ind) {
|
||||||
Ref<InputEventMouseButton> clicked{event};
|
Ref<InputEventMouseButton> clicked{ event };
|
||||||
if(clicked.is_valid() && clicked->get_button_index() == MouseButton::LEFT) {
|
if (clicked.is_valid() && clicked->get_button_index() == MouseButton::LEFT) {
|
||||||
|
GameState::get_singleton()->set_locale_uid(this->locale_scene);
|
||||||
GameState::get_singleton()->set_locale_entrance_path(this->entrance_path);
|
GameState::get_singleton()->set_locale_entrance_path(this->entrance_path);
|
||||||
GameState::get_singleton()->set_locale_uid(locale_scene);
|
get_tree()->change_scene_to_file(this->locale_scene);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,15 +11,17 @@ class LocaleMarker : public Area3D {
|
||||||
void _notification(int what);
|
void _notification(int what);
|
||||||
void ready();
|
void ready();
|
||||||
void on_input_event(Node *camera, Ref<InputEvent> event, Vector3 position, Vector3 normal, int shape_ind);
|
void on_input_event(Node *camera, Ref<InputEvent> event, Vector3 position, Vector3 normal, int shape_ind);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void set_locale_scene(String const &value);
|
void set_locale_scene(String const &value);
|
||||||
String get_locale_scene() const;
|
String get_locale_scene() const;
|
||||||
void set_entrance_path(String const &value);
|
void set_entrance_path(String const &value);
|
||||||
String get_entrance_path() const;
|
String get_entrance_path() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
String locale_scene{"res://"};
|
String locale_scene{ "res://" };
|
||||||
String entrance_path{"%"};
|
String entrance_path{ "%" };
|
||||||
String const sig_input_event{"input_event"};
|
String const sig_input_event{ "input_event" };
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // !LOCALE_MARKER_H
|
#endif // !LOCALE_MARKER_H
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#include "core/config/engine.h"
|
#include "core/config/engine.h"
|
||||||
#include "core/object/class_db.h"
|
#include "core/object/class_db.h"
|
||||||
|
|
||||||
GameState *game_state{nullptr};
|
GameState *game_state{ nullptr };
|
||||||
|
|
||||||
void initialize_authority_module(ModuleInitializationLevel p_level) {
|
void initialize_authority_module(ModuleInitializationLevel p_level) {
|
||||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||||
|
@ -20,7 +20,7 @@ void uninitialize_authority_module(ModuleInitializationLevel p_level) {
|
||||||
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if(game_state) {
|
if (game_state) {
|
||||||
memdelete(game_state);
|
memdelete(game_state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue