From 0a001449b89f87d7c68dd75d5f86658df0ddc49f Mon Sep 17 00:00:00 2001 From: juanFds Date: Sat, 23 Nov 2019 16:28:36 -0300 Subject: [PATCH] Refactorizada creacion del menu --- src/pepita/tactics/game/Menu.wlk | 5 +++ src/pepita/tactics/game/MenuItem.wlk | 2 ++ src/pepita/tactics/game/ModoLibre.wlk | 14 +------- src/pepita/tactics/game/ModoMenu.wlk | 40 ++++++++++++++-------- src/pepita/tactics/game/ModoMovimiento.wlk | 17 ++------- 5 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/pepita/tactics/game/Menu.wlk b/src/pepita/tactics/game/Menu.wlk index ee3af86..f4ab6c1 100644 --- a/src/pepita/tactics/game/Menu.wlk +++ b/src/pepita/tactics/game/Menu.wlk @@ -30,6 +30,11 @@ class Menu { items.add(nuevoItem) selectorMenu.reset() } + + method removerAccionConDisplay(display) { + items.removeAllSuchThat { item => item.tieneDisplay(display) } + selectorMenu.reset() + } method remove() { items.forEach{ item => item.remove()} diff --git a/src/pepita/tactics/game/MenuItem.wlk b/src/pepita/tactics/game/MenuItem.wlk index 9cf2aa2..ca3981c 100644 --- a/src/pepita/tactics/game/MenuItem.wlk +++ b/src/pepita/tactics/game/MenuItem.wlk @@ -16,6 +16,8 @@ class MenuItem { method accionPrincipal() { accionPrincipal.apply() } + + method tieneDisplay(unDisplay) = display == unDisplay } class MenuItemDisplay { diff --git a/src/pepita/tactics/game/ModoLibre.wlk b/src/pepita/tactics/game/ModoLibre.wlk index 4b22bbe..fef08b4 100644 --- a/src/pepita/tactics/game/ModoLibre.wlk +++ b/src/pepita/tactics/game/ModoLibre.wlk @@ -14,19 +14,7 @@ class ModoLibre inherits Modo { selector.conUnidadSeleccionada{ unidad => unidad.validarQueEsTuTurno() - const modoMenuDeHeroe = new ModoMenu(position = unidad.position(), modoAnterior=self) - - const modoMenuDeHabilidades = new ModoMenu(position = unidad.position(), modoAnterior=modoMenuDeHeroe) - unidad.habilidades().forEach { habilidad => - const nuevoModoDeAtaque = new ModoAtaque(modoAnterior=modoMenuDeHabilidades, personaje=unidad, habilidad=habilidad) - modoMenuDeHabilidades.agregarCambioDeModo(habilidad.menuItemDisplay(), { nuevoModoDeAtaque }) - } - - modoMenuDeHeroe.agregarCambioDeModo(menuItemDisplays.moverse(), { new ModoMovimiento(personaje=unidad, desdeDonde=unidad.position()) }) - modoMenuDeHeroe.agregarCambioDeModo(menuItemDisplays.atacar(), { modoMenuDeHabilidades }) - modoMenuDeHeroe.agregarCambioDeModo(menuItemDisplays.cancelar(), { new ModoLibre() }) - - juego.cambiarModo(modoMenuDeHeroe) + juego.cambiarModo(modoMenuDeHeroe.crear(unidad, self)) } } diff --git a/src/pepita/tactics/game/ModoMenu.wlk b/src/pepita/tactics/game/ModoMenu.wlk index f8d677a..6e96039 100644 --- a/src/pepita/tactics/game/ModoMenu.wlk +++ b/src/pepita/tactics/game/ModoMenu.wlk @@ -6,8 +6,29 @@ import pepita.tactics.game.MenuItem.* import pepita.tactics.game.menuItemDisplays.* import pepita.tactics.model.selector.* import pepita.tactics.game.ModoAtaque.* +import pepita.tactics.game.ModoMovimiento.* +import pepita.tactics.game.ModoLibre.* +object modoMenuDeHeroe { + method crear(heroe, modoAnterior) { + const modoMenuDeHeroe = new ModoMenu(position = heroe.position(), modoAnterior=modoAnterior) + + const modoMenuDeHabilidades = new ModoMenu(position = heroe.position(), modoAnterior=modoMenuDeHeroe) + heroe.habilidades().forEach { habilidad => + const nuevoModoDeAtaque = new ModoAtaque(modoAnterior=modoMenuDeHabilidades, personaje=heroe, habilidad=habilidad) + modoMenuDeHabilidades.agregarCambioDeModo(habilidad.menuItemDisplay(), { nuevoModoDeAtaque }) + } + + modoMenuDeHeroe.agregarCambioDeModo(menuItemDisplays.moverse(), { new ModoMovimiento(personaje=heroe, desdeDonde=heroe.position()) }) + modoMenuDeHeroe.agregarCambioDeModo(menuItemDisplays.atacar(), { modoMenuDeHabilidades }) + modoMenuDeHeroe.agregarCambioDeModo(menuItemDisplays.cancelar(), { new ModoLibre() }) + modoMenuDeHeroe.agregarAccion(menuItemDisplays.pasar(), { juego.avanzarTurno() }) + + return modoMenuDeHeroe + } +} + class ModoMenu inherits Modo { var property menu = new Menu(items = []) const modoAnterior @@ -49,20 +70,9 @@ class ModoMenu inherits Modo { method agregarCambioDeModo(display, obtenerNuevoModo) { menu.agregarAccion(display, { juego.cambiarModo(obtenerNuevoModo.apply()) }) } + + method removerAccionConDisplay(display) { + menu.removerAccionConDisplay(display) + } } -//object modoMenuDeHabilidades { -// method crear(position, modoAnterior, unidad) { -// const nuevoModoMenu = new ModoMenu(modoAnterior=modoAnterior, position=position) -// unidad.habilidades().forEach { habilidad => -// const nuevoModoDeAtaque = new ModoAtaque(modoAnterior=nuevoModoMenu, personaje=unidad, habilidad=habilidad) -// nuevoModoMenu.agregarCambioDeModo(habilidad.menuItemDisplay(), { nuevoModoDeAtaque }) -// new MenuItem(display = habilidad.menuItemDisplay(), -// accionPrincipal = { juego.cambiarModo(new ModoAtaque(modoAnterior=self, personaje=unidad, habilidad=habilidad)) } -// ) -// } -// const nuevoMenu = new Menu(items=menuitemsDeAtaques) -// nuevoModoMenu.menu(nuevoMenu) -// return nuevoModoMenu -// } -//} diff --git a/src/pepita/tactics/game/ModoMovimiento.wlk b/src/pepita/tactics/game/ModoMovimiento.wlk index 6e94fd0..14d235e 100644 --- a/src/pepita/tactics/game/ModoMovimiento.wlk +++ b/src/pepita/tactics/game/ModoMovimiento.wlk @@ -25,22 +25,9 @@ class ModoMovimiento inherits Modo { override method accionPrincipal() { if(self.posicionesAlcanzables().contains(self.posicionObjetivo())) { juego.mover(personaje, self.posicionObjetivo()) - - const terminarTurno = { - juego.avanzarTurno() - juego.cambiarModo(new ModoLibre()) - } - - const modoMenuTrasMoverse = new ModoMenu(position=personaje.position(), modoAnterior=self) - - const modoMenuDeHabilidades = new ModoMenu(position=personaje.position(), modoAnterior=modoMenuTrasMoverse) - personaje.habilidades().forEach { habilidad => - modoMenuDeHabilidades.agregarCambioDeModo(habilidad.menuItemDisplay(), { new ModoAtaque(modoAnterior=modoMenuDeHabilidades, personaje=personaje, habilidad=habilidad) }) - } - modoMenuTrasMoverse.agregarCambioDeModo(menuItemDisplays.atacar(), { modoMenuDeHabilidades }) - modoMenuTrasMoverse.agregarCambioDeModo(menuItemDisplays.cancelar(), { self }) - modoMenuTrasMoverse.agregarAccion(menuItemDisplays.pasar(), terminarTurno) + const modoMenuTrasMoverse = modoMenuDeHeroe.crear(personaje, self) + modoMenuTrasMoverse.removerAccionConDisplay(menuItemDisplays.moverse()) juego.cambiarModo(modoMenuTrasMoverse) } else {