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;
⚠️ **GitHub.com Fallback** ⚠️