Make things less debug-y, introduce the start of scripted waves, UX improvements
This commit is contained in:
@@ -17,15 +17,6 @@ public class LinearGame implements Game {
|
||||
m_zombiesPerBatch = zombiesPerBatch;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int totalMobCount() {
|
||||
int ret = 0;
|
||||
for(int i = 1; i <= m_batches; i++) {
|
||||
ret += i * m_zombiesPerBatch;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int batchCount() {
|
||||
return m_batches;
|
||||
|
||||
79
src/main/java/gg/malloc/defense/games/ScaledWaves.java
Normal file
79
src/main/java/gg/malloc/defense/games/ScaledWaves.java
Normal file
@@ -0,0 +1,79 @@
|
||||
package gg.malloc.defense.games;
|
||||
|
||||
import gg.malloc.defense.model.Wave;
|
||||
import gg.malloc.defense.model.Game;
|
||||
import gg.malloc.defense.model.Spawner;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
public class ScaledWaves implements Game {
|
||||
@Override
|
||||
public int getWaveCount() {
|
||||
return 10;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Wave getWave(int waveNumber) {
|
||||
HashMap<EntityType, Double> weights = new HashMap<>();
|
||||
if (waveNumber <= 3) {
|
||||
weights.put(EntityType.ZOMBIE, 1.0);
|
||||
} else if (waveNumber <= 5) {
|
||||
weights.put(EntityType.ZOMBIE, 0.6);
|
||||
weights.put(EntityType.SPIDER, 0.1);
|
||||
weights.put(EntityType.SKELETON, 0.3);
|
||||
} else if (waveNumber <= 7) {
|
||||
weights.put(EntityType.ZOMBIE, 0.7);
|
||||
weights.put(EntityType.SKELETON, 0.3);
|
||||
} else {
|
||||
weights.put(EntityType.PILLAGER, 0.2);
|
||||
weights.put(EntityType.ZOMBIE, 0.8);
|
||||
}
|
||||
boolean hasRavager = waveNumber >= 9;
|
||||
return new MobWave(weights, waveNumber * 3, 3, hasRavager);
|
||||
}
|
||||
|
||||
private class MobWave implements Wave {
|
||||
HashMap<EntityType, Double> m_spawnWeights;
|
||||
int m_batches;
|
||||
int m_mobsPerBatch;
|
||||
boolean m_hasRavager;
|
||||
|
||||
MobWave(HashMap<EntityType, Double> weights, int totalCount, int batches, boolean hasRavager) {
|
||||
m_batches = batches;
|
||||
m_mobsPerBatch = Math.max(1, totalCount / batches);
|
||||
m_spawnWeights = weights;
|
||||
m_hasRavager = hasRavager;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int batchCount() {
|
||||
return m_batches;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void spawnBatch(Spawner spawner, int batch) {
|
||||
assert(m_mobsPerBatch > 0);
|
||||
for(int i = 0; i < m_mobsPerBatch; i++) {
|
||||
EntityType selectedType = null;
|
||||
double random = Math.random() * 1.0;
|
||||
for(EntityType type : m_spawnWeights.keySet()) {
|
||||
random -= m_spawnWeights.get(type);
|
||||
if (random <= 0.0d) {
|
||||
selectedType = type;
|
||||
break;
|
||||
}
|
||||
}
|
||||
assert(selectedType != null);
|
||||
Entity newMob = spawner.spawnMob(selectedType);
|
||||
newMob.setCustomName("Mob " + i + "/" + m_mobsPerBatch);
|
||||
}
|
||||
if (m_hasRavager) {
|
||||
Entity newMob = spawner.spawnMob(EntityType.RAVAGER);
|
||||
newMob.setCustomName("RAVAGER");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user