forked from MagicBane/Server
building and region lookup completed
This commit is contained in:
@@ -26,11 +26,13 @@ public class RegionCmd extends AbstractDevCmd {
|
|||||||
protected void _doCmd(PlayerCharacter pc, String[] words,
|
protected void _doCmd(PlayerCharacter pc, String[] words,
|
||||||
AbstractGameObject target) {
|
AbstractGameObject target) {
|
||||||
|
|
||||||
|
String newline = "\r\n ";
|
||||||
|
String output;
|
||||||
|
output = "Target Region Information:" + newline;
|
||||||
|
|
||||||
Building building = BuildingManager.getBuildingAtLocation(((AbstractCharacter) target).loc);
|
Building building = BuildingManager.getBuildingAtLocation(((AbstractCharacter) target).loc);
|
||||||
if(building == null){
|
if(building == null){
|
||||||
this.throwbackInfo(pc, "No Building At This Location.") ;
|
this.throwbackInfo(pc, "No Building At This Location.") ;
|
||||||
} else{
|
|
||||||
this.throwbackInfo(pc, "Building At Location: " + building.getName());
|
|
||||||
}
|
}
|
||||||
Regions region = ((AbstractCharacter)target).region;
|
Regions region = ((AbstractCharacter)target).region;
|
||||||
if (region == null) {
|
if (region == null) {
|
||||||
@@ -39,9 +41,11 @@ public class RegionCmd extends AbstractDevCmd {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(region != null) {
|
if(region != null) {
|
||||||
this.throwbackInfo(pc, "Region Info: " + ((AbstractCharacter) target).getName());
|
output += "Player Info: " + ((AbstractCharacter) target).getName() + newline;
|
||||||
this.throwbackInfo(pc, "Region Name: " + region);
|
output += "Region Building: " + building.getName() + newline;
|
||||||
this.throwbackInfo(pc, "Region Height: " + region.lerpY((AbstractCharacter)target));
|
output += "Region Height: " + region.lerpY((AbstractCharacter)target) + newline;
|
||||||
|
output += "is Stairs: " + region.stairs + newline;
|
||||||
|
this.throwbackInfo(pc, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -949,7 +949,7 @@ public enum BuildingManager {
|
|||||||
building.isDeranking.compareAndSet(true, false);
|
building.isDeranking.compareAndSet(true, false);
|
||||||
}
|
}
|
||||||
public static Building getBuildingAtLocation(Vector3fImmutable loc){
|
public static Building getBuildingAtLocation(Vector3fImmutable loc){
|
||||||
for(AbstractWorldObject awo : WorldGrid.getObjectsInRangePartial(loc,128,MBServerStatics.MASK_BUILDING)){
|
for(AbstractWorldObject awo : WorldGrid.getObjectsInRangePartial(loc,64,MBServerStatics.MASK_BUILDING)){
|
||||||
Building building = (Building)awo;
|
Building building = (Building)awo;
|
||||||
if(building == null)
|
if(building == null)
|
||||||
continue;
|
continue;
|
||||||
@@ -958,7 +958,9 @@ public enum BuildingManager {
|
|||||||
float minZ = building.loc.z - building.getBounds().getHalfExtents().y;
|
float minZ = building.loc.z - building.getBounds().getHalfExtents().y;
|
||||||
float maxZ = building.loc.z + building.getBounds().getHalfExtents().y;
|
float maxZ = building.loc.z + building.getBounds().getHalfExtents().y;
|
||||||
|
|
||||||
if(loc.x > minX && loc.x < maxX && loc.z > minZ && loc.x < maxZ)
|
boolean meetsX = loc.x > minX && loc.x < maxX;
|
||||||
|
boolean meetsY = loc.z > minZ && loc.z < maxZ;
|
||||||
|
if(meetsX && meetsY)
|
||||||
return building;
|
return building;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -991,7 +991,7 @@ public abstract class AbstractCharacter extends AbstractWorldObject {
|
|||||||
if(building != null){
|
if(building != null){
|
||||||
//look for region in the building we are in
|
//look for region in the building we are in
|
||||||
for(Regions regionCycle : building.getBounds().getRegions())
|
for(Regions regionCycle : building.getBounds().getRegions())
|
||||||
if(regionCycle.isPointInPolygon(value))
|
if(regionCycle.isPointInPolygon(value) && Math.abs(regionCycle.highLerp.y - value.y) < 10)
|
||||||
region = regionCycle;
|
region = regionCycle;
|
||||||
}
|
}
|
||||||
float regionHeightOffset = 0;
|
float regionHeightOffset = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user