/**
*
*/
package cz.cuni.mff.abacs.burglar.logics.objects.agents;
import cz.cuni.mff.abacs.burglar.logics.DataMap;
import cz.cuni.mff.abacs.burglar.logics.objects.BaseInterface;
import cz.cuni.mff.abacs.burglar.logics.objects.BaseObject;
import cz.cuni.mff.abacs.burglar.logics.objects.Room;
import cz.cuni.mff.abacs.burglar.logics.objects.items.Inventory;
import cz.cuni.mff.abacs.burglar.logics.objects.items.Item;
import cz.cuni.mff.abacs.burglar.logics.objects.positions.Position;
/**
* The protagonist of the game.
*
* @author abacs
*
*/
public class Burglar extends BaseAgent implements Agent {
/** Whether he is hidden from security cameras. */
protected boolean _isDisguised = false;
// -------------------------------------------------------------------------
// constructors:
/**
*
*
* @param id
* @param position
* @param aim
* @param itemIdToCollect
*/
public Burglar(
int id,
Position position,
Room aim,
int itemIdToCollect,
DataMap referenceMap
) {
super(
id,
BaseObject.Type.BURGLAR,
position,
new BurglarGoal(aim.getId(), itemIdToCollect),
referenceMap
);
}
/**
*
*
* @param original
* @param referenceMap
*/
protected Burglar(Burglar original, DataMap referenceMap) {
super(original, referenceMap);
this._isDisguised = original._isDisguised;
this._goals = new BurglarGoal((BurglarGoal)original._goals);
}
// -------------------------------------------------------------------------
/**
* Sets him hidden, or reveals him.
*/
public void setIsDisguised(boolean isDisguised) {
this._isDisguised = isDisguised;
}
/**
* Is he hidden from cameras?
*/
public boolean isDisguised() {
return this._isDisguised;
}
// -------------------------------------------------------------------------
/**
* Sets the aim of the burglar where it has to reach to finish the level.
*
* @param roomId identifier of the room
*/
public void setAimId(int roomId) {
((BurglarGoal)(this._goals)).setAimId(roomId);
}
/**
* Which room the burglar has to reach in order to finish the level.
*
* @return room identifier
*/
public int getAimId() {
return ((BurglarGoal)(this._goals)).getAimId();
}
/**
* Sets the treasure id to collect.
*/
public void setItemIdToCollect(int itemId) {
((BurglarGoal)(this._goals)).setItemIdToCollect(itemId);
}
/**
* Returns the treasure id to collect.
*/
public int getItemIdToCollect() {
return ((BurglarGoal)(this._goals)).getItemIdToCollect();
}
// -------------------------------------------------------------------------
/**
* Checks whether the goals are completed.
*/
public boolean isSatisfied() {
return this._goals.isSatisfied(this);
}
// -------------------------------------------------------------------------
@Override
public void addItem(Item item) {
super.addItem(item);
if(item.isTypeOf(Type.UNIFORM))
this._isDisguised = true;
}
@Override
public boolean pickUp(Inventory inventory, Item item) {
boolean result = super.pickUp(inventory, item);
if(result && item.isTypeOf(Type.UNIFORM))
this._isDisguised = true;
return result;
}
@Override
public Item removeItem(int id) {
Item result = super.removeItem(id);
if(result != null && result.isTypeOf(Type.UNIFORM))
this._isDisguised = false;
return result;
}
// -------------------------------------------------------------------------
@Override
public void copyChangeables(Agent original) {
assert(original.isTypeOf(BaseInterface.Type.BURGLAR));
super.copyChangeables((BaseAgent)original);
}
@Override
public Agent copy(DataMap reference) {
return new Burglar(this, reference);
}
}