From 40d46bdc603a3b87a858638acc5191d9be8a5043 Mon Sep 17 00:00:00 2001 From: Nahuel Marek Date: Fri, 29 Nov 2024 02:32:53 -0300 Subject: [PATCH] ahora los slimes tienen animaciones --- administradorDeEnemigos.wlk | 3 +++ administradorDeJuego.wlk | 14 +++++--------- slime.wlk | 38 ++++++++++++++++++++++++------------- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/administradorDeEnemigos.wlk b/administradorDeEnemigos.wlk index e4d3900..1631d5b 100644 --- a/administradorDeEnemigos.wlk +++ b/administradorDeEnemigos.wlk @@ -66,4 +66,7 @@ object administradorDeEnemigos { method moverEnemigos() { enemigos.forEach({ enemigo => enemigo.movete() }) } + method cambiarFrame(){ + enemigos.forEach({ enemigo => enemigo.cambiarFrame()}) + } } diff --git a/administradorDeJuego.wlk b/administradorDeJuego.wlk index 3b28f7c..8e6f36e 100644 --- a/administradorDeJuego.wlk +++ b/administradorDeJuego.wlk @@ -177,14 +177,7 @@ object configuracion { const tickParaDisparar= game.tick(tiempoDisparo, { administradorDeMagos.disparar()},false) const tickParaMoverYColisionarDisparos= game.tick(tiemposProyectiles, { administradorDeProyectiles.moverProyectiles() administradorDeProyectiles.impactarProyectiles() },false) const tickParaCambiarFrames= game.tick((tiemposProyectiles/3)-5, {administradorDeProyectiles.cambiarFrame()},false) - //game.onTick(tiempoMuerte, "matar enemigos", { administradorDeEnemigos.estanMuertos() }) - //game.onTick(tiempoMuerte, "matar magos", { administradorDeMagos.matarMagos() }) - - /* game.onTick(tiemposProyectiles, "impactarDisparos", { - administradorDeProyectiles.impactarProyectiles() - administradorDeProyectiles.combinarProyectiles() - }) */ - + const tickParaCambiarFramesEnemigos= game.tick((tiempoMoverEnemigo/3)-5, {administradorDeEnemigos.cambiarFrame()},false) var property sonido = "pvz8bit.mp3" @@ -192,7 +185,7 @@ object configuracion { method iniciarMusica() {sonidoPartida.iniciarMusica()} // Método para detener la música de fondo method detenerMusica() { - sonidoPartida.detenerMusica() + try sonidoPartida.detenerMusica() catch e return } method iniciarConfig(){ @@ -264,6 +257,7 @@ object configuracion { tickParaDisparar.start() tickParaMoverYColisionarDisparos.start() tickParaMoverEnemigos.start() + tickParaCambiarFramesEnemigos.start() } method frenarTicks() { tickParaAumentarDinero.stop() @@ -271,6 +265,7 @@ object configuracion { tickParaDisparar.stop() tickParaMoverYColisionarDisparos.stop() tickParaMoverEnemigos.stop() + tickParaCambiarFramesEnemigos.stop() } method resetTicks(){ tickParaAumentarDinero.reset() @@ -278,6 +273,7 @@ object configuracion { tickParaDisparar.reset() tickParaMoverYColisionarDisparos.reset() tickParaMoverEnemigos.reset() + tickParaCambiarFramesEnemigos.reset() } // Método para iniciar la música de fondo en bucle diff --git a/slime.wlk b/slime.wlk index 668bd34..340d8dd 100644 --- a/slime.wlk +++ b/slime.wlk @@ -16,15 +16,23 @@ class Slime { var property enMovimiento = true // Indica si el slime puede moverse var property vida = tipo.vida() const property danio = tipo.danio() - + var imagen = tipo.imagenesNormales().get(0) + var frame=0 + + method cambiarFrame() { + imagen = tipo.imagenesNormales().get(frame) + if(frame<2) {frame+=1} + } // Métodos de visualización y estado method frenarEnemigo() = true method position() = position - method image() = tipo.imagen() + method image() = imagen method sePuedeSuperponer() = false // Movimiento del Slime - method movete() {tipo.moverse().apply(self)} + method movete() {imagen=tipo.imagenesNormales().get(0) + frame=1 + tipo.moverse().apply(self)} // Lógica para frenar el movimiento method meFreno() {tipo.meFreno().apply(self)} @@ -34,6 +42,7 @@ class Slime { method recibeDanioMago(_danio){} method recibeDanioEnemigo(_danio) { + imagen=tipo.imagenesRecibeDanio().get(frame) self.vida(self.vida() - _danio) tipo.accionAlRecibirDanio().apply(self) return true @@ -54,6 +63,8 @@ class Slime { administradorDeEnemigos.eliminarEnemigo(self) } method tipoProyectil()=false + + } // =============================== // Tipos de Slime: Variantes @@ -63,8 +74,9 @@ class Tipo{ const property danio const property vida method desplazamiento() = 1 - const imagen="s.slimeBase.png" - method imagen() {return imagen} + const property imagenesNormales + const property imagenesRecibeDanio + const property imagen method moverse()={slime=> slime.estaMuerto() if (slime.enMovimiento()) slime.position().goLeft(slime.tipo().desplazamiento()) @@ -95,20 +107,20 @@ class Tipo{ method accionAlRecibirDanio() ={slime => return } } - object slimeBasico inherits Tipo(danio= 25, vida=100, imagen="s.slimeBase.png") { + object slimeBasico inherits Tipo(danio= 25, vida=100, imagen="s.slimeBase_01.png", imagenesNormales=["s.slimeBase_01.png","s.slimeBase_02.png","s.slimeBase_03.png"],imagenesRecibeDanio=["s.slimeBaseDanio_01.png","s.slimeBaseDanio_02.png","s.slimeBaseDanio_03.png"]) { } - object slimeGuerrero inherits Tipo(danio= 25, vida=200, imagen="s.slimeGuerrero.png"){ + object slimeGuerrero inherits Tipo(danio= 25, vida=200, imagen="s.slimeGuerrero_01.png",imagenesNormales=["s.slimeGuerrero_01.png","s.slimeGuerrero_02.png","s.slimeGuerrero_03.png"],imagenesRecibeDanio=["s.slimeGuerreroDanio_01.png","s.slimeGuerreroDanio_02.png","s.slimeGuerreroDanio_03.png"]){ } - object slimeNinja inherits Tipo(danio= 200, vida=120, imagen="s.slimeNinja.png") { + object slimeNinja inherits Tipo(danio= 200, vida=120, imagen="s.slimeNinja_01.png",imagenesNormales=["s.slimeNinja_01.png","s.slimeNinja_02.png","s.slimeNinja_03.png"],imagenesRecibeDanio=["s.slimeNinjaDanio_01.png","s.slimeNinjaDanio_02.png","s.slimeNinjaDanio_03.png"]) { override method desplazamiento() = 2 } - object slimeBlessed inherits Tipo(danio= 200, vida=300, imagen="s.slimeBlessed.png"){ + object slimeBlessed inherits Tipo(danio= 200, vida=300, imagen="s.slimeBlessed_01.png",imagenesNormales=["s.slimeBlessed_01.png","s.slimeBlessed_02.png","s.slimeBlessed_03.png"],imagenesRecibeDanio=["s.slimeBlessedDanio_01.png","s.slimeBlessedDanio_02.png","s.slimeBlessedDanio_03.png"]){ } -object slimeLadron inherits Tipo(danio= 25, vida=160, imagen="s.slimeLadron.png") { +object slimeLadron inherits Tipo(danio= 25, vida=160, imagen="s.slimeLadron_01.png",imagenesNormales=["s.slimeLadron_01.png","s.slimeLadron_02.png","s.slimeLadron_03.png"],imagenesRecibeDanio=["s.slimeLadronDanio_01.png","s.slimeLadronDanio_02.png","s.slimeLadronDanio_03.png"]) { override method meFreno()={slime=> const posicionEnFrente = new MutablePosition(x = slime.position().x() - 1, y = slime.position().y()) @@ -124,7 +136,7 @@ object slimeLadron inherits Tipo(danio= 25, vida=160, imagen="s.slimeLadron.png" } -object slimeDorado inherits Tipo(danio=0, vida=175, imagen="s.slimeDorado.png"){ +object slimeDorado inherits Tipo(danio=0, vida=175, imagen="s.slimeDorado_01.png",imagenesNormales=["s.slimeDorado_01.png","s.slimeDorado_02.png","s.slimeDorado_03.png"],imagenesRecibeDanio=["s.slimeDoradoDanio_01.png","s.slimeDoradoDanio_02.png","s.slimeDoradoDanio_03.png"]){ override method desplazamiento() = 2 override method meFreno()={slime=>slime.enMovimiento(true)} override method estaMuerto()={slime=> @@ -136,7 +148,7 @@ object slimeDorado inherits Tipo(danio=0, vida=175, imagen="s.slimeDorado.png"){ return slime.sinVida() || slime.llegoACasa() } } -object slimeDeMedioOriente inherits Tipo(danio=250, vida=180, imagen="s.slimeMedioOriente.png"){ +object slimeDeMedioOriente inherits Tipo(danio=250, vida=180, imagen="s.slimeMedioOriente_01.png",imagenesNormales=["s.slimeMedioOriente_01.png","s.slimeMedioOriente_02.png","s.slimeMedioOriente_03.png"],imagenesRecibeDanio=["s.slimeMedioOrienteDanio_01.png","s.slimeMedioOrienteDanio_02.png","s.slimeMedioOrienteDanio_03.png"]){ override method meFreno()={slime=> const posicionEnFrente = new MutablePosition(x = slime.position().x(), y = slime.position().y()) @@ -155,7 +167,7 @@ object slimeDeMedioOriente inherits Tipo(danio=250, vida=180, imagen="s.slimeMed } -object slimeAgil inherits Tipo(danio=50, vida=450, imagen="s.slimeAgil.png"){ +object slimeAgil inherits Tipo(danio=50, vida=450, imagen="s.slimeAgil_01.png",imagenesNormales=["s.slimeAgil_01.png","s.slimeAgil_02.png","s.slimeAgil_03.png"],imagenesRecibeDanio=["s.slimeAgilDanio_01.png","s.slimeAgilDanio_02.png","s.slimeAgilDanio_03.png"]){ override method accionAlRecibirDanio() = {slime=> if(slime.vida()<=self.vida()*0.5){