/*
* Copyright (c) 2012. HappyDroids LLC, All rights reserved.
*/
package com.happydroids.droidtowers.gamestate.actions;
import com.badlogic.gdx.math.MathUtils;
import com.badlogic.gdx.utils.Array;
import com.happydroids.droidtowers.achievements.Achievement;
import com.happydroids.droidtowers.achievements.AchievementEngine;
import com.happydroids.droidtowers.entities.GridObject;
import com.happydroids.droidtowers.entities.Player;
import com.happydroids.droidtowers.grid.GameGrid;
import com.happydroids.droidtowers.math.StatLog;
public class StarRatingCalculator extends GameGridAction {
private final StatLog roomDesirability;
private Achievement dubai7StarWonder;
private float maxStars;
public StarRatingCalculator(GameGrid gameGrid, float frequency) {
super(gameGrid, frequency);
roomDesirability = new StatLog();
dubai7StarWonder = AchievementEngine.instance().findById("dubai-7-star-wonder");
maxStars = 5f;
}
@Override
public void run() {
roomDesirability.reset(gameGrid.getObjects().size);
Array<GridObject> objects = gameGrid.getObjects();
for (int i = 0, objectsSize = objects.size; i < objectsSize; i++) {
GridObject gridObject = objects.get(i);
roomDesirability.record(gridObject.getDesirability());
}
Player player = Player.instance();
float roomDesirabilityAverage;
float populationFilled = 0;
float jobsFilled = 0;
float incomeRatio = 0;
roomDesirabilityAverage = roomDesirability.getAverage();
if (player.getMaxPopulation() > 0) {
populationFilled = player.getPopulationResidency() / (float) player.getMaxPopulation();
}
if (player.getJobsMax() > 0) {
jobsFilled = player.getJobsFilled() / (float) player.getJobsMax();
}
if (player.getCurrentIncome() > 0) {
incomeRatio = (player.getCurrentIncome() - player.getCurrentExpenses()) / (float) (player.getCurrentIncome() + player.getCurrentExpenses());
}
player.setBudgetRating(incomeRatio);
player.setEmploymentRating(jobsFilled);
player.setPopulationRating(populationFilled);
player.setDesirabilityRating(roomDesirabilityAverage);
float compositeRating = (roomDesirabilityAverage * 0.33f) + (((populationFilled + jobsFilled) * 0.5f) * 0.33f) + (incomeRatio * 0.33f);
if (dubai7StarWonder.isCompleted()) {
maxStars = 7f;
}
float starRating = MathUtils.clamp(compositeRating * maxStars, 0f, maxStars);
player.setStarRating(starRating);
}
public float calculateJobsRating() {
return 0f;
}
}