Skip to content
Daniel Grace edited this page Feb 11, 2018 · 2 revisions

Truth be told, I haven't fully used this yet, either. Here are my in-progress implementations of some of these Interfaces. There may be bugs, but it might help you figure out what I'm intending:

public class QuenchThirstGoal implements Goal<CharacterState> {
	@Override
	public String getName() {
		return "Quench Thirst";
	}

	@Override
	public boolean isSatisfied(CharacterState state) {
		if (state.isThirsty) return false;
		return true;
	}

	@Override
	public int distance(CharacterState state) {
		if (state.isThirsty) return 1;
		return 0;
	}	
}

public class DrinkBehavior implements Behavior<CharacterState, Character> {
	private ComponentMapper<InventoryComponent> inventoryComponentMapper;

	public DrinkBehavior() {
		this.inventoryComponentMapper = ComponentMapper.getFor(InventoryComponent.class);
	}

	@Override
	public int getCost(Character c) {
		return 1;
	}

	@Override
	public boolean canRun(CharacterState state, Character character) {
		InventoryComponent inventory = this.inventoryComponentMapper.get(character);
		if (inventory == null)
			return false;
		if (inventory.hasItem(WaterFlask.class))
			return true;
		return false;
	}

	@Override
	public CharacterState ifRan(CharacterState state, Character character) {
		CharacterState tmp = state.clone();
		tmp.isThirsty = false;
		return tmp;
	}

	@Override
	public String getName() {
		return "Drink Water";
	}
}

public class CharacterState implements WorldState {
	public boolean isThirsty = true;

	public CharacterState clone() {
		CharacterState tmp = new CharacterState();
		tmp.isThirsty = this.isThirsty;
		return tmp;
	}
}

Clone this wiki locally