diff --git a/src/main/java/cactusServer/entities/Area.java b/src/main/java/cactusServer/entities/Area.java index 5fec585..90cfee8 100644 --- a/src/main/java/cactusServer/entities/Area.java +++ b/src/main/java/cactusServer/entities/Area.java @@ -2,28 +2,30 @@ import java.util.HashSet; +import framework.model3D.Position3D; import net.arnx.jsonic.JSONHint; -public class Area extends Entity{ +public class Area extends Entity { private String name; private Plain[] region; // �C�ӌ‚̕��ʂ̕����� private HashSet permissions; // �G���A���ʼn”\�Ȃ��Ƃ̗��� - @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12; + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; private Area() { // JSONDecode���̌Ăяo���p } - + public Area(String name, Plain[] region, HashSet permissions) { setName(name); setRegion(region); setPermissions(permissions); } - + public String getName() { return name; } - + public Plain[] getRegion() { return region; } @@ -31,35 +33,49 @@ public Plain getRegion(int index) { return region[index]; } - + public HashSet getPermissions() { return permissions; } - + public boolean isPermission(Allowed allowed) { return permissions.contains(allowed); } + public boolean isSurroundingPosition(Position3D position) { + for (Plain plain : region) { + // ������ Plain��a,b,c,d �� Character��x,y,z ��p����, �L�����N�^�[�����ʂɂ��邩�ǂ����̔�����s�� + + // double equation = (plain.getA() * position.getX()) + (plain.getB() * + // position.getY()) + // + (plain.getC() * position.getZ()) + plain.getD(); + // if (equation > 0) { + // return false; + // } + } + return true; + } + public void setName(String name) { this.name = name; } - + public void setRegion(Plain[] region) { this.region = region; } - + public void setPermissions(HashSet permissions) { this.permissions = permissions; } - + public void addPermission(Allowed allowed) { permissions.add(allowed); } - + public void removePermission(Allowed allowed) { permissions.remove(allowed); } - + public static enum Allowed { SHOOT, KILL; } diff --git a/src/main/java/cactusServer/entities/Character.java b/src/main/java/cactusServer/entities/Character.java index 5ddf3d4..a9bb863 100644 --- a/src/main/java/cactusServer/entities/Character.java +++ b/src/main/java/cactusServer/entities/Character.java @@ -25,14 +25,15 @@ // JSONDecode���̌Ăяo���p } -// public Character(String accountURI, String name, Position3D position, Angle angle, CharacterModel model) { -// setAccountURI(accountURI); -// setName(name); -// setPosition(position); -// setAngle(angle); -// setModel(model); -// updateAreaURI(); -// } + // public Character(String accountURI, String name, Position3D position, Angle + // angle, CharacterModel model) { + // setAccountURI(accountURI); + // setName(name); + // setPosition(position); + // setAngle(angle); + // setModel(model); + // updateAreaURI(); + // } public Character(String instanceId, String accountURI, String name, Position3D position, Angle angle, CharacterModel model) { @@ -142,8 +143,9 @@ private String findAreaURI(Instance instance) { // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�𔻒肵�ē��Y�G���A��URI�ɍX�V���� for (String areaId : instance.getAreaIdSet()) { - if (isInTheArea(instance.getArea(areaId))) { - int subStringStartIndex = areaURI.length() - Character.UNIQUE_ID_LENGTH; + Area area = instance.getArea(areaId); + if (area.isSurroundingPosition(position)) { + int subStringStartIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH; StringBuilder newAreaURI = new StringBuilder(); return newAreaURI.append(areaURI.substring(0, subStringStartIndex)).append(areaId).toString(); } @@ -151,33 +153,6 @@ throw new IllegalStateException("Character is in the unknown area."); } - private boolean isInTheArea(Area area) { - for (Plain plain : area.getRegion()) { - // ������ Plain��a,b,c,d �� Character��x,y,z ��p����, �L�����N�^�[�����ʂɂ��邩�ǂ����̔�����s�� - - // double equation = (plain.getA() * position.getX()) + (plain.getB() * - // position.getY()) - // + (plain.getC() * position.getZ()) + plain.getD(); - // if (equation > 0) { - // return false; - // } - } - return true; - } - - private void updateAreaURI() { - String[] areaURISplit = areaURI.split("/"); // �c�c/instances/{instanceId}/areas/{areaId} - int splitSize = areaURISplit.length; - String instanceId = areaURISplit[splitSize - 3]; - String previousAreaId = areaURISplit[splitSize - 1]; - Instance instance = Instances.getInstance().getInstance(instanceId); - Area previousArea = instance.getArea(previousAreaId); - if (!isInTheArea(previousArea)) { - // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�𔻒肵�ē��Y�G���A��URI�ɍX�V���� - setAreaURI(findAreaURI(instance)); - } - } - public Item destroyItem(String itemId) { return itemMap.remove(itemId); } diff --git a/src/main/java/cactusServer/entities/Player.java b/src/main/java/cactusServer/entities/Player.java index adad705..5ac3279 100644 --- a/src/main/java/cactusServer/entities/Player.java +++ b/src/main/java/cactusServer/entities/Player.java @@ -12,7 +12,8 @@ private Angle angle; private CameraState cameraState; private EmoteState emoteState; - @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12; + @JSONHint(ignore = true) + public static final int UNIQUE_ID_LENGTH = 12; private Player() { // JSONDecode���̌Ăяo���p @@ -26,7 +27,7 @@ setEmoteState(new EmoteState(animationClassToStart)); readCharacterData(characterURI); } - + private Character getCharacter(String characterURI) { String[] characterURISplit = characterURI.split("/"); // �c�c/instances/{instanceId}/characters/{characterId} int splitSize = characterURISplit.length; @@ -98,18 +99,44 @@ this.emoteState = emoteState; } - public void setanimationClassToStart(EmoteState.EmoteType animationClassToStart) { + public void setAnimationClassToStart(EmoteState.EmoteType animationClassToStart) { setEmoteState(new EmoteState(animationClassToStart)); } + private void updateAreaURI() { + String[] areaURISplit = areaURI.split("/"); // �c�c/instances/{instanceId}/areas/{areaId} + int splitSize = areaURISplit.length; + String instanceId = areaURISplit[splitSize - 3]; + String previousAreaId = areaURISplit[splitSize - 1]; + Instance instance = Instances.getInstance().getInstance(instanceId); + Area previousArea = instance.getArea(previousAreaId); + if (!previousArea.isSurroundingPosition(position)) { + // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�𔻒肵�ē��Y�G���A��URI�ɍX�V���� + setAreaURI(findAreaURI(instance)); + } + } + + private String findAreaURI(Instance instance) { + // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�𔻒肵�ē��Y�G���A��URI�ɍX�V���� + for (String areaId : instance.getAreaIdSet()) { + Area area = instance.getArea(areaId); + if (area.isSurroundingPosition(position)) { + int subStringStartIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH; + StringBuilder newAreaURI = new StringBuilder(); + return newAreaURI.append(areaURI.substring(0, subStringStartIndex)).append(areaId).toString(); + } + } + throw new IllegalStateException("Character is in the unknown area."); + } + public void updateEmoteType(EmoteState.EmoteType animationClassToStart) { this.emoteState.setEmoteType(animationClassToStart); } - + public void deletePlayer() { writeCharacterData(characterURI); } - + private void writeCharacterData(String characterURI) { Character character = getCharacter(characterURI); character.setPosition(position);