001package com.fs.starfarer.api.util; 002 003 004public class FaderUtil { 005 006 public static enum State {IN, OUT, IDLE}; 007 008 private float currBrightness; 009 private float durationIn, durationOut; 010 private State state; 011 012 private boolean bounceDown = false; 013 private boolean bounceUp = false; 014 015 public FaderUtil(float currBrightness, float duration) { 016 this.currBrightness = currBrightness; 017 this.durationIn = duration; 018 this.durationOut = duration; 019 state = State.IDLE; 020 } 021 022 public FaderUtil(float currBrightness, float durationIn, float durationOut) { 023 this.currBrightness = currBrightness; 024 this.durationIn = durationIn; 025 this.durationOut = durationOut; 026 state = State.IDLE; 027 } 028 029 public FaderUtil(float currBrightness, float durationIn, float durationOut, boolean bounceUp, boolean bounceDown) { 030 this(currBrightness, durationIn, durationOut); 031 setBounce(bounceUp, bounceDown); 032 } 033 034 public State getState() { 035 return state; 036 } 037 038 public void setState(State state) { 039 this.state = state; 040 } 041 042 public void setBounceDown(boolean bounceDown) { 043 this.bounceDown = bounceDown; 044 } 045 046 public void setBounceUp(boolean bounceUp) { 047 this.bounceUp = bounceUp; 048 } 049 050 public void setBounce(boolean up, boolean down) { 051 this.bounceUp = up; 052 this.bounceDown = down; 053 } 054 055 public void forceIn() { 056 currBrightness = 1; 057 if (bounceDown) state = State.OUT; 058 else state = State.IDLE; 059 } 060 061 public void forceOut() { 062 currBrightness = 0; 063 if (bounceUp) state = State.IN; 064 else state = State.IDLE; 065 } 066 067 public void fadeIn() { 068 if (durationIn <= 0) { 069 forceIn(); 070 } else { 071 state = State.IN; 072 } 073 } 074 075 public void fadeOut() { 076 if (durationOut <= 0) { 077 forceOut(); 078 } else { 079 state = State.OUT; 080 } 081 } 082 083 public boolean isFadedOut() { 084 return getBrightness() == 0 && (isIdle() || isFadingOut()); 085 } 086 087 public boolean isFadedIn() { 088 return getBrightness() == 1 && isIdle(); 089 } 090 091 public boolean isFadingOut() { 092 return state == State.OUT; 093 } 094 095 public boolean isFadingIn() { 096 return state == State.IN; 097 } 098 099 public boolean isIdle() { 100 return state == State.IDLE; 101 } 102 103 public void advance(float amount) { 104 if (state == State.IDLE) return; 105 106 if (state == State.IN) { 107 if (currBrightness == 1) { 108 if (bounceDown) state = State.OUT; 109 else state = State.IDLE; 110 return; 111 } 112 float delta = amount / durationIn; 113 currBrightness += delta; 114 if (currBrightness > 1) { 115 currBrightness = 1; 116 } 117 } else if (state == State.OUT) { 118 if (currBrightness == 0) { 119 if (bounceUp) state = State.IN; 120 else state = State.IDLE; 121 return; 122 } 123 float delta = amount / durationOut; 124 currBrightness -= delta; 125 if (currBrightness < 0) { 126 currBrightness = 0; 127 } 128 } 129 } 130 131 public void setDurationIn(float durationIn) { 132 this.durationIn = durationIn; 133 } 134 135 public void setDurationOut(float durationOut) { 136 this.durationOut = durationOut; 137 } 138 139 public FaderUtil setDuration(float in, float out) { 140 this.durationIn = in; 141 this.durationOut = out; 142 return this; 143 } 144 145 public float getBrightness() { 146 return currBrightness; 147 } 148 149 public float getDurationIn() { 150 return durationIn; 151 } 152 153 public float getDurationOut() { 154 return durationOut; 155 } 156 157 public void setBrightness(float brightness) { 158 this.currBrightness = brightness; 159 } 160 161 @Override 162 public String toString() { 163 return String.format("%s, curr: %f, in: %f, out: %f, up: %b, down: %b", state.name(), 164 currBrightness, durationIn, durationOut, 165 bounceUp, bounceDown); 166 } 167 168 public boolean isBounceDown() { 169 return bounceDown; 170 } 171 172 public boolean isBounceUp() { 173 return bounceUp; 174 } 175 176 177 178}