/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.entities;
import com.badlogic.gdx.math.MathUtils;
import com.happydroids.droidtowers.achievements.AchievementEngine;
import com.happydroids.droidtowers.grid.GameGrid;
import com.happydroids.droidtowers.gui.CommercialSpacePopOver;
import com.happydroids.droidtowers.gui.GridObjectPopOver;
import com.happydroids.droidtowers.types.CommercialType;
import com.happydroids.droidtowers.utils.Random;
public class CommercialSpace extends Room {
private int jobsFilled;
private long lastJobUpdateTime;
public CommercialSpace(CommercialType commercialType, GameGrid gameGrid) {
super(commercialType, gameGrid);
}
@Override
public GridObjectPopOver makePopOver() {
return new CommercialSpacePopOver(this);
}
public void updateJobs() {
jobsFilled = 0;
if (isConnectedToTransport()) {
CommercialType commercialType = (CommercialType) getGridObjectType();
if (Player.instance().getTotalPopulation() > commercialType.getPopulationRequired()) {
int jobsProvided = commercialType.getJobsProvided();
if (jobsProvided > 0) {
jobsFilled = Random.randomInt(jobsProvided / 2, jobsProvided);
}
}
}
}
public int getJobsFilled() {
return jobsFilled;
}
@Override
public float getNoiseLevel() {
if (jobsFilled > 0) {
return gridObjectType.getNoiseLevel() * ((float) jobsFilled / ((CommercialType) gridObjectType).getJobsProvided());
}
return 0;
}
@Override
public int getCoinsEarned() {
if (jobsFilled > 0 && isConnectedToTransport()) {
return (int) Math.ceil(gridObjectType.getCoinsEarned() * getDesirability() + getUpkeepCost() + gridObjectType.getCoinsEarned() * 0.06125f * getNumVisitors());
}
return 0;
}
@Override
public int getUpkeepCost() {
if (jobsFilled == 0) {
return 0;
}
return jobsFilled * 500;
}
@Override
public float getDesirability() {
if (canEmployDroids() && jobsFilled == 0) {
return 0f;
}
return super.getDesirability();
}
public float getEmploymentLevel() {
int jobsProvided = ((CommercialType) gridObjectType).getJobsProvided();
if (jobsProvided > 0) {
return MathUtils.clamp(jobsFilled / (float) jobsProvided, 0, 1);
}
return 0;
}
public int getJobsProvided() {
return ((CommercialType) gridObjectType).getJobsProvided();
}
@Override
protected void checkDecals() {
super.checkDecals();
boolean unlockedJanitors = AchievementEngine.instance().findById("build5commercialspaces").hasGivenReward();
boolean unlockedMaids = AchievementEngine.instance().findById("build8hotelroom").hasGivenReward();
if (unlockedJanitors && unlockedMaids && getDirtLevel() >= 0.95f && jobsFilled > 0) {
decalsToDraw.add(DECAL_DIRTY);
} else {
decalsToDraw.remove(DECAL_DIRTY);
}
}
@Override public boolean needsDroids() {
return false;
}
protected boolean canEmployDroids() {
return true;
}
@Override
public float getDirtLevel() {
if (canEmployDroids() && jobsFilled == 0) {
return 0;
}
return super.getDirtLevel();
}
}