2022-09-01 11:30:01 -04:00
|
|
|
#include "Event.h"
|
2022-10-10 21:54:12 -03:00
|
|
|
#include "Main.h"
|
2023-02-26 21:45:25 -03:00
|
|
|
#include "obelisk.h"
|
2022-09-01 11:30:01 -04:00
|
|
|
|
2022-04-05 14:51:59 -04:00
|
|
|
#include <SceneTree.hpp>
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::_register_methods()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-08-26 19:27:57 -04:00
|
|
|
godot::register_method("_ready", &Main::_ready);
|
|
|
|
godot::register_method("_physics_process", &Main::_physics_process);
|
|
|
|
godot::register_method("_on_monitor_loaded", &Main::_on_monitor_loaded);
|
2022-08-26 23:56:30 -04:00
|
|
|
godot::register_property<Main, godot::String>("game_version", &Main::set_game_version, &Main::get_game_version, godot::String(default_game_version.c_str()));
|
2022-08-27 00:25:15 -04:00
|
|
|
godot::register_property<Main, godot::Ref<godot::PackedScene>>("level", &Main::set_level, &Main::get_level, godot::Ref<godot::PackedScene>(nullptr), GODOT_METHOD_RPC_MODE_DISABLED, GODOT_PROPERTY_USAGE_DEFAULT, GODOT_PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
|
2022-08-26 23:56:30 -04:00
|
|
|
godot::register_property<Main, bool>("full_screen", &Main::set_full_screen, &Main::get_full_screen, default_full_screen);
|
|
|
|
godot::register_property<Main, godot::Vector2>("window_size", &Main::set_window_size, &Main::get_window_size, default_window_size);
|
|
|
|
godot::register_property<Main, int8_t>("launch_screen", &Main::set_launch_screen, &Main::get_launch_screen, default_launch_screen);
|
2022-08-26 19:27:57 -04:00
|
|
|
godot::register_signal<Main>("monitor_loaded");
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
alai::Main::Main()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
alai::Main::~Main()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::_init()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-10-10 21:54:12 -03:00
|
|
|
_os = godot::OS::get_singleton();
|
|
|
|
_input = godot::Input::get_singleton();
|
2022-08-26 19:27:57 -04:00
|
|
|
_project_settings = godot::ProjectSettings::get_singleton();
|
2022-10-10 21:54:12 -03:00
|
|
|
_resource_loader = godot::ResourceLoader::get_singleton();
|
2022-04-05 14:51:59 -04:00
|
|
|
|
2022-08-26 23:56:30 -04:00
|
|
|
set_game_version(godot::String(default_game_version.c_str()));
|
|
|
|
set_full_screen(default_full_screen);
|
|
|
|
set_window_size(default_window_size);
|
|
|
|
set_launch_screen(default_launch_screen);
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::_ready()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2023-02-26 21:45:25 -03:00
|
|
|
auto obelisk = std::unique_ptr<obelisk::Obelisk> {new obelisk::Obelisk("alai.kb")};
|
|
|
|
godot::Godot::print("Obelisk version: " + godot::String(obelisk->getVersion().c_str()));
|
|
|
|
godot::Godot::print("Obelisk library version: " + godot::String(std::to_string(obelisk->getLibVersion()).c_str()));
|
|
|
|
|
2022-08-14 15:15:36 -04:00
|
|
|
auto success = _project_settings->load_resource_pack("monitor.pck");
|
|
|
|
if (success)
|
|
|
|
{
|
|
|
|
// Load monitor from pck
|
2022-08-26 19:27:57 -04:00
|
|
|
godot::Godot::print("Monitor pck found, loading...");
|
2022-08-14 16:53:44 -04:00
|
|
|
load_monitor();
|
2022-08-14 15:15:36 -04:00
|
|
|
}
|
|
|
|
else if (_resource_loader->exists("res://monitor/Monitor.tscn"))
|
|
|
|
{
|
|
|
|
// Load monitor from alai's pck
|
2022-08-14 16:53:44 -04:00
|
|
|
load_monitor();
|
2022-08-14 15:15:36 -04:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// There is no monitor included
|
|
|
|
_on_monitor_loaded();
|
|
|
|
}
|
|
|
|
|
2022-04-05 14:51:59 -04:00
|
|
|
if (get_full_screen())
|
|
|
|
{
|
|
|
|
_os->set_window_fullscreen(true);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
_os->set_window_size(window_size);
|
|
|
|
_os->set_window_position(
|
2022-10-10 21:54:12 -03:00
|
|
|
_os->get_screen_position(get_launch_screen()) + _os->get_screen_size() * 0.5 - _os->get_window_size() * 0.5);
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
2022-04-16 17:20:45 -04:00
|
|
|
|
2022-08-14 15:15:36 -04:00
|
|
|
success = _project_settings->load_resource_pack("crt.pck");
|
|
|
|
if (success)
|
|
|
|
{
|
|
|
|
// Load crt from pck
|
2022-08-26 19:27:57 -04:00
|
|
|
godot::Godot::print("CRT pck found, loading...");
|
|
|
|
godot::Ref<godot::PackedScene> crt_scene = _resource_loader->load("res://shaders/crt/crt.tscn");
|
2022-08-14 15:15:36 -04:00
|
|
|
add_child(crt_scene->instance());
|
|
|
|
}
|
|
|
|
else if (_resource_loader->exists("res://shaders/crt/crt.tscn"))
|
|
|
|
{
|
|
|
|
// Load crt from alai's pck
|
2022-08-26 19:27:57 -04:00
|
|
|
godot::Ref<godot::PackedScene> crt_scene = _resource_loader->load("res://shaders/crt/crt.tscn");
|
2022-08-14 15:15:36 -04:00
|
|
|
add_child(crt_scene->instance());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::_on_monitor_loaded()
|
2022-08-14 16:53:44 -04:00
|
|
|
{
|
2022-09-01 11:30:01 -04:00
|
|
|
load_level();
|
|
|
|
auto event = get_node<alai::Event>("/root/Event");
|
2022-09-01 12:26:26 -04:00
|
|
|
event->emit_signal("level_loaded");
|
2022-08-14 16:53:44 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::load_monitor()
|
2022-08-14 16:53:44 -04:00
|
|
|
{
|
2022-09-01 11:30:01 -04:00
|
|
|
auto event = get_node<alai::Event>("/root/Event");
|
|
|
|
event->connect("monitor_loaded", this, "_on_monitor_loaded");
|
2022-08-26 19:27:57 -04:00
|
|
|
godot::Ref<godot::PackedScene> monitor_scene = _resource_loader->load("res://monitor/Monitor.tscn");
|
2022-08-14 16:53:44 -04:00
|
|
|
add_child(monitor_scene->instance());
|
2022-09-01 12:26:26 -04:00
|
|
|
get_tree()->set_pause(true);
|
2022-08-14 16:53:44 -04:00
|
|
|
}
|
|
|
|
|
2022-09-01 11:30:01 -04:00
|
|
|
void alai::Main::load_level()
|
2022-08-14 16:53:44 -04:00
|
|
|
{
|
|
|
|
if (level != nullptr)
|
2022-04-16 17:20:45 -04:00
|
|
|
{
|
2022-10-10 21:54:12 -03:00
|
|
|
auto path = level->get_path();
|
2022-08-14 16:53:44 -04:00
|
|
|
auto loaded_level = level->instance();
|
2022-10-10 21:54:12 -03:00
|
|
|
auto level_node = get_node("Level");
|
2022-08-14 16:53:44 -04:00
|
|
|
level_node->add_child(loaded_level);
|
2022-04-16 17:20:45 -04:00
|
|
|
}
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::_physics_process(float delta)
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
|
|
|
if (_input->is_action_just_pressed("ui_cancel"))
|
|
|
|
{
|
|
|
|
get_tree()->quit();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::set_level(godot::Ref<godot::PackedScene> level)
|
2022-04-16 17:20:45 -04:00
|
|
|
{
|
|
|
|
this->level = level;
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
godot::Ref<godot::PackedScene> alai::Main::get_level()
|
2022-04-16 17:20:45 -04:00
|
|
|
{
|
|
|
|
return this->level;
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::set_game_version(godot::String game_version)
|
2022-06-29 13:29:11 -04:00
|
|
|
{
|
|
|
|
this->game_version = game_version;
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
godot::String alai::Main::get_game_version()
|
2022-06-29 13:29:11 -04:00
|
|
|
{
|
|
|
|
return this->game_version;
|
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::set_full_screen(bool full_screen)
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-04-12 11:33:22 -04:00
|
|
|
this->full_screen = full_screen;
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
bool alai::Main::get_full_screen()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-04-12 11:33:22 -04:00
|
|
|
return this->full_screen;
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::set_window_size(godot::Vector2 window_size)
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-10-10 21:54:12 -03:00
|
|
|
this->window_size = window_size;
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
godot::Vector2 alai::Main::get_window_size()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-04-12 11:33:22 -04:00
|
|
|
return this->window_size;
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
void alai::Main::set_launch_screen(int8_t launch_screen)
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-04-12 11:33:22 -04:00
|
|
|
this->launch_screen = launch_screen;
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
|
2022-08-26 21:02:40 -04:00
|
|
|
int8_t alai::Main::get_launch_screen()
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
2022-04-12 11:33:22 -04:00
|
|
|
if (this->launch_screen == -1)
|
2022-04-05 14:51:59 -04:00
|
|
|
{
|
|
|
|
return _os->get_current_screen();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2022-04-12 11:33:22 -04:00
|
|
|
return this->launch_screen;
|
2022-04-05 14:51:59 -04:00
|
|
|
}
|
|
|
|
}
|