package cactusServer.entities;
import java.util.HashSet;
import org.ntlab.radishforandroidstudio.framework.model3D.Position3D;
import net.arnx.jsonic.JSONHint;
public class Area extends Entity {
private String name;
private Plain[] region; // 任意個の平面の方程式
private HashSet<Allowed> permissions; // エリア内で可能なことの羅列
@JSONHint(ignore = true)
public static final int UNIQUE_ID_LENGTH = 12;
@SuppressWarnings("unused")
private Area() {
// JSONDecode時の呼び出し用
}
public Area(String name, Plain[] region, HashSet<Allowed> permissions) {
setName(name);
setRegion(region);
setPermissions(permissions);
}
public String getName() {
return name;
}
public Plain[] getRegion() {
return region;
}
public Plain getPlain(int index) {
return region[index];
}
public HashSet<Allowed> 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 を用いて, キャラクターが平面の裏にいるかどうかの判定を行う
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<Allowed> 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;
}
}