mirror of
https://github.com/ProjectSWGCore/NGECore2.git
synced 2026-08-27 17:57:22 -04:00
- Added collidableBox implementation
This commit is contained in:
@@ -21,7 +21,112 @@
|
||||
******************************************************************************/
|
||||
package resources.common.collidables;
|
||||
|
||||
public class CollidableBox {
|
||||
import java.util.Random;
|
||||
|
||||
import engine.resources.objects.SWGObject;
|
||||
import engine.resources.scene.Planet;
|
||||
import engine.resources.scene.Point3D;
|
||||
|
||||
public class CollidableBox extends AbstractCollidable {
|
||||
|
||||
private Point3D center;
|
||||
private float width;
|
||||
private float height;
|
||||
private float widthHalf;
|
||||
private float heightHalf;
|
||||
|
||||
public CollidableBox(Point3D center, float width, float height, Planet planet) {
|
||||
this.setCenter(center);
|
||||
this.setWidth(width);
|
||||
this.setHeight(height);
|
||||
this.setPlanet(planet);
|
||||
}
|
||||
|
||||
public Point3D getCenter() {
|
||||
return center;
|
||||
}
|
||||
|
||||
public void setCenter(Point3D center) {
|
||||
this.center = center;
|
||||
}
|
||||
|
||||
public float getWidth() {
|
||||
return width;
|
||||
}
|
||||
|
||||
public void setWidth(float width) {
|
||||
this.width = width;
|
||||
this.widthHalf=.5F*width;
|
||||
}
|
||||
|
||||
public float getHeight() {
|
||||
return height;
|
||||
}
|
||||
|
||||
public void setHeight(float height) {
|
||||
this.height = height;
|
||||
this.heightHalf=.5F*height;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doesCollide(SWGObject obj) {
|
||||
Point3D objectPos = obj.getWorldPosition();
|
||||
return (objectPos.x>center.x-widthHalf) &&
|
||||
(objectPos.x<center.x+widthHalf) &&
|
||||
(objectPos.z>center.z-heightHalf) &&
|
||||
(objectPos.z<center.z+heightHalf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doesCollide(Point3D position) {
|
||||
return (position.x>center.x-widthHalf) &&
|
||||
(position.x<center.x+widthHalf) &&
|
||||
(position.z>center.z-heightHalf) &&
|
||||
(position.z<center.z+heightHalf);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Point3D getRandomPosition(Point3D origin, float minDistance,
|
||||
float maxDistance) {
|
||||
Random random = new Random();
|
||||
float coordX;
|
||||
float coordZ;
|
||||
float randomX = random.nextInt((int) (maxDistance - minDistance) + 1) + minDistance;
|
||||
float randomZ = random.nextInt((int) (maxDistance - minDistance) + 1) + minDistance;
|
||||
if (randomX>widthHalf)
|
||||
randomX = widthHalf - 5;
|
||||
if (randomZ>heightHalf)
|
||||
randomZ = heightHalf - 5;
|
||||
if (new Random().nextFloat()<.5)
|
||||
coordX = center.x + randomX;
|
||||
else
|
||||
coordX = center.x - randomX;
|
||||
if (new Random().nextFloat()<.5)
|
||||
coordZ = center.z + randomZ;
|
||||
else
|
||||
coordZ = center.z - randomZ;
|
||||
|
||||
return new Point3D((float) coordX, 0, (float) coordZ);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Point3D getRandomPosition() {
|
||||
Random random = new Random();
|
||||
float coordX;
|
||||
float coordZ;
|
||||
float randomX = random.nextInt((int) widthHalf);
|
||||
float randomZ = random.nextInt((int) heightHalf);
|
||||
if (new Random().nextFloat()<.5)
|
||||
coordX = center.x + randomX;
|
||||
else
|
||||
coordX = center.x - randomX;
|
||||
if (new Random().nextFloat()<.5)
|
||||
coordZ = center.z + randomZ;
|
||||
else
|
||||
coordZ = center.z - randomZ;
|
||||
|
||||
return new Point3D((float) coordX, 0, (float) coordZ);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
|
||||
import resources.common.collidables.CollidableBox;
|
||||
import resources.common.collidables.CollidableCircle;
|
||||
import resources.datatables.Options;
|
||||
import resources.datatables.PvpStatus;
|
||||
@@ -556,6 +557,7 @@ public class SpawnService {
|
||||
}
|
||||
}
|
||||
|
||||
// Circular LairSpawnArea
|
||||
public void addLairSpawnArea(String lairGroup, float x, float z, float radius, String planetName) {
|
||||
LairGroupTemplate lairGroupTemplate = lairGroupTemplates.get(lairGroup);
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
@@ -567,6 +569,19 @@ public class SpawnService {
|
||||
core.simulationService.addCollidable(collidableCircle, x, z);
|
||||
}
|
||||
|
||||
// Rectangular LairSpawnArea
|
||||
public void addLairSpawnArea(String lairGroup, float x, float z, float width, float height, String planetName) {
|
||||
LairGroupTemplate lairGroupTemplate = lairGroupTemplates.get(lairGroup);
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
if(lairGroupTemplate == null || planet == null)
|
||||
return;
|
||||
CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet);
|
||||
LairSpawnArea lairSpawnArea = new LairSpawnArea(planet, collidableBox, lairGroupTemplate);
|
||||
spawnAreas.get(planet).add(lairSpawnArea);
|
||||
core.simulationService.addCollidable(collidableBox, x, z);
|
||||
}
|
||||
|
||||
// Circular DynamicSpawnArea
|
||||
public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float radius, String planetName) {
|
||||
DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup);
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
@@ -578,6 +593,19 @@ public class SpawnService {
|
||||
core.simulationService.addCollidable(collidableCircle, x, z);
|
||||
}
|
||||
|
||||
// Rectangular DynamicSpawnArea
|
||||
public void addDynamicSpawnArea(String dynamicGroup, float x, float z, float width, float height, String planetName) {
|
||||
DynamicSpawnGroup dynamicGroupTemplate = dynamicGroupTemplates.get(dynamicGroup);
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
if(dynamicGroupTemplate == null || planet == null)
|
||||
return;
|
||||
CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet);
|
||||
DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableBox, dynamicGroupTemplate);
|
||||
spawnAreas.get(planet).add(dynamicSpawnArea);
|
||||
core.simulationService.addCollidable(collidableBox, x, z);
|
||||
}
|
||||
|
||||
// Circular DynamicSpawnArea with Vector argument
|
||||
public void addDynamicSpawnArea(Vector<String> dynamicGroups, float x, float z, float radius, String planetName) {
|
||||
Vector<DynamicSpawnGroup> dynamicSpawnGroups = new Vector<DynamicSpawnGroup>();
|
||||
for (String template : dynamicGroups){
|
||||
@@ -597,6 +625,27 @@ public class SpawnService {
|
||||
core.simulationService.addCollidable(collidableCircle, x, z);
|
||||
}
|
||||
|
||||
// Rectangular DynamicSpawnArea with Vector argument
|
||||
public void addDynamicSpawnArea(Vector<String> dynamicGroups, float x, float z, float width, float height, String planetName) {
|
||||
Vector<DynamicSpawnGroup> dynamicSpawnGroups = new Vector<DynamicSpawnGroup>();
|
||||
for (String template : dynamicGroups){
|
||||
if (dynamicGroupTemplates.get(template)==null){
|
||||
System.err.println("Dynamic Group template " + template +" not found in spawnservice collection!");
|
||||
return;
|
||||
}
|
||||
dynamicSpawnGroups.add(dynamicGroupTemplates.get(template));
|
||||
}
|
||||
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
if(dynamicSpawnGroups == null || dynamicSpawnGroups.size() == 0 || planet == null)
|
||||
return;
|
||||
CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet);
|
||||
DynamicSpawnArea dynamicSpawnArea = new DynamicSpawnArea(planet, collidableBox, dynamicSpawnGroups);
|
||||
spawnAreas.get(planet).add(dynamicSpawnArea);
|
||||
core.simulationService.addCollidable(collidableBox, x, z);
|
||||
}
|
||||
|
||||
// Circular MixedSpawnArea
|
||||
public void addMixedSpawnArea(Vector<String> passedGroups, float x, float z, float radius, String planetName) {
|
||||
Vector<SpawnGroup> mixedSpawnGroups = new Vector<SpawnGroup>();
|
||||
for (String template : passedGroups){
|
||||
@@ -618,6 +667,29 @@ public class SpawnService {
|
||||
spawnAreas.get(planet).add(dynamicSpawnArea);
|
||||
core.simulationService.addCollidable(collidableCircle, x, z);
|
||||
}
|
||||
|
||||
// Rectangular MixedSpawnArea
|
||||
public void addMixedSpawnArea(Vector<String> passedGroups, float x, float z, float width, float height, String planetName) {
|
||||
Vector<SpawnGroup> mixedSpawnGroups = new Vector<SpawnGroup>();
|
||||
for (String template : passedGroups){
|
||||
if (dynamicGroupTemplates.get(template)!=null){
|
||||
mixedSpawnGroups.add(dynamicGroupTemplates.get(template));
|
||||
}
|
||||
if (lairGroupTemplates.get(template)!=null){
|
||||
mixedSpawnGroups.add(lairGroupTemplates.get(template));
|
||||
}
|
||||
if(dynamicGroupTemplates.get(template) == null && lairGroupTemplates.get(template)==null)
|
||||
return;
|
||||
}
|
||||
|
||||
Planet planet = core.terrainService.getPlanetByName(planetName);
|
||||
if(mixedSpawnGroups == null || mixedSpawnGroups.size() == 0 || planet == null)
|
||||
return;
|
||||
CollidableBox collidableBox = new CollidableBox(new Point3D(x, 0, z), width, height, planet);
|
||||
MixedSpawnArea dynamicSpawnArea = new MixedSpawnArea(planet, collidableBox, mixedSpawnGroups);
|
||||
spawnAreas.get(planet).add(dynamicSpawnArea);
|
||||
core.simulationService.addCollidable(collidableBox, x, z);
|
||||
}
|
||||
|
||||
public Map<String, MobileTemplate> getMobileTemplates() {
|
||||
return mobileTemplates;
|
||||
|
||||
Reference in New Issue
Block a user