More work on lairs

This commit is contained in:
Light2
2013-12-05 17:33:26 +01:00
parent 470215c05d
commit 2c66ab67d8
13 changed files with 423 additions and 9 deletions
+103 -1
View File
@@ -21,6 +21,108 @@
******************************************************************************/
package services.spawn;
public class LairSpawnArea extends SpawnArea {
import java.util.Random;
import java.util.Vector;
import main.NGECore;
import net.engio.mbassy.listener.Handler;
import resources.common.collidables.AbstractCollidable;
import resources.common.collidables.AbstractCollidable.EnterEvent;
import resources.common.collidables.AbstractCollidable.ExitEvent;
import resources.objects.creature.CreatureObject;
import services.SimulationService.MoveEvent;
import services.TerrainService;
import engine.resources.objects.SWGObject;
import engine.resources.scene.Planet;
import engine.resources.scene.Point3D;
public class LairSpawnArea extends SpawnArea {
private LairGroupTemplate lairGroup;
public LairSpawnArea(Planet planet, AbstractCollidable area) {
super(planet, area);
}
public LairGroupTemplate getLairGroup() {
return lairGroup;
}
public void setLairGroup(LairGroupTemplate lairGroup) {
this.lairGroup = lairGroup;
}
public void spawnLair(CreatureObject object) {
Vector<LairSpawnTemplate> lairTemplates = lairGroup.getLairSpawnTemplates();
if(lairGroup == null || lairTemplates.isEmpty())
return;
Point3D randomPosition = getRandomPosition(object.getWorldPosition(), 32.f, 256.f);
if(randomPosition == null)
return;
TerrainService terrainSvc = NGECore.getInstance().terrainService;
float height = terrainSvc.getHeight(getPlanet().getID(), randomPosition.x, randomPosition.z);
randomPosition.y = height;
if(!terrainSvc.canBuildAtPosition(object, randomPosition.x, randomPosition.z))
return;
Random random = new Random();
LairSpawnTemplate lairSpawn = lairTemplates.get(random.nextInt(lairTemplates.size()));
int level = random.nextInt((int) (lairSpawn.getMaxLevel() - lairSpawn.getMinLevel()) + 1) + lairSpawn.getMinLevel();
NGECore.getInstance().spawnService.spawnLair(lairSpawn.getLairTemplate(), getPlanet(), randomPosition, level);
}
@Override
@Handler
public void onEnter(EnterEvent event) {
SWGObject object = event.object;
if(object == null || !(object instanceof CreatureObject))
return;
CreatureObject creature = (CreatureObject) object;
if(creature.getSlottedObject("ghost") == null)
return;
spawnLair(creature);
}
@Override
@Handler
public void onExit(ExitEvent event) {
}
@Handler
public void onMove(MoveEvent event) {
SWGObject object = event.object;
if(object == null || !(object instanceof CreatureObject) || object.getContainer() != null)
return;
CreatureObject creature = (CreatureObject) object;
if(creature.getSlottedObject("ghost") == null)
return;
if(new Random().nextFloat() <= 0.10)
spawnLair(creature);
}
}