/* * Copyright (c) 2012. HappyDroids LLC, All rights reserved. */ package com.happydroids.droidtowers.graphics; import com.badlogic.gdx.graphics.Color; import com.google.common.base.Function; import com.happydroids.droidtowers.entities.CommercialSpace; import com.happydroids.droidtowers.entities.GridObject; import com.happydroids.droidtowers.entities.HotelRoom; import com.happydroids.droidtowers.entities.Room; import com.happydroids.droidtowers.types.CommercialType; import com.happydroids.droidtowers.types.RoomType; import org.apach3.commons.lang3.StringUtils; import javax.annotation.Nullable; import static com.happydroids.droidtowers.ColorUtil.rgba; @SuppressWarnings("ALL") public enum Overlays { NOISE_LEVEL("#f20000") { @Override public Function<GridObject, Float> getMethod() { return null; } }, CRIME_LEVEL("#8100c2") { @Override public Function<GridObject, Float> getMethod() { return new Function<GridObject, Float>() { public Float apply(@Nullable GridObject gridObject) { return gridObject.getSurroundingCrimeLevel(); } }; } }, POPULATION_LEVEL("#2000c2") { @Override public Function<GridObject, Float> getMethod() { return new Function<GridObject, Float>() { public Float apply(@Nullable GridObject gridObject) { if (gridObject instanceof Room) { float populationMax = ((RoomType) gridObject.getGridObjectType()).getPopulationMax(); if (populationMax > 0f) { return ((Room) gridObject).getNumResidents() / populationMax; } } return null; } }; } }, EMPLOYMENT_LEVEL("#00c200") { @Override public Function<GridObject, Float> getMethod() { return new Function<GridObject, Float>() { public Float apply(@Nullable GridObject gridObject) { if (gridObject instanceof CommercialSpace) { float jobsProvided = ((CommercialType) gridObject.getGridObjectType()).getJobsProvided(); if (jobsProvided > 0f) { return ((CommercialSpace) gridObject).getJobsFilled() / jobsProvided; } } return null; } }; } }, DESIRABILITY_LEVEL("#a3da00") { @Override public Function<GridObject, Float> getMethod() { return new Function<GridObject, Float>() { public Float apply(@Nullable GridObject gridObject) { if (gridObject != null) { return gridObject.getDesirability(); } return null; } }; } }, DIRT_LEVEL("#6f5506") { @Override public Function<GridObject, Float> getMethod() { return new Function<GridObject, Float>() { public Float apply(@Nullable GridObject gridObject) { if (gridObject instanceof CommercialSpace || gridObject instanceof HotelRoom) { return ((CommercialSpace) gridObject).getDirtLevel(); } return null; } }; } }; private Overlays(Color color) { this.color = color; } private Overlays(String colorAsHex) { this(rgba(colorAsHex)); } public Color getColor(float alpha) { this.color.a = alpha; return this.color; } private final Color color; public String toString() { return StringUtils.capitalize(name().substring(0, name().indexOf("_LEVEL")).toLowerCase()); } public abstract Function<GridObject, Float> getMethod(); }