public override void Colision(SpriteComponent otro, Vector2 desplazamiento) { //if (life <= 0) //{ // died = true; //} //Debug.Print("Agente "+direccionColision); //if (direccionColision.Equals("arriba")) //{ // life--; //} if (otro is Muro) { Mover(desplazamiento); if (desplazamiento.Y != 0) { velocidad.Y = 0; isOnGround = true; } } if (otro is Jugador) { direccionColision = cls.colision(this.Bound, otro.Bound); //Debug.Print("Agente " + direccionColision + " vida:" + life); if ((!direccionColision.Equals("abajo")) && (!direccionColision.Equals("nulo"))) { otro.life--; } Mover(desplazamiento); if (desplazamiento.Y != 0) { velocidad.Y = 0; } } if (otro is Objeto) { Mover(desplazamiento); if (desplazamiento.Y != 0) { velocidad.Y = 0; isOnGround = true; } } if (otro is Agent) { Mover(desplazamiento); if (desplazamiento.Y != 0) { velocidad.Y = 0; } } }
//private List<estados> retorno = new List<estados>(); public Bloque Percepciones(SpriteComponent agente, SpriteComponent sprite, int profundidad) { // lee las entradas (percepciones) y las compara para luego retornar un estado // 'jugador' son las percepciones del objetivo: Jugador. // 'agente' son las percepciones del objetivo: Agente. //estados nuevoEstado = new estados(); // inicializa los estados. //nuevoEstado.sector = new List<Sector>(); Bloque nuevoBloque = new Bloque(); //nuevoEstado.sector = new List<Sector>(); // inicializa el conjunto de estados. // verifica si es un jugador u otro objeto // calcula la distancia entre jugador y agente. /* nueva funcion de calculo * se crea una nueva posicion para el elemento verificando su posicion en celdas de 32*32px * Vector2 nPA = nueva Posicion Agente * Vector2 nPS = nueva Posicion Sprite * nivel de profundidad 1. * A, B, C, D, E, F, G y H son las posibles posiciones en las que se puede encontrar un elemento cercano al agente. * IF condiciones en que evalua si el sprite se encuentra en la matriz adyacente del agente. * |A|B|C| * |D|*|E| * |F|G|H| * el agente "*" se encuentra en el centro. * A: X-1, Y-1 E: X+1, Y+0 * B: X+0, Y-1 F: X-1, Y+1 * C: X+1, Y-1 G: X+0, Y+1 * D: X-1, Y+0 H: X+1, Y+1 * nivel de profundidad 2. * |A|B|C|D|E| * |F|G|H|I|J| * |K|L|*|M|N| * |O|P|Q|R|S| * |T|U|V|W|X| * nivel de profundidad 3... */ Vector2 nPA = new Vector2((int)(agente.Posicion.X / 32), (int)(agente.Posicion.Y / 32)); Vector2 nPS = new Vector2((int)(sprite.Posicion.X / 32), (int)(sprite.Posicion.Y / 32)); Vector2 tPS = new Vector2((int)(sprite.Tamano.X / 32), (int)(sprite.Tamano.Y / 32)); // comprueba la posicion del sprite con profundidadnivel1 //nuevoBloque.sector = ProfundidadNivel1(nPA, nPS, tPS); // asignamos el nombre del sprite if (sprite is Jugador) { nuevoBloque.sector = Profundidad(nPA, nPS, tPS, profundidad, "player"); } else if (sprite is Muro) { nuevoBloque.sector = Profundidad(nPA, nPS, tPS, profundidad, "wall"); } else if (sprite is Agent) { nuevoBloque.sector = Profundidad(nPA, nPS, tPS, profundidad, "agent"); } else if (sprite is Objeto) { nuevoBloque.sector = Profundidad(nPA, nPS, tPS, profundidad, "object"); } return(nuevoBloque); }
public void RemoverSprite(SpriteComponent sprite) { Sprites.Remove(sprite); }
public void AdicionarSprite(SpriteComponent sprite) { Sprites.Add(sprite); }
public override void Colision(SpriteComponent otro, Vector2 desplazamiento) { // no se hace nada }
public abstract void Colision(SpriteComponent otro, Vector2 desplazamiento);