79 if (!
plugin.isDespawning()) {
80 plugin.despawn(0f, 1f + Misc.random.nextFloat(), Misc.random);
85 boolean forceAdd =
false;
87 SlipstreamParams2 params =
new SlipstreamParams2();
92 params.minSpeed = Misc.getSpeedForBurnLevel(params.burnLevel - 5);
93 params.maxSpeed = Misc.getSpeedForBurnLevel(params.burnLevel + 5);
94 params.lineLengthFractionOfSpeed = 0.25f * Math.max(0.25f, Math.min(1f, 30f / (
float) params.burnLevel));
101 prev =
new Vector2f(loc);
104 if (
behavior instanceof GhostBehaviorWithSlipstream) {
105 GhostBehaviorWithSlipstream b = (GhostBehaviorWithSlipstream)
behavior;
113 float distPerSegment = 300f;
115 float dist = Misc.getDistance(loc,
prev);
116 if (dist >= distPerSegment || forceAdd) {
126 plugin.addSegment(loc, width);
127 prev =
new Vector2f(loc);
129 List<SlipstreamSegment> segments =
plugin.getSegments();
130 if (segments.size() == 1) {
131 segments.get(0).bMult = 0f;
132 segments.get(0).fader.forceOut();
134 segments.get(segments.size() - 1).fader.forceOut();
138 List<SlipstreamSegment>
remove =
new ArrayList<SlipstreamSegment>();
139 for (
int i = 0; i < segments.size() -
maxSegments - 1; i++) {
140 SlipstreamSegment curr = segments.get(i);
141 SlipstreamSegment next = segments.get(i + 1);
142 curr.fader.setDurationOut(3f);
143 curr.fader.fadeOut();
144 if (curr.fader.isFadedOut() && next.fader.isFadedOut()) {
154 List<SlipstreamSegment> segments =
plugin.getSegments();
156 for (
int i = Math.max(0, segments.size() -
maxSegments); i < segments.size() - 1; i++) {
157 SlipstreamSegment curr = segments.get(i);
158 SlipstreamSegment next = segments.get(i + 1);
160 if (!curr.fader.isFadedOut()) {
161 dist = Misc.getDistance(
ghost.
getEntity().getLocation(), curr.loc);
162 float b = dist / fadeInDist;
169 if (next.fader.getBrightness() == 0 && !next.fader.isFadingOut()) {
170 float durIn = distPerSegment / Math.max(
ghost.
getEntity().getVelocity().length(), 1f);
171 if (durIn > 2f) durIn = 2f;
173 curr.fader.setDurationIn(durIn);