001package com.fs.starfarer.api.util;
002
003public class MutatingValueUtil {
004
005        private float value;
006        
007        private float min;
008        private float max;
009        
010        private float rate;
011        private float rateSign;
012        private float rateMult = 1f;
013        private float valueMult = 1f;
014        
015        private float sign = 0;
016
017        public MutatingValueUtil() {
018                
019        }
020        
021        public MutatingValueUtil(float min, float max, float rate) {
022                this.min = min;
023                this.max = max;
024                this.rate = Math.abs(rate);
025                
026                value = min + (float) Math.random() * (max - min);
027                rateSign = Math.signum(rate);
028        }
029        
030        public void advance(float amount) {
031                if (rateSign != 0) {
032                        value += amount * rate * rateSign * rateMult;
033                } else {
034                        value += amount * rate * rateMult;
035                }
036                if (value > max) {
037                        rateSign = -1f;
038                } else if (value < min) {
039                        rateSign = 1f;
040                }
041        }
042        
043        public float getRateMult() {
044                return rateMult;
045        }
046
047        public void setRateMult(float rateMult) {
048                this.rateMult = rateMult;
049        }
050
051        public float getValue() {
052                if (sign != 0) return value * sign * valueMult;
053                return value * valueMult;
054        }
055        
056
057        public float getValueMult() {
058                return valueMult;
059        }
060
061        public void setValueMult(float valueMult) {
062                this.valueMult = valueMult;
063        }
064
065        public void setValue(float value) {
066                this.value = value;
067        }
068
069        public float getMin() {
070                return min;
071        }
072
073        public void setMin(float min) {
074                this.min = min;
075        }
076
077        public float getMax() {
078                return max;
079        }
080
081        public void setMax(float max) {
082                this.max = max;
083        }
084
085        public float getRate() {
086                return rate;
087        }
088
089        public void setRate(float rate) {
090                //System.out.println("RATE: " + rate);
091                this.rate = Math.abs(rate);
092                //rateSign = Math.signum(rate);
093        }
094
095        public float getSign() {
096                return sign;
097        }
098
099        public void setSign(float sign) {
100                this.sign = Math.signum(sign);
101        }
102        
103        public void setRandomSign() {
104                sign = (float) Math.signum(Math.random() - 0.5f);
105                if (sign == 0) sign = 1;
106        }
107        public void setRandomRateSign() {
108                rateSign = (float) Math.signum(Math.random() - 0.5f);
109                if (rateSign == 0) rateSign = 1;
110        }
111
112
113        public float getRateSign() {
114                return rateSign;
115        }
116
117
118        public void setRateSign(float rateSign) {
119                this.rateSign = rateSign;
120        }
121        
122        
123        
124}