v3.0.0: added a delay to time freeze press triggering

triggering instantly caused effect order errors, including a dupe bug involving teleport traps
This commit is contained in:
Evan Debenham
2025-01-27 12:05:00 -05:00
parent 8643815e84
commit 4fb3f4401a
2 changed files with 46 additions and 22 deletions

View File

@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
@@ -374,18 +375,29 @@ public class TimekeepersHourglass extends Artifact {
}
public void triggerPresses(){
for (int cell : presses){
Plant p = Dungeon.level.plants.get(cell);
if (p != null){
p.trigger();
}
Trap t = Dungeon.level.traps.get(cell);
if (t != null){
t.trigger();
}
}
ArrayList<Integer> toTrigger = presses;
presses = new ArrayList<>();
Actor.add(new Actor() {
{
actPriority = VFX_PRIO;
}
@Override
protected boolean act() {
for (int cell : toTrigger){
Plant p = Dungeon.level.plants.get(cell);
if (p != null){
p.trigger();
}
Trap t = Dungeon.level.traps.get(cell);
if (t != null){
t.trigger();
}
}
Actor.remove(this);
return true;
}
});
}
public void disarmPresses(){

View File

@@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.plants;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste;
@@ -122,18 +123,29 @@ public class Swiftthistle extends Plant {
}
public void triggerPresses(){
for (int cell : presses){
Plant p = Dungeon.level.plants.get(cell);
if (p != null){
p.trigger();
}
Trap t = Dungeon.level.traps.get(cell);
if (t != null){
t.trigger();
}
}
ArrayList<Integer> toTrigger = presses;
presses = new ArrayList<>();
Actor.add(new Actor() {
{
actPriority = VFX_PRIO;
}
@Override
protected boolean act() {
for (int cell : toTrigger){
Plant p = Dungeon.level.plants.get(cell);
if (p != null){
p.trigger();
}
Trap t = Dungeon.level.traps.get(cell);
if (t != null){
t.trigger();
}
}
Actor.remove(this);
return true;
}
});
}
public void disarmPresses(){