diff --git a/entorno.wlk b/entorno.wlk index 38308df..20fdd65 100644 --- a/entorno.wlk +++ b/entorno.wlk @@ -19,7 +19,7 @@ class Proyectiles { const id method direccionIzquierda(velocidad) { - game.whenCollideDo(self, {=> morcilla.perderVida()}) + game.onCollideDo(self, {elemento => elemento.perderVida()}) game.addVisual(self) game.onTick(velocidad, "proyectilIzquierda" + id, {self.movimientoIzquierda(velocidad)}) } @@ -34,7 +34,7 @@ class Proyectiles { } method direccionDerecha(velocidad) { - game.whenCollideDo(self, {=> morcilla.perderVida()}) + game.onCollideDo(self, {elemento => elemento.perderVida()}) game.addVisual(self) game.onTick(velocidad, "proyectilDerecha" + id, {self.movimientoDerecha(velocidad)}) } @@ -47,6 +47,38 @@ class Proyectiles { game.removeTickEvent("proyectilDerecha" + id) } } + + method direccionDiagonalAbajoDerecha(velocidad) { + game.onCollideDo(self, {elemento => elemento.perderVida()}) + game.addVisual(self) + game.onTick(velocidad, "proyectilDiagonalAbajoDerecha" + id, {self.movimientoDiagonalAbajoDerecha(velocidad)}) + } + + method movimientoDiagonalAbajoDerecha(velocidad) { + position.goRightMejorado(1, 30) + position.goDownMejorado(1, 40) + if(position.x() == 30) + { + game.removeVisual(self) + game.removeTickEvent("proyectilDiagonalAbajoDerecha" + id) + } + } + + method direccionDiagonalAbajoIzquierda(velocidad) { + game.onCollideDo(self, {elemento => elemento.perderVida()}) + game.addVisual(self) + game.onTick(velocidad, "proyectilDiagonalAbajoDerecha" + id, {self.movimientoDiagonalAbajoIzquierda(velocidad)}) + } + + method movimientoDiagonalAbajoIzquierda(velocidad) { + position.goLeftMejorado(1, 30) + position.goDownMejorado(1, 40) + if(position.x() == 30) + { + game.removeVisual(self) + game.removeTickEvent("proyectilDiagonalAbajoIzquierda" + id) + } + } } @@ -57,6 +89,8 @@ class Visual { const property image } +const derrota = new Visual (position = game.origin(), image = "celda_gris.png") + const cartelAtaque = new Visual (position = new Position(x=17, y=20), image = "proto_cartel_ataque.png") @@ -68,6 +102,7 @@ class BossFight { game.boardGround("arena_de_jefe.png") entorno.limpiarEntorno() game.addVisual(morcilla) + morcilla.enBatalla(true) jefe.posicionBatalla() game.addVisual(jefe) @@ -102,7 +137,11 @@ class BossFight { } method finalizarBatalla() { - + game.boardGround("stock_fondo.png") + entorno.limpiarEntorno() + game.addVisual(morcilla) + morcilla.enBatalla(false) + morcilla.activarMovimiento() // habría que también tener seteado los lugares de el resto de npc en la zona } } @@ -164,4 +203,4 @@ class ProyectilJefe1 inherits Proyectiles { method image() = "ataque_prueba.png" } -const jefeDePrueba = new JefeDePrueba (position = new PositionMejorada(x=30, y=2), image = "celda_roja.png") \ No newline at end of file +const jefeDePrueba = new JefeDePrueba (position = new PositionMejorada(x=10, y=2), image = "celda_roja.png") \ No newline at end of file diff --git a/main.wpgm b/main.wpgm index 1f724b8..0aa39f2 100644 --- a/main.wpgm +++ b/main.wpgm @@ -19,9 +19,7 @@ program MorcillaGame { keyboard.a().onPressDo({ morcilla.caminarIzquierda(1) }) keyboard.space().onPressDo({ morcilla.saltar(1000) }) - keyboard.j().onPressDo({ bossFightDePrueba.iniciarPelea() }) - - game.whenCollideDo(morcilla, {jefe => game.say(jefeDePrueba, "Estas colisionando")}) + game.onCollideDo(jefeDePrueba, {personaje => personaje.iniciarPeleaMorcilla()}) game.start() } diff --git a/morcilla.wlk b/morcilla.wlk index fcef5db..1bfce09 100644 --- a/morcilla.wlk +++ b/morcilla.wlk @@ -1,5 +1,6 @@ import wollok.game.* import general.* +import entorno.* object morcilla { var property position = new PositionMejorada(x=0, y=2) @@ -74,25 +75,39 @@ object morcilla { var inmunidadActiva = false var property puedeAtacar = false var derrotado = false + var enBatalla = false + + method enBatalla(estado){ + enBatalla = estado + } + + method iniciarPeleaMorcilla(){ + if(!enBatalla){ // Un pequeño problema es que una vez que se activa el method podés activar la pelea en cualquier momento + game.say(self, "Pulsa J para iniciar battalla") + keyboard.j().onPressDo({ bossFightDePrueba.iniciarPelea() }) + } + } method perderVida() { - vidas = (vidas-1).max(0) - game.say(self, "Ay!") + if (!inmunidadActiva){ + vidas = (vidas-1).max(0) + game.say(self, "Ay!") - self.obtenerInmunidad(300) + self.obtenerInmunidad(300) - if(vidas < 1) - self.derrota() + if(vidas < 1) + self.derrota() + } } method obtenerInmunidad(duracion) { inmunidadActiva = true - game.schedule(100, {inmunidadActiva = false}) + game.schedule(duracion, {inmunidadActiva = false}) } method derrota() { derrotado = true - game.say(self, "Ya perdí :(") + game.addVisual(derrota) } method derrotado() = derrotado @@ -103,7 +118,7 @@ object morcilla { method posicionDeAtaque() { movimientoActivo = false - position = new PositionMejorada (x=17, y=2) + position = new PositionMejorada (x=15, y=2) } method activarMovimiento() {