Housing: Occupant - ellenvoegtli/simcity GitHub Wiki
###Data
OwnerAgent owner;
houseAgent house;
boolean renter;
String meal;
enum occupantState { fixing, fixed, hungry, needMarket, shopping, reStocking, cooking, eating, nothing};
List<String> needsWork;
List<String> needFd;
###Messages
msgHungry()
{
occupantState = hungry;
stateChanged();
}
msgNeedsMaintenance(String appName)
{
needsWork.add(appName);
ocupantState = fixing;
stateChanged();
}
msgFixed(String appName)
{
occupantState = fixed;
stateChanged();
}
msgNeedFood(List<String> buyFood)
{
for(String f : buyFood)
{
needFd.add(f);
}
occupantState = needMarket;
stateChanged();
}
msgFoodAvailable(String foodCh)
{
occupantState = cooking;
stateChanged;
}
msgCooked(String meal)
{
occupantState = eating;
stateChanged();
}
###Scheduler
if(needsWork.isEmpty() && fState == fixState.nothing && eState != eatingState.hungry )
{
checkMaintenance();
return true;
}
if (eState == eatingState.hungry && sState == shoppingState.nothing)
{
wantsToEat(meal);
}
if (sState == shoppingState.needMarket)
{
goToStore();
}
if(!needsWork.isEmpty() && eState == eatingState.cooking)
{
serviceAppliance();
}
if (sState == shoppingState.shopping)
{
//nothing?
}
if (sState == shoppingState.reStocking)
{
sState = shoppingState.nothing;
eState = eatingState.hungry;
}
if (eState == eatingState.cooking)
{
cookAMeal();
}
if(eState == eatingState.eating)
{
EatFood();
}
if(eState == eatingState.washing)
{
GoWashDishes();
}
if (eState == eatingState.nothing && sState == shoppingState.nothing && (fState == fixState.nothing || fState == fixState.fixed) )
{
GoRest();
}
if(owner == false)
{
PayRent();
}
if(!person.getRoles().isEmpty()) {//makes the person leave the home if there's something else to do
setInactive();
}
###Actions
public void serviceAppliance()
{
synchronized(needsWork)
{
for(String app : needsWork)
{
if(owner == false)
{
landLord.msgPleaseFix(this, app);
}
if(owner == true)
{
fixAppliance(app);
}
needsWork.remove(app);
}
}
fState = fixState.fixed;
}
public void fixAppliance(String app)
{
int xPos = 0;
int yPos = 0;
for (Appliance appl : home.Appliances)
{
if(appl.appliance.equals(app))
{
xPos = appl.getXPos();
yPos = appl.getYPos();
appl.setWorking(true);
}
}
gui.DoGoToAppliance(xPos, yPos);
fState = fixState.fixed;
}
public void wantsToEat(String mealChoice)
{
if(owner) gui.DoGoToFridge();
if(!owner) gui.DoGoToFridgeA();
home.checkSupplies(mealChoice);
}
public void goToStore()
{
gui.DoLeave();
setInactive();
person.msgGoToMarket();
sState = shoppingState.shopping;
}
public void restockKitchen()
{
home.GroceryListDone();
sState = shoppingState.reStocking;
}
public void cookAMeal()
{
if(owner) gui.DoGoToStove();
if(!owner) gui.DoGoToStoveA();
eState.eatingState= eating;
}
public void EatFood()
{
if (owner) gui.DoGoToKitchenTable();
if(!owner) gui.DoGoToKitchenTableA();
eState = eatingState.washing;