Newer
Older
CactusServer / src / main / java / cactusServer / entities / Character.java
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);
	}
}