001package com.fs.starfarer.api.util; 002 003 004public class AutoReducingValue { 005 006 public static interface ValueChangedListener { 007 void valueChanged(int prev, int val, AutoReducingValue arv); 008 } 009 010 private float elapsed = 0f; 011 private int value = 0; 012 private float elapsedPerPoint; 013 private final ValueChangedListener listener; 014 015 016 public AutoReducingValue(int value, float elapsedPerPoint, ValueChangedListener listener) { 017 this.value = value; 018 this.elapsedPerPoint = elapsedPerPoint; 019 this.listener = listener; 020 } 021 022 public void advance(float amount) { 023 elapsed += amount; 024 025 if (elapsed >= elapsedPerPoint) { 026 elapsed -= elapsedPerPoint; 027 028 int prev = value; 029 value--; 030 if (value < 0) value = 0; 031 if (prev != value && listener != null) { 032 listener.valueChanged(prev, value, this); 033 } 034 } 035 } 036 037 public int getValue() { 038 return value; 039 } 040 041 public void setValue(int value) { 042 int prev = value; 043 this.value = value; 044 if (prev != value && listener != null) { 045 listener.valueChanged(prev, value, this); 046 } 047 } 048 049 public void increaseValue(int amt) { 050 int prev = value; 051 this.value += amt; 052 if (value < 0) { 053 value = 0; 054 } 055 if (prev != value && listener != null) { 056 listener.valueChanged(prev, value, this); 057 } 058 } 059 060 public void reduceValue(int amt) { 061 int prev = value; 062 this.value -= amt; 063 if (value < 0) { 064 value = 0; 065 } 066 if (prev != value && listener != null) { 067 listener.valueChanged(prev, value, this); 068 } 069 } 070 071}