v0.3.0: reworked wand charging, now charges based on missing charges, and when the charger is applied the scaling factor can be set.

This commit is contained in:
Evan Debenham 2015-03-24 02:28:12 -04:00
parent 45c92a66a9
commit f564c3478d

View File

@ -64,6 +64,7 @@ public abstract class Wand extends KindOfWeapon {
public int maxCharges = initialCharges(); public int maxCharges = initialCharges();
public int curCharges = maxCharges; public int curCharges = maxCharges;
private float partialCharge = 0f;
protected Charger charger; protected Charger charger;
@ -200,6 +201,11 @@ public abstract class Wand extends KindOfWeapon {
if (charger == null) (charger = new Charger()).attachTo( owner ); if (charger == null) (charger = new Charger()).attachTo( owner );
} }
public void charge( Char owner, float chargeScaleFactor ){
charge( owner );
charger.setScaleFactor( chargeScaleFactor );
}
@Override @Override
public void onDetach( ) { public void onDetach( ) {
stopCharging(); stopCharging();
@ -386,6 +392,7 @@ public abstract class Wand extends KindOfWeapon {
private static final String MAX_CHARGES = "maxCharges"; private static final String MAX_CHARGES = "maxCharges";
private static final String CUR_CHARGES = "curCharges"; private static final String CUR_CHARGES = "curCharges";
private static final String CUR_CHARGE_KNOWN = "curChargeKnown"; private static final String CUR_CHARGE_KNOWN = "curChargeKnown";
private static final String PARTIALCHARGE = "partialCharge";
@Override @Override
public void storeInBundle( Bundle bundle ) { public void storeInBundle( Bundle bundle ) {
@ -394,6 +401,7 @@ public abstract class Wand extends KindOfWeapon {
bundle.put( MAX_CHARGES, maxCharges ); bundle.put( MAX_CHARGES, maxCharges );
bundle.put( CUR_CHARGES, curCharges ); bundle.put( CUR_CHARGES, curCharges );
bundle.put( CUR_CHARGE_KNOWN, curChargeKnown ); bundle.put( CUR_CHARGE_KNOWN, curChargeKnown );
bundle.put( PARTIALCHARGE , partialCharge );
} }
@Override @Override
@ -405,6 +413,7 @@ public abstract class Wand extends KindOfWeapon {
maxCharges = bundle.getInt( MAX_CHARGES ); maxCharges = bundle.getInt( MAX_CHARGES );
curCharges = bundle.getInt( CUR_CHARGES ); curCharges = bundle.getInt( CUR_CHARGES );
curChargeKnown = bundle.getBoolean( CUR_CHARGE_KNOWN ); curChargeKnown = bundle.getBoolean( CUR_CHARGE_KNOWN );
partialCharge = bundle.getFloat( PARTIALCHARGE );
} }
protected static CellSelector.Listener zapper = new CellSelector.Listener() { protected static CellSelector.Listener zapper = new CellSelector.Listener() {
@ -463,34 +472,46 @@ public abstract class Wand extends KindOfWeapon {
protected class Charger extends Buff { protected class Charger extends Buff {
private static final float TIME_TO_CHARGE = 40f; private static final float BASE_CHARGE_DELAY = 10f;
private static final float SCALING_CHARGE_ADDITION = 40f;
private static final float NORMAL_SCALE_FACTOR = 0.85f;
float scalingFactor = NORMAL_SCALE_FACTOR;
@Override @Override
public boolean attachTo( Char target ) { public boolean attachTo( Char target ) {
super.attachTo( target ); super.attachTo( target );
delay();
return true; return true;
} }
@Override @Override
public boolean act() { public boolean act() {
if (curCharges < maxCharges)
gainCharge();
if (curCharges < maxCharges) { if (partialCharge >= 1 && curCharges < maxCharges) {
partialCharge--;
curCharges++; curCharges++;
updateQuickslot(); updateQuickslot();
} }
delay(); spend( TICK );
return true; return true;
} }
protected void delay() { private void gainCharge(){
float time2charge = ((Hero)target).heroClass == HeroClass.MAGE ? int missingCharges = maxCharges - curCharges;
TIME_TO_CHARGE / (float)Math.sqrt( 1 + level ) :
TIME_TO_CHARGE; float turnsToCharge = (float) (BASE_CHARGE_DELAY
spend( time2charge ); + (SCALING_CHARGE_ADDITION * Math.pow(scalingFactor, missingCharges)));
partialCharge += 1f/turnsToCharge;
}
private void setScaleFactor(float value){
this.scalingFactor = value;
} }
} }
} }