diff --git a/src/main/java/cactusServer/entities/Character.java b/src/main/java/cactusServer/entities/Character.java new file mode 100644 index 0000000..220ab11 --- /dev/null +++ b/src/main/java/cactusServer/entities/Character.java @@ -0,0 +1,63 @@ +package cactusServer.entities; + +import java.net.URI; + +import framework.model3D.Position3D; +import framework.physics.AngularVelocity3D; +import framework.physics.Velocity3D; + +public class Character { + private URI account_uri; + private String name; + private Position3D position; +// private Angle angle; +// private Camera camera_state; +// private Emote emote_state; +// private Model model; + private String area_id; + private boolean is_active; + + public Character(URI accountURI, String name, Position3D position, String areaId, boolean isActive) { + this.account_uri = accountURI; + this.name = name; + this.position = position; + this.area_id = areaId; + this.is_active = isActive; + } + + public URI getAccountURI() { + return account_uri; + } + + public void setAccountURI(URI accountURI) { + this.account_uri = accountURI; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Position3D getPosition() { + return position; + } + + public void setPosition(Position3D position) { + this.position = position; + } + + public boolean isAactive() { + return is_active; + } + + public void setActive(boolean isActive) { + this.is_active = isActive; + } + + public String getAreaId() { + return area_id; + } +} diff --git a/src/main/java/cactusServer/entities/Instance.java b/src/main/java/cactusServer/entities/Instance.java index 1301487..7f6f566 100644 --- a/src/main/java/cactusServer/entities/Instance.java +++ b/src/main/java/cactusServer/entities/Instance.java @@ -1,13 +1,19 @@ package cactusServer.entities; +import java.net.URI; import java.util.HashMap; import java.util.HashSet; +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 +23,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 +46,10 @@ return state; } + public Set getAreaIdSet() { + return areaMap.keySet(); + } + public HashMap getAreaMap() { return areaMap; } @@ -45,6 +58,10 @@ return areaMap.get(areaId); } + public Set getObjIdSet() { + return objMap.keySet(); + } + public HashMap getObjMap() { return objMap; } @@ -53,36 +70,75 @@ 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; - } + String id = createUniqueId(UNIQUE_ID_LENGTH, areaMap.keySet()); Area area = new Area(name, regions, permissions); - areaMap.put(areaId, area); + areaMap.put(id, area); return 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); + public Object 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 object; } - public Area removeArea(String areaId) { + public Character 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 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/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; + } + } }