From 8ad63ee2484b0c1f344e6f8ff5fbd4ccbd963e1b Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Fri, 12 Jun 2015 19:35:38 +0200 Subject: [PATCH] sc: reuse formatting procedure for subunit columns --- sc.plp | 89 ++++++++++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/sc.plp b/sc.plp index 26c8a97..76974c9 100644 --- a/sc.plp +++ b/sc.plp @@ -259,44 +259,24 @@ sub showrange { } @$specials; } - my $units = do $datafile; - die "Cannot open unit data: $_\n" for $@ || $! || (); - my $grouped = !exists $get{order}; - if (exists $get{order}) { - $get{order} ||= ''; - if ($get{order} eq 'size') { - $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units; - } - elsif ($get{order} eq 'cost') { - $_->{order} = $_->{gas}*1.5 + $_->{min} + $_->{unit}/8 + $_->{build}/256/8 for @$units; - } - else { - $units->[$_]->{order} = $_ for 0 .. $#$units; + sub showunitcols { + my ($row) = @_; + local $_ = $row; + my $suitchar = ''; + if ($_->{suit}) { + $suitchar = [qw/? s m l/]->[$_->{suit}]; } - } - my @rows = $grouped ? @$units : sort {$a->{order} <=> $b->{order}} @$units; - my ($race, $cat) = ('', ''); - for (@rows) { - $race = $_->{race}, - printf '

%s

'."\n", $race, ucfirst $race - if $grouped and $race ne $_->{race}; - $_->{cat} = $_->{race} if not $grouped; - $_->{hp} += $_->{shield}; - my $suitchar = [qw/? s m l/]->[$_->{suit}]; - print( - '', - sprintf('%s', $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ')), - '' . $_->{name}, - '' . ($_->{min} || '0'), + return ( + '' . ($_->{min} // ''), '' . ($_->{gas} || ''), - sprintf('%s%.0f', + !defined $_->{build} ? '' : sprintf('%s%.0f', !!$_->{base} && '+', $_->{build} || '0', ), - sprintf('%s', $suitchar, ucfirst $suitchar), + !$suitchar ? '' : sprintf('%s', $suitchar, ucfirst $suitchar), '' . join('', - $_->{unit} ? $_->{unit} == .5 ? '½' : $_->{unit} : ' ', + defined $_->{unit} && $_->{unit} == .5 ? '½' : $_->{unit}, defined $_->{organic} && sprintf( '%s', $_->{organic} ? 'o' : 'u', @@ -304,7 +284,7 @@ sub showrange { $_->{organic} ? 'o' : 'm', ), ), - '' . $_->{hp}, + '' . $_->{hp} // '', '' . ( $_->{shield} ? sprintf('%.0f%%', 100 * $_->{shield} / $_->{hp}) : ' ' ), @@ -320,20 +300,43 @@ sub showrange { '' . showmagic($_), "\n" ); + } + + my $units = do $datafile; + die "Cannot open unit data: $_\n" for $@ || $! || (); + my $grouped = !exists $get{order}; + if (exists $get{order}) { + $get{order} ||= ''; + if ($get{order} eq 'size') { + $_->{order} = $_->{unit}*8 + $_->{suit} + $_->{hp}/512 + $_->{min}/8192 for @$units; + } + elsif ($get{order} eq 'cost') { + $_->{order} = $_->{gas}*1.5 + $_->{min} + $_->{unit}/8 + $_->{build}/256/8 for @$units; + } + else { + $units->[$_]->{order} = $_ for 0 .. $#$units; + } + } + my @rows = $grouped ? @$units : sort {$a->{order} <=> $b->{order}} @$units; + + my ($race, $cat) = ('', ''); + for (@rows) { + $race = $_->{race}, + printf '

%s

'."\n", $race, ucfirst $race + if $grouped and $race ne $_->{race}; + $_->{cat} = $_->{race} if not $grouped; + $_->{hp} += $_->{shield}; + print( + '', + sprintf('%s', $cat ne $_->{cat} ? ('h', $cat = $_->{cat}) : ('d', ' ')), + '' . $_->{name}, + showunitcols($_), + ); for my $alt (grep { $_->{alt} } @{ $_->{special} }) { print( - '' . $alt->{alt}, - showattack($alt, 'ground'), - showattack($alt, 'air'), - '' . showrange($alt, 'attack', 'range'), - '' . sprintf( - $alt->{detect} ? '%s' : '%s', - showrange($alt, 'sight') - ), - '' . showrange($alt, 'speed'), - '', - "\n", + '' . $alt->{alt}, + showunitcols($alt), ); } } -- 2.30.0