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}