diff --git a/src/main/java/cactusServer/entities/Character.java b/src/main/java/cactusServer/entities/Character.java new file mode 100644 index 0000000..2661bc2 --- /dev/null +++ b/src/main/java/cactusServer/entities/Character.java @@ -0,0 +1,115 @@ +package cactusServer.entities; + +import java.net.URI; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.UUID; + +import framework.model3D.Position3D; +import framework.physics.AngularVelocity3D; +import framework.physics.Velocity3D; +import net.arnx.jsonic.JSONHint; + +public class Character { + private URI accountURI; + private String name; + private Position3D position; +// private Angle angle; +// private Camera cameraState; +// private Emote emoteState; +// private Model model; + private String areaID; + private boolean isActive; + @JSONHint(ignore = true) HashMap itemMap = new HashMap<>(); + @JSONHint(ignore = true) private static final int UNIQUE_ID_LENGTH = 12; + + public Character(URI accountURI, String name, Position3D position, String areaId, boolean isActive) { + this.accountURI = accountURI; + this.name = name; + this.position = position; + this.areaID = areaId; + this.isActive = isActive; + } + + public URI getAccountURI() { + return accountURI; + } + + public String getName() { + return name; + } + + public Position3D getPosition() { + return position; + } + + public String getAreaId() { + return areaID; + } + + public boolean isAactive() { + return isActive; + } + + public HashMap getItemMap() { + return itemMap; + } + + public Item getItemMap(String itemId) { + return itemMap.get(itemId); + } + + public void setAccountURI(URI accountURI) { + this.accountURI = accountURI; + } + + public void setName(String name) { + this.name = name; + } + + public void setPosition(Position3D position) { + this.position = position; + } + + public void setActive(boolean isActive) { + this.isActive = isActive; + } + + public Map createItem(String name, int amount) { + String id = createUniqueId(UNIQUE_ID_LENGTH, itemMap.keySet()); + Item item = new Item(name, amount); + itemMap.put(id, item); + return new HashMap() { + {put(id, item);} + }; + } + + public Item addItem(String itemId, int num) { + return itemMap.get(itemId).addAmount(num); + } + + public Item destroyItem(String itemId) { + return itemMap.remove(itemId); + } + + private String createUniqueId(int length, Set idSet) { + String id; + do { + id = createRandomId(length); + } while (checkId(id, idSet)); + return id; + } + + private boolean checkId(String id, Set idSet) { + return idSet.contains(id); + } + + private String createRandomId(int length) { + StringBuilder id = new StringBuilder(""); + do { + id.append(UUID.randomUUID().toString()); + } while (id.length() < length); + return id.substring(0, length); + } +} diff --git a/src/main/java/cactusServer/entities/Instance.java b/src/main/java/cactusServer/entities/Instance.java index 1301487..a1fb2c5 100644 --- a/src/main/java/cactusServer/entities/Instance.java +++ b/src/main/java/cactusServer/entities/Instance.java @@ -1,13 +1,20 @@ package cactusServer.entities; +import java.net.URI; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.UUID; import cactusServer.entities.Area.Allowed; import cactusServer.entities.Object; +import cactusServer.entities.Character; import framework.model3D.Position3D; import framework.physics.AngularVelocity3D; import framework.physics.Velocity3D; +import net.arnx.jsonic.JSONHint; /** * �C���X�^���X @@ -17,8 +24,11 @@ public class Instance { private String name; private State state; - private HashMap areaMap = new HashMap<>(); - private HashMap objMap = new HashMap<>(); +// private StageModel stage; + @JSONHint(ignore = true) private HashMap areaMap = new HashMap<>(); + @JSONHint(ignore = true) private HashMap objMap = new HashMap<>(); + @JSONHint(ignore = true) private HashMap characterMap = new HashMap<>(); + @JSONHint(ignore = true) private static final int UNIQUE_ID_LENGTH = 12; /** * (�����͌����_�ł̉��̂���) @@ -37,6 +47,10 @@ return state; } + public Set getAreaIdSet() { + return areaMap.keySet(); + } + public HashMap getAreaMap() { return areaMap; } @@ -45,6 +59,10 @@ return areaMap.get(areaId); } + public Set getObjIdSet() { + return objMap.keySet(); + } + public HashMap getObjMap() { return objMap; } @@ -53,36 +71,81 @@ return objMap.get(objId); } + public Set getCharacterIdSet() { + return characterMap.keySet(); + } + + public HashMap getCharacterMap() { + return characterMap; + } + + public Character getCharacter(String characterId) { + return characterMap.get(characterId); + } + public void setState(State state) { this.state = state; } - - public Area createArea(String areaId, String name, Plain[] regions, HashSet permissions) { - if (areaMap.containsKey(areaId)) { - return null; - } + + public Map createArea(String areaId, String name, Plain[] regions, HashSet permissions) { + String id = createUniqueId(UNIQUE_ID_LENGTH, areaMap.keySet()); Area area = new Area(name, regions, permissions); - areaMap.put(areaId, area); - return area; + areaMap.put(id, area); + return new HashMap() { + {put(id, area);} + }; } - public Object createObject(String objId, Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity) { - if (objMap.containsKey(objId)) { - return null; - } - Object object = new Object(position, velocity, angularVelocity); - objMap.put(objId, object); - return object; + public Map createObject(String objId, Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Object.Attribute attribute) { + String id = createUniqueId(UNIQUE_ID_LENGTH, objMap.keySet()); + Object object = new Object(position, velocity, angularVelocity, attribute); + objMap.put(id, object); + return new HashMap() { + {put(id, object);} + }; } - public Area removeArea(String areaId) { + public Map createCharacter(URI accountURI, String name, Position3D position, String areaId, boolean isActive) { + String id = createUniqueId(UNIQUE_ID_LENGTH, characterMap.keySet()); + Character character = new Character(accountURI, name, position, areaId, isActive); + characterMap.put(id, character); + return new HashMap() { + {put(id, character);} + }; + } + + public Character destroyCharacter(String characterId) { + return characterMap.remove(characterId); + } + + public Area destroyArea(String areaId) { return areaMap.remove(areaId); } - public Object removeObject(String objId) { + public Object destroyObject(String objId) { return objMap.remove(objId); } + private String createUniqueId(int length, Set idSet) { + String id; + do { + id = createRandomId(length); + } while (checkId(id, idSet)); + return id; + } + + private boolean checkId(String id, Set idSet) { + return idSet.contains(id); + } + + private String createRandomId(int length) { + StringBuilder id = new StringBuilder(""); + do { + id.append(UUID.randomUUID().toString()); + } while (id.length() < length); + return id.substring(0, length); + } + public static enum State { AVAILABLE, MAINTENANCE; } diff --git a/src/main/java/cactusServer/entities/Item.java b/src/main/java/cactusServer/entities/Item.java new file mode 100644 index 0000000..ae63d46 --- /dev/null +++ b/src/main/java/cactusServer/entities/Item.java @@ -0,0 +1,28 @@ +package cactusServer.entities; + +public class Item { + private String name; + private int amount; + + public Item(String name, int amount) { + this.name = name; + this.amount = amount; + } + + public String getName() { + return name; + } + + public int getAmount() { + return amount; + } + + public boolean isEmpty() { + return (amount == 0); + } + + public Item addAmount(int num) { + amount = Math.max(amount + num, 0); + return this; + } +} diff --git a/src/main/java/cactusServer/entities/Object.java b/src/main/java/cactusServer/entities/Object.java index 19054f0..8d9f067 100644 --- a/src/main/java/cactusServer/entities/Object.java +++ b/src/main/java/cactusServer/entities/Object.java @@ -10,11 +10,13 @@ private Position3D position; private Velocity3D velocity; private AngularVelocity3D angularVelocity; + private Attribute attribute; - public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity) { + public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Attribute attribute) { setPosition(position); setVelocity(velocity); setAngularVelocity(angularVelocity); + this.attribute = attribute; } public Position3D getPosition() { @@ -40,4 +42,22 @@ public void setAngularVelocity(AngularVelocity3D angularVelocity) { this.angularVelocity = angularVelocity; } + + public static class Attribute { + private boolean moveable; + private double cof; + + public Attribute(boolean moveable, double cof) { + this.moveable = moveable; + this.cof = cof; + } + + public boolean isMoveable() { + return moveable; + } + + public double getCof() { + return cof; + } + } } diff --git a/src/main/java/cactusServer/models/Instances.java b/src/main/java/cactusServer/models/Instances.java index f7ee85c..61cb588 100644 --- a/src/main/java/cactusServer/models/Instances.java +++ b/src/main/java/cactusServer/models/Instances.java @@ -2,8 +2,12 @@ import java.util.HashMap; import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import cactusServer.entities.Instance; +import net.arnx.jsonic.JSONHint; /** * �C���X�^���X���Ǘ�����N���X @@ -14,7 +18,8 @@ public class Instances { private static Instances theInstance = null; private HashMap instanceMap = new HashMap<>(); // instance��ID�Ǝ��̂��Ǘ� - + private static final int UNIQUE_ID_LENGTH = 12; + private Instances() { } @@ -30,23 +35,33 @@ } return theInstance; } - + /** * �V����Instance���쐬����Map�ɒlj����� * - * @param instanceId - * Instance�����ʂ����ӂ�ID * @param name * �C���X�^���X�� (��) - * @return �V�����쐬���ꂽInstance
- * ������, instanceID���d�������ꍇ�͐V�KInstance���쐬������null��Ԃ� + * @return �V�����쐬���ꂽID��Instance��Map */ - public Instance createInstance(String instanceId, String name) { - if (instanceMap.containsKey(instanceId)) { - return null; - } + public Map createInstance(String name) { + String id = createUniqueId(UNIQUE_ID_LENGTH, instanceMap.keySet()); Instance instance = new Instance(name, Instance.State.AVAILABLE); - instanceMap.put(instanceId, instance); + instanceMap.put(id, instance); + return new HashMap() { + {put(id, instance);} + }; + } + + /** + * �G���[�����p (�ォ�����) + * @param id + * @param name + * @return + */ + public Instance createInstance(String id, String name) { +// String id = createUniqueId(UNIQUE_ID_LENGTH, instanceMap.keySet()); + Instance instance = new Instance(name, Instance.State.AVAILABLE); + instanceMap.put(id, instance); return instance; } @@ -71,5 +86,25 @@ public Instance destroyInstance(String instanceId) { return instanceMap.remove(instanceId); } + + private String createUniqueId(int length, Set idSet) { + String id; + do { + id = createRandomId(length); + } while (checkId(id, idSet)); + return id; + } + + private boolean checkId(String id, Set idSet) { + return idSet.contains(id); + } + + private String createRandomId(int length) { + StringBuilder id = new StringBuilder(""); + do { + id.append(UUID.randomUUID().toString()); + } while (id.length() < length); + return id.substring(0, length); + } }