Skip to content

Commit

Permalink
arreglando problema de raycast
Browse files Browse the repository at this point in the history
  • Loading branch information
kone9 committed May 4, 2020
1 parent 644629f commit 1ebdf86
Show file tree
Hide file tree
Showing 20 changed files with 1,501 additions and 55 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
source_md5="f992a46100220ca1148978becf8ffd19"
dest_md5="ffc7e4ff827dec1ee28c759af4554b9c"
dest_md5="0a021db42e78a7aaa2f62cc44d31a75d"

Binary file not shown.
2 changes: 1 addition & 1 deletion .mono/metadata/scripts_metadata.editor
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588266694","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":"1588265510","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588268271","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588266209","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SingletonVariables.cs":{"modified_time":"1588182349","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":"1588244399","class":{"namespace":"","class_name":"Wall","nested":false}}}
{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588356725","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":"1588265510","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588535072","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588534166","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SingletonVariables.cs":{"modified_time":"1588182349","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":"1588244399","class":{"namespace":"","class_name":"Wall","nested":false}}}
2 changes: 1 addition & 1 deletion .mono/metadata/scripts_metadata.editor_player
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588266694","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":"1588265510","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588268271","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588266209","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SingletonVariables.cs":{"modified_time":"1588182349","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":"1588244399","class":{"namespace":"","class_name":"Wall","nested":false}}}
{"res://codigos/BoardManager.cs":{"modified_time":"1587848329","class":{"namespace":"","class_name":"BoardManager","nested":false}},"res://codigos/Enemy.cs":{"modified_time":"1588356725","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":"1588265510","class":{"namespace":"","class_name":"GameManager","nested":false}},"res://codigos/MovingObject.cs":{"modified_time":"1588535072","class":{"namespace":"","class_name":"MovingObject","nested":false}},"res://codigos/Player.cs":{"modified_time":"1588534166","class":{"namespace":"","class_name":"Player","nested":false}},"res://codigos/SingletonVariables.cs":{"modified_time":"1588182349","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":"1588244399","class":{"namespace":"","class_name":"Wall","nested":false}}}
Binary file modified .mono/temp/bin/Debug/Rogue en Godot.dll
Binary file not shown.
Binary file modified .mono/temp/bin/Debug/Rogue en Godot.pdb
Binary file not shown.
Binary file modified .mono/temp/obj/Debug/Rogue en Godot.dll
Binary file not shown.
Binary file modified .mono/temp/obj/Debug/Rogue en Godot.pdb
Binary file not shown.
1 change: 1 addition & 0 deletions codigos/Enemy.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public override void _Process(float delta)
targetPosition = targetCharacter.Position;//guardo la posición del personaje en targetPosition
}


