d_setting 디렉도리 보관 방식 변경

This commit is contained in:
2018-07-12 01:56:46 +09:00
parent 4cd901cf8e
commit b6cd004117
5 changed files with 61 additions and 25 deletions
+6
View File
@@ -0,0 +1,6 @@
<?php
namespace sammo;
class GameConst extends GameConstBase
{
}
-12
View File
@@ -1,12 +0,0 @@
<?php
namespace sammo;
class GameCustomConst
{
/** @var int 유저 스탯 총합 */
public static $defaultStatTotal = _tK_statTotal_;
public static $defaultStatMin = _tK_statMin_;
public static $defaultStatMax = _tK_statMax_;
public static $defaultStatNPCMax = _tK_statNPCMax_;
public static $chiefStatMin = _tK_statChiefMin_;
}
@@ -1,7 +1,7 @@
<?php
namespace sammo;
class GameConst extends GameCustomConst
class GameConstBase
{
/** @var string 버전 */
public static $title = "삼국지 모의전투 PHP HiDCHe";
+7 -12
View File
@@ -182,14 +182,14 @@ class Scenario{
$default = Json::decode(file_get_contents($defaultPath));
$stat = [
'statTotal'=>$this->data['stat']['total']??$default['stat']['total'],
'statMin'=>$this->data['stat']['min']??$default['stat']['min'],
'statMax'=>$this->data['stat']['max']??$default['stat']['max'],
'statNPCMax'=>$this->data['stat']['npcMax']??$default['stat']['npcMax'],
'statChiefMin'=>$this->data['stat']['chiefMin']??$default['stat']['chiefMin'],
'defaultStatTotal'=>$this->data['stat']['total']??$default['stat']['total'],
'defaultStatMin'=>$this->data['stat']['min']??$default['stat']['min'],
'defaultStatMax'=>$this->data['stat']['max']??$default['stat']['max'],
'defaultStatNPCMax'=>$this->data['stat']['npcMax']??$default['stat']['npcMax'],
'chiefStatMin'=>$this->data['stat']['chiefMin']??$default['stat']['chiefMin'],
];
$this->gameConf = array_merge($stat, $this->data['map']??[]);
$this->gameConf = array_merge($stat, $this->data['map']??[], $this->data['const']??[]);
$this->iconPath = $this->data['iconPath']??$default['iconPath'];
return $this->gameConf;
@@ -358,12 +358,7 @@ class Scenario{
public function buildConf(){
$path = __dir__.'/../d_setting';
Util::generateFileUsingSimpleTemplate(
$path.'/GameCustomConst.orig.php',
$path.'/GameCustomConst.php',
$this->gameConf,
true
);
Util::generatePHPClassFile($path.'/GameConst.php', $this->gameConf, 'GameConstBase', 'sammo');
$mapPath = __dir__.'/../scenario/map';
$unitPath = __dir__.'/../scenario/unit';
+47
View File
@@ -128,6 +128,53 @@ class Util extends \utilphp\util
return true;
}
/**
* params에 맞도록 class를 생성해주는 함수
*/
public static function generatePHPClassFile(string $destFilePath, array $params, ?string $srcClassName=null, string $namespace='sammo'){
if ($destFilePath === $srcFilePath) {
return 'invalid destFilePath';
}
if (!is_writable(dirname($destFilePath))) {
return 'destFilePath is not writable';
}
$newClassName = basename($destFilePath, '.php');
$newClassName = basename($newClassName, '.orig');
$head = [];
$head[] = '<?php';
$head[] = "namespace $namespace;";
if($srcClassName === null){
$head[] = "class $newClassName";
}
else{
$head[] = "class $newClassName extends $srcClassName";
}
$head[] = '{';
$head[] = '';
$head = join("\n", $head);
$body = [];
foreach($params as $key=>$value){
if(!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/',$key)){
return "$key is not valid variable name";
}
$body[] = ' public static $'.$key.' = '.var_export($value, true).';';
}
$tail = "\n}";
if(file_exists($destFilePath)){
unlink($destFilePath);
}
$result = file_put_contents($destFilePath, $head.join("\n", $body).$tail, LOCK_EX);
assert($result);
return true;
}
/**
* '비교적' 안전한 int 변환
* null -> null