Skip to content

Commit 0f3dca7

Browse files
ChronokenTheComputerGeek2
authored andcommitted
Updated Orbit Effect:
- added orbit-horiz-offset, sets the start horizontal offset of the orbit (in degrees) - added orbit-horiz-expand-radius, (float) expands the horizontal orbit radius by that value (required horiz-expand-delay) - added orbit-horiz-expand-delay, (int) expands the horizontal orbit radius per the defined amount of ticks (required horiz-expand-radius) - added orbit-vert-expand-radius, (float) expands the vertical orbit radius by that value (required vert-expand-delay) - added orbit-vert-expand-delay, (int) expands the vertical orbit radius per the defined amount of ticks (required vert-expand-radius)
1 parent 29fc18d commit 0f3dca7

File tree

1 file changed

+44
-8
lines changed

1 file changed

+44
-8
lines changed

src/com/nisovin/magicspells/spelleffects/SpellEffect.java

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
package com.nisovin.magicspells.spelleffects;
22

3-
import java.util.HashMap;
43
import java.util.List;
4+
import java.util.HashMap;
55

6-
import com.nisovin.magicspells.util.TimeUtil;
76
import org.bukkit.Location;
8-
import org.bukkit.configuration.ConfigurationSection;
9-
import org.bukkit.entity.Entity;
107
import org.bukkit.util.Vector;
8+
import org.bukkit.entity.Entity;
9+
import org.bukkit.configuration.ConfigurationSection;
1110

12-
import com.nisovin.magicspells.DebugHandler;
11+
import com.nisovin.magicspells.util.Util;
1312
import com.nisovin.magicspells.MagicSpells;
14-
import com.nisovin.magicspells.castmodifiers.ModifierSet;
13+
import com.nisovin.magicspells.DebugHandler;
14+
import com.nisovin.magicspells.util.TimeUtil;
1515
import com.nisovin.magicspells.util.ConfigData;
16+
import com.nisovin.magicspells.castmodifiers.ModifierSet;
1617
import com.nisovin.magicspells.util.expression.Expression;
1718

1819
/**
@@ -54,7 +55,22 @@ public abstract class SpellEffect {
5455

5556
@ConfigData(field="orbit-tick-interval", dataType="int", defaultValue="2")
5657
int tickInterval = 2;
57-
58+
59+
@ConfigData(field="orbit-horiz-offset", dataType="double", defaultValue="0")
60+
float horizOffset = 0;
61+
62+
@ConfigData(field="orbit-horiz-expand-radius", dataType="double", defaultValue="0")
63+
float horizExpandRadius = 0;
64+
65+
@ConfigData(field="orbit-vert-expand-radius", dataType="double", defaultValue="0")
66+
float vertExpandRadius = 0;
67+
68+
@ConfigData(field="orbit-horiz-expand-delay", dataType="double", defaultValue="0")
69+
int horizExpandDelay = 0;
70+
71+
@ConfigData(field="orbit-vert-expand-delay", dataType="double", defaultValue="0")
72+
int vertExpandDelay = 0;
73+
5874
float ticksPerSecond;
5975
float distancePerTick;
6076
int ticksPerRevolution;
@@ -89,6 +105,11 @@ public final void loadFromConfiguration(ConfigurationSection config) {
89105
distanceBetween = config.getDouble("distance-between", distanceBetween);
90106
effectInterval = config.getInt("effect-interval", effectInterval);
91107

108+
horizExpandRadius = (float)config.getDouble("orbit-horiz-expand-radius", horizExpandRadius);
109+
horizExpandDelay = config.getInt("orbit-horiz-expand-delay", horizExpandDelay);
110+
vertExpandRadius = (float)config.getDouble("orbit-vert-expand-radius", vertExpandRadius);
111+
vertExpandDelay = config.getInt("orbit-vert-expand-delay", vertExpandDelay);
112+
horizOffset = (float)config.getDouble("orbit-horiz-offset", horizOffset);
92113
orbitRadius = (float)config.getDouble("orbit-radius", orbitRadius);
93114
secondsPerRevolution = (float)config.getDouble("orbit-seconds-per-revolution", secondsPerRevolution);
94115
counterClockwise = config.getBoolean("orbit-counter-clockwise", counterClockwise);
@@ -200,14 +221,27 @@ class OrbitTracker implements Runnable {
200221
SpellEffectActiveChecker checker;
201222
Vector currentPosition;
202223
int orbitTrackerTaskId;
224+
int repeatingHorizTaskId;
225+
int repeatingVertTaskId;
226+
float orbRadius;
227+
float orbHeight;
203228

204229
int counter = 0;
205230

206231
public OrbitTracker(Entity entity, SpellEffectActiveChecker checker) {
207232
this.entity = entity;
208233
this.checker = checker;
209234
this.currentPosition = entity.getLocation().getDirection().setY(0);
235+
Util.rotateVector(this.currentPosition, horizOffset);
236+
this.orbRadius = orbitRadius;
237+
this.orbHeight = orbitYOffset;
210238
this.orbitTrackerTaskId = MagicSpells.scheduleRepeatingTask(this, 0, tickInterval);
239+
if (horizExpandDelay > 0 && horizExpandRadius != 0) {
240+
this.repeatingHorizTaskId = MagicSpells.scheduleRepeatingTask(() -> this.orbRadius += horizExpandRadius, horizExpandDelay, horizExpandDelay);
241+
}
242+
if (vertExpandDelay > 0 && vertExpandRadius != 0) {
243+
this.repeatingVertTaskId = MagicSpells.scheduleRepeatingTask(() -> this.orbHeight += vertExpandRadius, vertExpandDelay, vertExpandDelay);
244+
}
211245
}
212246

213247
@Override
@@ -240,11 +274,13 @@ private Location getLocation() {
240274
perp = new Vector(-currentPosition.getZ(), 0, currentPosition.getX());
241275
}
242276
currentPosition.add(perp.multiply(distancePerTick)).normalize();
243-
return entity.getLocation().add(0, orbitYOffset, 0).add(currentPosition.clone().multiply(orbitRadius));
277+
return entity.getLocation().add(0, orbHeight, 0).add(currentPosition.clone().multiply(orbRadius));
244278
}
245279

246280
public void stop() {
247281
MagicSpells.cancelTask(orbitTrackerTaskId);
282+
MagicSpells.cancelTask(repeatingHorizTaskId);
283+
MagicSpells.cancelTask(repeatingVertTaskId);
248284
entity = null;
249285
currentPosition = null;
250286
}

0 commit comments

Comments
 (0)