001package com.fs.starfarer.api.impl.campaign.shared; 002 003import java.util.HashMap; 004import java.util.Map; 005 006import com.fs.starfarer.api.Global; 007import com.fs.starfarer.api.campaign.FactionAPI; 008import com.fs.starfarer.api.impl.campaign.ids.Factions; 009 010public class ReputationChangeTracker { 011 public static class ReputationChangeData { 012 private long lastPositiveChange; 013 private long lastNegativeChange; 014 private float lastValue; 015 016 public long getLastPositiveChange() { 017 return lastPositiveChange; 018 } 019 public void setLastPositiveChange(long lastChange) { 020 this.lastPositiveChange = lastChange; 021 } 022 public float getLastValue() { 023 return lastValue; 024 } 025 public void setLastValue(float lastValue) { 026 this.lastValue = lastValue; 027 } 028 public long getLastNegativeChange() { 029 return lastNegativeChange; 030 } 031 public void setLastNegativeChange(long lastNegativeChange) { 032 this.lastNegativeChange = lastNegativeChange; 033 } 034 } 035 036 private Map<String, ReputationChangeData> repData = new HashMap<String, ReputationChangeData>(); 037 038 public void advance(float days) { 039 040 for (FactionAPI faction : Global.getSector().getAllFactions()) { 041 if (faction.isPlayerFaction()) continue; 042 043 ReputationChangeData data = getDataFor(faction.getId()); 044 float rep = faction.getRelationship(Factions.PLAYER); 045 if (data.getLastValue() != rep) { 046 if (data.getLastValue() > rep) { 047 data.setLastNegativeChange(Global.getSector().getClock().getTimestamp()); 048 } else { 049 data.setLastPositiveChange(Global.getSector().getClock().getTimestamp()); 050 } 051 data.setLastValue(rep); 052 } 053 } 054 } 055 056 public float getDaysSinceLastPositiveChange(String factionId) { 057 ReputationChangeData data = getDataFor(factionId); 058 return Global.getSector().getClock().getElapsedDaysSince(data.getLastPositiveChange()); 059 } 060 public float getDaysSinceLastNegativeChange(String factionId) { 061 ReputationChangeData data = getDataFor(factionId); 062 return Global.getSector().getClock().getElapsedDaysSince(data.getLastPositiveChange()); 063 } 064 065 public ReputationChangeData getDataFor(String factionId) { 066 ReputationChangeData data = repData.get(factionId); 067 if (data == null) { 068 data = new ReputationChangeData(); 069 FactionAPI faction = Global.getSector().getFaction(factionId); 070 float rep = faction.getRelationship(Factions.PLAYER); 071 data.setLastValue(rep); 072 data.setLastPositiveChange(Global.getSector().getClock().getTimestamp()); 073 data.setLastNegativeChange(Global.getSector().getClock().getTimestamp()); 074 repData.put(factionId, data); 075 } 076 return data; 077 } 078} 079 080 081 082 083 084 085 086 087 088 089