From 1b262850c43dffa6dab526d11a8f5ccec4f42416 Mon Sep 17 00:00:00 2001 From: bcochon Date: Wed, 16 Oct 2024 21:05:45 -0300 Subject: [PATCH] Los proyectiles afectan a morcilla No pude testearlo --- entorno.wlk | 2 + morcilla.wlk | 150 ++++++++++++++++++++++++++++++--------------------- 2 files changed, 90 insertions(+), 62 deletions(-) diff --git a/entorno.wlk b/entorno.wlk index 44b9b35..38308df 100644 --- a/entorno.wlk +++ b/entorno.wlk @@ -19,6 +19,7 @@ class Proyectiles { const id method direccionIzquierda(velocidad) { + game.whenCollideDo(self, {=> morcilla.perderVida()}) game.addVisual(self) game.onTick(velocidad, "proyectilIzquierda" + id, {self.movimientoIzquierda(velocidad)}) } @@ -33,6 +34,7 @@ class Proyectiles { } method direccionDerecha(velocidad) { + game.whenCollideDo(self, {=> morcilla.perderVida()}) game.addVisual(self) game.onTick(velocidad, "proyectilDerecha" + id, {self.movimientoDerecha(velocidad)}) } diff --git a/morcilla.wlk b/morcilla.wlk index 8418da3..46adbc1 100644 --- a/morcilla.wlk +++ b/morcilla.wlk @@ -2,80 +2,106 @@ import wollok.game.* import general.* object morcilla { - var property position = new PositionMejorada(x=0, y=2) - var property vidas = 5 - var property puedeAtacar = false + var property position = new PositionMejorada(x=0, y=2) + method image() = "morcilla256.png" - var saltando = false - var suspendido = false - var caerActivo = false - var movimientoActivo = true + // ================================== MOVIMIENTO ================================== + var saltando = false + var suspendido = false + var caerActivo = false + var movimientoActivo = true - method image() = "morcilla256.png" - method saltando() = saltando + method saltando() = saltando - method caminarDerecha(pasos) { - if(movimientoActivo) - position.goRightMejorado(pasos, 30) + method caminarDerecha(pasos) { + if(movimientoActivo) + position.goRightMejorado(pasos, 30) - // FALTA EVALUAR SI QUEDA SUSPENDIDO - self.caer() - } + // FALTA EVALUAR SI QUEDA SUSPENDIDO + self.caer() + } + + method caminarIzquierda(pasos) { + if(movimientoActivo) + position.goLeftMejorado(pasos, 0) + + // FALTA EVALUAR SI QUEDA SUSPENDIDO + self.caer() + } + + method saltar(duracion) { + if (!suspendido && movimientoActivo) { + saltando = true + suspendido = true + const tiempo = duracion / 5 + + game.schedule(tiempo * 0, { position.goUp(1) }) + game.schedule(tiempo * 1, { position.goUp(1) }) + game.schedule(tiempo * 2, { position.goUp(1) }) + game.schedule(tiempo * 3, { position.goUp(1) }) + game.schedule(tiempo * 4, { position.goUp(1) }) - method caminarIzquierda(pasos) { - if(movimientoActivo) - position.goLeftMejorado(pasos, 0) + game.schedule(tiempo * 5, { saltando = false }) + game.schedule(tiempo * 5, { self.caer() }) + } + } - // FALTA EVALUAR SI QUEDA SUSPENDIDO - self.caer() - } - - method saltar(duracion) { - if (!suspendido && movimientoActivo) { - saltando = true - suspendido = true - const tiempo = duracion / 5 - - game.schedule(tiempo * 0, { position.goUp(1) }) - game.schedule(tiempo * 1, { position.goUp(1) }) - game.schedule(tiempo * 2, { position.goUp(1) }) - game.schedule(tiempo * 3, { position.goUp(1) }) - game.schedule(tiempo * 4, { position.goUp(1) }) - - game.schedule(tiempo * 5, { saltando = false }) - game.schedule(tiempo * 5, { self.caer() }) + method gravedad() { + if (position.y() > 2 && !saltando) { + // Está cayendo o saltando + position.goDown(1) + suspendido = true + } + else if (!saltando) { + // Ya cayó + game.removeTickEvent("gravedad") + suspendido = false + caerActivo = false + } + } + + method caer() { + if(!caerActivo && suspendido){ + game.onTick(100, "gravedad", {self.gravedad()}) + caerActivo = true + } } - } - - method gravedad() { - if (position.y() > 2 && !saltando) { - // Está cayendo o saltando - position.goDown(1) - suspendido = true + + // ================================== BATALLA ================================== + + var property vidas = 5 + var inmunidadActiva = false + var property puedeAtacar = false + + method perderVida() { + vidas = (vidas-1).max(0) + game.say(self, "Ay!") + + self.obtenerInmunidad(300) + + if(vidas < 1) + self.derrota() } - else if (!saltando) { - // Ya cayó - game.removeTickEvent("gravedad") - suspendido = false - caerActivo = false + + method obtenerInmunidad(duracion) { + inmunidadActiva = true + game.schedule(100, {inmunidadActiva = false}) } - } - method caer() { - if(!caerActivo && suspendido){ - game.onTick(100, "gravedad", {self.gravedad()}) - caerActivo = true + method derrota() { + game.say(self, "Ya perdí :(") } - } - method atacar() { - - } + method atacar() { + // Acá habría una animación, por ejemplo + } - method posicionDeAtaque() { - movimientoActivo = false - position = new PositionMejorada (x=17, y=2) - } + method posicionDeAtaque() { + movimientoActivo = false + position = new PositionMejorada (x=17, y=2) + } - method activarMovimiento() {movimientoActivo = true} + method activarMovimiento() { + movimientoActivo = true + } } \ No newline at end of file