V0.2.0: Partially implemented Cloak of Shadows
This commit is contained in:
parent
43f32590df
commit
62d5ccebbd
|
@ -19,6 +19,7 @@ package com.shatteredpixel.shatteredpixeldungeon.actors.buffs;
|
|||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.artifacts.CloakofShadows;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
|
||||
public class Invisibility extends FlavourBuff {
|
||||
|
@ -56,5 +57,9 @@ public class Invisibility extends FlavourBuff {
|
|||
if (buff != null && Dungeon.hero.visibleEnemies() > 0) {
|
||||
buff.detach();
|
||||
}
|
||||
CloakofShadows.cloakStealth cloakBuff = Dungeon.hero.buff( CloakofShadows.cloakStealth.class );
|
||||
if (cloakBuff != null && Dungeon.hero.visibleEnemies() > 0) {
|
||||
cloakBuff.detach();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,116 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.items.KindofMisc;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.GLog;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Evan on 24/08/2014.
|
||||
*/
|
||||
public abstract class Artifact extends KindofMisc {
|
||||
public class Artifact extends KindofMisc {
|
||||
|
||||
private static final float TIME_TO_EQUIP = 1f;
|
||||
|
||||
protected Buff passiveBuff;
|
||||
protected Buff activeBuff;
|
||||
|
||||
protected int level = 0;
|
||||
protected int charge = 0;
|
||||
protected int chargeCap;
|
||||
|
||||
|
||||
public Artifact(){
|
||||
super();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions( Hero hero ) {
|
||||
ArrayList<String> actions = super.actions( hero );
|
||||
actions.add( isEquipped( hero ) ? AC_UNEQUIP : AC_EQUIP );
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doEquip( Hero hero ) {
|
||||
|
||||
if (hero.belongings.misc1 != null && hero.belongings.misc2 != null) {
|
||||
|
||||
GLog.w("you can only wear 2 rings at a time");
|
||||
return false;
|
||||
|
||||
} else {
|
||||
|
||||
if (hero.belongings.misc1 == null) {
|
||||
hero.belongings.misc1 = this;
|
||||
} else {
|
||||
//TODO: decide if I want player to equip two of the same artifact, change logic here accordingly
|
||||
hero.belongings.misc2 = this;
|
||||
}
|
||||
|
||||
detach( hero.belongings.backpack );
|
||||
|
||||
activate( hero );
|
||||
|
||||
hero.spendAndNext( TIME_TO_EQUIP );
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void activate( Char ch ) {
|
||||
passiveBuff = passiveBuff();
|
||||
passiveBuff.attachTo(ch);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doUnequip( Hero hero, boolean collect ) {
|
||||
|
||||
if (hero.belongings.misc1 == this) {
|
||||
hero.belongings.misc1 = null;
|
||||
} else {
|
||||
hero.belongings.misc2 = null;
|
||||
}
|
||||
|
||||
hero.remove(passiveBuff);
|
||||
passiveBuff = null;
|
||||
|
||||
hero.spendAndNext( TIME_TO_EQUIP );
|
||||
|
||||
if (collect && !collect( hero.belongings.backpack )) {
|
||||
Dungeon.level.drop( this, hero.pos );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEquipped( Hero hero ) {
|
||||
return hero.belongings.misc1 == this || hero.belongings.misc2 == this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUpgradable() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isIdentified() {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected ArtifactBuff passiveBuff() {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected ArtifactBuff activeBuff() {return null; }
|
||||
|
||||
public class ArtifactBuff extends Buff {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,148 @@
|
|||
package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
|
||||
|
||||
|
||||
import com.shatteredpixel.shatteredpixeldungeon.Assets;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.actors.hero.Hero;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.sprites.ItemSpriteSheet;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.ui.BuffIndicator;
|
||||
import com.shatteredpixel.shatteredpixeldungeon.utils.Utils;
|
||||
import com.watabou.noosa.audio.Sample;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by debenhame on 25/08/2014.
|
||||
*/
|
||||
public class CloakofShadows extends Artifact {
|
||||
//TODO: add requirements for entering stealth, add levelling mechanic, add bundle support, add polish
|
||||
|
||||
{
|
||||
name = "Cloak of Shadows";
|
||||
image = ItemSpriteSheet.ARTIFACT_CLOAK;
|
||||
}
|
||||
|
||||
private boolean stealthed = false;
|
||||
|
||||
public static final String AC_STEALTH = "STEALTH";
|
||||
|
||||
private static final String TXT_STATUS = "%d/%d";
|
||||
|
||||
@Override
|
||||
public ArrayList<String> actions( Hero hero ) {
|
||||
ArrayList<String> actions = super.actions( hero );
|
||||
if (isEquipped( hero ) && charge > 0)
|
||||
actions.add(AC_STEALTH);
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute( Hero hero, String action ) {
|
||||
if (action.equals( AC_STEALTH )) {
|
||||
|
||||
if (!stealthed){
|
||||
stealthed = true;
|
||||
Sample.INSTANCE.play( Assets.SND_MELD );
|
||||
activeBuff = activeBuff();
|
||||
activeBuff.attachTo(hero);
|
||||
} else {
|
||||
stealthed = false;
|
||||
hero.remove(activeBuff);
|
||||
activeBuff = null;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
super.execute(hero, action);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactBuff passiveBuff() {
|
||||
return new cloakRecharge();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ArtifactBuff activeBuff( ) {
|
||||
return new cloakStealth();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String desc() {
|
||||
//TODO: add description
|
||||
return "Need to add a description.";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String status() {
|
||||
return Utils.format(TXT_STATUS, charge, level+4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return super.toString() + " (" + status() + ")" ;
|
||||
}
|
||||
|
||||
public class cloakRecharge extends ArtifactBuff{
|
||||
int partialCharge = 0;
|
||||
@Override
|
||||
public boolean act() {
|
||||
if (charge < level+4) {
|
||||
if (!stealthed)
|
||||
partialCharge += (level + 4) / 300;
|
||||
|
||||
if (partialCharge >= 100) {
|
||||
charge++;
|
||||
partialCharge -= 100;
|
||||
}
|
||||
} else
|
||||
partialCharge = 0;
|
||||
|
||||
spend( TICK );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class cloakStealth extends ArtifactBuff{
|
||||
@Override
|
||||
public int icon() {
|
||||
return BuffIndicator.INVISIBLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean attachTo( Char target ) {
|
||||
if (super.attachTo( target )) {
|
||||
target.invisible++;
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean act(){
|
||||
charge--;
|
||||
if (charge <= 0)
|
||||
detach();
|
||||
|
||||
spend( TICK );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "Cloaked";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void detach() {
|
||||
target.invisible--;
|
||||
stealthed = false;
|
||||
super.detach();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user