From 9e79aab869d76893d6e06cc5e280f90358ab95ef Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 30 Jan 2015 17:16:05 -0500 Subject: [PATCH] Merging 1.7.5 Source: actors/buffs changes --- .../actors/buffs/Buff.java | 26 ++++++++++++----- .../actors/buffs/Charm.java | 27 ++++++++--------- .../actors/buffs/FlavourBuff.java | 2 +- .../actors/buffs/Frost.java | 2 +- .../actors/buffs/Light.java | 1 - .../actors/buffs/Paralysis.java | 10 ++++++- .../actors/buffs/SnipersMark.java | 23 +++++++++++++-- .../actors/buffs/Terror.java | 29 ++++++++++++------- 8 files changed, 82 insertions(+), 38 deletions(-) diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java index 93d474eb4..dceb8656e 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Buff.java @@ -56,19 +56,29 @@ public class Buff extends Actor { public int icon() { return BuffIndicator.NONE; } - + + public static T append( Char target, Class buffClass ) { + try { + T buff = buffClass.newInstance(); + buff.attachTo( target ); + return buff; + } catch (Exception e) { + return null; + } + } + + public static T append( Char target, Class buffClass, float duration ) { + T buff = append( target, buffClass ); + buff.spend( duration ); + return buff; + } + public static T affect( Char target, Class buffClass ) { T buff = target.buff( buffClass ); if (buff != null) { return buff; } else { - try { - buff = buffClass.newInstance(); - buff.attachTo( target ); - return buff; - } catch (Exception e) { - return null; - } + return append( target, buffClass ); } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Charm.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Charm.java index d0ef43912..155a1485a 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Charm.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Charm.java @@ -20,25 +20,26 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.items.rings.RingOfElements.Resistance; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.utils.Bundle; public class Charm extends FlavourBuff { - + + public int object = 0; + + private static final String OBJECT = "object"; + @Override - public boolean attachTo( Char target ) { - if (super.attachTo( target )) { - target.pacified = true; - return true; - } else { - return false; - } + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( OBJECT, object ); } - + @Override - public void detach() { - target.pacified = false; - super.detach(); + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + object = bundle.getInt( OBJECT ); } - + @Override public int icon() { return BuffIndicator.HEART; diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/FlavourBuff.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/FlavourBuff.java index b4d2f9188..4b96a7062 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/FlavourBuff.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/FlavourBuff.java @@ -17,7 +17,7 @@ */ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; -//Special kind of buff, that doesn't perform any kind actions +//buff which does not need to act, used as a flag for other logic. public class FlavourBuff extends Buff { @Override diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java index 56174bd4d..46032de9a 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Frost.java @@ -56,8 +56,8 @@ public class Frost extends FlavourBuff { @Override public void detach() { - target.paralysed = false; super.detach(); + Paralysis.unfreeze( target ); } @Override diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Light.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Light.java index 814e020d9..2ef552320 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Light.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Light.java @@ -29,7 +29,6 @@ public class Light extends FlavourBuff { @Override public boolean attachTo( Char target ) { if (super.attachTo( target )) { - // When a level is loading, do nothing if (Dungeon.level != null) { target.viewDistance = Math.max( Dungeon.level.viewDistance, DISTANCE ); Dungeon.observe(); diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Paralysis.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Paralysis.java index cc401dc4b..b32cecef9 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Paralysis.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Paralysis.java @@ -37,8 +37,8 @@ public class Paralysis extends FlavourBuff { @Override public void detach() { - target.paralysed = false; super.detach(); + unfreeze(target); } @Override @@ -55,4 +55,12 @@ public class Paralysis extends FlavourBuff { Resistance r = ch.buff( Resistance.class ); return r != null ? r.durationFactor() * DURATION : DURATION; } + + public static void unfreeze( Char ch ) { + if (ch.buff( Paralysis.class ) == null && + ch.buff( Frost.class ) == null) { + + ch.paralysed = false; + } + } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/SnipersMark.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/SnipersMark.java index 73330caff..43ce925c5 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/SnipersMark.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/SnipersMark.java @@ -18,9 +18,28 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; +import com.watabou.utils.Bundle; +//TODO: consider refactoring this public class SnipersMark extends FlavourBuff { - + + public int object = 0; + + private static final String OBJECT = "object"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle( bundle ); + bundle.put( OBJECT, object ); + + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + object = bundle.getInt( OBJECT ); + } + @Override public int icon() { return BuffIndicator.MARK; @@ -28,6 +47,6 @@ public class SnipersMark extends FlavourBuff { @Override public String toString() { - return "Sniper's mark"; + return "Zeroed in"; } } diff --git a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Terror.java b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Terror.java index ecca1e420..6e9e4e27c 100644 --- a/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Terror.java +++ b/src/com/shatteredpixel/shatteredpixeldungeon/actors/buffs/Terror.java @@ -17,7 +17,6 @@ */ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; -import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.watabou.utils.Bundle; @@ -25,20 +24,28 @@ import com.watabou.utils.Bundle; public class Terror extends FlavourBuff { public static final float DURATION = 10f; - public Char source; - + + public int object = 0; + + private static final String OBJECT = "object"; + + @Override + public void storeInBundle( Bundle bundle ) { + super.storeInBundle(bundle); + bundle.put(OBJECT, object); + } + + @Override + public void restoreFromBundle( Bundle bundle ) { + super.restoreFromBundle( bundle ); + object = bundle.getInt( OBJECT ); + } + @Override public int icon() { return BuffIndicator.TERROR; } - - @Override - public void restoreFromBundle( Bundle bundle ) { - super.restoreFromBundle( bundle ); - // It's not really correct... - source = Dungeon.hero; - } - + @Override public String toString() { return "Terror";