package org.test.towerdefense; import loon.action.sprite.painting.DrawableGameComponent; import loon.action.sprite.painting.IGameComponent; import loon.geom.RectBox; import loon.utils.timer.GameTime; public class Wave extends DrawableGameComponent implements IGameComponent { private MainGame game; private int numberOfMonstersAdded; private int numMonsters; private float speed; private double spread; private int startHitPoints; private double timeUntilNextMonsterAdd; private int value; public Wave(MainGame game, int num_monsters, int startHitPoints, float speed, double spread, int value, MonsterType monsterType) { super(game); this.game = game; this.privateMonsters = new java.util.ArrayList<Monster>(10); this.numMonsters = num_monsters; this.startHitPoints = startHitPoints; this.speed = speed; this.spread = spread; this.value = value; this.setMonsterType(monsterType); this.setWaveState(WaveState.NotStarted); this.timeUntilNextMonsterAdd = 0.0; game.Components().add(this); } public final void AddMonster(Monster monster) { this.getMonsters().add(monster); } public final Monster GetSelectedMonster(RectBox touchRect) { for (Monster monster : this.getMonsters()) { if (monster.CentralCollisionArea().intersects(touchRect)) { return monster; } } return null; } public final void Remove() { this.RemoveAllMonsters(); } private void RemoveAllMonsters() { for (int i = 0; i < this.getMonsters().size(); i++) { this.getMonsters().get(i).Remove(); } } public final void RemoveMonster(Monster monster) { this.getMonsters().remove(monster); if ((this.getMonsters().size() == 0) && (this.numberOfMonstersAdded == this.numMonsters)) { this.game.getGameplayScreen().getWaveManager() .RemoveActiveWave(this); } } @Override public void update(GameTime gameTime) { if ((GameplayScreen.getGameState() == GameState.Started) && (this.getWaveState() == WaveState.Started)) { this.timeUntilNextMonsterAdd -= gameTime.getMilliseconds(); if ((this.timeUntilNextMonsterAdd < 0.0) && (this.numberOfMonstersAdded < this.numMonsters)) { Monster monster; switch (this.getMonsterType()) { case Peasant: monster = new MonsterPeasant(this.game, this, this.speed, this.startHitPoints, this.value); break; case Peon: monster = new MonsterPeon(this.game, this, this.speed, this.startHitPoints, this.value); break; case Berserker: monster = new MonsterBerserker(this.game, this, this.speed, this.startHitPoints, this.value); break; case Chicken: monster = new MonsterChicken(this.game, this, this.speed, this.startHitPoints, this.value); break; case Doctor: monster = new MonsterDoctor(this.game, this, this.speed, this.startHitPoints, this.value); break; case Chieftain: monster = new MonsterChieftain(this.game, this, this.speed, this.startHitPoints, this.value); break; default: monster = null; break; } this.AddMonster(monster); this.timeUntilNextMonsterAdd = this.spread; this.numberOfMonstersAdded++; } } super.update(gameTime); } private java.util.ArrayList<Monster> privateMonsters; public final java.util.ArrayList<Monster> getMonsters() { return privateMonsters; } public final void setMonsters(java.util.ArrayList<Monster> value) { privateMonsters = value; } private MonsterType privateMonsterType; public final MonsterType getMonsterType() { return privateMonsterType; } public final void setMonsterType(MonsterType value) { privateMonsterType = value; } private WaveState privateWaveState; public final WaveState getWaveState() { return privateWaveState; } public final void setWaveState(WaveState value) { privateWaveState = value; } }