45 lines
984 B
PHP
45 lines
984 B
PHP
<?php
|
|
|
|
namespace App\Services\Game;
|
|
|
|
use App\Models\Character;
|
|
|
|
class NerveService
|
|
{
|
|
/**
|
|
* Consume nerve if character can act
|
|
*/
|
|
public function consume(Character $character, int $amount): bool
|
|
{
|
|
if (!$character->canAct()) {
|
|
return false;
|
|
}
|
|
|
|
return $character->consumeNerve($amount);
|
|
}
|
|
|
|
/**
|
|
* Regenerate nerve for a character
|
|
*/
|
|
public function regenerate(Character $character): void
|
|
{
|
|
$regenRate = config('game.nerve.regen_rate', 1);
|
|
|
|
if ($character->max_nerve <= 0) {
|
|
$character->max_nerve = config('game.nerve.max', 100);
|
|
}
|
|
|
|
$character->addNerve($regenRate);
|
|
}
|
|
|
|
/**
|
|
* Refill nerve to max for all active characters
|
|
*/
|
|
public function refillAll(): int
|
|
{
|
|
return Character::where('nerve', '<', \DB::raw('max_nerve'))
|
|
->where('status', 'active')
|
|
->update(['nerve' => \DB::raw('max_nerve')]);
|
|
}
|
|
}
|