diff --git a/.mono/metadata/scripts_metadata.editor b/.mono/metadata/scripts_metadata.editor index a1f1196..44cb16b 100644 --- a/.mono/metadata/scripts_metadata.editor +++ b/.mono/metadata/scripts_metadata.editor @@ -1 +1 @@ -{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588009964","class":{"namespace":"","class_name":"Enemy","nested":false}},"res://codigos/Escena_Principal.cs":{"modified_time":"1587745563","class":{"namespace":"","class_name":"Escena_Principal","nested":false}},"res://codigos/GameManager.cs":{"modified_time":"1588009112","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588009857","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588010090","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SuelosScript/Suelo1.cs":{"modified_time":"1587836811","class":{"namespace":"","class_name":"Suelo1","nested":false}},"res://codigos/Wall.cs":{"modified_time":"1587905397","class":{"namespace":"","class_name":"Wall","nested":false}}} \ No newline at end of file +{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588009964","class":{"namespace":"","class_name":"Enemy","nested":false}},"res://codigos/Escena_Principal.cs":{"modified_time":"1588085127","class":{"namespace":"","class_name":"Escena_Principal","nested":false}},"res://codigos/GameManager.cs":{"modified_time":"1588088651","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588009857","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588088747","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SingletonVariables.cs":{"modified_time":"1588087915","class":{"namespace":"","class_name":"SingletonVariables","nested":false}},"res://codigos/SuelosScript/Suelo1.cs":{"modified_time":"1587836811","class":{"namespace":"","class_name":"Suelo1","nested":false}},"res://codigos/Wall.cs":{"modified_time":"1587905397","class":{"namespace":"","class_name":"Wall","nested":false}}} \ No newline at end of file diff --git a/.mono/metadata/scripts_metadata.editor_player b/.mono/metadata/scripts_metadata.editor_player index a1f1196..44cb16b 100644 --- a/.mono/metadata/scripts_metadata.editor_player +++ b/.mono/metadata/scripts_metadata.editor_player @@ -1 +1 @@ -{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588009964","class":{"namespace":"","class_name":"Enemy","nested":false}},"res://codigos/Escena_Principal.cs":{"modified_time":"1587745563","class":{"namespace":"","class_name":"Escena_Principal","nested":false}},"res://codigos/GameManager.cs":{"modified_time":"1588009112","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588009857","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588010090","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SuelosScript/Suelo1.cs":{"modified_time":"1587836811","class":{"namespace":"","class_name":"Suelo1","nested":false}},"res://codigos/Wall.cs":{"modified_time":"1587905397","class":{"namespace":"","class_name":"Wall","nested":false}}} \ No newline at end of file +{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588009964","class":{"namespace":"","class_name":"Enemy","nested":false}},"res://codigos/Escena_Principal.cs":{"modified_time":"1588085127","class":{"namespace":"","class_name":"Escena_Principal","nested":false}},"res://codigos/GameManager.cs":{"modified_time":"1588088651","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588009857","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588088747","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SingletonVariables.cs":{"modified_time":"1588087915","class":{"namespace":"","class_name":"SingletonVariables","nested":false}},"res://codigos/SuelosScript/Suelo1.cs":{"modified_time":"1587836811","class":{"namespace":"","class_name":"Suelo1","nested":false}},"res://codigos/Wall.cs":{"modified_time":"1587905397","class":{"namespace":"","class_name":"Wall","nested":false}}} \ No newline at end of file diff --git a/.mono/temp/bin/Debug/Rogue en Godot.dll b/.mono/temp/bin/Debug/Rogue en Godot.dll index bbae8a5..e42bc1f 100644 Binary files a/.mono/temp/bin/Debug/Rogue en Godot.dll and b/.mono/temp/bin/Debug/Rogue en Godot.dll differ diff --git a/.mono/temp/bin/Debug/Rogue en Godot.pdb b/.mono/temp/bin/Debug/Rogue en Godot.pdb index 61ff0cc..08fb821 100644 Binary files a/.mono/temp/bin/Debug/Rogue en Godot.pdb and b/.mono/temp/bin/Debug/Rogue en Godot.pdb differ diff --git a/.mono/temp/obj/Debug/Rogue en Godot.csprojAssemblyReference.cache b/.mono/temp/obj/Debug/Rogue en Godot.csprojAssemblyReference.cache index a61d3de..45f14b9 100644 Binary files a/.mono/temp/obj/Debug/Rogue en Godot.csprojAssemblyReference.cache and b/.mono/temp/obj/Debug/Rogue en Godot.csprojAssemblyReference.cache differ diff --git a/.mono/temp/obj/Debug/Rogue en Godot.dll b/.mono/temp/obj/Debug/Rogue en Godot.dll index bbae8a5..e42bc1f 100644 Binary files a/.mono/temp/obj/Debug/Rogue en Godot.dll and b/.mono/temp/obj/Debug/Rogue en Godot.dll differ diff --git a/.mono/temp/obj/Debug/Rogue en Godot.pdb b/.mono/temp/obj/Debug/Rogue en Godot.pdb index 61ff0cc..08fb821 100644 Binary files a/.mono/temp/obj/Debug/Rogue en Godot.pdb and b/.mono/temp/obj/Debug/Rogue en Godot.pdb differ diff --git a/Rogue en Godot.csproj b/Rogue en Godot.csproj index 30a20c0..75462d0 100644 --- a/Rogue en Godot.csproj +++ b/Rogue en Godot.csproj @@ -59,6 +59,7 @@ + diff --git a/codigos/Escena_Principal.cs b/codigos/Escena_Principal.cs index 031da00..2a84617 100644 --- a/codigos/Escena_Principal.cs +++ b/codigos/Escena_Principal.cs @@ -7,14 +7,30 @@ public class Escena_Principal : Node2D PackedScene GameManager; private bool existeGameManager = false; //Node2D escenaNueva; - + private GameManager _GameManager; // Called when the node enters the scene tree for the first time. public override void _Ready() { + _GameManager = (GameManager)GetTree().GetNodesInGroup("GameManager")[0]; TestGameManager(); + //_GameManager.InitGame();//inicializo la función que crea todo el escenario como esta en 1 singleton solo se crea 1 ves. + //_GameManager.InitGame();//inicializo la función que crea todo el escenario como esta en 1 singleton solo se crea 1 ves. + } - + + /*public override void _Process(float delta) + { + GD.Print(_GameManager.inicioEscenario); + if(_GameManager.inicioEscenario) + { + return; + } + else + { + _GameManager.InitGame();//inicializo la función que crea todo el escenario como esta en 1 singleton solo se crea 1 ves. + } + }*/ private void TestGameManager() //esto es para verificar si existe en el nodo un game manager,caso contrario instancio 1 @@ -35,6 +51,11 @@ private void TestGameManager() //esto es para verificar si existe en el nodo un } } + private bool inicioEscenario(bool InitScene)//para saber si inicio el escenario + { + return InitScene;//retorna verdadero o falso + } + private void instanciarGameManager() { @@ -43,6 +64,7 @@ private void instanciarGameManager() } + // // Called every frame. 'delta' is the elapsed time since the previous frame. // public override void _Process(float delta) // { diff --git a/codigos/GameManager.cs b/codigos/GameManager.cs index 2c406db..a678298 100644 --- a/codigos/GameManager.cs +++ b/codigos/GameManager.cs @@ -12,21 +12,65 @@ public class GameManager : Node2D private List enemies = new List();//aqui voy a guardar los enemigos private bool enemiesMoving;//si el enemigo se esta moviendo o no + private int level = 0;//cuenta el nivel en el que estamos lo usamos como parametro en setup scene + //public float levelStarDelay; + private Label LevelText;//referencia al texto del nivel actual + private Label FoodText;//referencia a la comida que posee el jugador + private ColorRect fondoColorUI;//referencia al fondo + public bool inicioEscenario = true;//para saber si inicio el escenario + public bool doingSetup;//es para saber si todabia esta preparandose la escena,osea esta la UI que aparece en el comienzo + + private SingletonVariables _SingletonVariables; // Called when the node enters the scene tree for the first time. public override void _Ready() { boardScript = (BoardManager)GetTree().GetNodesInGroup("BoardManager")[0];//como el script esta en el nodo lo busco de esta manera - InitGame();//llamo al script que inicia el nivel + LevelText = (Label)GetTree().GetNodesInGroup("LevelText")[0];//referencia al texto que muestra el nivel actual + FoodText = (Label)GetTree().GetNodesInGroup("FoodText")[0];//referencia al texto que muestra la comida + fondoColorUI = (ColorRect)GetTree().GetNodesInGroup("fondoColorUI")[0];//referencia al fondo de la UI + + _SingletonVariables = GetNode("/root/SingletonVariables");//para acceder al singleton desde el player y cambiar el número del nivel y guardar el puntaje + level = _SingletonVariables.level; + + InitGame();//llamo al script que inicia el nivel lo hago desde escena principal + + //inicioEscenario = true; } + - private void InitGame()//inicializa el juego + public void InitGame()//inicializa el juego { - enemies.Clear();//antes de iniciar el nivel vaciamos la lista - boardScript.SetupScene(16);//llamo a la función que esta en board manager para crear la escena toma como parametro el nivel actual que es la cantidad de enemigos + //inicioEscenario = true;//verifico que ya se incio el escenario + doingSetup = true;//cuando inciamos el juego se muestra por pantalla la UI que muestra el nivel actual + enemies.Clear();//antes de iniciar el nivel vaciamos la lista + boardScript.SetupScene(level);//llamo a la función que esta en board manager para crear la escena toma como parametro el nivel actual que es la cantidad de enemigos + LevelText.Text = "Day " + level;//el día más lo que alla en la variable level + fondoColorUI.Visible = true;//para que se vea el fondo + FoodText.Visible = false;//que no se vea el texto de comida } + public void HideLevelImage()//para dejar de mostrar la imagen inicial esa que dice day 1 más el fondo + { + fondoColorUI.Visible = false;//que se deje de ver el fondo + LevelText.Visible = false;//se deja de ver el texto + FoodText.Visible = true;//muestro el texto de la comida + doingSetup = false;//puedo mover el personaje + } + + public void _on_TimerlevelStarDelay_timeout()//cuando termina el tiempo del starDelay OJO MANEJADO POR EL NODO TIMER QUE ESTA EN LA ESCENA + { + HideLevelImage();//deja de mostrar la imagen inicial + } + + + + public void GameOver()//posiblemente esto despues voy a tener que correguirlo { + + LevelText.Text = "After " + level + " Days\nyou starved";//si es game over cambio el texto + fondoColorUI.Visible = true;//hago visible el fondo + LevelText.Visible = true;//hace visible el texto Visible = false;//desactivo el nodo que contiene este script,esto tendria que desactivar el Game manager para saber que es Game over puede que lo haga de otra manera } @@ -51,9 +95,9 @@ private async void MoveEnemies()//esta función sera como una corrutina la utili // // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _PhysicsProcess(float delta) { - if(playersTurn || enemiesMoving)//si es el turno de jugador o los enemigos estan moviendose + if(playersTurn || enemiesMoving || doingSetup)//si es el turno de jugador o los enemigos estan moviendose se esta inciando la escena con el menu { - return;//salimos de la función y no hacemos nada + return;//salimos de la función y no movemos el personaje } MoveEnemies();//caso contrario iniciamos el movimiento de los enemigos nose si funcione el delay @@ -63,4 +107,8 @@ public void AddEnemyToList(KinematicBody2D enemy)//los enemigos se agregan cuans { enemies.Add(enemy);//agrega el enemigo a la lista } + + + + } diff --git a/codigos/Player.cs b/codigos/Player.cs index 8792558..c7446cc 100644 --- a/codigos/Player.cs +++ b/codigos/Player.cs @@ -12,6 +12,8 @@ public class Player : MovingObject private int food;//para llevar la cuenta de cuanta comida tiene private AnimationNodeStateMachinePlayback playback;//referencia al nodo animation tree con el parametro para acceder a los stados + private SingletonVariables _SingletonVariables; + private Label _FoodText; //private bool seMovio = false; Wall hitWall;//referencia a la pared que esta chocando @@ -26,11 +28,17 @@ public override void _Ready() //rb2D = thi;por ahora voy a evitarla animator = GetNode("AnimationTree");//referencia al animation three _GameManager = (GameManager)GetTree().GetNodesInGroup("GameManager")[0]; - food = _GameManager.playerFoodPoint;//la comida inicial del jugador busco desde el game manager - + + + playback = (AnimationNodeStateMachinePlayback)GetNode("AnimationTree").Get("parameters/playback");//accedo al nodo animation three y a la propiedad de las maquinas de estado playback.Start("PlayerIdle");//animación inicial player estatico osea igle + _SingletonVariables = GetNode("/root/SingletonVariables");//para acceder al singleton desde el player y cambiar el número del nivel y guardar el puntaje + + _FoodText = (Label)GetTree().GetNodesInGroup("FoodText")[0];//accedo al nodo label que muestra la comida en la pantalla + food = _SingletonVariables.food;//la comida inicial del jugador busco desde el game manager + _FoodText.Text = "food " + food;//comida del jugador } @@ -50,6 +58,7 @@ protected override Vector2 RaycastDirection(int xDir, int Ydir)//cuando el rayca protected override void AttempMove(int xDir, int yDir) { food --;//en cada paso dismunuje la comida + _FoodText.Text = "food " + food;//comida del jugador base.AttempMove(xDir,yDir);//ejecuto esta acción CheckIfGameOver();//siempre que se decrementa la comida verificamos si es game over _GameManager.playersTurn = false;//luego terminamos el turno del jugador @@ -57,9 +66,9 @@ protected override void AttempMove(int xDir, int yDir) public override void _PhysicsProcess(float delta) { - if(!_GameManager.playersTurn)//si no es el turno del jugador + if(!_GameManager.playersTurn || _GameManager.doingSetup)//si no es el turno del jugador o se esta inciando la escena con el menu { - return;//dejamos de ejecutar + return;//dejamos de ejecutar y el personaje no se mueve } int horizontal = Convert.ToInt16((Input.GetActionStrength("d") - Input.GetActionStrength("a")) * dimensionSprite);//mover izquierda derecha @@ -71,25 +80,13 @@ public override void _PhysicsProcess(float delta) if(horizontal != 0 || vertical != 0 )///nos estamos moviendo { AttempMove(horizontal,vertical);//movemos el personaje - //if(!seMovio)//esto es para prueba - //{ - //seMovio = true; - // - //} - //GD.Print(rayo.IsColliding());//esto es para prueba compruebo si el rayo colisiona - // await ToSignal(GetTree().CreateTimer(0.1f),"timeout");//esto es para prueba - //seMovio = false;//esto es para prueba } } - - - - protected override void OnCantMoveStaticBody2D(StaticBody2D pared)//si "NO" podemos movernos recibe el cuerpo estatico y es un una pared.Este es un metodo que se sobreescribe { - if(pared.IsInGroup("Wall")) + if(pared.IsInGroup("Wall"))//si esta en el grupo suelo { hitWall = (Wall)pared.GetParent();//con esto tendria que poder acceder al script que maneja ese piso para cambiar la figura al ser golpeado } @@ -117,6 +114,7 @@ private void Restart() public void LoseFood(int loss) { food -= loss;//cantidad de comida que pierdo + _FoodText.Text = " - "+ loss +" food " + food;//comida del jugador que pierde al ser golpeado playback.Travel("PlayerHit");//activo animación daño CheckIfGameOver();//verifico sino todavia tengo comida osea sino es game over } @@ -127,17 +125,23 @@ public async void _on_Area2D_area_entered(Area _area)//esta funcion tiene una co { enable = false;//el jugador no se puede mover //aqui tendria que venir una transcición al cambiar de pantalla + _SingletonVariables.level += 1; + _SingletonVariables.food = food; await ToSignal(GetTree().CreateTimer(1.0f),"timeout");//detengo por 1 segundo Restart();//reinicio el nivel,voy a tener que utilizar un singleton para guardar puntajes } if(_area.IsInGroup("Food")) { food += pointPerFood;//sumo el puntaje de la comida + _FoodText.Text = " + "+ pointPerFood +" food " + food;//comida del jugador + (_area.GetParent().GetChild(0) as Area2D).Monitoring = false;//para que el cuerpo deje de ser detectado,porque aunque desaparesca el sprite sigue estando la colisión del area detectando cuerpos (_area.GetParent() as Sprite).Visible = false;//hago invisible el nodo padre que contiene el sprite por lo tanto todos los hijos tendrian que ser inviisble } if(_area.IsInGroup("Soda")) { food += pointPerSOda;//sumo el puntaje de la soda + _FoodText.Text = " + "+ pointPerSOda +" food " + food;//comida del jugador + (_area.GetParent().GetChild(0) as Area2D).Monitoring = false;//para que el cuerpo deje de ser detectado,porque aunque desaparesca el sprite sigue estando la colisión del area detectando cuerpos (_area.GetParent() as Sprite).Visible = false;//hago invisible el nodo padre que contiene el sprite por lo tanto todos los hijos tendrian que ser inviisble } } diff --git a/codigos/SingletonVariables.cs b/codigos/SingletonVariables.cs new file mode 100644 index 0000000..1ae3110 --- /dev/null +++ b/codigos/SingletonVariables.cs @@ -0,0 +1,20 @@ +using Godot; +using System; + +public class SingletonVariables : Node +{ + public int food = 100; + public int level = 1; + + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + + } + +// // Called every frame. 'delta' is the elapsed time since the previous frame. +// public override void _Process(float delta) +// { +// +// } +} diff --git a/escenas/ControlUI.tscn b/escenas/ControlUI.tscn new file mode 100644 index 0000000..1957af8 --- /dev/null +++ b/escenas/ControlUI.tscn @@ -0,0 +1,76 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://fonts/PressStart2P-Regular.ttf" type="DynamicFontData" id=1] + +[sub_resource type="DynamicFont" id=1] +size = 50 +font_data = ExtResource( 1 ) + +[sub_resource type="DynamicFont" id=2] +size = 20 +font_data = ExtResource( 1 ) + +[node name="ControlUI" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="fondoColorUI" type="ColorRect" parent="." groups=[ +"fondoColorUI", +]] +anchor_right = 1.0 +anchor_bottom = 1.0 +color = Color( 0, 0, 0, 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="HBoxContainer" type="VBoxContainer" parent="."] +anchor_top = 0.5 +anchor_right = 1.0 +anchor_bottom = 0.5 +margin_top = -23.0 +margin_bottom = 271.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CenterContainerLevelText" type="CenterContainer" parent="HBoxContainer"] +margin_right = 1024.0 +margin_bottom = 50.0 + +[node name="LevelText" type="Label" parent="HBoxContainer/CenterContainerLevelText" groups=[ +"LevelText", +]] +margin_left = 387.0 +margin_right = 637.0 +margin_bottom = 50.0 +custom_fonts/font = SubResource( 1 ) +text = "Day 1" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="CenterContainerFoodText" type="CenterContainer" parent="HBoxContainer"] +margin_top = 54.0 +margin_right = 1024.0 +margin_bottom = 353.0 + +[node name="MarginContainerFoodText" type="MarginContainer" parent="HBoxContainer/CenterContainerFoodText"] +margin_left = 432.0 +margin_right = 592.0 +margin_bottom = 299.0 +custom_constants/margin_top = 279 + +[node name="FoodText" type="Label" parent="HBoxContainer/CenterContainerFoodText/MarginContainerFoodText" groups=[ +"FoodText", +]] +margin_top = 279.0 +margin_right = 160.0 +margin_bottom = 299.0 +custom_fonts/font = SubResource( 2 ) +text = "FoodText" diff --git a/escenas/Escena_Principal.tscn b/escenas/Escena_Principal.tscn index 4781ee6..7390ab7 100644 --- a/escenas/Escena_Principal.tscn +++ b/escenas/Escena_Principal.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://escenas/characters/Player.tscn" type="PackedScene" id=1] +[ext_resource path="res://escenas/ControlUI.tscn" type="PackedScene" id=2] [ext_resource path="res://escenas/GameManager.tscn" type="PackedScene" id=27] [ext_resource path="res://codigos/Escena_Principal.cs" type="Script" id=28] @@ -10,6 +11,8 @@ script = ExtResource( 28 ) GameManager = ExtResource( 27 ) +[node name="GameManager" parent="." instance=ExtResource( 27 )] + [node name="camara" type="Node2D" parent="."] [node name="Camera2D" type="Camera2D" parent="camara"] @@ -22,7 +25,14 @@ zoom = Vector2( 0.54, 0.54 ) "Board", ]] -[node name="GameManager" parent="." instance=ExtResource( 27 )] - [node name="Player" parent="." instance=ExtResource( 1 )] position = Vector2( 0, 224 ) + +[node name="TimerlevelStarDelay" type="Timer" parent="."] +one_shot = true +autostart = true + +[node name="Canvas" type="CanvasLayer" parent="."] + +[node name="ControlUI" parent="Canvas" instance=ExtResource( 2 )] +[connection signal="timeout" from="TimerlevelStarDelay" to="GameManager" method="_on_TimerlevelStarDelay_timeout"] diff --git a/project.godot b/project.godot index 1b48526..70b9e75 100644 --- a/project.godot +++ b/project.godot @@ -19,6 +19,10 @@ config/name="Rogue en Godot" run/main_scene="res://escenas/Escena_Principal.tscn" config/icon="res://icon.png" +[autoload] + +SingletonVariables="*res://codigos/SingletonVariables.cs" + [display] window/size/always_on_top=true