package cactusServer.entities;
import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import cactusServer.utils.RandomStringGenerator;
import framework.model3D.Position3D;
import net.arnx.jsonic.JSONHint;
public class Character extends Entity{
private String accountURI;
private String name;
private Position3D position;
private Angle angle;
private CharacterModel model;
private String areaURI;
private HashMap<String, Item> itemMap = new HashMap<>();
private static final int UNIQUE_ID_LENGTH = 12;
private Character() {
// JSONDecode時の呼び出し用
}
public Character(String accountURI, String name, Position3D position, Angle angle, CharacterModel model) {
this.accountURI = accountURI;
this.name = name;
this.position = position;
this.angle = angle;
this.model = model;
updateAreaURI();
}
public String getAccountURI() {
return accountURI;
}
public String getName() {
return name;
}
public Position3D getPosition() {
return position;
}
public Angle getAngle() {
return angle;
}
public CharacterModel getModel() {
return model;
}
public String getAreaURI() {
return areaURI;
}
public Item getItem(String itemId) {
return itemMap.get(itemId);
}
public List<Item> getItems() {
List<Item> itemList = new ArrayList<>();
for (Item item : itemMap.values()) {
itemList.add(item);
}
return itemList;
}
public void setName(String name) {
this.name = name;
}
public void setPosition(Position3D position) {
this.position = position;
}
public void setAngle(Angle angle) {
this.angle = angle;
}
public void setModel(CharacterModel model) {
this.model = model;
}
public void setAreaURI(String areaURI) {
this.areaURI = areaURI;
}
public AddressedEntity createItem(String name, int amount) {
Item item = new Item(name, amount);
if (!hasItem(item)) {
String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, itemMap.keySet());
itemMap.put(id, item);
return new IDAddressedEntity(id, item);
}
return null;
}
public boolean hasItem(Item item) {
for (Map.Entry<String, Item> entry : itemMap.entrySet()) {
if (entry.getValue().equals(item)) {
return true;
}
}
return false;
}
public Item changeAmountOfItem(String itemId, int amountOfChange) {
Item item = itemMap.get(itemId).changeAmount(amountOfChange);
if (item.isEmpty()) {
destroyItem(itemId);
}
return item;
}
private void updateAreaURI() {
}
public Item destroyItem(String itemId) {
return itemMap.remove(itemId);
}
}