/** * Método que define el comportamiento de la entidad stormtrooper. Es obligatorio para toda * entidad animada. Calculará la ruta más cercana a la fuerza y se moverá hacia ella. En caso de * pasar caer en la misma celda que otro soldado, se quedará inmóvil si ésta está apagada, y se * moverá aleatoriamente a una celda adyacente, si está ardiendo. */ public void actuar() { Orientacion o = super.calcularRuta(); super.mover(o); if (this.getCelda() instanceof Explosion) { boolean ardiendo = ((Explosion) this.getCelda()).isArdiendo(); for (Entidad e : this.getCelda().getEntidades()) { if (e instanceof StormTrooper && e != this) { if (ardiendo) { Random r = new Random(); Celda c = getCelda().getCeldasVecinas().get(r.nextInt(4)); mover(c.getPosicion().adyacencia(c.getPosicion())); } else { super.mover(null); } } } } }
@Override protected void onManagedUpdate(float pSecondsElapsed) { super.onManagedUpdate(pSecondsElapsed); if (!juegoCorriendo) { return; } // Acumular tiempo tiempoEnemigos += pSecondsElapsed; if (tiempoEnemigos > LIMITE_TIEMPO) { // Se cumplió el tiempo tiempoEnemigos = 0; if (LIMITE_TIEMPO > 0.5f) { LIMITE_TIEMPO -= 0.15f; } Sprite spriteEnemigo = cargarSprite( ControlJuego.ANCHO_CAMARA + regionEnemigo.getWidth(), (float) (Math.random() * ControlJuego.ALTO_CAMARA - regionEnemigo.getHeight()) + regionEnemigo.getHeight(), regionEnemigo); Enemigo nuevoEnemigo = new Enemigo(spriteEnemigo); listaEnemigos.add(nuevoEnemigo); attachChild(nuevoEnemigo.getSprite()); Log.i("Tamaño", "Datos: " + listaEnemigos.size()); } // Actualizar cada uno de los listaEnemigos y ver si alguno ya salió de la pantalla for (int i = listaEnemigos.size() - 1; i >= 0; i--) { Enemigo enemigo = listaEnemigos.get(i); enemigo.mover(-10, 0); if (enemigo.getSprite().getX() < -enemigo.getSprite().getWidth()) { detachChild(enemigo.getSprite()); listaEnemigos.remove(enemigo); } // Revisa si choca el personaje con el enemigo if (spritePersonaje.collidesWith(enemigo.getSprite())) { detachChild(enemigo.getSprite()); listaEnemigos.remove(enemigo); energia -= 10; Log.i("ENERGIA", "Energia: " + energia); if (energia <= 0) { juegoCorriendo = false; // Agrega pantalla de fin Sprite spriteFin = new Sprite( ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2, regionFin, actividadJuego.getVertexBufferObjectManager()) { @Override public boolean onAreaTouched( TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) { if (pSceneTouchEvent.isActionUp()) { onBackKeyPressed(); } return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY); } }; registerTouchArea(spriteFin); attachChild(spriteFin); } } } }