public static IEnumerator SeguirObjeto(IMovible perseguidor, IMovible objetivo) { Vector2 siguienteDireccion = objetivo.SiguienteDireccion(); Vector2 siguientePosicion = perseguidor.Transform().position; bool posicionObjetivoRecuperada = false; perseguidor.Transform().gameObject.GetComponent <Collider2D>().enabled = false; while (perseguidor.Transform().gameObject.activeSelf&& objetivo.Transform().gameObject.activeSelf) { if (!objetivo.EstaCercaDeLaSiguienteCasilla()) { if (!posicionObjetivoRecuperada) { posicionObjetivoRecuperada = true; //... Invertimos la dirección para calcular la casilla que hay detrás del objetivo siguienteDireccion = objetivo.SiguienteDireccion() * -1; siguientePosicion = objetivo.SiguientePosicion() + (Ajustes.Instancia.tamanioCasilla * siguienteDireccion); if (Vector2.Distance(siguientePosicion, perseguidor.Transform().position) > Ajustes.Instancia.tamanioCasilla * 3) { perseguidor.Transform().position = siguientePosicion; } } } else { posicionObjetivoRecuperada = false; } //... Como invertimos la dirección para calcular la casilla detrás del objetivo, la volvemos a invertir para asignar la dirección en la que el perseguidor tendrá que mirar perseguidor.MoverExternamente(siguientePosicion, siguienteDireccion * -1, true); yield return(null); } }
private void OnEnable() { PosicionInicial = transform.position; if (npc == null) { npc = GetComponent <NPC>(); } if (spriteRenderer == null) { spriteRenderer = GetComponent <SpriteRenderer>(); } ComprobarDireccionInicial(); ComprobarTipoMovimientoActual(); if (tipoMovimientoActual == TipoMovimientoNPC.NINGUNO || !npc.TieneDialogoPendiente()) { enabled = false; } else if (tipoMovimientoActual != TipoMovimientoNPC.QuietoObservandoAreaDeDeteccion) { ControladorEventos.Instancia.LanzarEvento(new EventoAniadirNPCAlControlador(this)); } siguientePosicion = transform.position; MoverNPC = this; }
public override void Cargar(IMovible movil) { base.Cargar(movil); Proyectil unProyectil = new Proyectil(this.PosicionDeTiro.Clonar()); unProyectil.Movimiento.Direccion = movil.Movimiento.Direccion; unProyectil.Alcance = ALCANCELANZAMIENTO; this.carga = unProyectil; }
public void BombitaConVelocidadNormalCambiaDePosicionEnUnaUnidadDentroDelMapaAlMoversePorPasillo() { this.movil = new Bombita(new Punto(0, 0)); Punto posOriginal = this.movil.Posicion.Clonar(); this.unMapa.AgregarPersonaje(this.movil); this.movil.Movimiento.CambiarADerecha(); this.movil.Mover(); Punto pos = new Punto(1, 0); Assert.IsTrue(pos.Equals(this.movil.Posicion)); }
public virtual void Cargar(IMovible movil) { this.PosicionDeTiro = movil.Posicion.Clonar(); }
public virtual bool TransitablePor(IMovible movil) { return movil.AtraviesaObstaculos(); }
public override bool TransitablePor(IMovible movil) { return true; }
public static IEnumerator MoverHastaPosicion(IMovible objeto, Vector2 destino, Action ejecutarAlFinalizar = null) { //Esperamos a que el personaje quede quieto para saber su dirección while (!Personaje.BloquearMovimiento && !Personaje.PuedeMoverse) { yield return(null); } //destino = AjustarPosicionAlTilemap(destino); Vector2 direccion = Herramientas.ObtenerDireccion(objeto.Transform().position, destino); bool destinoAlcanzado = false; bool finTramo = false; Vector2 direccionRayo; Vector2 tramoActual; Vector2 siguienteCasilla; Vector2 distancia; int tramosTotales = 0; //Mientras no alcance el destino... while (!destinoAlcanzado && tramosTotales < 10) { tramosTotales++; //... Calculamos la distancia entre el destino y la posición actual distancia = destino - (Vector2)objeto.Transform().position; //... Si la distancia horizontal es mayor que la vertical o hay un obstáculo en vertical, se moverá en horizontal hacia el destino... if (Mathf.Abs(distancia.x) > Mathf.Abs(distancia.y) || objeto.DetectarColisionesEnfrente(new Vector2(0, direccion.y)) == TipoColision.ObjetoColision) { //... La dirección del rayo será horizontal para comprobar colisiones en la dirección que se mueve direccionRayo = new Vector2(direccion.x, 0); //... El nuevo tramo será la posición horizontal del destino y la posición vertical actual del objeto tramoActual = new Vector2(destino.x, objeto.Transform().position.y); } //... Si la posición vertical es mayor o no hay obstáculos verticales... else { //... La dirección del rayo será vertical para comprobar colisiones en la dirección que se mueve direccionRayo = new Vector2(0, direccion.y); //... El nuevo tramo será la posición vertical del destino y la posición horizontal actual del objeto tramoActual = new Vector2(objeto.Transform().position.x, destino.y); } //... Si el jugador está justo enfrente del objeto ha llegado a su destino if (objeto.DetectarColisionesEnfrente(direccionRayo) == TipoColision.Personaje) { objeto.MoverExternamente(objeto.Transform().position, direccionRayo); finTramo = true; destinoAlcanzado = true; } //... Mientras no haya chocado con algún obstáculo en el tramo y no haya llegado al final de este... while (!finTramo && Vector2.Distance(objeto.Transform().position, tramoActual) > Ajustes.Instancia.QuintaParteTamanioCasilla) { //... Calculamos la siguiente casilla a la que se tiene que mover en el tilemap siguienteCasilla = new Vector2(objeto.Transform().position.x + (direccionRayo.x * Ajustes.Instancia.tamanioCasilla), objeto.Transform().position.y + (direccionRayo.y * Ajustes.Instancia.tamanioCasilla)); //... Comprobamos si hay algún colisionador antes de moverlo y de qué tipo es TipoColision colisionRayo = objeto.DetectarColisionesEnfrente(direccionRayo); //... Si delante no hay ningún colisionador... if (colisionRayo == TipoColision.NINGUNO) { //... Mientras el objeto no haya llegado a la siguiente casilla lo mueve while (!objeto.MoverExternamente(siguienteCasilla, direccionRayo)) { yield return(null); } } //... Si ha colisionado con un objeto normal, finalizamos el tramo else if (colisionRayo == TipoColision.ObjetoColision) { finTramo = true; } //... Si ha colisionado con el personaje, ha llegado a su destino antes de tiempo else if (colisionRayo == TipoColision.Personaje) { finTramo = true; destinoAlcanzado = true; } yield return(null); } finTramo = false; yield return(null); } //Paramos la animación actual objeto.DetenerAnimacion(); if (ejecutarAlFinalizar != null) { ejecutarAlFinalizar(); } }
public void Transitar(IMovible movil) { this.transitandoEnCasilla.Add(movil); if ((this.ArticuloContenido != null) && (!this.ArticuloContenido.EstaOculto) && (this.ArticuloContenido.EstaActivo)) { movil.ReaccionarConArticulo(this.ArticuloContenido); } }
public void PosicionDeLaDerechaTienePasilloBombitaPuedeMoverseHaciaLaDerecha() { //ver mapa en el FixtureSetup this.pos = new Punto(0, 0); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); //Assert.IsTrue(unMapa.PermitidoMoverHaciaArribaA(movil)); TODO: eliminar codigo comentado movil.Movimiento.Direccion = Tablero.DERECHA; Assert.IsTrue(unMapa.PermitidoAvanzar(movil)); }
public void PosicionDeLaDerechaEsUnObstaculoBombitaNoPuedeMoverseHaciaLaDerecha() { //ver mapa en el FixtureSetup this.pos = new Punto(2, 1); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); movil.Movimiento.Direccion = Tablero.DERECHA; Assert.IsFalse(unMapa.PermitidoAvanzar(movil)); //Assert.IsFalse(unMapa.PermitidoMoverHaciaDerechaA(movil)); }
public void PosicionDeArribaTienePasilloBombitaPuedeMoverseHaciaArriba() { //ver mapa en el FixtureSetup this.pos = new Punto(0, 0); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); movil.Movimiento.Direccion = Tablero.ARRIBA; Assert.IsTrue(unMapa.PermitidoAvanzar(movil)); }
public void PosicionDeArribaNoExisteBombitaNoPuedeMoverseHaciaArriba() { this.pos = new Punto(3, 4); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); movil.Movimiento.Direccion = Tablero.ARRIBA; Assert.IsFalse(unMapa.PermitidoAvanzar(movil)); //Assert.IsFalse(unMapa.PermitidoMoverHaciaArribaA(movil)); }
public void PosicionDeAbajoTienePasilloBombitaPuedeMoverseHaciaAbajo() { //ver mapa en el FixtureSetup this.pos = new Punto(2, 3); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); //Assert.IsTrue(unMapa.PermitidoMoverHaciaAbajoA(movil)); movil.Movimiento.Direccion = Tablero.ABAJO; Assert.IsTrue(unMapa.PermitidoAvanzar(movil)); }
public void PosicionDeAbajoEsUnObstaculoUnoDeLosLopezReggaeAladoPuedeMoverseHaciaAbajo() { //ver mapa en el FixtureSetup this.pos = new Punto(1, 2); movil = new LosLopezReggaeAlado(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); movil.Movimiento.Direccion = Tablero.ABAJO; Assert.IsTrue(unMapa.PermitidoAvanzar(movil)); //Assert.IsTrue(unMapa.PermitidoMoverHaciaAbajoA(movil)); }
public bool PermiteTransitarUn(IMovible movil) { return this.Estado.TransitablePor(movil); }
public bool TransitaEnCasillaUn(IMovible movil) { foreach (IMovible i in transitandoEnCasilla) { if (i.Nombre == movil.Nombre) return true; } return false; }
public void PosicionDeLaIzquierdaEsUnObstaculoUnoDeLosLopezReggaeAladoPuedeMoverseHaciaLaIzquierda() { //ver mapa en el FixtureSetup this.pos = new Punto(2, 3); movil = new LosLopezReggaeAlado(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); movil.Movimiento.Direccion = Tablero.IZQUIERDA; Assert.IsTrue(unMapa.PermitidoAvanzar(movil)); //Assert.IsTrue(unMapa.PermitidoMoverHaciaIzquierdaA(movil)); }
public void Dejar(IMovible movil) { this.transitandoEnCasilla.Remove(movil); }
public void PosicionDeLaIzquierdaNoExisteBombitaNoPuedeMoverseHaciaLaIzquierda() { this.pos = new Punto(0, 4); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); movil.Movimiento.Direccion = Tablero.IZQUIERDA; Assert.IsFalse(unMapa.PermitidoAvanzar(movil)); //Assert.IsFalse(unMapa.PermitidoMoverHaciaIzquierdaA(movil)); }
public void ObjetoContundenteDestruido(IMovible obj) { this.objetosContundentes.Remove(obj); }
public void PosicionDeLaIzquierdaTienePasilloBombitaPuedeMoverseHaciaLaIzquierda() { //ver mapa en el FixtureSetup this.pos = new Punto(3, 0); movil = new Bombita(this.pos); this.unaCasilla = unMapa.ObtenerCasilla(this.pos); this.unaCasilla.Transitar(movil); // Assert.IsTrue(unMapa.PermitidoMoverHaciaIzquierdaA(movil)); movil.Movimiento.Direccion = Tablero.IZQUIERDA; Assert.IsTrue(unMapa.PermitidoAvanzar(movil)); }