SatisfactionMeter.java

package com.vikingz.campustycoon.Game.GameLogic;

import com.vikingz.campustycoon.Game.Maps.Map;
import com.vikingz.campustycoon.UI.Components.Component;
import java.util.Objects;

/**
 * This class is used to manage the satisfaction meter.
 */
public class SatisfactionMeter {
	public static Component satisfactionText;
    private static int satisfactionScore = 0;
    private static int satisfactionModifier = 0;

    /**
     * Gets the satisfaction score.
     * @return
     */
    public static int getSatisfactionScore() {
        return satisfactionScore;
    }

    /**
     * Updates the satisfaction score based on a satisfaction formula.
     */
    public static void updateSatisfactionScore() {
        System.out.println("Satisfaction Function Called");
        satisfactionScore = 0;

        for (int i = 0; i < Map.buildings.size(); i++){
            // Loop through all buildings and check distance etc
            double distance;
            System.out.println(i);
            System.out.println(Map.buildings.get(i).buildingName);

            if (Objects.equals(Map.buildings.get(i).buildingName, "ACCOMMODATION")){
                for (int j = 0; j < Map.buildings.size(); j++){
                    // Distance falloff function
                    distance = Math.sqrt(Math.pow((Map.buildings.get(i).position.x - Map.buildings.get(j).position.x), 2) + Math.pow((Map.buildings.get(i).position.y - Map.buildings.get(j).position.y), 2));
                    System.out.println(distance);
                    System.out.println(Map.buildings.get(j).score);
                    satisfactionScore += (int) Math.round(Map.buildings.get(j).score * -Math.tanh(0.05 * distance - 0.5) + 1);
                }
            }
        }

		SatisfactionMeter.updateDisplay();
    }

    /**
     * Modifies the satisfaction score.
     * @param value
     */
    public static void modifySatisfactionScore(int value) {
        satisfactionModifier += value;
		SatisfactionMeter.updateDisplay();
    }

    /**
     *  Updates the display.
     */
	public static void updateDisplay() {
		if (satisfactionText == null) {
			return;
		}
        satisfactionScore += satisfactionModifier;
		satisfactionText.text = String.valueOf(satisfactionScore);
	}
}