|
<:= coltoggle('name', '') :> |
- |
- |
+ cost |
+ gas |
<:= coltoggle(qw'build cost') :> |
- <:= coltoggle(qw'size size') :> |
+ <:= coltoggle(qw'size size') :> |
+ attr |
HP |
shield |
⨠|
@@ -113,11 +114,33 @@ sub coltoggle {
sub showrange {
my ($min, $max) = @_;
return '' if not defined $min;
- $_ &&= int($_ + .5) for $min, $max; # round halves up
- return $min if not defined $max or $min == $max;
+ return $min || '-' if !$max or $min == $max;
return "$min-$max";
}
+sub showrangeint {
+ $_ &&= int($_ + .5) for @_; # round halves up
+ return showrange(@_);
+}
+
+ sub showcost {
+ my ($row, $unit) = @_;
+ return join(' ',
+ sprintf('cost %s%%', join '-',
+ map { $_ && sprintf '%.0f', 100 * $row->{cost} / $_ } grep { defined $_ }
+ $unit->{energy},
+ $unit->{upgraded}->{energy},
+ $unit->{capacity},
+ $unit->{upgraded}->{capacity},
+ ),
+ !defined $row->{maint} ? () : sprintf('+%s%%/s', join '-',
+ map { sprintf '%.1f', 100 * $row->{maint} / $_ } grep $_,
+ $unit->{capacity},
+ $unit->{upgraded}->{capacity},
+ ),
+ );
+ }
+
sub showattack {
my ($row, $area) = @_;
my $attack = $row->{attack}->[$area]
@@ -129,8 +152,10 @@ sub showrange {
$maxdamage += ($upattack->{upgrade} // $attack->{upgrade}) * 3;
my $out = '';
+ $out .= sprintf '¤ ', showcost($attack, $row)
+ if $attack->{cost};
$out .= sprintf('%sà ',
- showrange($attack->{count}, $upattack->{count}),
+ showrangeint($attack->{count}, $upattack->{count}),
) if $attack->{count} > 1;
$out .= '*'
if $attack->{type} eq 'explosive';
@@ -148,7 +173,7 @@ sub showrange {
} join '_', @bonus),
join(', ', map {(
sprintf('+%s vs %s',
- showrange(
+ showrangeint(
$attack->{bonus}->{$_},
$attack->{bonus}->{$_} + $attack->{bonus}->{"-$_"} * 3,
),
@@ -161,7 +186,7 @@ sub showrange {
if $attack->{type} eq 'projectile';
$out .= sprintf '', $attack->{name} if $attack->{name};
- $out .= showrange($damage, $maxdamage);
+ $out .= showrangeint($damage, $maxdamage);
$out .= '' if $attack->{name};
$out .= sprintf('%s',
$attack->{splash} eq 'line' ? ('linear', '+') : ('splash', 'â')
@@ -170,7 +195,7 @@ sub showrange {
$out .= ' | ';
if ($attack->{dps}) {
# precalculated dps, do not touch
- $out .= showrange($attack->{dps}->[0],
+ $out .= showrangeint($attack->{dps}->[0],
$upattack->{dps}->[-1] // $attack->{dps}->[-1]
);
}
@@ -192,14 +217,14 @@ sub showrange {
}
$maxdamage *= ($upattack->{count} // $attack->{count} // 1)
/ ($upattack->{cooldown} // $attack->{cooldown});
- $out .= showrange($damage, $maxdamage);
+ $out .= showrangeint($damage, $maxdamage);
}
$out .= ' | ' . 'â½' x !!($attack->{anti} & 1);
$out .= ' | ' . 'â³' x !!($attack->{anti} & 2);
$out .= ' | ' .
- showrange($attack->{range}, $upattack->{range});
+ showrangeint($attack->{range}, $upattack->{range});
return $out;
}
@@ -216,12 +241,7 @@ sub showrange {
(map { $_ && " ($_)" } join ', ',
#TODO: apply upgrades
$_->{range} ? "range $_->{range}" : (),
- $_->{cost} ? sprintf('cost %.0f%%%s',
- 100 * $_->{cost} / $row->{energy},
- defined $_->{maint} && sprintf('+%.1f%%/s',
- 100 * $_->{maint} / $row->{energy},
- ),
- ) :
+ $_->{cost} ? showcost($_, $row) :
$_->{cooldown} ? "cooldown $_->{cooldown}s" : (),
),
),
@@ -287,14 +307,26 @@ sub showrange {
100 * $_->{shield} / $_->{hp}
) : ' | ' .
- showrange($_->{armor}, $_->{upgraded}->{armor}),
+ showrangeint($_->{armor}, $_->{upgraded}->{armor}),
showattack($_, 0),
' | ' . sprintf(
$_->{detect} ? '%s' : '%s',
- showrange($_->{sight}, $_->{upgraded}->{sight})
+ showrangeint($_->{sight}, $_->{upgraded}->{sight})
+ ),
+ sprintf(' | %s',
+ showrange(
+ map { $_ && sprintf '%.1f', $_ }
+ $_->{speed}, $_->{upgraded}->{speed}
+ ),
+ defined $_->{creep} && sprintf(' title="%s on creep"',
+ $_->{creep} == 1 ? 'same' : showrange(
+ map { $_ && sprintf '%.1f', $_ }
+ $_->{speed} * $_->{creep},
+ $_->{upgraded}->{speed} && $_->{upgraded}->{speed} *
+ ($_->{upgraded}->{creep} // $_->{creep}),
+ ),
+ ),
),
- ' | ' .
- showrange($_->{speed}, $_->{upgraded}->{speed}),
$_->{attr}->{jump}
&& qq'â',
' | ' . showmagic($_),
@@ -344,7 +376,7 @@ sub showrange {
my ($race, $cat) = ('', '');
for (@rows) {
if ($grouped) {
- printf ' |