From 57289dcb8f8260eb1097cf161e2d459e7da86dd9 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Fri, 20 May 2022 12:50:47 -0400 Subject: [PATCH 01/19] Coin added to prototype --- godot/Collectables/Coin/Coin.tscn | 31 +++++++++++++++++++++++++++++++ godot/Main.tscn | 2 +- godot/levels/Prototype.tscn | 11 ++++++++++- godot/project.godot | 1 + 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 godot/Collectables/Coin/Coin.tscn diff --git a/godot/Collectables/Coin/Coin.tscn b/godot/Collectables/Coin/Coin.tscn new file mode 100644 index 0000000..d627422 --- /dev/null +++ b/godot/Collectables/Coin/Coin.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://assets/coin.png" type="Texture" id=1] + +[sub_resource type="CircleShape2D" id=1] +radius = 6.0 + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 1 ) +region = Rect2( 0, 0, 18, 18 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 1 ) +region = Rect2( 18, 0, 18, 18 ) + +[sub_resource type="SpriteFrames" id=4] +animations = [ { +"frames": [ SubResource( 2 ), SubResource( 3 ) ], +"loop": true, +"name": "default", +"speed": 5.0 +} ] + +[node name="coin" type="Area2D"] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource( 1 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +frames = SubResource( 4 ) +playing = true diff --git a/godot/Main.tscn b/godot/Main.tscn index a9c8579..0b5ed2e 100644 --- a/godot/Main.tscn +++ b/godot/Main.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=3 format=2] [ext_resource path="res://Main.gdns" type="Script" id=1] -[ext_resource path="res://levels/Level2.tscn" type="PackedScene" id=2] +[ext_resource path="res://levels/Prototype.tscn" type="PackedScene" id=2] [node name="Main" type="Node"] script = ExtResource( 1 ) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index b18e1ae..8b60c05 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -1,13 +1,16 @@ -[gd_scene load_steps=5 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://CameraLimit.gdns" type="Script" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] [ext_resource path="res://levels/Prototype.tmx" type="PackedScene" id=3] [ext_resource path="res://assets/backgrounds/mountains.png" type="Texture" id=4] +[ext_resource path="res://Collectables/Coin/Coin.tscn" type="PackedScene" id=5] [node name="Prototype" type="Node2D"] [node name="Player" parent="." instance=ExtResource( 2 )] +collision_layer = 5 +collision_mask = 6 [node name="Camera2D" type="Camera2D" parent="Player"] current = true @@ -39,3 +42,9 @@ centered = false [node name="Prototype" parent="Map" instance=ExtResource( 3 )] script = ExtResource( 1 ) + +[node name="coin" parent="." instance=ExtResource( 5 )] +position = Vector2( 72, 456 ) + +[node name="coin2" parent="." instance=ExtResource( 5 )] +position = Vector2( 240, 456 ) diff --git a/godot/project.godot b/godot/project.godot index 52b2be8..4ff88a6 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -95,6 +95,7 @@ right={ 2d_physics/layer_1="Player" 2d_physics/layer_2="Tiles" +2d_physics/layer_3="Collectables" [physics] From a079d8aa37fec7b26d7f292d53e7d58cf02ef6a1 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Tue, 24 May 2022 15:23:29 -0400 Subject: [PATCH 02/19] changes to coin --- godot/Collectables/Coin/Coin.tscn | 10 +++++++++- godot/characters/player/Player.tscn | 2 +- godot/levels/Prototype.tscn | 5 ++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/godot/Collectables/Coin/Coin.tscn b/godot/Collectables/Coin/Coin.tscn index d627422..efbd18c 100644 --- a/godot/Collectables/Coin/Coin.tscn +++ b/godot/Collectables/Coin/Coin.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://assets/coin.png" type="Texture" id=1] +[ext_resource path="res://Collectables/Coin/Coin.gd" type="Script" id=2] [sub_resource type="CircleShape2D" id=1] radius = 6.0 @@ -22,10 +23,17 @@ animations = [ { } ] [node name="coin" type="Area2D"] +collision_layer = 4 +script = ExtResource( 2 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( 9, 9 ) shape = SubResource( 1 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="."] frames = SubResource( 4 ) +frame = 1 playing = true +centered = false + +[connection signal="body_entered" from="." to="." method="_on_coin_body_entered"] diff --git a/godot/characters/player/Player.tscn b/godot/characters/player/Player.tscn index 858efb3..6edccfe 100644 --- a/godot/characters/player/Player.tscn +++ b/godot/characters/player/Player.tscn @@ -12,7 +12,7 @@ extents = Vector2( 7, 12 ) [node name="Player" type="KinematicBody2D"] -collision_mask = 2 +collision_mask = 6 script = ExtResource( 5 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="."] diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index 8b60c05..d62a938 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -10,7 +10,6 @@ [node name="Player" parent="." instance=ExtResource( 2 )] collision_layer = 5 -collision_mask = 6 [node name="Camera2D" type="Camera2D" parent="Player"] current = true @@ -44,7 +43,7 @@ centered = false script = ExtResource( 1 ) [node name="coin" parent="." instance=ExtResource( 5 )] -position = Vector2( 72, 456 ) +position = Vector2( 72, 450 ) [node name="coin2" parent="." instance=ExtResource( 5 )] -position = Vector2( 240, 456 ) +position = Vector2( 234, 450 ) From 20e2fafcf4d21633b59d6e65c2ec12b62184f39a Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Tue, 24 May 2022 23:17:16 -0400 Subject: [PATCH 03/19] Coin state machines archives created but not functional --- godot/Collectables/Coin/Coin.tscn | 6 +-- src/Coin/CoinCollected.cpp | 0 src/Coin/CoinCollected.h | 0 src/Coin/CoinNotCollected.cpp | 39 ++++++++++++++++ src/Coin/CoinNotCollected.h | 76 +++++++++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 src/Coin/CoinCollected.cpp create mode 100644 src/Coin/CoinCollected.h create mode 100644 src/Coin/CoinNotCollected.cpp create mode 100644 src/Coin/CoinNotCollected.h diff --git a/godot/Collectables/Coin/Coin.tscn b/godot/Collectables/Coin/Coin.tscn index efbd18c..c4b9f4f 100644 --- a/godot/Collectables/Coin/Coin.tscn +++ b/godot/Collectables/Coin/Coin.tscn @@ -1,7 +1,6 @@ -[gd_scene load_steps=7 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://assets/coin.png" type="Texture" id=1] -[ext_resource path="res://Collectables/Coin/Coin.gd" type="Script" id=2] [sub_resource type="CircleShape2D" id=1] radius = 6.0 @@ -24,7 +23,6 @@ animations = [ { [node name="coin" type="Area2D"] collision_layer = 4 -script = ExtResource( 2 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2( 9, 9 ) @@ -35,5 +33,3 @@ frames = SubResource( 4 ) frame = 1 playing = true centered = false - -[connection signal="body_entered" from="." to="." method="_on_coin_body_entered"] diff --git a/src/Coin/CoinCollected.cpp b/src/Coin/CoinCollected.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/Coin/CoinCollected.h b/src/Coin/CoinCollected.h new file mode 100644 index 0000000..e69de29 diff --git a/src/Coin/CoinNotCollected.cpp b/src/Coin/CoinNotCollected.cpp new file mode 100644 index 0000000..92d702e --- /dev/null +++ b/src/Coin/CoinNotCollected.cpp @@ -0,0 +1,39 @@ +#include "player/states/CoinNotCollected.h" + +using namespace godot; + +void CoinNotCollected::_register_methods() +{ + register_method("_state_enter", &CoinNotCollected::_state_enter); + register_method("_state_exit", &CoinNotCollected::_state_exit); + register_method("_physics_process", &CoinNotCollected::_physics_process); +} + +CoinNotCollected::CoinNotCollected() +{ +} + +CoinNotCollected::~CoinNotCollected() +{ +} + +void CoinNotCollected::_init() +{ + +} + +void CoinNotCollected::_state_enter() +{ + animated_sprite = get_parent()->get_node("AnimatedSprite"); + animated_sprite->stop(); + animated_sprite->set_animation("idle"); +} + +void CoinNotCollected::_state_exit() +{ +} + +void CoinNotCollected::_physics_process(float delta) +{ + +} diff --git a/src/Coin/CoinNotCollected.h b/src/Coin/CoinNotCollected.h new file mode 100644 index 0000000..d634de2 --- /dev/null +++ b/src/Coin/CoinNotCollected.h @@ -0,0 +1,76 @@ +#ifndef JUEGO_COIN_COINNOTCOLLECTED +#define JJUEGO_COIN_COINNOTCOLLECTED + +#include "state_machine/State.h" + +#include +#include +#include + +namespace godot +{ + /** + * @brief This class controls what happens when the Coin is in the not collected state. + * + */ + class CoinNotCollected : public State + { + GODOT_CLASS(CoinNotCollected, State) + + private: + /** + * @brief The animated sprite of the Coin. + * + */ + AnimatedSprite *animated_sprite; + + 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 CoinNotCollected object. + * + */ + CoinNotCollected(); + + /** + * @brief Destroy the CoinNotCollected object. + * + */ + ~CoinNotCollected(); + + /** + * @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(); + + /** + * @brief Called when the not collected state of the coin is entered. + * + */ + void _state_enter(); + + /** + * @brief Called when the not collected state of the coin is exited. + * + */ + void _state_exit(); + + /** + * @brief The physics processed every delta time. + * + * @param[in] delta The time since the method was last run. + */ + void _physics_process(float delta); + }; + +} + +#endif From 5fe9e3340af57ff911084a4c3b024e739075ee36 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Mon, 6 Jun 2022 20:59:51 -0400 Subject: [PATCH 04/19] Some fixes on Coin files --- godot/Collectables/Coin/Coin.tscn | 4 ++-- src/Coin/CoinNotCollected.cpp | 10 ++++++---- src/Coin/CoinNotCollected.h | 2 +- src/godot.cpp | 2 ++ 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/godot/Collectables/Coin/Coin.tscn b/godot/Collectables/Coin/Coin.tscn index c4b9f4f..d496232 100644 --- a/godot/Collectables/Coin/Coin.tscn +++ b/godot/Collectables/Coin/Coin.tscn @@ -17,7 +17,7 @@ region = Rect2( 18, 0, 18, 18 ) animations = [ { "frames": [ SubResource( 2 ), SubResource( 3 ) ], "loop": true, -"name": "default", +"name": "spin", "speed": 5.0 } ] @@ -30,6 +30,6 @@ shape = SubResource( 1 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="."] frames = SubResource( 4 ) -frame = 1 +animation = "spin" playing = true centered = false diff --git a/src/Coin/CoinNotCollected.cpp b/src/Coin/CoinNotCollected.cpp index 92d702e..41a4732 100644 --- a/src/Coin/CoinNotCollected.cpp +++ b/src/Coin/CoinNotCollected.cpp @@ -1,4 +1,4 @@ -#include "player/states/CoinNotCollected.h" +#include "Coin/CoinNotCollected.h" using namespace godot; @@ -25,15 +25,17 @@ void CoinNotCollected::_init() void CoinNotCollected::_state_enter() { animated_sprite = get_parent()->get_node("AnimatedSprite"); - animated_sprite->stop(); - animated_sprite->set_animation("idle"); + animated_sprite->set_animation("spin"); + animated_sprite->play(); } void CoinNotCollected::_state_exit() { + } void CoinNotCollected::_physics_process(float delta) { - + } + diff --git a/src/Coin/CoinNotCollected.h b/src/Coin/CoinNotCollected.h index d634de2..ab4488f 100644 --- a/src/Coin/CoinNotCollected.h +++ b/src/Coin/CoinNotCollected.h @@ -1,5 +1,5 @@ #ifndef JUEGO_COIN_COINNOTCOLLECTED -#define JJUEGO_COIN_COINNOTCOLLECTED +#define JUEGO_COIN_COINNOTCOLLECTED #include "state_machine/State.h" diff --git a/src/godot.cpp b/src/godot.cpp index 1c56d09..481a009 100644 --- a/src/godot.cpp +++ b/src/godot.cpp @@ -9,6 +9,7 @@ #include "player/states/PlayerMove.h" #include "player/states/PlayerJump.h" #include "player/states/PlayerFall.h" +#include "Coin/CoinNotCollected.h" using namespace godot; @@ -49,4 +50,5 @@ extern "C" void GDN_EXPORT godot_nativescript_init(void *handle) register_class(); register_class(); register_class(); + register_class(); } From 876206c39d25f8d1b775ae0a78f9d460416cf8a6 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sat, 11 Jun 2022 00:26:11 -0400 Subject: [PATCH 05/19] Added two states, collected and not collected --- godot/characters/player/Player.tscn | 2 +- godot/collectables/coin/Coin.tscn | 71 ++++++++++++++++++ .../coin/states/CoinCollected.gdns | 8 ++ .../coin/states/CoinNotCollected.gdns | 8 ++ godot/levels/Prototype.tscn | 2 +- src/Coin/CoinCollected.cpp | 0 src/Coin/CoinCollected.h | 0 src/coin/CoinCollected.cpp | 49 ++++++++++++ src/coin/CoinCollected.h | 75 +++++++++++++++++++ src/{Coin => coin}/CoinNotCollected.cpp | 19 ++++- src/{Coin => coin}/CoinNotCollected.h | 10 +-- src/godot.cpp | 6 +- 12 files changed, 238 insertions(+), 12 deletions(-) create mode 100644 godot/collectables/coin/Coin.tscn create mode 100644 godot/collectables/coin/states/CoinCollected.gdns create mode 100644 godot/collectables/coin/states/CoinNotCollected.gdns delete mode 100644 src/Coin/CoinCollected.cpp delete mode 100644 src/Coin/CoinCollected.h create mode 100644 src/coin/CoinCollected.cpp create mode 100644 src/coin/CoinCollected.h rename src/{Coin => coin}/CoinNotCollected.cpp (55%) rename src/{Coin => coin}/CoinNotCollected.h (87%) diff --git a/godot/characters/player/Player.tscn b/godot/characters/player/Player.tscn index 6edccfe..858efb3 100644 --- a/godot/characters/player/Player.tscn +++ b/godot/characters/player/Player.tscn @@ -12,7 +12,7 @@ extents = Vector2( 7, 12 ) [node name="Player" type="KinematicBody2D"] -collision_mask = 6 +collision_mask = 2 script = ExtResource( 5 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="."] diff --git a/godot/collectables/coin/Coin.tscn b/godot/collectables/coin/Coin.tscn new file mode 100644 index 0000000..6d52bb0 --- /dev/null +++ b/godot/collectables/coin/Coin.tscn @@ -0,0 +1,71 @@ +[gd_scene load_steps=10 format=2] + +[ext_resource path="res://assets/coin.png" type="Texture" id=1] +[ext_resource path="res://state_machine/StateMachine.gdns" type="Script" id=2] +[ext_resource path="res://collectables/coin/states/CoinNotCollected.gdns" type="Script" id=3] +[ext_resource path="res://collectables/coin/states/CoinCollected.gdns" type="Script" id=4] + +[sub_resource type="CircleShape2D" id=1] +radius = 6.0 + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 1 ) +region = Rect2( 0, 0, 18, 18 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 1 ) +region = Rect2( 18, 0, 18, 18 ) + +[sub_resource type="SpriteFrames" id=4] +animations = [ { +"frames": [ SubResource( 2 ), SubResource( 3 ) ], +"loop": true, +"name": "spin", +"speed": 5.0 +} ] + +[sub_resource type="Animation" id=5] +resource_name = "jump" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("AnimatedSprite:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ), Vector2( 0, -20 ), Vector2( 0, 0 ) ] +} + +[node name="Coin" type="Area2D"] +collision_layer = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( 9, 9 ) +shape = SubResource( 1 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +frames = SubResource( 4 ) +animation = "spin" +frame = 1 +playing = true +centered = false + +[node name="StateMachine" type="Node" parent="."] +script = ExtResource( 2 ) +default_state = "CoinNotCollected" + +[node name="CoinNotCollected" type="Node" parent="StateMachine"] +script = ExtResource( 3 ) + +[node name="CoinCollected" type="Node" parent="StateMachine"] +script = ExtResource( 4 ) + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +anims/jump = SubResource( 5 ) + +[connection signal="body_entered" from="." to="StateMachine/CoinNotCollected" method="_on_body_entered" flags=6] +[connection signal="animation_finished" from="AnimationPlayer" to="StateMachine/CoinCollected" method="_on_animation_finished" flags=6] diff --git a/godot/collectables/coin/states/CoinCollected.gdns b/godot/collectables/coin/states/CoinCollected.gdns new file mode 100644 index 0000000..4465239 --- /dev/null +++ b/godot/collectables/coin/states/CoinCollected.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://gdnative/alai.tres" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "CoinCollected" +class_name = "CoinCollected" +library = ExtResource( 1 ) diff --git a/godot/collectables/coin/states/CoinNotCollected.gdns b/godot/collectables/coin/states/CoinNotCollected.gdns new file mode 100644 index 0000000..acc55d8 --- /dev/null +++ b/godot/collectables/coin/states/CoinNotCollected.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://gdnative/alai.tres" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "CoinNotCollected" +class_name = "CoinNotCollected" +library = ExtResource( 1 ) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index d62a938..e95ba6f 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -4,7 +4,7 @@ [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] [ext_resource path="res://levels/Prototype.tmx" type="PackedScene" id=3] [ext_resource path="res://assets/backgrounds/mountains.png" type="Texture" id=4] -[ext_resource path="res://Collectables/Coin/Coin.tscn" type="PackedScene" id=5] +[ext_resource path="res://collectables/coin/Coin.tscn" type="PackedScene" id=5] [node name="Prototype" type="Node2D"] diff --git a/src/Coin/CoinCollected.cpp b/src/Coin/CoinCollected.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/src/Coin/CoinCollected.h b/src/Coin/CoinCollected.h deleted file mode 100644 index e69de29..0000000 diff --git a/src/coin/CoinCollected.cpp b/src/coin/CoinCollected.cpp new file mode 100644 index 0000000..65c4a51 --- /dev/null +++ b/src/coin/CoinCollected.cpp @@ -0,0 +1,49 @@ +#include "coin/CoinCollected.h" +#include + +using namespace godot; + +void CoinCollected::_register_methods() +{ + register_method("_state_enter", &CoinCollected::_state_enter); + register_method("_state_exit", &CoinCollected::_state_exit); + register_method("_on_animation_finished", &CoinCollected::_on_animation_finished); +} + +CoinCollected::CoinCollected() +{ +} + +CoinCollected::~CoinCollected() +{ +} + +void CoinCollected::_init() +{ + +} + +void CoinCollected::_state_enter() +{ + + auto node = get_parent()->find_node("AnimationPlayer"); + + if (node != nullptr) + { + auto animation_player = Object::cast_to(node); + animation_player->play("jump"); + } +} + +void CoinCollected::_state_exit() +{ + +} + +void CoinCollected::_on_animation_finished(String anim_name) +{ + this->get_parent()->queue_free(); + +} + + diff --git a/src/coin/CoinCollected.h b/src/coin/CoinCollected.h new file mode 100644 index 0000000..0e8f359 --- /dev/null +++ b/src/coin/CoinCollected.h @@ -0,0 +1,75 @@ +#ifndef ALAI_COIN_COLLECTED +#define ALAI_COIN_COLLECTED + +#include "state_machine/State.h" + +#include +#include +#include + +namespace godot +{ + /** + * @brief This class controls what happens when the Coin is in the collected state. + * + */ + class CoinCollected : public State + { + GODOT_CLASS(CoinCollected, State) + + private: + /** + * @brief The animated sprite of the Coin. + * + */ + AnimatedSprite *animated_sprite; + + 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 CoinCollected object. + * + */ + CoinCollected(); + + /** + * @brief Destroy the CoinCollected object. + * + */ + ~CoinCollected(); + + /** + * @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(); + + /** + * @brief Called when the collected state of the coin is entered. + * + */ + void _state_enter(); + + /** + * @brief Called when the collected state of the coin is exited. + * + */ + void _state_exit(); + + /** + * @brief Called when the animation of the collected coin has finished. + * + */ + void _on_animation_finished(String anim_name); + }; + +} + +#endif diff --git a/src/Coin/CoinNotCollected.cpp b/src/coin/CoinNotCollected.cpp similarity index 55% rename from src/Coin/CoinNotCollected.cpp rename to src/coin/CoinNotCollected.cpp index 41a4732..beb34e2 100644 --- a/src/Coin/CoinNotCollected.cpp +++ b/src/coin/CoinNotCollected.cpp @@ -1,4 +1,5 @@ -#include "Coin/CoinNotCollected.h" +#include "coin/CoinNotCollected.h" +#include using namespace godot; @@ -6,7 +7,7 @@ void CoinNotCollected::_register_methods() { register_method("_state_enter", &CoinNotCollected::_state_enter); register_method("_state_exit", &CoinNotCollected::_state_exit); - register_method("_physics_process", &CoinNotCollected::_physics_process); + register_method("_on_body_entered", &CoinNotCollected::_on_body_entered); } CoinNotCollected::CoinNotCollected() @@ -34,8 +35,20 @@ void CoinNotCollected::_state_exit() } -void CoinNotCollected::_physics_process(float delta) +void CoinNotCollected::_on_body_entered(Node *node) { + Godot::print("Coin touched"); + auto parent_node = get_parent(); + if (parent_node != nullptr) + { + auto coin = Object::cast_to(parent_node); + coin->set_collision_mask_bit(0, false); + } + get_state_machine()->change("CoinCollected"); + + } + + diff --git a/src/Coin/CoinNotCollected.h b/src/coin/CoinNotCollected.h similarity index 87% rename from src/Coin/CoinNotCollected.h rename to src/coin/CoinNotCollected.h index ab4488f..4739cf0 100644 --- a/src/Coin/CoinNotCollected.h +++ b/src/coin/CoinNotCollected.h @@ -1,5 +1,5 @@ -#ifndef JUEGO_COIN_COINNOTCOLLECTED -#define JUEGO_COIN_COINNOTCOLLECTED +#ifndef ALAI_COIN_NOT_COLLECTED +#define ALAI_COIN_NOT_COLLECTED #include "state_machine/State.h" @@ -64,11 +64,11 @@ namespace godot void _state_exit(); /** - * @brief The physics processed every delta time. + * @brief Method called on body entered. * - * @param[in] delta The time since the method was last run. + * @param[in] node Node interacting with whoever */ - void _physics_process(float delta); + void _on_body_entered(Node *node); }; } diff --git a/src/godot.cpp b/src/godot.cpp index 481a009..2e5d9a6 100644 --- a/src/godot.cpp +++ b/src/godot.cpp @@ -9,7 +9,8 @@ #include "player/states/PlayerMove.h" #include "player/states/PlayerJump.h" #include "player/states/PlayerFall.h" -#include "Coin/CoinNotCollected.h" +#include "coin/CoinNotCollected.h" +#include "coin/CoinCollected.h" using namespace godot; @@ -50,5 +51,6 @@ extern "C" void GDN_EXPORT godot_nativescript_init(void *handle) register_class(); register_class(); register_class(); - register_class(); + register_class(); + register_class(); } From a439748a344f57e1585b690bd2db443e42e81843 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Tue, 21 Jun 2022 23:26:43 -0400 Subject: [PATCH 06/19] On-screen coin counter state machine archives added --- src/coin/CoinCounter.cpp | 0 src/coin/CoinCounter.h | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/coin/CoinCounter.cpp create mode 100644 src/coin/CoinCounter.h diff --git a/src/coin/CoinCounter.cpp b/src/coin/CoinCounter.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/coin/CoinCounter.h b/src/coin/CoinCounter.h new file mode 100644 index 0000000..e69de29 From 3a5877777343bc1e69f8eadaaa12bfba8541f4b1 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sat, 25 Jun 2022 20:54:47 -0400 Subject: [PATCH 07/19] coin counter method created --- godot/levels/Prototype.tscn | 38 +++++++++++++++++- src/coin/CoinCounter.cpp | 40 +++++++++++++++++++ src/coin/CoinCounter.h | 77 +++++++++++++++++++++++++++++++++++++ 3 files changed, 154 insertions(+), 1 deletion(-) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index e95ba6f..b6f8afb 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -1,10 +1,14 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://CameraLimit.gdns" type="Script" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] [ext_resource path="res://levels/Prototype.tmx" type="PackedScene" id=3] [ext_resource path="res://assets/backgrounds/mountains.png" type="Texture" id=4] [ext_resource path="res://collectables/coin/Coin.tscn" type="PackedScene" id=5] +[ext_resource path="res://assets/coin.png" type="Texture" id=6] + +[sub_resource type="StyleBoxFlat" id=1] +bg_color = Color( 0, 0, 0, 0.541176 ) [node name="Prototype" type="Node2D"] @@ -47,3 +51,35 @@ position = Vector2( 72, 450 ) [node name="coin2" parent="." instance=ExtResource( 5 )] position = Vector2( 234, 450 ) + +[node name="CoinHUD" type="CanvasLayer" parent="."] + +[node name="Panel" type="Panel" parent="CoinHUD"] +margin_left = 144.0 +margin_top = 18.0 +margin_right = 288.0 +margin_bottom = 54.0 +custom_styles/panel = SubResource( 1 ) + +[node name="TextureRect" type="TextureRect" parent="CoinHUD"] +margin_left = 144.0 +margin_top = 18.0 +margin_right = 184.0 +margin_bottom = 58.0 +texture = ExtResource( 6 ) + +[node name="Label" type="Label" parent="CoinHUD"] +margin_left = 198.0 +margin_top = 18.0 +margin_right = 238.0 +margin_bottom = 36.0 +text = "X" + +[node name="Coins" type="Label" parent="CoinHUD"] +margin_left = 216.0 +margin_top = 18.0 +margin_right = 256.0 +margin_bottom = 32.0 +text = "##" + +[connection signal="ready" from="CoinHUD/Coins" to="Player" method="_on_CoinHUD_ready"] diff --git a/src/coin/CoinCounter.cpp b/src/coin/CoinCounter.cpp index e69de29..e50810f 100644 --- a/src/coin/CoinCounter.cpp +++ b/src/coin/CoinCounter.cpp @@ -0,0 +1,40 @@ +#include "coin/CoinCounter.h" +#include + +using namespace godot; + +void CoinCounter::_register_methods() +{ + register_method("_state_enter", &CoinCounter::_state_enter); + register_method("_state_exit", &CoinCounter::_state_exit); + register_method("_on_body_entered", &CoinCounter::_on_CoinHUD_ready); +} + +CoinCounter::CoinCounter() +{ +} + +CoinCounter::~CoinCounter() +{ +} + +void CoinCounter::_init() +{ + +} + +void CoinCounter::_state_enter() +{ + +} + +void CoinCounter::_state_exit() +{ + +} + +void CoinCounter::_on_CoinHUD_ready() +{ + + +} diff --git a/src/coin/CoinCounter.h b/src/coin/CoinCounter.h index e69de29..b194fb9 100644 --- a/src/coin/CoinCounter.h +++ b/src/coin/CoinCounter.h @@ -0,0 +1,77 @@ +#ifndef ALAI_COIN_COUNTER +#define ALAI_COIN_COUNTER + +#include "state_machine/State.h" + +#include +#include +#include + +namespace godot +{ + /** + * @brief This class controls what happens when the Coin is in the collected state. + * + */ + class CoinCounter : public State + { + GODOT_CLASS(CoinCounter, State) + + private: + /** + * @brief The animated sprite of the Coin. + * + */ + AnimatedSprite *animated_sprite; + + 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 CoinCounter object. + * + */ + CoinCounter(); + + /** + * @brief Destroy the CoinCounter object. + * + */ + ~CoinCounter(); + + /** + * @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(); + + /** + * @brief Called when the collected state of the coin is entered. + * + */ + void _state_enter(); + + /** + * @brief Called when the collected state of the coin is exited. + * + */ + void _state_exit(); + + /** + * @brief Called when the animation of the collected coin has finished. + * + */ + + void _on_CoinHUD_ready(); + + }; + +} + +#endif From b25e1f040c8eecc6a3df763affaf669145eaf6b7 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Fri, 15 Jul 2022 23:04:06 -0400 Subject: [PATCH 08/19] minor changes --- godot/levels/Prototype.tscn | 2 +- src/coin/CoinCollected.cpp | 6 +++++- src/coin/CoinCounter.cpp | 5 ++++- src/coin/CoinNotCollected.cpp | 2 ++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index b6f8afb..b1f265c 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -82,4 +82,4 @@ margin_right = 256.0 margin_bottom = 32.0 text = "##" -[connection signal="ready" from="CoinHUD/Coins" to="Player" method="_on_CoinHUD_ready"] +[connection signal="ready" from="CoinHUD" to="Player" method="_on_CoinHUD_ready"] diff --git a/src/coin/CoinCollected.cpp b/src/coin/CoinCollected.cpp index 65c4a51..7f1f2f2 100644 --- a/src/coin/CoinCollected.cpp +++ b/src/coin/CoinCollected.cpp @@ -2,6 +2,7 @@ #include using namespace godot; +int coin = 0; void CoinCollected::_register_methods() { @@ -25,7 +26,7 @@ void CoinCollected::_init() void CoinCollected::_state_enter() { - + coin = coin + 1; auto node = get_parent()->find_node("AnimationPlayer"); if (node != nullptr) @@ -33,6 +34,7 @@ void CoinCollected::_state_enter() auto animation_player = Object::cast_to(node); animation_player->play("jump"); } + } void CoinCollected::_state_exit() @@ -44,6 +46,8 @@ void CoinCollected::_on_animation_finished(String anim_name) { this->get_parent()->queue_free(); + // get_state_machine()->change("CoinCounter"); + } diff --git a/src/coin/CoinCounter.cpp b/src/coin/CoinCounter.cpp index e50810f..365453b 100644 --- a/src/coin/CoinCounter.cpp +++ b/src/coin/CoinCounter.cpp @@ -3,6 +3,7 @@ using namespace godot; + void CoinCounter::_register_methods() { register_method("_state_enter", &CoinCounter::_state_enter); @@ -35,6 +36,8 @@ void CoinCounter::_state_exit() void CoinCounter::_on_CoinHUD_ready() { - + get_node("Coins").text() = "hola"; } + + diff --git a/src/coin/CoinNotCollected.cpp b/src/coin/CoinNotCollected.cpp index beb34e2..cb7487b 100644 --- a/src/coin/CoinNotCollected.cpp +++ b/src/coin/CoinNotCollected.cpp @@ -3,6 +3,7 @@ using namespace godot; + void CoinNotCollected::_register_methods() { register_method("_state_enter", &CoinNotCollected::_state_enter); @@ -45,6 +46,7 @@ void CoinNotCollected::_on_body_entered(Node *node) auto coin = Object::cast_to(parent_node); coin->set_collision_mask_bit(0, false); } + get_state_machine()->change("CoinCollected"); From b9ff12dab300bb48909b01989da6d36368cf4f49 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sat, 16 Jul 2022 18:36:38 -0400 Subject: [PATCH 09/19] Finished coin counter --- godot/Collectables/Coin/Coin.tscn | 35 ------------------ godot/hud/coin/Counter.gdns | 8 +++++ godot/levels/Prototype.tscn | 59 +++++++++++++++++++++---------- src/coin/CoinCollected.cpp | 5 +-- src/coin/CoinCounter.cpp | 40 +++++++++++---------- src/coin/CoinCounter.h | 32 +++++------------ src/godot.cpp | 2 ++ 7 files changed, 84 insertions(+), 97 deletions(-) delete mode 100644 godot/Collectables/Coin/Coin.tscn create mode 100644 godot/hud/coin/Counter.gdns diff --git a/godot/Collectables/Coin/Coin.tscn b/godot/Collectables/Coin/Coin.tscn deleted file mode 100644 index d496232..0000000 --- a/godot/Collectables/Coin/Coin.tscn +++ /dev/null @@ -1,35 +0,0 @@ -[gd_scene load_steps=6 format=2] - -[ext_resource path="res://assets/coin.png" type="Texture" id=1] - -[sub_resource type="CircleShape2D" id=1] -radius = 6.0 - -[sub_resource type="AtlasTexture" id=2] -atlas = ExtResource( 1 ) -region = Rect2( 0, 0, 18, 18 ) - -[sub_resource type="AtlasTexture" id=3] -atlas = ExtResource( 1 ) -region = Rect2( 18, 0, 18, 18 ) - -[sub_resource type="SpriteFrames" id=4] -animations = [ { -"frames": [ SubResource( 2 ), SubResource( 3 ) ], -"loop": true, -"name": "spin", -"speed": 5.0 -} ] - -[node name="coin" type="Area2D"] -collision_layer = 4 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2( 9, 9 ) -shape = SubResource( 1 ) - -[node name="AnimatedSprite" type="AnimatedSprite" parent="."] -frames = SubResource( 4 ) -animation = "spin" -playing = true -centered = false diff --git a/godot/hud/coin/Counter.gdns b/godot/hud/coin/Counter.gdns new file mode 100644 index 0000000..622052d --- /dev/null +++ b/godot/hud/coin/Counter.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://gdnative/alai.tres" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "CoinCounter" +class_name = "CoinCounter" +library = ExtResource( 1 ) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index b1f265c..e3c4608 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=12 format=2] [ext_resource path="res://CameraLimit.gdns" type="Script" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] @@ -6,10 +6,27 @@ [ext_resource path="res://assets/backgrounds/mountains.png" type="Texture" id=4] [ext_resource path="res://collectables/coin/Coin.tscn" type="PackedScene" id=5] [ext_resource path="res://assets/coin.png" type="Texture" id=6] +[ext_resource path="res://hud/coin/Counter.gdns" type="Script" id=7] [sub_resource type="StyleBoxFlat" id=1] bg_color = Color( 0, 0, 0, 0.541176 ) +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 6 ) +region = Rect2( 0, 0, 18, 18 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 6 ) +region = Rect2( 18, 0, 18, 18 ) + +[sub_resource type="SpriteFrames" id=4] +animations = [ { +"frames": [ SubResource( 2 ), SubResource( 3 ) ], +"loop": true, +"name": "spin", +"speed": 5.0 +} ] + [node name="Prototype" type="Node2D"] [node name="Player" parent="." instance=ExtResource( 2 )] @@ -46,12 +63,6 @@ centered = false [node name="Prototype" parent="Map" instance=ExtResource( 3 )] script = ExtResource( 1 ) -[node name="coin" parent="." instance=ExtResource( 5 )] -position = Vector2( 72, 450 ) - -[node name="coin2" parent="." instance=ExtResource( 5 )] -position = Vector2( 234, 450 ) - [node name="CoinHUD" type="CanvasLayer" parent="."] [node name="Panel" type="Panel" parent="CoinHUD"] @@ -61,25 +72,35 @@ margin_right = 288.0 margin_bottom = 54.0 custom_styles/panel = SubResource( 1 ) -[node name="TextureRect" type="TextureRect" parent="CoinHUD"] -margin_left = 144.0 -margin_top = 18.0 -margin_right = 184.0 -margin_bottom = 58.0 -texture = ExtResource( 6 ) - [node name="Label" type="Label" parent="CoinHUD"] -margin_left = 198.0 +margin_left = 180.0 margin_top = 18.0 -margin_right = 238.0 +margin_right = 220.0 margin_bottom = 36.0 text = "X" [node name="Coins" type="Label" parent="CoinHUD"] -margin_left = 216.0 +margin_left = 198.0 margin_top = 18.0 -margin_right = 256.0 +margin_right = 238.0 margin_bottom = 32.0 text = "##" +script = ExtResource( 7 ) -[connection signal="ready" from="CoinHUD" to="Player" method="_on_CoinHUD_ready"] +[node name="AnimatedSprite" type="AnimatedSprite" parent="CoinHUD"] +position = Vector2( 162, 18 ) +frames = SubResource( 4 ) +animation = "spin" +frame = 1 +playing = true +centered = false + +[node name="Coins" type="Node" parent="."] + +[node name="coin" parent="Coins" instance=ExtResource( 5 )] +position = Vector2( 72, 450 ) + +[node name="coin2" parent="Coins" instance=ExtResource( 5 )] +position = Vector2( 234, 450 ) + +[editable path="Coins/coin"] diff --git a/src/coin/CoinCollected.cpp b/src/coin/CoinCollected.cpp index 7f1f2f2..9f3a9a4 100644 --- a/src/coin/CoinCollected.cpp +++ b/src/coin/CoinCollected.cpp @@ -2,13 +2,13 @@ #include using namespace godot; -int coin = 0; void CoinCollected::_register_methods() { register_method("_state_enter", &CoinCollected::_state_enter); register_method("_state_exit", &CoinCollected::_state_exit); register_method("_on_animation_finished", &CoinCollected::_on_animation_finished); + register_signal("coin_collected", "amount", GODOT_VARIANT_TYPE_INT); } CoinCollected::CoinCollected() @@ -26,7 +26,6 @@ void CoinCollected::_init() void CoinCollected::_state_enter() { - coin = coin + 1; auto node = get_parent()->find_node("AnimationPlayer"); if (node != nullptr) @@ -44,8 +43,10 @@ void CoinCollected::_state_exit() void CoinCollected::_on_animation_finished(String anim_name) { + emit_signal("coin_collected", 1); this->get_parent()->queue_free(); + // get_state_machine()->change("CoinCounter"); } diff --git a/src/coin/CoinCounter.cpp b/src/coin/CoinCounter.cpp index 365453b..22fc8e4 100644 --- a/src/coin/CoinCounter.cpp +++ b/src/coin/CoinCounter.cpp @@ -1,14 +1,12 @@ #include "coin/CoinCounter.h" -#include - +#include +#include "coin/CoinCollected.h" using namespace godot; - void CoinCounter::_register_methods() { - register_method("_state_enter", &CoinCounter::_state_enter); - register_method("_state_exit", &CoinCounter::_state_exit); - register_method("_on_body_entered", &CoinCounter::_on_CoinHUD_ready); + register_method("_on_coin_collected", &CoinCounter::_on_coin_collected); + register_method("_ready", &CoinCounter::_ready); } CoinCounter::CoinCounter() @@ -24,20 +22,26 @@ void CoinCounter::_init() } -void CoinCounter::_state_enter() -{ - -} - -void CoinCounter::_state_exit() -{ - -} - void CoinCounter::_on_CoinHUD_ready() { - get_node("Coins").text() = "hola"; + } +void CoinCounter::_on_coin_collected(int amount) +{ + coins = coins + amount; + set_text(String::num(coins)); +} +void CoinCounter::_ready() +{ + set_text("0"); + auto coins_node = get_node("../../Coins"); + auto children_count = coins_node->get_child_count(); + for(int64_t i = 0; i < children_count;i++) + { + auto child = coins_node->get_child(i); + child->get_node("StateMachine/CoinCollected")->connect("coin_collected",this,"_on_coin_collected"); + } + - +} diff --git a/src/coin/CoinCounter.h b/src/coin/CoinCounter.h index b194fb9..006aa93 100644 --- a/src/coin/CoinCounter.h +++ b/src/coin/CoinCounter.h @@ -1,28 +1,24 @@ #ifndef ALAI_COIN_COUNTER #define ALAI_COIN_COUNTER -#include "state_machine/State.h" #include #include -#include +#include namespace godot { /** - * @brief This class controls what happens when the Coin is in the collected state. + * @brief This class controls what happens when the Coin is in the collected . * */ - class CoinCounter : public State + class CoinCounter : public Label { - GODOT_CLASS(CoinCounter, State) + GODOT_CLASS(CoinCounter, Label) private: - /** - * @brief The animated sprite of the Coin. - * - */ - AnimatedSprite *animated_sprite; + int coins = 0; + public: /** @@ -52,23 +48,13 @@ namespace godot void _init(); /** - * @brief Called when the collected state of the coin is entered. - * - */ - void _state_enter(); - - /** - * @brief Called when the collected state of the coin is exited. - * - */ - void _state_exit(); - - /** - * @brief Called when the animation of the collected coin has finished. + * @brief Called when the collected of the coin is entered. * */ void _on_CoinHUD_ready(); + void _on_coin_collected(int amount); + void _ready(); }; diff --git a/src/godot.cpp b/src/godot.cpp index 2e5d9a6..620fb1d 100644 --- a/src/godot.cpp +++ b/src/godot.cpp @@ -11,6 +11,7 @@ #include "player/states/PlayerFall.h" #include "coin/CoinNotCollected.h" #include "coin/CoinCollected.h" +#include "coin/CoinCounter.h" using namespace godot; @@ -53,4 +54,5 @@ extern "C" void GDN_EXPORT godot_nativescript_init(void *handle) register_class(); register_class(); register_class(); + register_class(); } From d14cc627de350965fb7aa48ba82d235d23987b46 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sun, 17 Jul 2022 21:51:11 -0400 Subject: [PATCH 10/19] Flag successfully placed on lvl, hitbox detected and working --- godot/levels/GoalNotReached.gdns | 8 ++++ godot/levels/Prototype.tscn | 49 +++++++++++++++++++- src/goal/GoalNotReached.cpp | 56 +++++++++++++++++++++++ src/goal/GoalNotReached.h | 76 ++++++++++++++++++++++++++++++++ src/goal/GoalReached.cpp | 35 +++++++++++++++ src/goal/GoalReached.h | 74 +++++++++++++++++++++++++++++++ src/godot.cpp | 4 ++ 7 files changed, 300 insertions(+), 2 deletions(-) create mode 100644 godot/levels/GoalNotReached.gdns create mode 100644 src/goal/GoalNotReached.cpp create mode 100644 src/goal/GoalNotReached.h create mode 100644 src/goal/GoalReached.cpp create mode 100644 src/goal/GoalReached.h diff --git a/godot/levels/GoalNotReached.gdns b/godot/levels/GoalNotReached.gdns new file mode 100644 index 0000000..1e3a1aa --- /dev/null +++ b/godot/levels/GoalNotReached.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://gdnative/alai.tres" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "GoalNotReached" +class_name = "GoalNotReached" +library = ExtResource( 1 ) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index e3c4608..699991e 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=2] +[gd_scene load_steps=18 format=2] [ext_resource path="res://CameraLimit.gdns" type="Script" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] @@ -7,6 +7,8 @@ [ext_resource path="res://collectables/coin/Coin.tscn" type="PackedScene" id=5] [ext_resource path="res://assets/coin.png" type="Texture" id=6] [ext_resource path="res://hud/coin/Counter.gdns" type="Script" id=7] +[ext_resource path="res://assets/flag.png" type="Texture" id=8] +[ext_resource path="res://levels/GoalNotReached.gdns" type="Script" id=9] [sub_resource type="StyleBoxFlat" id=1] bg_color = Color( 0, 0, 0, 0.541176 ) @@ -27,6 +29,25 @@ animations = [ { "speed": 5.0 } ] +[sub_resource type="RectangleShape2D" id=5] +extents = Vector2( 10, 18 ) + +[sub_resource type="AtlasTexture" id=6] +atlas = ExtResource( 8 ) +region = Rect2( 0, 0, 18, 36 ) + +[sub_resource type="AtlasTexture" id=7] +atlas = ExtResource( 8 ) +region = Rect2( 18, 0, 18, 36 ) + +[sub_resource type="SpriteFrames" id=8] +animations = [ { +"frames": [ SubResource( 6 ), SubResource( 7 ) ], +"loop": true, +"name": "flagmove", +"speed": 5.0 +} ] + [node name="Prototype" type="Node2D"] [node name="Player" parent="." instance=ExtResource( 2 )] @@ -91,7 +112,6 @@ script = ExtResource( 7 ) position = Vector2( 162, 18 ) frames = SubResource( 4 ) animation = "spin" -frame = 1 playing = true centered = false @@ -100,7 +120,32 @@ centered = false [node name="coin" parent="Coins" instance=ExtResource( 5 )] position = Vector2( 72, 450 ) +[node name="AnimatedSprite" parent="Coins/coin" index="1"] +frame = 0 + [node name="coin2" parent="Coins" instance=ExtResource( 5 )] position = Vector2( 234, 450 ) +[node name="Goal" type="Area2D" parent="."] +position = Vector2( 324, 378 ) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Goal"] +position = Vector2( 18, 18 ) +shape = SubResource( 5 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="Goal"] +position = Vector2( 18, 18 ) +frames = SubResource( 8 ) +animation = "flagmove" +playing = true + +[node name="StateMachine" type="Node" parent="Goal"] + +[node name="GoalReached" type="Node" parent="Goal/StateMachine"] + +[node name="GoalNotReached" type="Node" parent="Goal/StateMachine"] +script = ExtResource( 9 ) + +[connection signal="body_entered" from="Goal" to="Goal/StateMachine/GoalNotReached" method="_on_Goal_body_entered"] + [editable path="Coins/coin"] diff --git a/src/goal/GoalNotReached.cpp b/src/goal/GoalNotReached.cpp new file mode 100644 index 0000000..4978c11 --- /dev/null +++ b/src/goal/GoalNotReached.cpp @@ -0,0 +1,56 @@ +#include "goal/GoalNotReached.h" +#include + +using namespace godot; + + +void GoalNotReached::_register_methods() +{ + register_method("_state_enter", &GoalNotReached::_state_enter); + register_method("_state_exit", &GoalNotReached::_state_exit); + register_method("_on_Goal_body_entered", &GoalNotReached::_on_Goal_body_entered); +} + +GoalNotReached::GoalNotReached() +{ +} + +GoalNotReached::~GoalNotReached() +{ +} + +void GoalNotReached::_init() +{ + +} + +void GoalNotReached::_state_enter() +{ + animated_sprite = get_parent()->get_node("AnimatedSprite"); + animated_sprite->set_animation("flagmove"); + animated_sprite->play(); +} + +void GoalNotReached::_state_exit() +{ + +} + +void GoalNotReached::_on_Goal_body_entered(Node *node) +{ + Godot::print("Flag touched"); + /* auto parent_node = get_parent(); + + if (parent_node != nullptr) + { + auto goal = Object::cast_to(parent_node); + goal->set_collision_mask_bit(0, false); + } + + get_state_machine()->change("GoalReached");*/ + + +} + + + diff --git a/src/goal/GoalNotReached.h b/src/goal/GoalNotReached.h new file mode 100644 index 0000000..82c9628 --- /dev/null +++ b/src/goal/GoalNotReached.h @@ -0,0 +1,76 @@ +#ifndef ALAI_GOAL_NOT_REACHED +#define ALAI_GOAL_NOT_REACHED + +#include "state_machine/State.h" + +#include +#include +#include + +namespace godot +{ + /** + * @brief This class controls what happens when the Coin is in the not collected state. + * + */ + class GoalNotReached : public State + { + GODOT_CLASS(GoalNotReached, State) + + private: + /** + * @brief The animated sprite of the Coin. + * + */ + AnimatedSprite *animated_sprite; + + 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 GoalNotReached object. + * + */ + GoalNotReached(); + + /** + * @brief Destroy the GoalNotReached object. + * + */ + ~GoalNotReached(); + + /** + * @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(); + + /** + * @brief Called when the not collected state of the coin is entered. + * + */ + void _state_enter(); + + /** + * @brief Called when the not collected state of the coin is exited. + * + */ + void _state_exit(); + + /** + * @brief Method called on body entered. + * + * @param[in] node Node interacting with whoever + */ + void _on_Goal_body_entered(Node *node); + }; + +} + +#endif diff --git a/src/goal/GoalReached.cpp b/src/goal/GoalReached.cpp new file mode 100644 index 0000000..580aea4 --- /dev/null +++ b/src/goal/GoalReached.cpp @@ -0,0 +1,35 @@ +#include "goal/GoalReached.h" + +using namespace godot; + +void GoalReached::_register_methods() +{ + register_method("_state_enter", &GoalReached::_state_enter); + register_method("_state_exit", &GoalReached::_state_exit); + //register_signal("coin_collected", "amount", GODOT_VARIANT_TYPE_INT); +} + +GoalReached::GoalReached() +{ +} + +GoalReached::~GoalReached() +{ +} + +void GoalReached::_init() +{ + +} + +void GoalReached::_state_enter() +{ + + +} + +void GoalReached::_state_exit() +{ + +} + diff --git a/src/goal/GoalReached.h b/src/goal/GoalReached.h new file mode 100644 index 0000000..2c854bb --- /dev/null +++ b/src/goal/GoalReached.h @@ -0,0 +1,74 @@ +#ifndef ALAI_GOAL_REACHED +#define ALAI_GOAL_REACHED + +#include "state_machine/State.h" + +#include +#include +#include + +namespace godot +{ + /** + * @brief This class controls what happens when the goal flag is in the reached state. + * + */ + class GoalReached : public State + { + GODOT_CLASS(GoalReached, State) + + private: + /** + * @brief The animated sprite of the Coin. + * + */ + AnimatedSprite *animated_sprite; + + 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 GoalReached object. + * + */ + GoalReached(); + + /** + * @brief Destroy the GoalReached object. + * + */ + ~GoalReached(); + + /** + * @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(); + + /** + * @brief Called when the collected state of the coin is entered. + * + */ + void _state_enter(); + + /** + * @brief Called when the collected state of the coin is exited. + * + */ + void _state_exit(); + + /** + * @brief Called when the animation of the collected coin has finished. + * + */ + }; + +} + +#endif diff --git a/src/godot.cpp b/src/godot.cpp index 620fb1d..350403b 100644 --- a/src/godot.cpp +++ b/src/godot.cpp @@ -12,6 +12,8 @@ #include "coin/CoinNotCollected.h" #include "coin/CoinCollected.h" #include "coin/CoinCounter.h" +#include "goal/GoalReached.h" +#include "goal/GoalNotReached.h" using namespace godot; @@ -55,4 +57,6 @@ extern "C" void GDN_EXPORT godot_nativescript_init(void *handle) register_class(); register_class(); register_class(); + register_class(); + register_class(); } From b24c9e8732db2f8642ade13882ef88254716fa75 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Mon, 1 Aug 2022 14:10:00 -0400 Subject: [PATCH 11/19] fix goal state --- godot/goal/Goal.tscn | 51 ++++++++++++++++++++++ godot/{levels => goal}/GoalNotReached.gdns | 0 godot/goal/GoalReached.gdns | 8 ++++ godot/levels/Prototype.tscn | 50 ++------------------- godot/project.godot | 1 + src/goal/GoalNotReached.cpp | 11 +---- src/goal/GoalReached.cpp | 3 +- 7 files changed, 68 insertions(+), 56 deletions(-) create mode 100644 godot/goal/Goal.tscn rename godot/{levels => goal}/GoalNotReached.gdns (100%) create mode 100644 godot/goal/GoalReached.gdns diff --git a/godot/goal/Goal.tscn b/godot/goal/Goal.tscn new file mode 100644 index 0000000..3e6e22e --- /dev/null +++ b/godot/goal/Goal.tscn @@ -0,0 +1,51 @@ +[gd_scene load_steps=9 format=2] + +[ext_resource path="res://assets/flag.png" type="Texture" id=1] +[ext_resource path="res://goal/GoalNotReached.gdns" type="Script" id=2] +[ext_resource path="res://goal/GoalReached.gdns" type="Script" id=3] +[ext_resource path="res://state_machine/StateMachine.gdns" type="Script" id=4] + +[sub_resource type="RectangleShape2D" id=5] +extents = Vector2( 10, 18 ) + +[sub_resource type="AtlasTexture" id=6] +atlas = ExtResource( 1 ) +region = Rect2( 0, 0, 18, 36 ) + +[sub_resource type="AtlasTexture" id=7] +atlas = ExtResource( 1 ) +region = Rect2( 18, 0, 18, 36 ) + +[sub_resource type="SpriteFrames" id=8] +animations = [ { +"frames": [ SubResource( 6 ), SubResource( 7 ) ], +"loop": true, +"name": "flagmove", +"speed": 5.0 +} ] + +[node name="Goal" type="Area2D"] +position = Vector2( 324, 378 ) +collision_layer = 32 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( 18, 18 ) +shape = SubResource( 5 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +position = Vector2( 18, 18 ) +frames = SubResource( 8 ) +animation = "flagmove" +frame = 1 +playing = true + +[node name="StateMachine" type="Node" parent="."] +script = ExtResource( 4 ) + +[node name="GoalReached" type="Node" parent="StateMachine"] +script = ExtResource( 3 ) + +[node name="GoalNotReached" type="Node" parent="StateMachine"] +script = ExtResource( 2 ) + +[connection signal="body_entered" from="." to="StateMachine/GoalNotReached" method="_on_Goal_body_entered"] diff --git a/godot/levels/GoalNotReached.gdns b/godot/goal/GoalNotReached.gdns similarity index 100% rename from godot/levels/GoalNotReached.gdns rename to godot/goal/GoalNotReached.gdns diff --git a/godot/goal/GoalReached.gdns b/godot/goal/GoalReached.gdns new file mode 100644 index 0000000..eaa25ba --- /dev/null +++ b/godot/goal/GoalReached.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://gdnative/alai.tres" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "GoalReached" +class_name = "GoalReached" +library = ExtResource( 1 ) diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index 699991e..036f781 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=18 format=2] +[gd_scene load_steps=13 format=2] [ext_resource path="res://CameraLimit.gdns" type="Script" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] @@ -7,8 +7,7 @@ [ext_resource path="res://collectables/coin/Coin.tscn" type="PackedScene" id=5] [ext_resource path="res://assets/coin.png" type="Texture" id=6] [ext_resource path="res://hud/coin/Counter.gdns" type="Script" id=7] -[ext_resource path="res://assets/flag.png" type="Texture" id=8] -[ext_resource path="res://levels/GoalNotReached.gdns" type="Script" id=9] +[ext_resource path="res://goal/Goal.tscn" type="PackedScene" id=8] [sub_resource type="StyleBoxFlat" id=1] bg_color = Color( 0, 0, 0, 0.541176 ) @@ -29,25 +28,6 @@ animations = [ { "speed": 5.0 } ] -[sub_resource type="RectangleShape2D" id=5] -extents = Vector2( 10, 18 ) - -[sub_resource type="AtlasTexture" id=6] -atlas = ExtResource( 8 ) -region = Rect2( 0, 0, 18, 36 ) - -[sub_resource type="AtlasTexture" id=7] -atlas = ExtResource( 8 ) -region = Rect2( 18, 0, 18, 36 ) - -[sub_resource type="SpriteFrames" id=8] -animations = [ { -"frames": [ SubResource( 6 ), SubResource( 7 ) ], -"loop": true, -"name": "flagmove", -"speed": 5.0 -} ] - [node name="Prototype" type="Node2D"] [node name="Player" parent="." instance=ExtResource( 2 )] @@ -112,6 +92,7 @@ script = ExtResource( 7 ) position = Vector2( 162, 18 ) frames = SubResource( 4 ) animation = "spin" +frame = 1 playing = true centered = false @@ -120,32 +101,9 @@ centered = false [node name="coin" parent="Coins" instance=ExtResource( 5 )] position = Vector2( 72, 450 ) -[node name="AnimatedSprite" parent="Coins/coin" index="1"] -frame = 0 - [node name="coin2" parent="Coins" instance=ExtResource( 5 )] position = Vector2( 234, 450 ) -[node name="Goal" type="Area2D" parent="."] -position = Vector2( 324, 378 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Goal"] -position = Vector2( 18, 18 ) -shape = SubResource( 5 ) - -[node name="AnimatedSprite" type="AnimatedSprite" parent="Goal"] -position = Vector2( 18, 18 ) -frames = SubResource( 8 ) -animation = "flagmove" -playing = true - -[node name="StateMachine" type="Node" parent="Goal"] - -[node name="GoalReached" type="Node" parent="Goal/StateMachine"] - -[node name="GoalNotReached" type="Node" parent="Goal/StateMachine"] -script = ExtResource( 9 ) - -[connection signal="body_entered" from="Goal" to="Goal/StateMachine/GoalNotReached" method="_on_Goal_body_entered"] +[node name="Goal" parent="." instance=ExtResource( 8 )] [editable path="Coins/coin"] diff --git a/godot/project.godot b/godot/project.godot index 4ff88a6..92bc2da 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -96,6 +96,7 @@ right={ 2d_physics/layer_1="Player" 2d_physics/layer_2="Tiles" 2d_physics/layer_3="Collectables" +2d_physics/layer_6="End Level" [physics] diff --git a/src/goal/GoalNotReached.cpp b/src/goal/GoalNotReached.cpp index 4978c11..c4763f3 100644 --- a/src/goal/GoalNotReached.cpp +++ b/src/goal/GoalNotReached.cpp @@ -38,16 +38,9 @@ void GoalNotReached::_state_exit() void GoalNotReached::_on_Goal_body_entered(Node *node) { - Godot::print("Flag touched"); - /* auto parent_node = get_parent(); - - if (parent_node != nullptr) - { - auto goal = Object::cast_to(parent_node); - goal->set_collision_mask_bit(0, false); - } - get_state_machine()->change("GoalReached");*/ + + get_state_machine()->change("GoalReached"); } diff --git a/src/goal/GoalReached.cpp b/src/goal/GoalReached.cpp index 580aea4..239f1e4 100644 --- a/src/goal/GoalReached.cpp +++ b/src/goal/GoalReached.cpp @@ -1,4 +1,5 @@ #include "goal/GoalReached.h" +#include using namespace godot; @@ -6,7 +7,6 @@ void GoalReached::_register_methods() { register_method("_state_enter", &GoalReached::_state_enter); register_method("_state_exit", &GoalReached::_state_exit); - //register_signal("coin_collected", "amount", GODOT_VARIANT_TYPE_INT); } GoalReached::GoalReached() @@ -24,6 +24,7 @@ void GoalReached::_init() void GoalReached::_state_enter() { + Godot::print("Flag touched"); } From e54e3b0687373c34922abb277108a5bba7439471 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Mon, 1 Aug 2022 15:05:09 -0400 Subject: [PATCH 12/19] changes to coinHUD --- godot/goal/Goal.tscn | 2 +- godot/hud/CoinHUD.gd | 8 +++++ godot/hud/CoinHUD.tscn | 58 +++++++++++++++++++++++++++++++++++++ godot/levels/Prototype.tscn | 56 ++--------------------------------- src/goal/GoalNotReached.cpp | 8 ++++- 5 files changed, 77 insertions(+), 55 deletions(-) create mode 100644 godot/hud/CoinHUD.gd create mode 100644 godot/hud/CoinHUD.tscn diff --git a/godot/goal/Goal.tscn b/godot/goal/Goal.tscn index 3e6e22e..ee70903 100644 --- a/godot/goal/Goal.tscn +++ b/godot/goal/Goal.tscn @@ -36,11 +36,11 @@ shape = SubResource( 5 ) position = Vector2( 18, 18 ) frames = SubResource( 8 ) animation = "flagmove" -frame = 1 playing = true [node name="StateMachine" type="Node" parent="."] script = ExtResource( 4 ) +default_state = "GoalNotReached" [node name="GoalReached" type="Node" parent="StateMachine"] script = ExtResource( 3 ) diff --git a/godot/hud/CoinHUD.gd b/godot/hud/CoinHUD.gd new file mode 100644 index 0000000..efe294f --- /dev/null +++ b/godot/hud/CoinHUD.gd @@ -0,0 +1,8 @@ +extends CanvasLayer + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _physics_process(delta): + if get_tree().paused: + visible = false + else: + visible = true diff --git a/godot/hud/CoinHUD.tscn b/godot/hud/CoinHUD.tscn new file mode 100644 index 0000000..512a8cd --- /dev/null +++ b/godot/hud/CoinHUD.tscn @@ -0,0 +1,58 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://assets/coin.png" type="Texture" id=1] +[ext_resource path="res://hud/coin/Counter.gdns" type="Script" id=2] +[ext_resource path="res://hud/CoinHUD.gd" type="Script" id=3] + +[sub_resource type="StyleBoxFlat" id=1] +bg_color = Color( 0, 0, 0, 0.541176 ) + +[sub_resource type="AtlasTexture" id=2] +atlas = ExtResource( 1 ) +region = Rect2( 0, 0, 18, 18 ) + +[sub_resource type="AtlasTexture" id=3] +atlas = ExtResource( 1 ) +region = Rect2( 18, 0, 18, 18 ) + +[sub_resource type="SpriteFrames" id=4] +animations = [ { +"frames": [ SubResource( 2 ), SubResource( 3 ) ], +"loop": true, +"name": "spin", +"speed": 5.0 +} ] + +[node name="CoinHUD" type="CanvasLayer"] +pause_mode = 2 +script = ExtResource( 3 ) + +[node name="Panel" type="Panel" parent="."] +margin_left = 144.0 +margin_top = 18.0 +margin_right = 288.0 +margin_bottom = 54.0 +custom_styles/panel = SubResource( 1 ) + +[node name="Label" type="Label" parent="."] +margin_left = 180.0 +margin_top = 18.0 +margin_right = 220.0 +margin_bottom = 36.0 +text = "X" + +[node name="Coins" type="Label" parent="."] +margin_left = 198.0 +margin_top = 18.0 +margin_right = 238.0 +margin_bottom = 32.0 +text = "##" +script = ExtResource( 2 ) + +[node name="AnimatedSprite" type="AnimatedSprite" parent="."] +position = Vector2( 162, 18 ) +frames = SubResource( 4 ) +animation = "spin" +frame = 1 +playing = true +centered = false diff --git a/godot/levels/Prototype.tscn b/godot/levels/Prototype.tscn index 036f781..b71e0c7 100644 --- a/godot/levels/Prototype.tscn +++ b/godot/levels/Prototype.tscn @@ -1,33 +1,13 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://CameraLimit.gdns" type="Script" id=1] [ext_resource path="res://characters/player/Player.tscn" type="PackedScene" id=2] [ext_resource path="res://levels/Prototype.tmx" type="PackedScene" id=3] [ext_resource path="res://assets/backgrounds/mountains.png" type="Texture" id=4] [ext_resource path="res://collectables/coin/Coin.tscn" type="PackedScene" id=5] -[ext_resource path="res://assets/coin.png" type="Texture" id=6] -[ext_resource path="res://hud/coin/Counter.gdns" type="Script" id=7] +[ext_resource path="res://hud/CoinHUD.tscn" type="PackedScene" id=6] [ext_resource path="res://goal/Goal.tscn" type="PackedScene" id=8] -[sub_resource type="StyleBoxFlat" id=1] -bg_color = Color( 0, 0, 0, 0.541176 ) - -[sub_resource type="AtlasTexture" id=2] -atlas = ExtResource( 6 ) -region = Rect2( 0, 0, 18, 18 ) - -[sub_resource type="AtlasTexture" id=3] -atlas = ExtResource( 6 ) -region = Rect2( 18, 0, 18, 18 ) - -[sub_resource type="SpriteFrames" id=4] -animations = [ { -"frames": [ SubResource( 2 ), SubResource( 3 ) ], -"loop": true, -"name": "spin", -"speed": 5.0 -} ] - [node name="Prototype" type="Node2D"] [node name="Player" parent="." instance=ExtResource( 2 )] @@ -64,37 +44,7 @@ centered = false [node name="Prototype" parent="Map" instance=ExtResource( 3 )] script = ExtResource( 1 ) -[node name="CoinHUD" type="CanvasLayer" parent="."] - -[node name="Panel" type="Panel" parent="CoinHUD"] -margin_left = 144.0 -margin_top = 18.0 -margin_right = 288.0 -margin_bottom = 54.0 -custom_styles/panel = SubResource( 1 ) - -[node name="Label" type="Label" parent="CoinHUD"] -margin_left = 180.0 -margin_top = 18.0 -margin_right = 220.0 -margin_bottom = 36.0 -text = "X" - -[node name="Coins" type="Label" parent="CoinHUD"] -margin_left = 198.0 -margin_top = 18.0 -margin_right = 238.0 -margin_bottom = 32.0 -text = "##" -script = ExtResource( 7 ) - -[node name="AnimatedSprite" type="AnimatedSprite" parent="CoinHUD"] -position = Vector2( 162, 18 ) -frames = SubResource( 4 ) -animation = "spin" -frame = 1 -playing = true -centered = false +[node name="CoinHUD" parent="." instance=ExtResource( 6 )] [node name="Coins" type="Node" parent="."] diff --git a/src/goal/GoalNotReached.cpp b/src/goal/GoalNotReached.cpp index c4763f3..4248066 100644 --- a/src/goal/GoalNotReached.cpp +++ b/src/goal/GoalNotReached.cpp @@ -38,7 +38,13 @@ void GoalNotReached::_state_exit() void GoalNotReached::_on_Goal_body_entered(Node *node) { - + auto parent_node = get_parent(); + + if (parent_node != nullptr) + { + auto goal = Object::cast_to(parent_node); + goal->set_collision_mask_bit(0, false); + } get_state_machine()->change("GoalReached"); From 64102a992aabefbb7bf5153977bf4cf54d83a1ee Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Fri, 12 Aug 2022 21:50:48 -0400 Subject: [PATCH 13/19] GameOverScreen .h/.cpp made. Godot scene completed --- godot/GUI/GameOver.tscn | 47 ++++++++++++++++++++++ godot/GUI/botonreiniciar.gdns | 8 ++++ src/gui/game_over/GameOverScreen.cpp | 26 +++++++++++++ src/gui/game_over/GameOverScreen.h | 58 ++++++++++++++++++++++++++++ 4 files changed, 139 insertions(+) create mode 100644 godot/GUI/GameOver.tscn create mode 100644 godot/GUI/botonreiniciar.gdns create mode 100644 src/gui/game_over/GameOverScreen.cpp create mode 100644 src/gui/game_over/GameOverScreen.h diff --git a/godot/GUI/GameOver.tscn b/godot/GUI/GameOver.tscn new file mode 100644 index 0000000..d9729bf --- /dev/null +++ b/godot/GUI/GameOver.tscn @@ -0,0 +1,47 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://assets/fonts/ttf/PixelOperator8.ttf" type="DynamicFontData" id=1] +[ext_resource path="res://assets/fonts/ttf/PixelOperatorHB8.ttf" type="DynamicFontData" id=2] +[ext_resource path="res://GUI/botonreiniciar.gdns" type="Script" id=3] + +[sub_resource type="DynamicFont" id=1] +size = 50 +font_data = ExtResource( 1 ) + +[sub_resource type="DynamicFont" id=2] +font_data = ExtResource( 2 ) + +[sub_resource type="StyleBoxFlat" id=3] +bg_color = Color( 0.0705882, 0.917647, 0, 1 ) + +[node name="GameOver" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 + +[node name="ColorRect" type="ColorRect" parent="."] +margin_right = 512.0 +margin_bottom = 288.0 +rect_min_size = Vector2( 512, 288 ) +rect_rotation = -0.338293 +color = Color( 0, 0, 0, 1 ) + +[node name="Label" type="Label" parent="."] +margin_left = 66.0 +margin_top = 17.0 +margin_right = 456.0 +margin_bottom = 71.0 +custom_fonts/font = SubResource( 1 ) +text = "GAME OVER" +align = 1 + +[node name="botonreiniciar" type="Button" parent="."] +margin_left = 194.0 +margin_top = 150.0 +margin_right = 338.0 +margin_bottom = 180.0 +custom_fonts/font = SubResource( 2 ) +custom_styles/hover = SubResource( 3 ) +text = "REINICIAR" +script = ExtResource( 3 ) + +[connection signal="pressed" from="botonreiniciar" to="botonreiniciar" method="_on_botonreiniciar_pressed"] diff --git a/godot/GUI/botonreiniciar.gdns b/godot/GUI/botonreiniciar.gdns new file mode 100644 index 0000000..750e9bf --- /dev/null +++ b/godot/GUI/botonreiniciar.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://gdnative/alai.tres" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "GameOverScreen" +class_name = "GameOverScreen" +library = ExtResource( 1 ) diff --git a/src/gui/game_over/GameOverScreen.cpp b/src/gui/game_over/GameOverScreen.cpp new file mode 100644 index 0000000..b26ec00 --- /dev/null +++ b/src/gui/game_over/GameOverScreen.cpp @@ -0,0 +1,26 @@ +#include "gui/game_over/GameOverScreen.h" +#include +using namespace godot; + +void GameOverScreen::_register_methods() +{ + register_method("_on_botonreiniciar_pressed", &GameOverScreen::_on_botonreiniciar_pressed); +} + +GameOverScreen::GameOverScreen() +{ +} + +GameOverScreen::~GameOverScreen() +{ +} + +void GameOverScreen::_init() +{ + +} +void GameOverScreen::_on_botonreiniciar_pressed() +{ + get_tree().change_scene("res://monitor/GUI.tscn"); + +} \ No newline at end of file diff --git a/src/gui/game_over/GameOverScreen.h b/src/gui/game_over/GameOverScreen.h new file mode 100644 index 0000000..651886f --- /dev/null +++ b/src/gui/game_over/GameOverScreen.h @@ -0,0 +1,58 @@ +#ifndef ALAI_GAME_OVER_SCREEN +#define ALAI_GAME_OVER_SCREEN + + +#include +#include +#include + +namespace godot +{ + /** + * @brief This class controls what happens when the Coin is in the collected . + * + */ + class GameOverScreen : public Control + { + GODOT_CLASS(GameOverScreen, Control) + + private: + + + 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 GameOverScreen object. + * + */ + GameOverScreen(); + + /** + * @brief Destroy the GameOverScreen object. + * + */ + ~GameOverScreen(); + + /** + * @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(); + + /** + * @brief Called when the collected of the coin is entered. + * + */ + void _on_botonreiniciar_pressed(); + }; + +} + +#endif From 7083f680ee196ff5bde8cd9a60bd669e4e91f39d Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 26 Aug 2022 13:48:39 -0400 Subject: [PATCH 14/19] ignore delta since we don't use it --- godot/hud/CoinHUD.gd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/godot/hud/CoinHUD.gd b/godot/hud/CoinHUD.gd index efe294f..bd8f7b1 100644 --- a/godot/hud/CoinHUD.gd +++ b/godot/hud/CoinHUD.gd @@ -1,7 +1,7 @@ extends CanvasLayer # Called every frame. 'delta' is the elapsed time since the previous frame. -func _physics_process(delta): +func _physics_process(_delta): if get_tree().paused: visible = false else: From ff600cd7614ac74d3b72be7f4ad2a11a7852135a Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 26 Aug 2022 13:48:59 -0400 Subject: [PATCH 15/19] fix spacing --- src/gui/game_over/GameOverScreen.h | 76 +++++++++++++++--------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/src/gui/game_over/GameOverScreen.h b/src/gui/game_over/GameOverScreen.h index 651886f..f794001 100644 --- a/src/gui/game_over/GameOverScreen.h +++ b/src/gui/game_over/GameOverScreen.h @@ -8,51 +8,49 @@ namespace godot { - /** - * @brief This class controls what happens when the Coin is in the collected . - * - */ - class GameOverScreen : public Control - { - GODOT_CLASS(GameOverScreen, Control) + /** + * @brief This class controls what happens when the Coin is in the collected . + * + */ + class GameOverScreen : public Control + { + GODOT_CLASS(GameOverScreen, Control) - private: + private: + public: + /** + * @brief This method registers classes with Godot. + * + * @details This method registers methods, properties, and signals with the Godot engine. + */ + static void _register_methods(); - 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 GameOverScreen object. + * + */ + GameOverScreen(); - /** - * @brief Construct a new GameOverScreen object. - * - */ - GameOverScreen(); + /** + * @brief Destroy the GameOverScreen object. + * + */ + ~GameOverScreen(); - /** - * @brief Destroy the GameOverScreen object. - * - */ - ~GameOverScreen(); + /** + * @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(); - /** - * @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(); - - /** - * @brief Called when the collected of the coin is entered. - * - */ - void _on_botonreiniciar_pressed(); - }; - + /** + * @brief Called when the collected of the coin is entered. + * + */ + void _on_botonreiniciar_pressed(); + }; } #endif From b74a8ce1aa5fbdd0d223fc0a00a4ccaaea6cf766 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Fri, 26 Aug 2022 13:51:19 -0400 Subject: [PATCH 16/19] fix function name and pointer usage --- src/gui/game_over/GameOverScreen.cpp | 11 ++++++----- src/gui/game_over/GameOverScreen.h | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gui/game_over/GameOverScreen.cpp b/src/gui/game_over/GameOverScreen.cpp index b26ec00..66bc484 100644 --- a/src/gui/game_over/GameOverScreen.cpp +++ b/src/gui/game_over/GameOverScreen.cpp @@ -1,10 +1,12 @@ #include "gui/game_over/GameOverScreen.h" #include +#include + using namespace godot; void GameOverScreen::_register_methods() { - register_method("_on_botonreiniciar_pressed", &GameOverScreen::_on_botonreiniciar_pressed); + register_method("_on_restart_button_pressed", &GameOverScreen::_on_restart_button_pressed); } GameOverScreen::GameOverScreen() @@ -19,8 +21,7 @@ void GameOverScreen::_init() { } -void GameOverScreen::_on_botonreiniciar_pressed() +void GameOverScreen::_on_restart_button_pressed() { - get_tree().change_scene("res://monitor/GUI.tscn"); - -} \ No newline at end of file + get_tree()->change_scene("res://monitor/GUI.tscn"); +} diff --git a/src/gui/game_over/GameOverScreen.h b/src/gui/game_over/GameOverScreen.h index f794001..1a40b2e 100644 --- a/src/gui/game_over/GameOverScreen.h +++ b/src/gui/game_over/GameOverScreen.h @@ -49,7 +49,7 @@ namespace godot * @brief Called when the collected of the coin is entered. * */ - void _on_botonreiniciar_pressed(); + void _on_restart_button_pressed(); }; } From a27f96829771f581663652fb702f1d90cf84a1e9 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sat, 27 Aug 2022 18:14:21 -0400 Subject: [PATCH 17/19] add gameover --- godot/Main.tscn | 6 +- src/gui/game_over/GameOverScreen.cpp | 23 ++++++-- src/gui/game_over/GameOverScreen.h | 88 +++++++++++++++------------- 3 files changed, 70 insertions(+), 47 deletions(-) diff --git a/godot/Main.tscn b/godot/Main.tscn index d288642..5babece 100644 --- a/godot/Main.tscn +++ b/godot/Main.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://Main.gdns" type="Script" id=1] [ext_resource path="res://levels/Prototype.tscn" type="PackedScene" id=2] +[ext_resource path="res://GUI/GameOver.tscn" type="PackedScene" id=3] [node name="Main" type="Node"] pause_mode = 2 @@ -10,3 +11,6 @@ level = ExtResource( 2 ) [node name="Level" type="Node" parent="."] pause_mode = 1 + +[node name="GameOver" parent="." instance=ExtResource( 3 )] +visible = false diff --git a/src/gui/game_over/GameOverScreen.cpp b/src/gui/game_over/GameOverScreen.cpp index 66bc484..e497503 100644 --- a/src/gui/game_over/GameOverScreen.cpp +++ b/src/gui/game_over/GameOverScreen.cpp @@ -1,12 +1,16 @@ #include "gui/game_over/GameOverScreen.h" +#include +#include #include #include +#include +#include using namespace godot; void GameOverScreen::_register_methods() -{ - register_method("_on_restart_button_pressed", &GameOverScreen::_on_restart_button_pressed); +{ + register_method("_on_animation_finished", &GameOverScreen::_on_botonreiniciar_pressed); } GameOverScreen::GameOverScreen() @@ -19,9 +23,20 @@ GameOverScreen::~GameOverScreen() void GameOverScreen::_init() { + _resource_loader = ResourceLoader::get_singleton(); } -void GameOverScreen::_on_restart_button_pressed() + +void GameOverScreen::_on_botonreiniciar_pressed() { - get_tree()->change_scene("res://monitor/GUI.tscn"); + + if (_resource_loader->exists("res://levels/Prototype.tscn")) //CAMBIAR A DINAMICO + { + Ref level_scene = _resource_loader->load("res://levels/Prototype.tscn"); + auto level = level_scene->instance(); + auto level_node = get_tree()->get_root()->find_node("Level"); + level_node->add_child(level); + } } + + diff --git a/src/gui/game_over/GameOverScreen.h b/src/gui/game_over/GameOverScreen.h index 1a40b2e..a03a2b2 100644 --- a/src/gui/game_over/GameOverScreen.h +++ b/src/gui/game_over/GameOverScreen.h @@ -1,56 +1,60 @@ -#ifndef ALAI_GAME_OVER_SCREEN -#define ALAI_GAME_OVER_SCREEN - +#ifndef ALAI_GAME_OVER_SCREEN_H +#define ALAI_GAME_OVER_SCREEN_H #include -#include #include +#include + namespace godot { - /** - * @brief This class controls what happens when the Coin is in the collected . - * - */ - class GameOverScreen : public Control - { - GODOT_CLASS(GameOverScreen, Control) + /** + * @brief This class controls what happens when the Coin is in the collected . + * + */ + class GameOverScreen : public Control + { + GODOT_CLASS(GameOverScreen, Control) - private: + private: + ResourceLoader *_resource_loader; + + public: + /** + * @brief This method registers classes with Godot. + * + * @details This method registers methods, properties, and signals with the Godot engine. + */ + static void _register_methods(); - 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 GameOverScreen object. + * + */ + GameOverScreen(); - /** - * @brief Construct a new GameOverScreen object. - * - */ - GameOverScreen(); + /** + * @brief Destroy the GameOverScreen object. + * + */ + ~GameOverScreen(); - /** - * @brief Destroy the GameOverScreen object. - * - */ - ~GameOverScreen(); + /** + * @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(); - /** - * @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(); + /** + * @brief Called when the collected of the coin is entered. + * + */ + void _on_botonreiniciar_pressed(); - /** - * @brief Called when the collected of the coin is entered. - * - */ - void _on_restart_button_pressed(); - }; + + }; + } -#endif +#endif \ No newline at end of file From 705ed4e89753ac34f89cc875ccd36ad2e8c0f31e Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sat, 27 Aug 2022 18:32:33 -0400 Subject: [PATCH 18/19] Use event bus for coins --- src/Event.cpp | 3 +++ src/coin/CoinCollected.cpp | 5 +++-- src/coin/CoinCounter.cpp | 10 +++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/Event.cpp b/src/Event.cpp index 3e9e186..6561979 100644 --- a/src/Event.cpp +++ b/src/Event.cpp @@ -5,6 +5,9 @@ void alai::Event::_register_methods() godot::register_signal("object_created", "name", GODOT_VARIANT_TYPE_STRING, "state", GODOT_VARIANT_TYPE_STRING, "position", GODOT_VARIANT_TYPE_VECTOR2, "velocity", GODOT_VARIANT_TYPE_VECTOR2); godot::register_signal("object_updated", "name", GODOT_VARIANT_TYPE_STRING, "state", GODOT_VARIANT_TYPE_STRING, "position", GODOT_VARIANT_TYPE_VECTOR2, "velocity", GODOT_VARIANT_TYPE_VECTOR2); godot::register_signal("object_removed", "name", GODOT_VARIANT_TYPE_STRING); + godot::register_signal("coin_collected", "amount", GODOT_VARIANT_TYPE_INT); + godot::register_signal("player_died"); + } alai::Event::Event() diff --git a/src/coin/CoinCollected.cpp b/src/coin/CoinCollected.cpp index 9f3a9a4..22a65b8 100644 --- a/src/coin/CoinCollected.cpp +++ b/src/coin/CoinCollected.cpp @@ -1,5 +1,6 @@ #include "coin/CoinCollected.h" #include +#include "Event.h" using namespace godot; @@ -8,7 +9,6 @@ void CoinCollected::_register_methods() register_method("_state_enter", &CoinCollected::_state_enter); register_method("_state_exit", &CoinCollected::_state_exit); register_method("_on_animation_finished", &CoinCollected::_on_animation_finished); - register_signal("coin_collected", "amount", GODOT_VARIANT_TYPE_INT); } CoinCollected::CoinCollected() @@ -43,7 +43,8 @@ void CoinCollected::_state_exit() void CoinCollected::_on_animation_finished(String anim_name) { - emit_signal("coin_collected", 1); + auto event = get_node("/root/Event"); + event->emit_signal("coin_collected", 1); this->get_parent()->queue_free(); diff --git a/src/coin/CoinCounter.cpp b/src/coin/CoinCounter.cpp index 22fc8e4..7bcdbf0 100644 --- a/src/coin/CoinCounter.cpp +++ b/src/coin/CoinCounter.cpp @@ -1,6 +1,7 @@ #include "coin/CoinCounter.h" #include #include "coin/CoinCollected.h" +#include "Event.h" using namespace godot; void CoinCounter::_register_methods() @@ -35,13 +36,8 @@ void CoinCounter::_on_coin_collected(int amount) void CoinCounter::_ready() { set_text("0"); - auto coins_node = get_node("../../Coins"); - auto children_count = coins_node->get_child_count(); - for(int64_t i = 0; i < children_count;i++) - { - auto child = coins_node->get_child(i); - child->get_node("StateMachine/CoinCollected")->connect("coin_collected",this,"_on_coin_collected"); - } + auto event = get_node("/root/Event"); + event->connect("coin_collected", this, "_on_coin_collected"); } From 3bcbde816102878a9b3935b7af7533d8ed4c47c6 Mon Sep 17 00:00:00 2001 From: Martin Araneda Date: Sat, 27 Aug 2022 22:34:18 -0400 Subject: [PATCH 19/19] Game over screen finished --- godot/GUI/GameOver.tscn | 19 +++++---- godot/monitor/Monitor.gd | 2 +- src/godot.cpp | 2 + src/gui/game_over/GameOverScreen.cpp | 64 ++++++++++++++++++++++++++-- src/gui/game_over/GameOverScreen.h | 10 +++-- src/player/Player.cpp | 8 ++-- 6 files changed, 84 insertions(+), 21 deletions(-) diff --git a/godot/GUI/GameOver.tscn b/godot/GUI/GameOver.tscn index d9729bf..401d521 100644 --- a/godot/GUI/GameOver.tscn +++ b/godot/GUI/GameOver.tscn @@ -14,18 +14,20 @@ font_data = ExtResource( 2 ) [sub_resource type="StyleBoxFlat" id=3] bg_color = Color( 0.0705882, 0.917647, 0, 1 ) -[node name="GameOver" type="Control"] -anchor_right = 1.0 -anchor_bottom = 1.0 +[node name="GameOver" type="CanvasLayer"] +script = ExtResource( 3 ) -[node name="ColorRect" type="ColorRect" parent="."] +[node name="Control" type="Control" parent="."] +margin_right = 40.0 +margin_bottom = 40.0 + +[node name="ColorRect" type="ColorRect" parent="Control"] margin_right = 512.0 margin_bottom = 288.0 rect_min_size = Vector2( 512, 288 ) -rect_rotation = -0.338293 color = Color( 0, 0, 0, 1 ) -[node name="Label" type="Label" parent="."] +[node name="Label" type="Label" parent="Control"] margin_left = 66.0 margin_top = 17.0 margin_right = 456.0 @@ -34,7 +36,7 @@ custom_fonts/font = SubResource( 1 ) text = "GAME OVER" align = 1 -[node name="botonreiniciar" type="Button" parent="."] +[node name="botonreiniciar" type="Button" parent="Control"] margin_left = 194.0 margin_top = 150.0 margin_right = 338.0 @@ -42,6 +44,5 @@ margin_bottom = 180.0 custom_fonts/font = SubResource( 2 ) custom_styles/hover = SubResource( 3 ) text = "REINICIAR" -script = ExtResource( 3 ) -[connection signal="pressed" from="botonreiniciar" to="botonreiniciar" method="_on_botonreiniciar_pressed"] +[connection signal="pressed" from="Control/botonreiniciar" to="." method="_on_botonreiniciar_pressed"] diff --git a/godot/monitor/Monitor.gd b/godot/monitor/Monitor.gd index a9ff7d7..80ada27 100644 --- a/godot/monitor/Monitor.gd +++ b/godot/monitor/Monitor.gd @@ -53,7 +53,7 @@ func _ready() -> void: Event.connect("object_created", self, "_object_created") Event.connect("object_updated", self, "_object_updated") Event.connect("object_removed", self, "_object_removed") - + Event.connect("coin_collected", self, "_on_coin_update") game_version = get_parent().game_version player["rut"] = "" diff --git a/src/godot.cpp b/src/godot.cpp index 787b6b5..2b06182 100644 --- a/src/godot.cpp +++ b/src/godot.cpp @@ -15,6 +15,7 @@ #include "coin/CoinCounter.h" #include "goal/GoalReached.h" #include "goal/GoalNotReached.h" +#include "gui/game_over/GameOverScreen.h" using namespace godot; @@ -61,4 +62,5 @@ extern "C" void GDN_EXPORT godot_nativescript_init(void *handle) register_class(); register_class(); register_class(); + register_class(); } diff --git a/src/gui/game_over/GameOverScreen.cpp b/src/gui/game_over/GameOverScreen.cpp index e497503..203558e 100644 --- a/src/gui/game_over/GameOverScreen.cpp +++ b/src/gui/game_over/GameOverScreen.cpp @@ -1,4 +1,6 @@ #include "gui/game_over/GameOverScreen.h" +#include "Event.h" + #include #include #include @@ -6,11 +8,15 @@ #include #include + using namespace godot; void GameOverScreen::_register_methods() { - register_method("_on_animation_finished", &GameOverScreen::_on_botonreiniciar_pressed); + register_method("_on_botonreiniciar_pressed", &GameOverScreen::_on_botonreiniciar_pressed); + register_method("_ready", &GameOverScreen::_ready); + register_method("connect_signal", &GameOverScreen::connect_signal); + register_method("_on_player_died", &GameOverScreen::_on_player_died); } GameOverScreen::GameOverScreen() @@ -27,16 +33,66 @@ void GameOverScreen::_init() } +void GameOverScreen::_ready() +{ + connect_signal(); +} + void GameOverScreen::_on_botonreiniciar_pressed() { - if (_resource_loader->exists("res://levels/Prototype.tscn")) //CAMBIAR A DINAMICO { Ref level_scene = _resource_loader->load("res://levels/Prototype.tscn"); auto level = level_scene->instance(); - auto level_node = get_tree()->get_root()->find_node("Level"); - level_node->add_child(level); + 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); + call_deferred("connect_signal"); + } + else + { + WARN_PRINT("Node level not found!"); + } + } + +} + +void GameOverScreen::_on_player_died() //eliminar nivel +{ + auto event = get_node("/root/Event"); + event->disconnect("player_died", this, "_on_player_died"); + Godot::print("player ded"); + 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 GameOverScreen::connect_signal() +{ + auto event = get_node("/root/Event"); + event->connect("player_died", this, "_on_player_died"); } + diff --git a/src/gui/game_over/GameOverScreen.h b/src/gui/game_over/GameOverScreen.h index a03a2b2..79c5ad9 100644 --- a/src/gui/game_over/GameOverScreen.h +++ b/src/gui/game_over/GameOverScreen.h @@ -2,7 +2,7 @@ #define ALAI_GAME_OVER_SCREEN_H #include -#include +#include #include @@ -12,9 +12,9 @@ namespace godot * @brief This class controls what happens when the Coin is in the collected . * */ - class GameOverScreen : public Control + class GameOverScreen : public CanvasLayer { - GODOT_CLASS(GameOverScreen, Control) + GODOT_CLASS(GameOverScreen, CanvasLayer) private: ResourceLoader *_resource_loader; @@ -50,8 +50,10 @@ namespace godot * @brief Called when the collected of the coin is entered. * */ + void _ready(); + void _on_player_died(); void _on_botonreiniciar_pressed(); - + void connect_signal(); }; diff --git a/src/player/Player.cpp b/src/player/Player.cpp index 17da42d..1ea201b 100644 --- a/src/player/Player.cpp +++ b/src/player/Player.cpp @@ -52,7 +52,7 @@ void Player::_init() set_double_jump(player::double_jump); coins = 0; - + velocity = Vector2(); } @@ -166,14 +166,16 @@ void Player::_physics_process(float delta) { if (!notifier->is_on_screen()) { - if (get_parent()->get_class() == "TileMap") + auto event = get_node("/root/Event"); + event->emit_signal("player_died"); + /*if (get_parent()->get_class() == "TileMap") { auto error = get_tree()->change_scene("res://Main.tscn"); if (error != Error::OK) { ERR_PRINT(String().num((int) error) + " Could not load scene!"); } - } + }*/ } }