LasTres/lib/LasTres/Controller/Websocket/InputPacket/ExecuteAction.pm

46 lines
1.3 KiB
Perl

package LasTres::Controller::Websocket::InputPacket::ExecuteAction;
use v5.36.0;
use strict;
use warnings;
use utf8;
use Moo;
use List::AllUtils;
sub identifier {
return 'execute_action';
}
sub handle ( $self, $ws, $session, $data ) {
if ( ref $data ne 'HASH' ) {
return $ws->send( to_json( { error => "Data should be a hashref." } ) );
}
if ( !defined $session->{pj} ) {
return $ws->send(
to_json( { error => 'The pj for this session does not exist.' } ) );
}
$session->{pj} = $session->{pj}->get_from_storage;
my $pj = $session->{pj};
my $action_id = $data->{action};
if ( !defined $action_id ) {
return $ws->send( to_json( { error => 'No action set.' } ) );
}
my @actions = $pj->actions->@*;
my ($action) = List::AllUtils::onlyres { $_->identifier eq $action_id && $_ } @actions;
if (!defined $action) {
return $ws->send( to_json( { error => "Could not find action $action_id." } ) );
}
if ( $action->is_disabled($pj) ) {
return $ws->send( to_json( { error => "@{[$action->identifier]} is disabled." } ) );
}
$action->callback($pj);
my $team = $pj->team;
for my $member ( $team->combat_members->@* ) {
$member->update_team_sprites;
$member->update_location;
$member->update_actions;
}
}
1;