<?php
/**
* 恐怖感情時の行動パターン
*
*/
class FearBehaviorWeightStrategy implements BehaviorWeightStrategy
{
private const ATTACK_WEIGHT = 0;
private const ESCAPE_WEIGHT_MIN = 30;
private const ESCAPE_WEIGHT_RATE = 10;
/**
* @inheritDoc
*/
public function getWeights(PersonalityStrategy $personality): array
{
return [
Behavior::ATTACK->value => self::ATTACK_WEIGHT,
Behavior::DEFENCE->value => $personality->getDefenceWeight() + $personality->getAttackWeight(),
Behavior::WAIT->value => $personality->getWaitWeight(),
Behavior::ESCAPE->value => $this->getEscapeWeight($personality),
];
}
/**
* 逃亡の重みを取得
*
* @param PersonalityStrategy $personality
* @return int
*/
private function getEscapeWeight(PersonalityStrategy $personality): int
{
$weight = $personality->getEscapeWeight();
if ($weight > 0) {
return $weight * self::ESCAPE_WEIGHT_RATE;
}
return self::ESCAPE_WEIGHT_MIN;
}
}