I guess i made it worse

This commit is contained in:
dan63047 2024-09-27 01:14:45 +03:00
parent 3d0b79bbde
commit 24ad72c029
1 changed files with 58 additions and 36 deletions

View File

@ -229,26 +229,33 @@ enum CalcCards{
damage damage
} }
// class Damage{ class Damage{
// final int clear; final int clear;
// final int combo; final double combo;
// final int b2b; final double b2b;
// final int surge; final int surge;
// final int pc; final int pc;
final double multiplier;
int get total => ((clear + combo + b2b + surge + pc) * multiplier).floor();
const Damage(this.clear, this.combo, this.b2b, this.surge, this.pc, this.multiplier);
// const Damage(this.clear, this.combo, this.b2b, this.surge, this.pc); @override
String toString(){
return total.toString();
}
// Damage operator+(Damage other){ Damage operator+(Damage other){
// return Damage( return Damage(
// clear+other.clear, clear+other.clear,
// combo+other.combo, combo+other.combo,
// b2b+other.b2b, b2b+other.b2b,
// surge+other.b2b, surge+other.surge,
// pc+other.pc); pc+other.pc,
// } multiplier);
// } }
}
class ClearData{ class ClearData{
final String title; final String title;
@ -276,18 +283,18 @@ class ClearData{
perfectClear = !perfectClear; perfectClear = !perfectClear;
} }
int dealsDamage(int combo, int b2b, Rules rules){ Damage dealsDamage(int combo, int b2b, Rules rules){
if (lines == 0) return 0; if (lines == 0) return Damage(0,0,0,0,0,rules.multiplier);
double damage = 0; int clearDamage = 0;
if (spin){ if (spin){
if (lines <= 5) damage += garbage[lineclear]!; if (lines <= 5) clearDamage += garbage[lineclear]!;
else damage += garbage[Lineclears.TSPIN_PENTA]! + 2 * (lines - 5); else clearDamage += garbage[Lineclears.TSPIN_PENTA]! + 2 * (lines - 5);
} else if (miniSpin){ } else if (miniSpin){
damage += garbage[lineclear]!; clearDamage += garbage[lineclear]!;
} else { } else {
if (lines <= 5) damage += garbage[lineclear]!; if (lines <= 5) clearDamage += garbage[lineclear]!;
else damage += garbage[Lineclears.PENTA]! + (lines - 5); else clearDamage += garbage[Lineclears.PENTA]! + (lines - 5);
} }
// Ok i can't figure out how b2b and combo works // Ok i can't figure out how b2b and combo works
@ -296,9 +303,17 @@ class ClearData{
// const n = e.cm.constants.garbage.BACKTOBACK_BONUS * (Math.floor(1 + Math.log1p((t.stats.btb - 1) * e.cm.constants.garbage.BACKTOBACK_BONUS_LOG)) + (t.stats.btb - 1 == 1 ? 0 : (1 + Math.log1p((t.stats.btb - 1) * e.cm.constants.garbage.BACKTOBACK_BONUS_LOG) % 1) / 3)); // const n = e.cm.constants.garbage.BACKTOBACK_BONUS * (Math.floor(1 + Math.log1p((t.stats.btb - 1) * e.cm.constants.garbage.BACKTOBACK_BONUS_LOG)) + (t.stats.btb - 1 == 1 ? 0 : (1 + Math.log1p((t.stats.btb - 1) * e.cm.constants.garbage.BACKTOBACK_BONUS_LOG) % 1) / 3));
// if (h && (d += n), // if (h && (d += n),
double b2bDamage = 0;
if (difficultClear && b2b >= 1 && rules.b2b){ if (difficultClear && b2b >= 1 && rules.b2b){
if (rules.b2bChaining) damage += BACKTOBACK_BONUS * ((1 + log((b2b+1) * BACKTOBACK_BONUS_LOG)).floor() + (b2b+1 == 1 ? 0 : (1 + log((b2b+1) * BACKTOBACK_BONUS_LOG) % 1) / 3)); // but it should be b2b-1 ??? if (rules.b2bChaining) b2bDamage += BACKTOBACK_BONUS * ((1 + log((b2b+1) * BACKTOBACK_BONUS_LOG)).floor() + (b2b+1 == 1 ? 0 : (1 + log((b2b+1) * BACKTOBACK_BONUS_LOG) % 1) / 3)); // but it should be b2b-1 ???
else damage += 1; // if b2b chaining off else b2bDamage += 1; // if b2b chaining off
}
int surgeDamage = 0;
if (!difficultClear && rules.surge){
} }
// From tetrio.js: // From tetrio.js:
@ -312,19 +327,23 @@ class ClearData{
// d += n[Math.max(0, Math.min(t.stats.combo - 2, n.length - 1))] // d += n[Math.max(0, Math.min(t.stats.combo - 2, n.length - 1))]
// } // }
double comboDamage = 0;
if (rules.combo) { if (rules.combo) {
if (combo >= 1){ if (combo > 1){
if (lines == 1) damage += combotable[rules.comboTable]![max(0, min(combo - 1, combotable[rules.comboTable]!.length - 1))]; if (lines == 1 && rules.comboTable != ComboTables.multiplier) comboDamage += combotable[rules.comboTable]![max(0, min(combo - 1, combotable[rules.comboTable]!.length - 1))];
else damage *= 1 + COMBO_BONUS * (combo - 1); else comboDamage = (clearDamage + b2bDamage) * (1 + COMBO_BONUS * (combo-1));
} }
if (combo > 2) { if (combo > 2) {
damage = max(log(COMBO_MINIFIER * (combo - 1) * COMBO_MINIFIER_LOG), damage); comboDamage = max(log(COMBO_MINIFIER * (combo-1) * COMBO_MINIFIER_LOG), comboDamage);
} }
} }
if (perfectClear) damage += rules.pcDamage; int pcDamage = 0;
return (damage * rules.multiplier).floor(); if (perfectClear) pcDamage += rules.pcDamage;
return Damage(clearDamage, comboDamage, b2bDamage, surgeDamage, pcDamage, rules.multiplier);
} }
} }
@ -534,12 +553,13 @@ class _DestinationCalculatorState extends State<DestinationCalculator> {
int combo = -1; int combo = -1;
int b2b = -1; int b2b = -1;
int totalDamage = 0; Damage totalDamage = Damage(0,0,0,0,0,rules.multiplier);
int totalDamageNumber = 0;
for (ClearData lineclear in clears){ for (ClearData lineclear in clears){
if (lineclear.difficultClear) b2b++; else if (lineclear.lines > 0) b2b = -1; if (lineclear.difficultClear) b2b++; else if (lineclear.lines > 0) b2b = -1;
if (lineclear.lines > 0) combo++; else combo = -1; if (lineclear.lines > 0) combo++; else combo = -1;
int dmg = lineclear.dealsDamage(combo, b2b, rules); Damage dmg = lineclear.dealsDamage(combo, b2b, rules);
lSideWidgets.add( lSideWidgets.add(
ListTile( ListTile(
key: ValueKey(lineclear.id), key: ValueKey(lineclear.id),
@ -551,7 +571,7 @@ class _DestinationCalculatorState extends State<DestinationCalculator> {
], ],
), ),
title: Text("${lineclear.title}${lineclear.perfectClear ? " PC" : ""}${combo > 0 ? ", ${combo} combo" : ""}${b2b > 0 ? ", B2Bx${b2b}" : ""}"), title: Text("${lineclear.title}${lineclear.perfectClear ? " PC" : ""}${combo > 0 ? ", ${combo} combo" : ""}${b2b > 0 ? ", B2Bx${b2b}" : ""}"),
subtitle: lineclear.lines > 0 ? Text("${dmg} damage${lineclear.difficultClear ? ", difficult" : ""}", style: TextStyle(color: Colors.grey)) : null, subtitle: lineclear.lines > 0 ? Text("${dmg.clear} from clear, ${dmg.combo} from combo, ${dmg.b2b} from B2B, ${dmg.surge} from Surge and ${dmg.pc} from PC", style: TextStyle(color: Colors.grey)) : null,
trailing: lineclear.lines > 0 ? Padding( trailing: lineclear.lines > 0 ? Padding(
padding: const EdgeInsets.only(right: 10.0), padding: const EdgeInsets.only(right: 10.0),
child: Text(dmg.toString(), style: TextStyle(fontSize: 36, fontWeight: ui.FontWeight.w100)), child: Text(dmg.toString(), style: TextStyle(fontSize: 36, fontWeight: ui.FontWeight.w100)),
@ -559,6 +579,7 @@ class _DestinationCalculatorState extends State<DestinationCalculator> {
) )
); );
totalDamage += dmg; totalDamage += dmg;
totalDamageNumber += dmg.total;
} }
return Column( return Column(
@ -705,10 +726,11 @@ class _DestinationCalculatorState extends State<DestinationCalculator> {
children: [ children: [
Text("Total damage:", style: TextStyle(fontSize: 36, fontWeight: ui.FontWeight.w100)), Text("Total damage:", style: TextStyle(fontSize: 36, fontWeight: ui.FontWeight.w100)),
Spacer(), Spacer(),
Text(totalDamage.floor().toString(), style: TextStyle(fontFamily: "Eurostile Round Extended", fontSize: 36, fontWeight: ui.FontWeight.w100)) Text(totalDamageNumber.toString(), style: TextStyle(fontFamily: "Eurostile Round Extended", fontSize: 36, fontWeight: ui.FontWeight.w100))
], ],
), ),
), ),
Text(totalDamage.toString(), style: TextStyle(fontFamily: "Eurostile Round Extended", fontSize: 36, fontWeight: ui.FontWeight.w100)),
ElevatedButton.icon(onPressed: (){setState((){clears.clear();});}, icon: const Icon(Icons.clear), label: Text("Clear all"), style: const ButtonStyle(shape: WidgetStatePropertyAll(RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(12.0)))))) ElevatedButton.icon(onPressed: (){setState((){clears.clear();});}, icon: const Icon(Icons.clear), label: Text("Clear all"), style: const ButtonStyle(shape: WidgetStatePropertyAll(RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(12.0))))))
], ],
) )