104 lines
2.9 KiB
Perl
104 lines
2.9 KiB
Perl
package BurguillosInfo::Controller::ConquerUserCurrentEnemy;
|
|
|
|
use v5.34.1;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use utf8;
|
|
|
|
use Mojo::Base 'Mojolicious::Controller', '-signatures';
|
|
|
|
use UUID::URandom qw/create_uuid_string/;
|
|
use JSON;
|
|
|
|
use BurguillosInfo::Schema;
|
|
use BurguillosInfo::Species;
|
|
|
|
sub listEnemiesGlobal ($self) {
|
|
my $user = $self->current_user;
|
|
if ( !defined $user ) {
|
|
return $self->render(
|
|
status => 401,
|
|
json => {
|
|
error => 'Debes estar autenticado.',
|
|
}
|
|
);
|
|
}
|
|
my $current_enemies = $self->_get_enemies($user);
|
|
if ( scalar @$current_enemies ) {
|
|
return $self->_return_enemies($current_enemies);
|
|
}
|
|
$self->_generate_enemies_global($user);
|
|
$current_enemies = $self->_get_enemies($user);
|
|
return $self->_return_enemies($current_enemies);
|
|
}
|
|
|
|
sub _return_enemies ( $self, $current_enemies ) {
|
|
return $self->render( json => [ map { $_->serialize } @$current_enemies ] );
|
|
}
|
|
|
|
sub _get_enemies ( $self, $user ) {
|
|
my $resultset_current_enemies =
|
|
BurguillosInfo::Schema->Schema->resultset('ConquerUserCurrentEnemy');
|
|
my @current_enemies = $resultset_current_enemies->search(
|
|
{
|
|
'user_object.uuid' => $user->uuid,
|
|
},
|
|
{
|
|
join => 'user_object',
|
|
}
|
|
);
|
|
return \@current_enemies;
|
|
}
|
|
|
|
sub _generate_enemies_global ( $self, $user ) {
|
|
my $minimum_number_enemies = 2;
|
|
my $maximum_number_enemies = 6;
|
|
my $number_enemies =
|
|
$self->_calculate_number_of_enemies( $minimum_number_enemies,
|
|
$maximum_number_enemies );
|
|
for ( my $i = 0 ; $i < $number_enemies ; $i++ ) {
|
|
$self->_generate_enemy_global($user);
|
|
}
|
|
}
|
|
|
|
sub _generate_enemy_global ( $self, $user ) {
|
|
my $resultset_current_enemies =
|
|
BurguillosInfo::Schema->Schema->resultset('ConquerUserCurrentEnemy');
|
|
my $uuid = create_uuid_string();
|
|
my $species = BurguillosInfo::Species->new;
|
|
my @species = @{ $species->list_can_be_global };
|
|
my $selected_species = $species[int( rand( scalar @species ) )];
|
|
my $enemy = $resultset_current_enemies->new(
|
|
{
|
|
uuid => $uuid,
|
|
species => $selected_species->id,
|
|
level => $self->_get_level_enemy($user),
|
|
user => $user->uuid,
|
|
}
|
|
);
|
|
$enemy->insert;
|
|
}
|
|
|
|
sub _get_level_enemy ( $self, $user ) {
|
|
my $max_enemy_level = int( $user->level / 2 ) + 1;
|
|
if ( $max_enemy_level < $user->level - 10 ) {
|
|
$max_enemy_level = $user->level - 10;
|
|
}
|
|
if ( $max_enemy_level < 3 ) {
|
|
$max_enemy_level = 3;
|
|
}
|
|
my $min_enemy_level = $max_enemy_level - 5;
|
|
if ( $min_enemy_level < 2 ) {
|
|
$min_enemy_level = 2;
|
|
}
|
|
return $min_enemy_level +
|
|
int( rand( $max_enemy_level - $min_enemy_level + 1 ) );
|
|
}
|
|
|
|
sub _calculate_number_of_enemies ( $self, $min, $max ) {
|
|
return $min + int( rand( $max - $min + 1 ) );
|
|
}
|
|
1;
|