package thing.ground;

 

import simmasto0.C_ContextCreator;

import thing.C_Rodent;

import thing.I_situated_thing;

 

/** a trap may be opened, closed, full; it can catch rodent

* @author J.Le Fur and M.Diakhate, july 2013, rev. 27.09.13 */

public class C_Trap extends C_BurrowSystem implements data.I_Bandia_constants {

 

// FIELDS

private boolean open = true;

 

// CONSTRUCTOR

 

// METHODS

/** Add rodent in agentList of trap if :

* 1 Trap is open, 2 Rodent is not within the trap or a burrow,

* 3 Trap is not full of rodents, 4 TRAP_LOADING_PROBA >= randomProbability */

public void trapRodent(C_Rodent rodent) {

if (this.open &&

!rodent.trappedOnBoard &&

TRAP_MAX_LOAD >= this.getRodentLoad() &&

C_ContextCreator.randomGeneratorForDeathProb.nextDouble() <= TRAP_LOADING_PROBA) {

this.agentList.add(rodent);

rodent.trappedOnBoard = true;

open = false;

}

else agentLeaving(rodent);// put rodent besides the trap.

}

public void openTrap() {

this.open = true;

}

public void closeTrap() {

this.open = false;

}

public int getRodentLoad() {

int nbRodents = 0;

for (I_situated_thing thing : agentList)

if (thing instanceof C_Rodent) nbRodents++;

return nbRodents;

}

@Override

public String toString() {

return ("trap " + this.getMyID());

}

 

// GETTERS AND SETTERS

public boolean isOpen() {

return open;

}

public boolean hasToChange() {

return !open;// change color only if trap is closed

}

@Override

public int getCarryingCapacity() {

return TRAP_MAX_LOAD;

}

}