protected override bool AttempMove(int xDir, int yDir)//este metodo devuelve si se movio o no "Bool"
{

Expand Down
88 changes: 52 additions & 36 deletions codigos/MovingObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ public abstract class MovingObject : KinematicBody2D//esta es una clase global q
public bool enable;//para saber si el objeto puede estar enable y moverse
public Tween moverConTween;
public int dimensionSprite = 32;
private Vector2 raycastDirecciónAnterior;
private Vector2 RaycastDirecciónNueva;

public Vector2 posicionDelRayo;//para saber hacia adonde tiene que apuntar el raycast
// Called when the node enters the scene tree for the first time.
/*public override void _Ready()//no puedo implementar override desde player o enemigo por eso muevo todas estas variables del ready a cada script independiente
{
Expand All @@ -25,6 +28,7 @@ public abstract class MovingObject : KinematicBody2D//esta es una clase global q
moverConTween = GetNode<Tween>("Tween");
//rb2D = thi;por ahora voy a evitarla
}*/
bool colisiono;

protected void SmoothMovementWithTween(Vector2 end)//Esta función va a procesar el movimiento en unity se usa una corrutina,pero en godot puede hacerce lo mismo con un nodo tween
{
Expand All @@ -43,61 +47,73 @@ protected void SmoothMovementWithTween(Vector2 end)//Esta función va a procesar


//metodo para mover al jugador o al enemigo devuelve 2 si se movio y la colisión de raycast
protected bool Move(int xDir, int Ydir,RayCast2D hitRaycast)//es privada para cualquier otra clase que no hereda de esta
protected bool Move(int xDir, int yDir,RayCast2D hitRaycast)//es privada para cualquier otra clase que no hereda de esta
{
Vector2 posicionAnteriorRayCast = hitRaycast.CastTo;
bool colisiono;//para saber cuando el raycast colisiona
Vector2 start = Position;//posicion inicial
Vector2 end = start + new Vector2(xDir,Ydir);//la posición de adonde queremos movernos suma de vectores (0,0) + (1,0) = (1,0)
hitRaycast.CastTo = RaycastDirection(xDir,Ydir);//esto determina para adonde va apuntar el raycast

//hacemos una raycast entre el punto inicial y final
//si hay un collider por donde pasa esa linea encontrado ese objeto
Vector2 end = start + new Vector2(xDir,yDir);//la posición de adonde queremos movernos suma de vectores (0,0) + (1,0) = (1,0)
hitRaycast.CastTo = RaycastDirection(xDir,yDir);//esto determina para adonde va apuntar el raycast
colisiono = hitRaycast.IsColliding();//esto es para verificar si colisionamos tengo que verificar utilizando la colisión del raycast con un grupo
if(colisiono == false)//sino esta colisionando

GD.Print("el rayo esta colisionado: ", hitRaycast.IsColliding());
GD.Print("direccion adonde apunta el raycast: ",RaycastDirection(xDir,yDir));
GD.Print("posicion adonde me muevo: ",xDir," : ",yDir);
GD.Print("la dirección anterior del raycast: ",raycastDirecciónAnterior);
GD.Print("\n");
//si hay un collider por donde pasa esa linea encontrado ese objeto
//&& xDir != RaycastDirection(xDir,Ydir).y && Ydir != RaycastDirection(xDir,Ydir).x *-1

/*if(!colisiono)//sino esta colisionando
{
//hacemos el movimiento
//GD.Print("tendria que moverse");
//GD.Print("cantidad que mueve en X: ",xDir);
//GD.Print("cantidad que mueve en Y: ",Ydir);
//GD.Print("la posicion en final X: ",end.x);
//GD.Print("laposicion en final Y: ",end.y);
SmoothMovementWithTween(end);//movemos con interpolación lineal recibe por parametro la ultima posición
return true;
raycastDirecciónAnterior = RaycastDirection(xDir,yDir);
return true;
}*/

if(!colisiono || xDir != raycastDirecciónAnterior.y || yDir != raycastDirecciónAnterior.x * -1)//sino esta colisionando
{
SmoothMovementWithTween(end);//movemos con interpolación lineal recibe por parametro la ultima posición
raycastDirecciónAnterior = RaycastDirection(xDir,yDir);
return true;
}
else//si en la mascara 2 hay 1 personaje o un obstaculo
if(colisiono)//si en la mascara 2 hay 1 personaje o un obstaculo
{
GD.Print("No podemos movernos");
return false;//no hemos podido movernos
}
//me faltaria una condición para verificar x con y osea si esta en X pero si tengo que girar la flecha


return false;//no hemos podido movernos

}

//Esto es relacionado al movimiento y al tipo de obstaculo
protected abstract void OnCantMoveStaticBody2D(StaticBody2D go); //aqui viene el comportamiento luego de no poder moverse,es un meotdoABstracto ya que se va a comportar de diferente manera según sea el personaje o elenemigo
protected abstract void OnCantMoveRigidBody2D(KinematicBody2D go);
protected abstract Vector2 RaycastDirection(int xDir, int Ydir);//como el personaje y el enemigo tienen algunas diferencias tengo que procesar la direccioń del raycast en cada uno por separado


protected virtual bool AttempMove(int xDir,int yDir)//metodo para internar moverse esto recibe por parametro cuanto en x y cuanto en y lo marcamos como abstracto ya que esto lo haremos en cada personaje
{
RayCast2D hit = rayo;//tomo la referencia del nodo que esta en la función ready
bool canMove = Move(xDir,yDir,hit);//
if(!canMove)//si no se movio
bool canMove = Move(xDir,yDir,hit);////si se puede mover o no
if(canMove) return true;//el personaje tendria que mover por lo tanto salgo de esta función

Node col = (Node)hit.GetCollider();//usando la colisicioń del raycast busco el nodo
if(col != null && col.IsInGroup("Wall"))//si el nodo colisionado esta en el grupo wall
{
Node col = (Node)hit.GetCollider();//usando la colisicioń del raycast busco el nodo
if(col != null && col.IsInGroup("Wall"))//si el nodo colisionado esta en el grupo wall
{
//GD.Print("estoy conlisionado con un muro");
OnCantMoveStaticBody2D((StaticBody2D)hit.GetCollider());//aqui tengo que pasarle el staticbody que estamos colisionando
}
if(col != null && col.IsInGroup("characters"))//si el nodo colisionado esta enel grupo character
{
//GD.Print("estoy conlisionado con un personaje");
OnCantMoveRigidBody2D((KinematicBody2D)hit.GetCollider());//aqui tengo que pasarle el kinematicBody que estamos colisionando)
}
//GD.Print("estoy conlisionado con un muro");
OnCantMoveStaticBody2D((StaticBody2D)hit.GetCollider());//aqui tengo que pasarle el staticbody que estamos colisionando
}
else if(col != null && col.IsInGroup("characters"))//si el nodo colisionado esta enel grupo character
{
//GD.Print("estoy conlisionado con un personaje");
OnCantMoveRigidBody2D((KinematicBody2D)hit.GetCollider());//aqui tengo que pasarle el kinematicBody que estamos colisionando)
}

return canMove;//devuelve verdadero o falso para saber si se movio o no
}



//Esto es relacionado al movimiento y al tipo de obstaculo
protected abstract void OnCantMoveStaticBody2D(StaticBody2D go); //aqui viene el comportamiento luego de no poder moverse,es un meotdoABstracto ya que se va a comportar de diferente manera según sea el personaje o elenemigo
protected abstract void OnCantMoveRigidBody2D(KinematicBody2D go);
protected abstract Vector2 RaycastDirection(int xDir, int Ydir);//como el personaje y el enemigo tienen algunas diferencias tengo que procesar la direccioń del raycast en cada uno por separado


}
52 changes: 38 additions & 14 deletions codigos/Player.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public class Player : MovingObject

Wall hitWall;//referencia a la pared que esta chocando


// Called when the node enters the scene tree for the first time.
public override void _Ready()
{
Expand All @@ -50,18 +51,12 @@ public override void _Ready()
//rb2D = thi;por ahora voy a evitarla
animator = GetNode<AnimationTree>("AnimationTree");//referencia al animation three
_GameManager = (GameManager)GetTree().GetNodesInGroup("GameManager")[0];



playback = (AnimationNodeStateMachinePlayback)GetNode<AnimationTree>("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<SingletonVariables>("/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

//para procesar el audio y buscar los nodos
scavengersFootstepNode = (AudioStreamPlayer)GetTree().GetNodesInGroup("scavengers_footstep")[0];
scavengersFruitNode = (AudioStreamPlayer)GetTree().GetNodesInGroup("scavengers_fruit")[0];
Expand Down Expand Up @@ -100,25 +95,59 @@ protected override bool AttempMove(int xDir, int yDir)//para mover el personaje
return canMove;//regresa si se movio o no
}

public override void _PhysicsProcess(float delta)
public override void _Input(InputEvent @event)
{
//GD.Print(rayo.IsColliding());
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 y el personaje no se mueve
}

int horizontal = Convert.ToInt16((Input.GetActionStrength("d") - Input.GetActionStrength("a")) * dimensionSprite);//mover izquierda derecha
int vertical = Convert.ToInt16((Input.GetActionStrength("s") - Input.GetActionStrength("w")) * dimensionSprite );//mover arriba abajo

/*if(Input.IsActionJustPressed("a"))
{
horizontal = -32;
}
else if(Input.IsActionJustPressed("d"))
{
horizontal = 32;
}
else if(Input.IsActionJustPressed("s"))
{
vertical = 32;
}
else if(Input.IsActionJustPressed("w"))
{
vertical = -32;
}
else
{
horizontal =0;
vertical = 0;
}*/

//posicionDelRayo = RaycastDirection(horizontal,vertical);
if(horizontal != 0)//esto es para que NO se mueva en diagonal
{
vertical = 0;//esto es para que NO se mueva en diagonal
}

if(horizontal != 0 || vertical != 0 )///nos estamos moviendo
{
//rayo.CastTo = RaycastDirection(horizontal,vertical);
AttempMove(horizontal,vertical);//movemos el personaje
}
}


}


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"))//si esta en el grupo suelo
Expand All @@ -143,11 +172,6 @@ protected override void OnCantMoveRigidBody2D(KinematicBody2D body2D)//si "NO" p
}*/
}






private void Restart()
{
GetTree().ReloadCurrentScene();//reinicia la scena esto puede cambiar
Expand All @@ -170,7 +194,7 @@ public async void _on_Area2D_area_entered(Area _area)//esta funcion tiene una co
_GameManager.doingSetup = true;//Cuando entro al area exit ya no puedo mover el personaje
_SingletonVariables.level += 1;//aumento el nivel desde el singleton
_SingletonVariables.food = food;//guardo el valor de la comida en el singleton
await ToSignal(GetTree().CreateTimer(1.0f),"timeout");//detengo por 1 segundo
await ToSignal(GetTree().CreateTimer(0.5f),"timeout");//detengo por 1 segundo
Restart();//reinicio el nivel,voy a tener que utilizar un singleton para guardar puntajes
}
if(_area.IsInGroup("Food"))
Expand Down
1 change: 1 addition & 0 deletions default_bus_layout.tres
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
[gd_resource type="AudioBusLayout" format=2]

[resource]
bus/0/volume_db = -80.0
bus/1/name = "music"
bus/1/solo = false
bus/1/mute = false
Expand Down
Loading

0 comments on commit 1ebdf86

Please sign in to comment.