Added test cases for SWGObject and travel, as well as added enforcement of valid Terrains

This commit is contained in:
Obique PSWG
2017-05-23 17:59:39 -05:00
parent ae3f2e00bd
commit 6c48fa0267
9 changed files with 284 additions and 90 deletions
+90 -1
View File
@@ -27,11 +27,27 @@
***********************************************************************************/
package test_resources;
import java.util.Map.Entry;
import com.projectswg.common.data.swgfile.ClientFactory;
import com.projectswg.common.data.swgfile.visitors.ObjectData;
import com.projectswg.common.data.swgfile.visitors.ObjectData.ObjectDataAttribute;
import com.projectswg.common.data.swgfile.visitors.SlotArrangementData;
import com.projectswg.common.data.swgfile.visitors.SlotDescriptorData;
import com.projectswg.common.debug.Assert;
import intents.object.ObjectCreatedIntent;
import network.packets.Packet;
import resources.Race;
import resources.containers.ContainerPermissionsType;
import resources.objects.GameObjectType;
import resources.objects.SWGObject;
import resources.objects.creature.CreatureObject;
import resources.objects.player.PlayerObject;
import resources.objects.tangible.TangibleObject;
import resources.player.Player;
import resources.player.PlayerState;
import services.objects.ObjectCreator;
public class GenericCreatureObject extends CreatureObject {
@@ -47,7 +63,7 @@ public class GenericCreatureObject extends CreatureObject {
};
player.setPlayerState(PlayerState.ZONED_IN);
setHasOwner(true);
setSlot("ghost", new PlayerObject(-objectId));
setSlot("ghost", new PlayerObject(-getObjectId()));
}
public void setHasOwner(boolean hasOwner) {
@@ -58,4 +74,77 @@ public class GenericCreatureObject extends CreatureObject {
}
}
public void setupAsCharacter() {
handlePostCreation();
createInventoryObject("object/tangible/inventory/shared_character_inventory.iff");
createInventoryObject("object/tangible/datapad/shared_character_datapad.iff");
createInventoryObject("object/tangible/inventory/shared_appearance_inventory.iff");
createInventoryObject("object/tangible/bank/shared_character_bank.iff");
createInventoryObject("object/tangible/mission_bag/shared_mission_bag.iff");
}
private TangibleObject createTangible(ContainerPermissionsType type, String template) {
SWGObject obj = ObjectCreator.createObjectFromTemplate(template);
Assert.test(obj instanceof TangibleObject);
obj.setContainerPermissions(type);
obj.moveToContainer(this);
new ObjectCreatedIntent(obj).broadcast();
return (TangibleObject) obj;
}
/** Creates an object with inventory-level world visibility (only the owner) */
private TangibleObject createInventoryObject(String template) {
return createTangible(ContainerPermissionsType.INVENTORY, template);
}
private void handlePostCreation() {
ObjectData attributes = (ObjectData) ClientFactory.getInfoFromFile(Race.HUMAN_MALE.getFilename(), true);
addObjectAttributes(attributes);
createObjectSlots();
Object got = getDataAttribute(ObjectDataAttribute.GAME_OBJECT_TYPE);
if (got != null)
setGameObjectType(GameObjectType.getTypeFromId((Integer) got));
}
private void addObjectAttributes(ObjectData attributes) {
if (attributes == null)
return;
for (Entry<ObjectDataAttribute, Object> e : attributes.getAttributes().entrySet()) {
setObjectAttribute(e.getKey(), e.getValue());
}
}
private void setObjectAttribute(ObjectDataAttribute key, Object value) {
setDataAttribute(key, value);
switch (key) {
case OBJECT_NAME: setStringId(value.toString()); break;
case DETAILED_DESCRIPTION: setDetailStringId(value.toString()); break;
case CONTAINER_TYPE: setContainerType((Integer) value); break;
default: break;
}
}
private void createObjectSlots() {
if (getDataAttribute(ObjectDataAttribute.SLOT_DESCRIPTOR_FILENAME) != null) {
// These are the slots that the object *HAS*
SlotDescriptorData descriptor = (SlotDescriptorData) ClientFactory.getInfoFromFile((String) getDataAttribute(ObjectDataAttribute.SLOT_DESCRIPTOR_FILENAME), true);
if (descriptor == null)
return;
for (String slotName : descriptor.getSlots()) {
setSlot(slotName, null);
}
}
if (getDataAttribute(ObjectDataAttribute.ARRANGEMENT_DESCRIPTOR_FILENAME) != null) {
// This is what slots the created object is able to go into/use
SlotArrangementData arrangementData = (SlotArrangementData) ClientFactory.getInfoFromFile((String) getDataAttribute(ObjectDataAttribute.ARRANGEMENT_DESCRIPTOR_FILENAME), true);
if (arrangementData == null)
return;
setArrangement(arrangementData.getArrangement());
}
}
}