v0.6.2: many buffs now grey out their icons as they expire

This commit is contained in:
Evan Debenham 2017-09-18 22:38:42 -04:00
parent a33cb33727
commit ddaa763a86
17 changed files with 111 additions and 12 deletions

View File

@ -23,9 +23,12 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class Bless extends FlavourBuff { public class Bless extends FlavourBuff {
public static final float DURATION = 30f;
{ {
type = buffType.POSITIVE; type = buffType.POSITIVE;
} }
@ -35,6 +38,11 @@ public class Bless extends FlavourBuff {
return BuffIndicator.BLESS; return BuffIndicator.BLESS;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -59,12 +59,11 @@ public class Combo extends Buff implements ActionIndicator.Action {
@Override @Override
public void tintIcon(Image icon) { public void tintIcon(Image icon) {
if (count >= 10) icon.hardlight(1f, 0f, 0f); if (comboTime >= 3f){
else if (count >= 8)icon.hardlight(1f, 0.8f, 0f); icon.resetColor();
else if (count >= 6)icon.hardlight(1f, 1f, 0f); } else {
else if (count >= 4)icon.hardlight(0.8f, 1f, 0f); icon.tint(0xb3b3b3, 0.5f + 0.5f*(3f + 1 - comboTime)/3f);
else if (count >= 2)icon.hardlight(0f, 1f, 0f); }
else icon.resetColor();
} }
@Override @Override
@ -108,6 +107,7 @@ public class Combo extends Buff implements ActionIndicator.Action {
public boolean act() { public boolean act() {
comboTime-=TICK; comboTime-=TICK;
spend(TICK); spend(TICK);
BuffIndicator.refreshHero();
if (comboTime <= 0) { if (comboTime <= 0) {
detach(); detach();
} }

View File

@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class EarthImbue extends FlavourBuff { public class EarthImbue extends FlavourBuff {
@ -41,6 +42,11 @@ public class EarthImbue extends FlavourBuff {
return BuffIndicator.ROOTS; return BuffIndicator.ROOTS;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -28,6 +28,7 @@ import com.shatteredpixel.shatteredpixeldungeon.levels.Terrain;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
import com.watabou.utils.Random; import com.watabou.utils.Random;
@ -65,8 +66,11 @@ public class FireImbue extends Buff {
spend(TICK); spend(TICK);
left -= TICK; left -= TICK;
if (left <= 0) if (left < 5){
BuffIndicator.refreshHero();
} else if (left <= 0) {
detach(); detach();
}
return true; return true;
} }
@ -83,6 +87,11 @@ public class FireImbue extends Buff {
return BuffIndicator.FIRE; return BuffIndicator.FIRE;
} }
@Override
public void tintIcon(Image icon) {
FlavourBuff.greyIcon(icon, 5f, left);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -21,6 +21,8 @@
package com.shatteredpixel.shatteredpixeldungeon.actors.buffs; package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.watabou.noosa.Image;
//buff whose only internal logic is to wait and detach after a time. //buff whose only internal logic is to wait and detach after a time.
public class FlavourBuff extends Buff { public class FlavourBuff extends Buff {
@ -30,6 +32,14 @@ public class FlavourBuff extends Buff {
return true; return true;
} }
public static void greyIcon(Image icon, float startGrey, float remaining){
if (remaining >= startGrey){
icon.resetColor();
} else {
icon.tint(0xb3b3b3, 0.6f + 0.3f*(startGrey - remaining)/startGrey);
}
}
//flavour buffs can all just rely on cooldown() //flavour buffs can all just rely on cooldown()
protected String dispTurns() { protected String dispTurns() {
//add one turn as buffs act last, we want them to end at 1 visually, even if they end at 0 internally. //add one turn as buffs act last, we want them to end at 1 visually, even if they end at 0 internally.

View File

@ -28,16 +28,22 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.VenomGas; import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.VenomGas;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class GasesImmunity extends FlavourBuff { public class GasesImmunity extends FlavourBuff {
public static final float DURATION = 15f; public static final float DURATION = 20f;
@Override @Override
public int icon() { public int icon() {
return BuffIndicator.IMMUNITY; return BuffIndicator.IMMUNITY;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -30,6 +30,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.TimekeepersHourg
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class Invisibility extends FlavourBuff { public class Invisibility extends FlavourBuff {
@ -64,6 +65,11 @@ public class Invisibility extends FlavourBuff {
return BuffIndicator.INVISIBLE; return BuffIndicator.INVISIBLE;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add( CharSprite.State.INVISIBLE ); if (on) target.sprite.add( CharSprite.State.INVISIBLE );

View File

@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class Levitation extends FlavourBuff { public class Levitation extends FlavourBuff {
@ -54,6 +55,11 @@ public class Levitation extends FlavourBuff {
return BuffIndicator.LEVITATION; return BuffIndicator.LEVITATION;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add(CharSprite.State.LEVITATING); if (on) target.sprite.add(CharSprite.State.LEVITATING);

View File

@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite; import com.shatteredpixel.shatteredpixeldungeon.sprites.CharSprite;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class Light extends FlavourBuff { public class Light extends FlavourBuff {
@ -57,6 +58,11 @@ public class Light extends FlavourBuff {
return BuffIndicator.LIGHT; return BuffIndicator.LIGHT;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 20f, cooldown());
}
@Override @Override
public void fx(boolean on) { public void fx(boolean on) {
if (on) target.sprite.add(CharSprite.State.ILLUMINATED); if (on) target.sprite.add(CharSprite.State.ILLUMINATED);

View File

@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class MindVision extends FlavourBuff { public class MindVision extends FlavourBuff {
@ -41,6 +42,11 @@ public class MindVision extends FlavourBuff {
return BuffIndicator.MIND_VISION; return BuffIndicator.MIND_VISION;
} }
@Override
public void tintIcon(Image icon) {
greyIcon(icon, 5f, cooldown());
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
public class Recharging extends FlavourBuff { public class Recharging extends FlavourBuff {
@ -31,6 +32,11 @@ public class Recharging extends FlavourBuff {
return BuffIndicator.RECHARGING; return BuffIndicator.RECHARGING;
} }
@Override
public void tintIcon(Image icon) {
FlavourBuff.greyIcon(icon, 5f, cooldown());
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.noosa.audio.Sample; import com.watabou.noosa.audio.Sample;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
@ -98,6 +99,11 @@ public class Shadows extends Invisibility {
return BuffIndicator.SHADOWS; return BuffIndicator.SHADOWS;
} }
@Override
public void tintIcon(Image icon) {
icon.resetColor();
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -26,6 +26,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.blobs.ToxicGas;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene; import com.shatteredpixel.shatteredpixeldungeon.scenes.GameScene;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
public class ToxicImbue extends Buff { public class ToxicImbue extends Buff {
@ -71,6 +72,11 @@ public class ToxicImbue extends Buff {
return BuffIndicator.IMMUNITY; return BuffIndicator.IMMUNITY;
} }
@Override
public void tintIcon(Image icon) {
FlavourBuff.greyIcon(icon, 5f, left);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -36,6 +36,7 @@ import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Bless;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Combo;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Drowsy;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Fury; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Fury;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Invisibility;
@ -478,6 +479,9 @@ public class Hero extends Char {
Dungeon.level.updateFieldOfView( this, fieldOfView ); Dungeon.level.updateFieldOfView( this, fieldOfView );
} }
checkVisibleMobs(); checkVisibleMobs();
if (buff(FlavourBuff.class) != null) {
BuffIndicator.refreshHero();
}
if (paralysed > 0) { if (paralysed > 0) {

View File

@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle; import com.shatteredpixel.shatteredpixeldungeon.effects.particles.EarthParticle;
import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas; import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfParalyticGas;
@ -32,6 +33,7 @@ import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Camera; import com.watabou.noosa.Camera;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
public class Earthroot extends Plant { public class Earthroot extends Plant {
@ -113,6 +115,11 @@ public class Earthroot extends Plant {
return BuffIndicator.ARMOR; return BuffIndicator.ARMOR;
} }
@Override
public void tintIcon(Image icon) {
FlavourBuff.greyIcon(icon, target.HT/4f, level);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");

View File

@ -40,7 +40,7 @@ public class Starflower extends Plant {
public void activate() { public void activate() {
Char ch = Actor.findChar(pos); Char ch = Actor.findChar(pos);
if (ch != null) Buff.prolong(ch, Bless.class, 30f); if (ch != null) Buff.prolong(ch, Bless.class, Bless.DURATION);
if (Random.Int(5) == 0){ if (Random.Int(5) == 0){
Dungeon.level.drop(new Seed(), pos).sprite.drop(); Dungeon.level.drop(new Seed(), pos).sprite.drop();

View File

@ -25,6 +25,7 @@ import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor; import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.FlavourBuff;
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero; import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter; import com.shatteredpixel.shatteredpixeldungeon.effects.CellEmitter;
import com.shatteredpixel.shatteredpixeldungeon.effects.Speck; import com.shatteredpixel.shatteredpixeldungeon.effects.Speck;
@ -33,6 +34,7 @@ import com.shatteredpixel.shatteredpixeldungeon.items.potions.PotionOfHealing;
import com.shatteredpixel.shatteredpixeldungeon.messages.Messages; import com.shatteredpixel.shatteredpixeldungeon.messages.Messages;
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet; import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator; import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
import com.watabou.noosa.Image;
import com.watabou.utils.Bundle; import com.watabou.utils.Bundle;
public class Sungrass extends Plant { public class Sungrass extends Plant {
@ -125,6 +127,11 @@ public class Sungrass extends Plant {
return BuffIndicator.HEALING; return BuffIndicator.HEALING;
} }
@Override
public void tintIcon(Image icon) {
FlavourBuff.greyIcon(icon, target.HT/4f, level);
}
@Override @Override
public String toString() { public String toString() {
return Messages.get(this, "name"); return Messages.get(this, "name");