diff --git a/lib/Lacuna/RPC/Body.pm b/lib/Lacuna/RPC/Body.pm index ca7dbf3f..831099a4 100644 --- a/lib/Lacuna/RPC/Body.pm +++ b/lib/Lacuna/RPC/Body.pm @@ -13,6 +13,8 @@ use List::MoreUtils qw(uniq); use Carp; use feature 'switch'; +with "Lacuna::RPC::Role::Building"; + sub get_status { my ($self, $session_id, $body_id) = @_; my $session = $self->get_session({session_id => $session_id, body_id => $body_id}); @@ -108,34 +110,14 @@ sub get_buildings { $body->needs_surface_refresh(0); $body->update; } - my %out; - my @buildings = @{$body->building_cache}; - foreach my $building (@buildings) { - $out{$building->id} = { - url => $building->controller_class->app_url, - image => $building->image_level, - name => $building->name, - x => $building->x, - y => $building->y, - level => $building->level, - efficiency => $building->efficiency, - }; - if ($building->is_upgrading) { - $out{$building->id}{pending_build} = $building->upgrade_status; - } - if ($building->is_working) { - $out{$building->id}{work} = { - seconds_remaining => $building->work_seconds_remaining, - start => $building->work_started_formatted, - end => $building->work_ends_formatted, - }; - } - if ($building->efficiency < 100) { - $out{$building->id}{repair_costs} = $building->get_repair_costs; - } - } - - return {buildings=>\%out, body=>{surface_image => $body->surface}, status=>$self->format_status($session, $body)}; + + return { + buildings => $self->out_buildings($body), + body => { + surface_image => $body->surface, + }, + status => $self->format_status($session, $body), + }; } sub repair_list { diff --git a/lib/Lacuna/RPC/Building.pm b/lib/Lacuna/RPC/Building.pm index 519a7976..ff555dc8 100644 --- a/lib/Lacuna/RPC/Building.pm +++ b/lib/Lacuna/RPC/Building.pm @@ -5,6 +5,8 @@ use utf8; no warnings qw(uninitialized); extends 'Lacuna::RPC'; +with "Lacuna::RPC::Role::Building"; + sub model_class { confess "you need to override me"; } @@ -64,6 +66,7 @@ sub upgrade { level => 0+$building->level, pending_build => $building->upgrade_status, }, + buildings => $self->out_buildings($body), }; } diff --git a/lib/Lacuna/RPC/Role/Building.pm b/lib/Lacuna/RPC/Role/Building.pm new file mode 100644 index 00000000..000d85c1 --- /dev/null +++ b/lib/Lacuna/RPC/Role/Building.pm @@ -0,0 +1,41 @@ +package Lacuna::RPC::Role::Building; + +use Moose::Role; + +# Return a 'buildings' hash suitable for output to the RPC +# +sub out_buildings { + my ($self, $body) = @_; + + my $out; + + my @buildings = @{$body->building_cache}; + foreach my $building (@buildings) { + $out->{$building->id} = { + url => $building->controller_class->app_url, + image => $building->image_level, + name => $building->name, + x => $building->x, + y => $building->y, + level => $building->level, + efficiency => $building->efficiency, + }; + if ($building->is_upgrading) { + $out->{$building->id}{pending_build} = $building->upgrade_status; + } + if ($building->is_working) { + $out->{$building->id}{work} = { + seconds_remaining => $building->work_seconds_remaining, + start => $building->work_started_formatted, + end => $building->work_ends_formatted, + }; + } + if ($building->efficiency < 100) { + $out->{$building->id}{repair_costs} = $building->get_repair_costs; + } + } + return $out; +} + + +1;