From aa248d16433b91a4579fee39b2dafd48ed5ce304 Mon Sep 17 00:00:00 2001 From: Nahuel Marek Date: Mon, 2 Dec 2024 02:03:34 -0300 Subject: [PATCH] cambie como funcionan los proyectiles --- cursor.wlk | 7 ++++++- magos.wlk | 6 +++++- proyectil.wlk | 23 +++++++++-------------- slime.wlk | 8 +++++--- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/cursor.wlk b/cursor.wlk index 054d9e1..b253296 100644 --- a/cursor.wlk +++ b/cursor.wlk @@ -35,8 +35,13 @@ object cursor { // Interacciones con enemigos method frenarEnemigo() = false method recibeDanioMago(_danio,enemigo) { return false } - method recibeDanioMago(_danio) { return false } + method recibeDanioEnemigo(_danio,proyectil){} method combinarProyectil(_tipo){return false} method matarSlime(){return false} method tipoProyectil()=false + method cambiarAccion(accionNueva){} + method tipo()=descartable +} +object descartable{ + method esperar(){} } \ No newline at end of file diff --git a/magos.wlk b/magos.wlk index d690824..ed3fd9a 100644 --- a/magos.wlk +++ b/magos.wlk @@ -26,7 +26,7 @@ class Mago { method disparar() {} - method recibeDanioEnemigo(_danio) { return false } + method recibeDanioEnemigo(_danio,proyectil) { return false } method combinarProyectil(_tipo){return false} @@ -56,8 +56,12 @@ class Mago { } method matarSlime(){} + method cambiarAccion(accionNueva){} + method tipo()=descartable } + + class MagoQueDispara inherits Mago{ const proyectilBase var property tipoProyectil=proyectilBase diff --git a/proyectil.wlk b/proyectil.wlk index b0cf9bd..e680fdd 100644 --- a/proyectil.wlk +++ b/proyectil.wlk @@ -57,7 +57,7 @@ class Proyectil { } // Métodos para recibir daño - method recibeDanioEnemigo(_danio) {return false} + method recibeDanioEnemigo(_danio,proyectil){} method recibeDanioMago(_danio,enemigo) {tipoProyectil.recibeDanioMago(_danio, enemigo)} // Método para destruir el proyectil @@ -78,8 +78,13 @@ class Proyectil { if(frame<2) {frame+=1} } method matarSlime(){} -} + method cambiarAccion(accionNueva){} + method tipo()=descartable +} +object descartable{ + method esperar(){} +} // =============================== // Proyectil Normal: Implementación específica de un proyectil normal @@ -97,14 +102,8 @@ object proyectilNormal { method condicionParaCombinarse(otroTipo) = otroTipo.puedeCombinarseConNormal() method colisionar() ={proyectil=> const posicionEnFrente = new MutablePosition(x = proyectil.position().x() + 1, y = proyectil.position().y()) - const objetosEnPosicion = game.getObjectsIn(proyectil.position()) + game.getObjectsIn(posicionEnFrente) - - const hayColision = objetosEnPosicion.any({objeto => try objeto.recibeDanioEnemigo(proyectil.danio()) catch e false}) - - if (hayColision) { - proyectil.destruirse() - } + objetosEnPosicion.forEach({objeto =>objeto.recibeDanioEnemigo(proyectil.danio(),proyectil)}) } method recibeDanioMago(danio,enemigo) ={enemigo=>} } @@ -155,12 +154,8 @@ object proyectilDeStop{ method condicionParaCombinarse(otroTipo)=false method colisionar() ={proyectil=> const posicionEnFrente = new MutablePosition(x = proyectil.position().x() + 1, y = proyectil.position().y()) - const objetosEnPosicion = game.getObjectsIn(proyectil.position()) + game.getObjectsIn(posicionEnFrente) - const hayColision = objetosEnPosicion.any({objeto => objeto.recibeDanioEnemigo(proyectil.danio()) && objeto.meFreno(false)}) - if (hayColision) { - proyectil.destruirse() - } + objetosEnPosicion.forEach({objeto => objeto.recibeDanioEnemigo(proyectil.danio(),proyectil) objeto.cambiarAccion(objeto.tipo().esperar())}) } method recibeDanioMago(_danio,enemigo)={ enemigo=> enemigo.cambiarAccion(enemigo.tipo().esperar()) diff --git a/slime.wlk b/slime.wlk index a150bdb..7b80566 100644 --- a/slime.wlk +++ b/slime.wlk @@ -34,6 +34,7 @@ class Slime { } // Movimiento del Slime method movete() {imagen=tipo.imagenesNormales().get(0) + self.estaMuerto() frame=1 accion.apply(self)} // Lógica para frenar el movimiento @@ -48,10 +49,11 @@ class Slime { // Métodos para recibir daño method recibeDanioMago(_danio,enemigo){enemigo.cambiarAccion(enemigo.tipo().esperar()) return false} - method recibeDanioEnemigo(_danio) { + method recibeDanioEnemigo(_danio,proyectil) { imagen=tipo.imagenesRecibeDanio().get(frame) self.vida(self.vida() - _danio) tipo.accionAlRecibirDanio().apply(self) + proyectil.destruirse() return true } @@ -89,7 +91,7 @@ class Tipo{ const objetoEnCeldaSiguiente2 = game.getObjectsIn(posicionEnFrente) if(!objetoEnCeldaSiguiente2.any({objeto=>objeto.frenarEnemigo()})) slime.cambiarAccion(self.moverse()) } - method moverse()={slime => slime.estaMuerto() + method moverse()={slime => slime.position().goLeft(slime.tipo().desplazamiento()) slime.meFreno() } @@ -152,7 +154,7 @@ object slimeDorado inherits Tipo(danio=0, vida=175, imagen="s.slimeDorado_01.png override method desplazamiento() = 2 /* override method meFreno()={slime=>slime.enMovimiento(true)} */ override method moverse()={ - slime => slime.estaMuerto() + slime => slime.position().goLeft(slime.tipo().desplazamiento()) } override method estaMuerto()={slime=>