feat(wip): GameUnitConstrint
This commit is contained in:
@@ -21,8 +21,6 @@ class GameUnitConstBase{
|
||||
|
||||
protected static $constID = [];
|
||||
protected static $constName = [];
|
||||
protected static $constCity = [];
|
||||
protected static $constRegion = [];
|
||||
protected static $constType = [];
|
||||
|
||||
protected static $typeData = [
|
||||
@@ -357,22 +355,6 @@ class GameUnitConstBase{
|
||||
static::$constType[$unitType->armType] = [];
|
||||
}
|
||||
static::$constType[$unitType->armType][] = $unitType;
|
||||
|
||||
foreach($unitType->reqCities as $reqCity){
|
||||
if(!key_exists($reqCity, static::$constCity)){
|
||||
static::$constCity[$reqCity] = [];
|
||||
}
|
||||
static::$constCity[$reqCity][] = $unitType;
|
||||
}
|
||||
|
||||
if($unitType->reqRegions){
|
||||
foreach($unitType->reqRegions as $reqRegion){
|
||||
if(!key_exists($reqRegion, static::$constRegion)){
|
||||
static::$constRegion[$reqRegion] = [];
|
||||
}
|
||||
static::$constRegion[$reqRegion][] = $unitType;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -400,22 +382,6 @@ class GameUnitConstBase{
|
||||
return static::$constName[$name]??null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \sammo\GameUnitDetail[]
|
||||
*/
|
||||
public static function byCity(int $city): array{
|
||||
static::_generate();
|
||||
return static::$constCity[$city]??[];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \sammo\GameUnitDetail[]
|
||||
*/
|
||||
public static function byRegion(int $region): array{
|
||||
static::_generate();
|
||||
return static::$constRegion[$region]??[];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return \sammo\GameUnitDetail[]
|
||||
@@ -435,14 +401,12 @@ class GameUnitConstBase{
|
||||
|
||||
protected static function _generate(){
|
||||
|
||||
if(static::$constID || static::$constName || static::$constCity || static::$constRegion || static::$constType){
|
||||
if(static::$constID || static::$constName || static::$constType){
|
||||
return;
|
||||
}
|
||||
|
||||
$constID = [];
|
||||
$constName = [];
|
||||
$constCity = [];
|
||||
$constRegion = [];
|
||||
$constType = [];
|
||||
|
||||
foreach(static::$_buildData as $rawUnit){
|
||||
@@ -457,10 +421,7 @@ class GameUnitConstBase{
|
||||
$magicCoef,
|
||||
$cost,
|
||||
$rice,
|
||||
$reqTech,
|
||||
$reqCities,
|
||||
$reqRegions,
|
||||
$reqYear,
|
||||
$reqConstraints,
|
||||
$attackCoef,
|
||||
$defenceCoef,
|
||||
$info,
|
||||
@@ -469,21 +430,9 @@ class GameUnitConstBase{
|
||||
$iActionList,
|
||||
] = $rawUnit;
|
||||
|
||||
if($reqYear > 0){
|
||||
$info[] = "{$reqYear}년 경과 후 사용 가능";
|
||||
}
|
||||
|
||||
$constraints = [];
|
||||
if($reqTech > 0){
|
||||
$constraints[] = GameUnitConstraintHelper::ReqTech($reqTech);
|
||||
}
|
||||
|
||||
if($reqCities !== null){
|
||||
$constraints[] = GameUnitConstraintHelper::ReqCities($reqCities);
|
||||
}
|
||||
|
||||
if($reqRegions !== null){
|
||||
$constraints[] = GameUnitConstraintHelper::ReqRegions($reqRegions);
|
||||
foreach($reqConstraints as $value){
|
||||
/** @var GameUnitConstraint\BaseGameUnitConstraint $value */
|
||||
$info[] = $value->getInfo();
|
||||
}
|
||||
|
||||
$unit = new GameUnitDetail(
|
||||
@@ -498,14 +447,12 @@ class GameUnitConstBase{
|
||||
$cost,
|
||||
$rice,
|
||||
$reqConstraints,
|
||||
$reqYear,
|
||||
$attackCoef,
|
||||
$defenceCoef,
|
||||
$info,
|
||||
$initSkillTrigger,
|
||||
$phaseSkillTrigger,
|
||||
$iActionList,
|
||||
$constraints
|
||||
$iActionList
|
||||
);
|
||||
|
||||
$constID[$id] = $unit;
|
||||
@@ -515,31 +462,10 @@ class GameUnitConstBase{
|
||||
}
|
||||
$constType[$armType][$id] = $unit;
|
||||
|
||||
if($unit->reqCities){
|
||||
foreach($unit->reqCities as $reqCity){
|
||||
if(!key_exists($reqCity, $constCity)){
|
||||
$constCity[$reqCity] = [];
|
||||
}
|
||||
$constCity[$reqCity][$id] = $unit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($unit->reqRegions){
|
||||
foreach($unit->reqRegions as $reqRegion){
|
||||
if(!key_exists($reqRegion, $constRegion)){
|
||||
$constRegion[$reqRegion] = [];
|
||||
}
|
||||
$constRegion[$reqRegion][$id] = $unit;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static::$constID = $constID;
|
||||
static::$constName = $constName;
|
||||
static::$constCity = $constCity;
|
||||
static::$constRegion = $constRegion;
|
||||
static::$constType = $constType;
|
||||
|
||||
static::_generateOptional();
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
|
||||
abstract class BaseGameUnitConstraint {
|
||||
public abstract function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool;
|
||||
|
||||
public abstract function getInfo(): string;
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
use sammo\KVStorage;
|
||||
|
||||
abstract class GameUnitConstraint {
|
||||
private function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
public abstract function test(General $general, KVStorage $env): bool;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\CityConst;
|
||||
use sammo\General;
|
||||
|
||||
class ReqCities extends BaseGameUnitConstraint {
|
||||
|
||||
public function __construct(protected array $reqCities)
|
||||
{
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
foreach ($this->reqCities as $city) {
|
||||
if (key_exists($city, $ownCities)) {
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
$cityNames = [];
|
||||
foreach ($this->reqCities as $city) {
|
||||
$cityNames[] = CityConst::byID($city)->name;
|
||||
}
|
||||
|
||||
$cityNameText = implode(', ', $cityNames);
|
||||
return "{$cityNameText} 소유시 가능";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
|
||||
class ReqMinRelYear extends BaseGameUnitConstraint {
|
||||
|
||||
public function __construct(protected int $reqMinRelYear)
|
||||
{
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
return $relativeYear >= $this->reqMinRelYear;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
return "{$this->reqMinRelYear}년 경과 후 사용 가능";
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
if($reqTech > 0){
|
||||
$info[] = "기술력 {$reqTech} 이상 필요";
|
||||
}
|
||||
|
||||
if($reqCities !== null){
|
||||
$reqCities = array_map(function($reqCity) use (&$info){
|
||||
$info[] = "{$reqCity} 소유시 가능";
|
||||
return CityConst::byName($reqCity)->id;
|
||||
}, $reqCities);
|
||||
}
|
||||
|
||||
if($reqRegions !== null){
|
||||
$reqRegions = array_map(function($reqRegion) use (&$info){
|
||||
$info[] = "{$reqRegion} 지역 소유시 가능";
|
||||
return CityConst::$regionMap[$reqRegion];
|
||||
}, $reqRegions);
|
||||
}
|
||||
|
||||
*/
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\CityConst;
|
||||
use sammo\General;
|
||||
|
||||
class ReqRegions extends BaseGameUnitConstraint {
|
||||
|
||||
public function __construct(protected array $reqRegions)
|
||||
{
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
foreach ($this->reqRegions as $region) {
|
||||
if (key_exists($region, $ownRegions)) {
|
||||
return true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
$regionNames = [];
|
||||
foreach ($this->reqRegions as $region) {
|
||||
$regionNames[] = CityConst::$regionMap[$region];
|
||||
}
|
||||
|
||||
$regionNameText = implode(', ', $regionNames);
|
||||
return "{$regionNameText} 지역 소유시 가능";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace sammo\GameUnitConstraint;
|
||||
|
||||
use sammo\General;
|
||||
use sammo\KVStorage;
|
||||
|
||||
class ReqTech extends BaseGameUnitConstraint {
|
||||
|
||||
public function __construct(protected int $reqTech)
|
||||
{
|
||||
}
|
||||
|
||||
public function test(General $general, array $ownCities, array $ownRegions, int $relativeYear, int $tech, array $nationAux): bool
|
||||
{
|
||||
if ($tech < $this->reqTech) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
return "기술력 {$this->reqTech} 이상 필요";
|
||||
}
|
||||
}
|
||||
@@ -1,26 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace sammo;
|
||||
|
||||
class GameUnitConstraintHelper {
|
||||
|
||||
static function ReqTech(int $reqTech): array {
|
||||
return [__FUNCTION__, $reqTech];
|
||||
}
|
||||
|
||||
static function ReqCities(array $reqCities): array {
|
||||
return [__FUNCTION__, $reqCities];
|
||||
}
|
||||
|
||||
static function ReqRegions(array $reqRegions): array {
|
||||
return [__FUNCTION__, $reqRegions];
|
||||
}
|
||||
|
||||
static function ReqMinYear(int $reqMinYear): array {
|
||||
return [__FUNCTION__, $reqMinYear];
|
||||
}
|
||||
}
|
||||
|
||||
namespace sammo\Constraint;
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
namespace sammo;
|
||||
|
||||
use sammo\GameUnitConstraint\GameUnitConstraint;
|
||||
use sammo\GameUnitConstraint\BaseGameUnitConstraint;
|
||||
|
||||
class GameUnitDetail implements iAction
|
||||
{
|
||||
@@ -18,19 +18,16 @@ class GameUnitDetail implements iAction
|
||||
public $magicCoef;
|
||||
public $cost;
|
||||
public $rice;
|
||||
public $reqTech;
|
||||
public $reqCities;
|
||||
public $reqRegions;
|
||||
public $reqYear;
|
||||
public $attackCoef;
|
||||
public $defenceCoef;
|
||||
public $info;
|
||||
public $initSkillTrigger;
|
||||
public $phaseSkillTrigger;
|
||||
/** @var iAction[]|null iActionList */
|
||||
public $iActionList;
|
||||
public array $reqConstraints;
|
||||
|
||||
protected ?string $info;
|
||||
|
||||
public function __construct(
|
||||
int $id,
|
||||
int $armType,
|
||||
@@ -45,7 +42,6 @@ class GameUnitDetail implements iAction
|
||||
array $reqConstraints,
|
||||
array $attackCoef,
|
||||
array $defenceCoef,
|
||||
array $info,
|
||||
?array $initSkillTrigger,
|
||||
?array $phaseSkillTrigger,
|
||||
?array $iActionList,
|
||||
@@ -63,7 +59,6 @@ class GameUnitDetail implements iAction
|
||||
$this->reqConstraints = $reqConstraints;
|
||||
$this->attackCoef = $attackCoef;
|
||||
$this->defenceCoef = $defenceCoef;
|
||||
$this->info = $info;
|
||||
$this->initSkillTrigger = $initSkillTrigger;
|
||||
$this->phaseSkillTrigger = $phaseSkillTrigger;
|
||||
$this->iActionList = [];
|
||||
@@ -78,7 +73,16 @@ class GameUnitDetail implements iAction
|
||||
|
||||
public function getInfo(): string
|
||||
{
|
||||
return join("\n<br>", $this->info);
|
||||
if($this->info !== null){
|
||||
return $this->info;
|
||||
}
|
||||
|
||||
$info = [];
|
||||
foreach ($this->reqConstraints as $constraint) {
|
||||
$info[] = $constraint->getInfo();
|
||||
}
|
||||
$this->info = join("\n<br>", $info);
|
||||
return $this->info;
|
||||
}
|
||||
|
||||
public function getShortName(): string
|
||||
@@ -195,8 +199,10 @@ class GameUnitDetail implements iAction
|
||||
//음수 없음
|
||||
$relativeYear = max(0, $relativeYear);
|
||||
|
||||
if ($relativeYear < $this->reqYear) {
|
||||
return false;
|
||||
foreach($this->reqConstraints as $constraint){
|
||||
if(!$constraint->test($ownCities, $ownRegions, $relativeYear, $tech)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if ($tech < $this->reqTech) {
|
||||
|
||||
Reference in New Issue
Block a user