Added Waypoints

This commit is contained in:
Waverunner
2013-08-04 14:56:22 -04:00
parent 8c6d56bef3
commit cbe337c09c
7 changed files with 266 additions and 3 deletions
@@ -375,6 +375,112 @@ public class PlayerMessageBuilder extends ObjectMessageBuilder {
}
public IoBuffer buildWaypointAddDelta(WaypointObject waypoint) {
PlayerObject player = (PlayerObject) object;
IoBuffer buffer = bufferPool.allocate(200 + player.getWaypoints().size(), false).order(ByteOrder.LITTLE_ENDIAN);
buffer.setAutoExpand(true);
buffer.putInt(1);
buffer.putInt(1);
buffer.put((byte) 0); // updateType (SubType)
buffer.putLong(waypoint.getObjectID());
buffer.putInt(waypoint.getCellId());
buffer.putFloat(waypoint.getPosition().x);
buffer.putFloat(waypoint.getPosition().y);
buffer.putFloat(waypoint.getPosition().z);
buffer.putLong(0); // networklocationId
buffer.putInt(waypoint.getPlanetCRC());
buffer.put(getUnicodeString(waypoint.getName()));
buffer.putLong(waypoint.getObjectID());
buffer.put((byte) waypoint.getColor());
if (waypoint.isActive()) { buffer.put((byte) 1); }
else { buffer.put((byte) 0); }
int size = buffer.position();
buffer.flip();
buffer = createDelta("PLAY", (byte) 8, (short) player.getWaypointListUpdateCounter(), (short) 1, buffer, size + 4);
//System.out.println("WaypointAdd: " + buffer.getHexDump());
return buffer;
}
public IoBuffer buildWaypointRemoveDelta(WaypointObject waypoint) {
IoBuffer buffer = bufferPool.allocate(200, false).order(ByteOrder.LITTLE_ENDIAN);
PlayerObject player = (PlayerObject) object;
buffer.putInt(1);
buffer.putInt(1);
buffer.put((byte) 1); // updateType (SubType)
buffer.putLong(waypoint.getObjectID());
buffer.putInt(waypoint.getCellId());
buffer.putFloat(waypoint.getPosition().x);
buffer.putFloat(waypoint.getPosition().y);
buffer.putFloat(waypoint.getPosition().z);
buffer.putLong(0); // networklocationId
buffer.putInt(waypoint.getPlanetCRC());
buffer.put(getUnicodeString(waypoint.getName()));
buffer.putLong(waypoint.getObjectID());
buffer.put((byte) waypoint.getColor());
if (waypoint.isActive()) { buffer.put((byte) 1); }
else { buffer.put((byte) 0); }
int size = buffer.position();
buffer.flip();
buffer = createDelta("PLAY", (byte) 8, (short) player.getWaypointListUpdateCounter(), (short) 1, buffer, size + 4);
return buffer;
}
public IoBuffer buildWaypointUpdateDelta(WaypointObject waypoint) {
IoBuffer buffer = bufferPool.allocate(200, false).order(ByteOrder.LITTLE_ENDIAN);
PlayerObject player = (PlayerObject) object;
buffer.putInt(1);
buffer.putInt(1);
buffer.put((byte) 2); // updateType (SubType)
buffer.putLong(waypoint.getObjectID());
buffer.putInt(waypoint.getCellId());
buffer.putFloat(waypoint.getPosition().x);
buffer.putFloat(waypoint.getPosition().y);
buffer.putFloat(waypoint.getPosition().z);
buffer.putLong(0); // networklocationId << cluster system I guess?
buffer.putInt(waypoint.getPlanetCRC());
buffer.put(getUnicodeString(waypoint.getName()));
buffer.putLong(waypoint.getObjectID());
buffer.put((byte) waypoint.getColor());
if (waypoint.isActive()) { buffer.put((byte) 1); }
else { buffer.put((byte) 0); } // isActive. Activates automatically when created.
int size = buffer.position();
buffer.flip();
buffer = createDelta("PLAY", (byte) 8, (short) player.getWaypointListUpdateCounter(), (short) 1, buffer, size + 4);
return buffer;
}
public int getProfData(String profession) {
switch (profession) {
@@ -202,6 +202,46 @@ public class PlayerObject extends SWGObject {
return waypoints;
}
public int getWaypointListUpdateCounter() {
synchronized(objectMutex) {
return waypointListUpdateCounter;
}
}
public void setWaypointListUpdateCounter(int count) {
synchronized(objectMutex){
this.waypointListUpdateCounter = count;
}
}
public void waypointUpdate(WaypointObject waypoint) {
synchronized(objectMutex) {
getContainer().getClient().getSession().write(messageBuilder.buildWaypointUpdateDelta(waypoint));
}
}
public void waypointRemove(WaypointObject waypoint) {
synchronized(objectMutex) {
getContainer().getClient().getSession().write(messageBuilder.buildWaypointRemoveDelta(waypoint));
}
}
public void waypointAdd(WaypointObject waypoint) {
synchronized(objectMutex) {
getContainer().getClient().getSession().write(messageBuilder.buildWaypointAddDelta(waypoint));
}
}
public WaypointObject getWaypointFromList(WaypointObject waypoint) {
synchronized(objectMutex) {
for(WaypointObject wp : waypoints) {
if(wp.getObjectID() == waypoint.getObjectID())
return wp;
}
}
return null;
}
public int getCurrentForcePower() {
synchronized(objectMutex) {
return currentForcePower;