Adding move between locations.
This commit is contained in:
parent
7fa92b9cc0
commit
c0acc2ee55
28
js-src/output-packet/move-to.ts
Normal file
28
js-src/output-packet/move-to.ts
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import OutputPacket from '@lastres/output-packet'
|
||||||
|
import type { Location } from '@lastres/location'
|
||||||
|
export interface MoveToPacketInterface {
|
||||||
|
location: string
|
||||||
|
area: string
|
||||||
|
super_area: string
|
||||||
|
planet: string
|
||||||
|
}
|
||||||
|
export default class MoveToPacket extends OutputPacket {
|
||||||
|
location: Location
|
||||||
|
constructor (location: Location) {
|
||||||
|
super()
|
||||||
|
this.location = location
|
||||||
|
}
|
||||||
|
|
||||||
|
command (): string {
|
||||||
|
return 'move_to'
|
||||||
|
}
|
||||||
|
|
||||||
|
data (): MoveToPacketInterface {
|
||||||
|
return {
|
||||||
|
location: this.location.location.identifier,
|
||||||
|
area: this.location.area.identifier,
|
||||||
|
super_area: this.location.super_area.identifier,
|
||||||
|
planet: this.location.planet.identifier
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,73 @@
|
|||||||
|
package LasTres::Controller::Websocket::InputPacket::MoveBetweenLocations;
|
||||||
|
|
||||||
|
use v5.36.0;
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use feature 'signatures';
|
||||||
|
|
||||||
|
use Data::Dumper;
|
||||||
|
|
||||||
|
use Moo;
|
||||||
|
|
||||||
|
use JSON;
|
||||||
|
use JSON qw/to_json/;
|
||||||
|
|
||||||
|
use LasTres::Flags;
|
||||||
|
use LasTres::Redis;
|
||||||
|
use LasTres::DAO::PJs;
|
||||||
|
use LasTres::Location;
|
||||||
|
|
||||||
|
with 'LasTres::Controller::Websocket::InputPacket';
|
||||||
|
|
||||||
|
my $redis = LasTres::Redis->new;
|
||||||
|
my $result_set_pjs = LasTres::DAO::PJs->ResultSet;
|
||||||
|
|
||||||
|
sub identifier {
|
||||||
|
return 'move_to';
|
||||||
|
}
|
||||||
|
|
||||||
|
sub handle ( $self, $ws, $session, $data ) {
|
||||||
|
if ( ref $data ne 'HASH' ) {
|
||||||
|
return $ws->send( to_json( { error => "Data should be a hashref." } ) );
|
||||||
|
}
|
||||||
|
my $planet = $data->{planet};
|
||||||
|
my $super_area = $data->{super_area};
|
||||||
|
my $area = $data->{area};
|
||||||
|
my $location_id = $data->{location};
|
||||||
|
if ( !defined $planet
|
||||||
|
|| !defined $super_area
|
||||||
|
|| !defined $area
|
||||||
|
|| !defined $location_id )
|
||||||
|
{
|
||||||
|
return $ws->send( to_json( { error => "The location is malformed" } ) );
|
||||||
|
}
|
||||||
|
my $pj = $session->{pj};
|
||||||
|
my $team = $pj->team;
|
||||||
|
my $leader = $team->leader;
|
||||||
|
if ( $leader->uuid ne $pj->uuid ) {
|
||||||
|
return $ws->send(
|
||||||
|
to_json( { error => 'You are not the team leader.' } ) );
|
||||||
|
}
|
||||||
|
my $location = $team->location;
|
||||||
|
my $wanted_location =
|
||||||
|
LasTres::Location::get( $planet, $super_area, $area, $location_id );
|
||||||
|
if ( !$location->is_connected_by_move( $wanted_location, $pj ) ) {
|
||||||
|
return $ws->send( to_json( { error => 'You cannot travel there.' } ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
$wanted_location->place_team($team);
|
||||||
|
|
||||||
|
my $connected_places = $location->get_available_locations_to_move_to($pj);
|
||||||
|
@$connected_places = map { $_->hash } @$connected_places;
|
||||||
|
my $info_packet_to_send =
|
||||||
|
LasTres::Controller::Websocket::OutputPacket::Info->new(
|
||||||
|
location_data => {
|
||||||
|
current => $location->hash,
|
||||||
|
connected_places => $connected_places,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
$info_packet_to_send->send($ws);
|
||||||
|
}
|
||||||
|
1;
|
Loading…
Reference in New Issue
Block a user