2022-08-12 21:50:48 -04:00
|
|
|
#include "gui/game_over/GameOverScreen.h"
|
2022-09-01 11:30:58 -04:00
|
|
|
|
2022-08-27 22:34:18 -04:00
|
|
|
#include "Event.h"
|
|
|
|
|
2022-09-01 16:13:55 -04:00
|
|
|
#include <AudioStreamPlayer.hpp>
|
2022-08-27 18:14:21 -04:00
|
|
|
#include <PackedScene.hpp>
|
2022-08-28 01:08:04 -04:00
|
|
|
#include <Ref.hpp>
|
|
|
|
#include <Resource.hpp>
|
|
|
|
#include <SceneTree.hpp>
|
2022-08-27 18:14:21 -04:00
|
|
|
#include <Viewport.hpp>
|
2022-08-26 13:51:19 -04:00
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
void alai::GameOverScreen::_register_methods()
|
2022-09-01 16:13:55 -04:00
|
|
|
{
|
2022-08-31 00:36:01 -04:00
|
|
|
godot::register_method("_on_restart_button_pressed", &GameOverScreen::_on_restart_button_pressed);
|
|
|
|
godot::register_method("_ready", &GameOverScreen::_ready);
|
2022-09-01 11:30:58 -04:00
|
|
|
godot::register_method("restart_game", &GameOverScreen::restart_game);
|
2022-08-31 00:36:01 -04:00
|
|
|
godot::register_method("connect_signal", &GameOverScreen::connect_signal);
|
|
|
|
godot::register_method("_on_player_died", &GameOverScreen::_on_player_died);
|
2022-09-01 16:18:38 -04:00
|
|
|
godot::register_method("_play_music", &GameOverScreen::_play_music);
|
2022-08-12 21:50:48 -04:00
|
|
|
}
|
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
alai::GameOverScreen::GameOverScreen()
|
2022-08-12 21:50:48 -04:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
alai::GameOverScreen::~GameOverScreen()
|
2022-08-12 21:50:48 -04:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
void alai::GameOverScreen::_init()
|
2022-08-12 21:50:48 -04:00
|
|
|
{
|
2022-08-28 01:08:04 -04:00
|
|
|
_resource_loader = godot::ResourceLoader::get_singleton();
|
2022-08-12 21:50:48 -04:00
|
|
|
}
|
2022-08-27 18:14:21 -04:00
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
void alai::GameOverScreen::_ready()
|
2022-08-12 21:50:48 -04:00
|
|
|
{
|
2022-08-27 22:34:18 -04:00
|
|
|
connect_signal();
|
|
|
|
}
|
2022-08-27 18:14:21 -04:00
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
void alai::GameOverScreen::_on_restart_button_pressed()
|
2022-08-27 22:34:18 -04:00
|
|
|
{
|
2022-08-28 20:15:40 -04:00
|
|
|
if (_resource_loader->exists("res://levels/PrototypeR.tscn"))
|
2022-08-27 18:14:21 -04:00
|
|
|
{
|
2022-08-28 20:15:40 -04:00
|
|
|
godot::Ref<godot::PackedScene> level_scene = _resource_loader->load("res://levels/PrototypeR.tscn");
|
2022-08-27 18:14:21 -04:00
|
|
|
auto level = level_scene->instance();
|
2022-08-27 22:34:18 -04:00
|
|
|
auto level_node = get_tree()->get_root()->get_node("Main")->find_node("Level");
|
|
|
|
|
|
|
|
if (level_node != nullptr)
|
|
|
|
{
|
|
|
|
level_node->add_child(level);
|
|
|
|
set_visible(false);
|
2022-09-01 11:30:58 -04:00
|
|
|
call_deferred("restart_game");
|
2022-08-27 22:34:18 -04:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
WARN_PRINT("Node level not found!");
|
|
|
|
}
|
2022-08-27 18:14:21 -04:00
|
|
|
}
|
2022-08-26 13:51:19 -04:00
|
|
|
}
|
2022-08-27 18:14:21 -04:00
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
void alai::GameOverScreen::_on_player_died()
|
2022-08-27 22:34:18 -04:00
|
|
|
{
|
|
|
|
auto event = get_node<alai::Event>("/root/Event");
|
|
|
|
event->disconnect("player_died", this, "_on_player_died");
|
|
|
|
set_visible(true);
|
|
|
|
auto level_node = get_tree()->get_root()->get_node("Main")->find_node("Level");
|
|
|
|
if (level_node != nullptr)
|
|
|
|
{
|
|
|
|
auto child = level_node->get_child(0);
|
|
|
|
if (child != nullptr)
|
|
|
|
{
|
2022-08-28 01:08:04 -04:00
|
|
|
// Delete the currently active level from the tree.
|
2022-08-27 22:34:18 -04:00
|
|
|
child->queue_free();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
WARN_PRINT("Child not found!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
WARN_PRINT("Node level not found!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-09-01 11:30:58 -04:00
|
|
|
void alai::GameOverScreen::restart_game()
|
|
|
|
{
|
|
|
|
auto event = get_node<alai::Event>("/root/Event");
|
|
|
|
event->emit_signal("game_started");
|
|
|
|
connect_signal();
|
|
|
|
}
|
|
|
|
|
2022-08-28 01:08:04 -04:00
|
|
|
void alai::GameOverScreen::connect_signal()
|
2022-08-27 22:34:18 -04:00
|
|
|
{
|
|
|
|
auto event = get_node<alai::Event>("/root/Event");
|
|
|
|
event->connect("player_died", this, "_on_player_died");
|
|
|
|
}
|
2022-09-01 15:55:02 -04:00
|
|
|
|
|
|
|
void alai::GameOverScreen::_play_music()
|
|
|
|
{
|
|
|
|
}
|