v2.3.0: fixed rounding errors in tipped dart durability
This commit is contained in:
+13
-4
@@ -314,6 +314,11 @@ abstract public class MissileWeapon extends Weapon {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public float durabilityPerUse(){
|
public float durabilityPerUse(){
|
||||||
|
//classes that override durabilityPerUse can turn rounding off, to do their own rounding after more logic
|
||||||
|
return durabilityPerUse(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected final float durabilityPerUse( boolean rounded){
|
||||||
float usages = baseUses * (float)(Math.pow(3, level()));
|
float usages = baseUses * (float)(Math.pow(3, level()));
|
||||||
|
|
||||||
//+50%/75% durability
|
//+50%/75% durability
|
||||||
@@ -329,10 +334,14 @@ abstract public class MissileWeapon extends Weapon {
|
|||||||
//at 100 uses, items just last forever.
|
//at 100 uses, items just last forever.
|
||||||
if (usages >= 100f) return 0;
|
if (usages >= 100f) return 0;
|
||||||
|
|
||||||
usages = Math.round(usages);
|
if (rounded){
|
||||||
|
usages = Math.round(usages);
|
||||||
//add a tiny amount to account for rounding error for calculations like 1/3
|
//add a tiny amount to account for rounding error for calculations like 1/3
|
||||||
return (MAX_DURABILITY/usages) + 0.001f;
|
return (MAX_DURABILITY/usages) + 0.001f;
|
||||||
|
} else {
|
||||||
|
//rounding can be disabled for classes that override durability per use
|
||||||
|
return MAX_DURABILITY/usages;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void decrementDurability(){
|
protected void decrementDurability(){
|
||||||
|
|||||||
+1
-1
@@ -52,6 +52,6 @@ public class RotDart extends TippedDart {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float durabilityPerUse() {
|
public float durabilityPerUse() {
|
||||||
return 20f;
|
return MAX_DURABILITY/5f; //always 5 uses
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -151,7 +151,7 @@ public abstract class TippedDart extends Dart {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float durabilityPerUse() {
|
public float durabilityPerUse() {
|
||||||
float use = super.durabilityPerUse();
|
float use = super.durabilityPerUse(false);
|
||||||
|
|
||||||
use /= (1 + Dungeon.hero.pointsInTalent(Talent.DURABLE_TIPS));
|
use /= (1 + Dungeon.hero.pointsInTalent(Talent.DURABLE_TIPS));
|
||||||
|
|
||||||
@@ -179,12 +179,15 @@ public abstract class TippedDart extends Dart {
|
|||||||
}
|
}
|
||||||
use *= (1f - lotusPreserve);
|
use *= (1f - lotusPreserve);
|
||||||
|
|
||||||
|
float usages = Math.round(MAX_DURABILITY/use);
|
||||||
|
|
||||||
//grants 4 extra uses with charged shot
|
//grants 4 extra uses with charged shot
|
||||||
if (Dungeon.hero.buff(Crossbow.ChargedShot.class) != null){
|
if (Dungeon.hero.buff(Crossbow.ChargedShot.class) != null){
|
||||||
use = 100f/((100f/use) + 4f) + 0.001f;
|
usages += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
return use;
|
//add a tiny amount to account for rounding error for calculations like 1/3
|
||||||
|
return (MAX_DURABILITY/usages) + 0.001f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user