v2.2.0: improved logic for crystal guardian recovering
This commit is contained in:
+24
-6
@@ -24,8 +24,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.mobs;
|
|||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
import com.shatteredpixel.shatteredpixeldungeon.effects.Splash;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Level;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
|
||||||
@@ -54,9 +53,24 @@ public class CrystalGuardian extends Mob{
|
|||||||
properties.add(Property.MINIBOSS);
|
properties.add(Property.MINIBOSS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean recovering = false;
|
||||||
|
|
||||||
|
public boolean recovering(){
|
||||||
|
return recovering;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean act() {
|
protected boolean act() {
|
||||||
if (sprite instanceof CrystalGuardianSprite) ((CrystalGuardianSprite) sprite).endCrumple();
|
if (recovering){
|
||||||
|
HP = Math.min(HT, HP+5);
|
||||||
|
sprite.emitter().burst(Speck.factory(Speck.HEALING), 1);
|
||||||
|
if (HP == HT){
|
||||||
|
recovering = false;
|
||||||
|
if (sprite instanceof CrystalGuardianSprite) ((CrystalGuardianSprite) sprite).endCrumple();
|
||||||
|
}
|
||||||
|
spend(TICK);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return super.act();
|
return super.act();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -84,9 +98,10 @@ public class CrystalGuardian extends Mob{
|
|||||||
public boolean isAlive() {
|
public boolean isAlive() {
|
||||||
if (HP <= 0){
|
if (HP <= 0){
|
||||||
HP = 1;
|
HP = 1;
|
||||||
if (sprite != null) ((CrystalGuardianSprite)sprite).crumple();
|
if (!recovering) {
|
||||||
spend(20f-cooldown());
|
recovering = true;
|
||||||
Buff.affect(this, Healing.class).setHeal(100, 0, 5);
|
if (sprite != null) ((CrystalGuardianSprite) sprite).crumple();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return super.isAlive();
|
return super.isAlive();
|
||||||
}
|
}
|
||||||
@@ -166,16 +181,19 @@ public class CrystalGuardian extends Mob{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static final String SPRITE = "sprite";
|
public static final String SPRITE = "sprite";
|
||||||
|
public static final String RECOVERING = "recovering";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void storeInBundle(Bundle bundle) {
|
public void storeInBundle(Bundle bundle) {
|
||||||
super.storeInBundle(bundle);
|
super.storeInBundle(bundle);
|
||||||
bundle.put(SPRITE, spriteClass);
|
bundle.put(SPRITE, spriteClass);
|
||||||
|
bundle.put(RECOVERING, recovering);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void restoreFromBundle(Bundle bundle) {
|
public void restoreFromBundle(Bundle bundle) {
|
||||||
super.restoreFromBundle(bundle);
|
super.restoreFromBundle(bundle);
|
||||||
spriteClass = bundle.getClass(SPRITE);
|
spriteClass = bundle.getClass(SPRITE);
|
||||||
|
recovering = bundle.getBoolean(RECOVERING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -23,7 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.sprites;
|
|||||||
|
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Healing;
|
import com.shatteredpixel.shatteredpixeldungeon.actors.mobs.CrystalGuardian;
|
||||||
import com.watabou.noosa.MovieClip;
|
import com.watabou.noosa.MovieClip;
|
||||||
import com.watabou.noosa.TextureFilm;
|
import com.watabou.noosa.TextureFilm;
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ public abstract class CrystalGuardianSprite extends MobSprite {
|
|||||||
@Override
|
@Override
|
||||||
public void link(Char ch) {
|
public void link(Char ch) {
|
||||||
super.link(ch);
|
super.link(ch);
|
||||||
if (ch.buff(Healing.class) != null && ch.cooldown() > 0){
|
if (ch instanceof CrystalGuardian && ((CrystalGuardian) ch).recovering()){
|
||||||
crumple();
|
crumple();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user