Merge branch 'develop' into feature/Prototype_R_LEVEL

# Conflicts:
#	godot/Main.tscn
#	godot/gui/GameOver.tscn
#	src/gui/game_over/GameOverScreen.cpp
This commit is contained in:
2022-09-01 16:13:55 -04:00
31 changed files with 384 additions and 118 deletions

View File

@@ -1,22 +1,22 @@
#include "gui/game_over/GameOverScreen.h"
#include "Event.h"
#include <Node.hpp>
#include <AudioStreamPlayer.hpp>
#include <PackedScene.hpp>
#include <Ref.hpp>
#include <Resource.hpp>
#include <SceneTree.hpp>
#include <Viewport.hpp>
#include <AudioStreamPlayer.hpp>
#include <VisibilityNotifier.hpp>
void alai::GameOverScreen::_register_methods()
{
register_method("_on_restart_button_pressed", &GameOverScreen::_on_restart_button_pressed);
register_method("_ready", &GameOverScreen::_ready);
register_method("connect_signal", &GameOverScreen::connect_signal);
register_method("_on_player_died", &GameOverScreen::_on_player_died);
register_method("_play music", &GameOverScreen::_play_music);
{
godot::register_method("_on_restart_button_pressed", &GameOverScreen::_on_restart_button_pressed);
godot::register_method("_ready", &GameOverScreen::_ready);
godot::register_method("restart_game", &GameOverScreen::restart_game);
godot::register_method("connect_signal", &GameOverScreen::connect_signal);
godot::register_method("_on_player_died", &GameOverScreen::_on_player_died);
godot::register_method("_play music", &GameOverScreen::_play_music);
}
alai::GameOverScreen::GameOverScreen()
@@ -32,16 +32,13 @@ void alai::GameOverScreen::_init()
_resource_loader = godot::ResourceLoader::get_singleton();
}
void alai::GameOverScreen::_ready()
{
connect_signal();
}
void alai::GameOverScreen::_on_restart_button_pressed()
{
/*_r*/
if (_resource_loader->exists("res://levels/PrototypeR.tscn"))
{
godot::Ref<godot::PackedScene> level_scene = _resource_loader->load("res://levels/PrototypeR.tscn");
@@ -52,7 +49,7 @@ void alai::GameOverScreen::_on_restart_button_pressed()
{
level_node->add_child(level);
set_visible(false);
call_deferred("connect_signal");
call_deferred("restart_game");
}
else
{
@@ -86,6 +83,13 @@ void alai::GameOverScreen::_on_player_died()
}
}
void alai::GameOverScreen::restart_game()
{
auto event = get_node<alai::Event>("/root/Event");
event->emit_signal("game_started");
connect_signal();
}
void alai::GameOverScreen::connect_signal()
{
auto event = get_node<alai::Event>("/root/Event");
@@ -94,17 +98,4 @@ void alai::GameOverScreen::connect_signal()
void alai::GameOverScreen::_play_music()
{
if (this->is_on_screen() == true)
{
auto game_over_sound = get_node<godot::AudioStreamPlayer>("GameOverMusic");
game_over_sound->play();
}
else
{
auto game_over_sound = get_node<godot::AudioStreamPlayer>("GameOverMusic");
game_over_sound->stop();
}
}

View File

@@ -1,5 +1,5 @@
#ifndef ALAI_GAME_OVER_SCREEN_H
#define ALAI_GAME_OVER_SCREEN_H
#ifndef ALAI_GAME_OVER_GAME_OVER_SCREEN_H
#define ALAI_GAME_OVER_GAME_OVER_SCREEN_H
#include <CanvasLayer.hpp>
#include <Godot.hpp>
@@ -53,6 +53,7 @@ namespace alai
void _ready();
void _on_player_died();
void _on_restart_button_pressed();
void restart_game();
void connect_signal();
void _play_music();
};

View File

@@ -0,0 +1,66 @@
#include "gui/game_won/GameWonScreen.h"
#include "Event.h"
#include <SceneTree.hpp>
#include <Viewport.hpp>
void alai::GameWonScreen::_register_methods()
{
godot::register_method("_ready", &GameWonScreen::_ready);
godot::register_method("connect_signal", &GameWonScreen::connect_signal);
godot::register_method("_on_player_won", &GameWonScreen::_on_player_won);
godot::register_method("_on_quit_button_pressed", &GameWonScreen::_on_quit_button_pressed);
}
alai::GameWonScreen::GameWonScreen()
{
}
alai::GameWonScreen::~GameWonScreen()
{
}
void alai::GameWonScreen::_init()
{
}
void alai::GameWonScreen::_ready()
{
connect_signal();
}
void alai::GameWonScreen::_on_quit_button_pressed()
{
get_tree()->quit();
}
void alai::GameWonScreen::_on_player_won()
{
auto event = get_node<alai::Event>("/root/Event");
event->disconnect("player_won", this, "_on_player_won");
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)
{
child->queue_free();
}
else
{
WARN_PRINT("Child not found!");
}
}
else
{
WARN_PRINT("Node level not found!");
}
}
void alai::GameWonScreen::connect_signal()
{
auto event = get_node<alai::Event>("/root/Event");
event->connect("player_won", this, "_on_player_won");
}

View File

@@ -0,0 +1,51 @@
#ifndef ALAI_GAME_WON_GAME_WON_SCREEN_H
#define ALAI_GAME_WON_GAME_WON_SCREEN_H
#include <CanvasLayer.hpp>
#include <Godot.hpp>
namespace alai
{
/**
* @brief This class controls what happens when the game is won.
*
*/
class GameWonScreen : public godot::CanvasLayer
{
GODOT_CLASS(GameWonScreen, godot::CanvasLayer)
public:
/**
* @brief This method registers classes with Godot.
*
* @details This method registers methods, properties, and signals with the Godot engine.
*/
static void _register_methods();
/**
* @brief Construct a new GameWonScreen object.
*
*/
GameWonScreen();
/**
* @brief Destroy the GameWonScreen object.
*
*/
~GameWonScreen();
/**
* @brief Initialize the class from Godot.
*
* @details This method is called just once when the Godot engine connects to the instance of the class.
*/
void _init();
void _ready();
void _on_player_won();
void _on_quit_button_pressed();
void connect_signal();
};
}
#endif