IndieGame/config/Table/Tools/Luban/Templates/php-json/schema.sbn

156 lines
4.2 KiB
Plaintext
Raw Normal View History

2024-10-11 10:12:15 +08:00
{{~namespace_with_grace_begin __namespace~}}
{{~for enum in __enums~}}
{{~if enum.comment != '' ~}}
/**
* {{enum.comment | html.escape}}
*/
{{~end~}}
class {{full_name enum}} {
{{~for item in enum.items ~}}
{{~if item.comment != '' ~}}
/**
* {{escape_comment item.comment}}
*/
{{~end~}}
public const {{item.name}} = {{item.value}};
{{~end~}}
}
{{~end~}}
{{~for bean in __beans~}}
{{name = (full_name bean)}}
{{~if bean.comment != '' ~}}
/**
* {{escape_comment bean.comment}}
*/
{{~end~}}
{{class_modifier bean}} class {{name}}{{if bean.parent_def_type}} extends {{full_name bean.parent_def_type}}{{end}} {
{{~if bean.is_abstract_type~}}
public static function constructFrom($_json_) {
$type = $_json_['$type'];
switch ($type) {
{{~ for child in bean.hierarchy_not_abstract_children~}}
case '{{impl_data_type child bean}}': return new {{full_name child}}($_json_);
{{~end~}}
default: throw new \Exception("unknown type:$type");
}
}
{{~end~}}
public function __construct($_json_) {
{{~if bean.parent_def_type~}}
parent::__construct($_json_);
{{~end~}}
{{~ for field in bean.export_fields ~}}
{{~if !field.ctype.is_nullable~}}
if (!array_key_exists('{{field.name}}', $_json_)) { throw new \Exception("field:'{{field.name}}' missing"); }
{{~end~}}
{{deserialize ('$this->' + format_field_name __code_style field.name) ( '$_json_[\'' + field.name + '\']') field.ctype}};
{{~end~}}
}
{{~ for field in bean.export_fields ~}}
{{~if field.comment != '' ~}}
/**
* {{escape_comment field.comment}}
*/
{{~end~}}
public ${{format_field_name __code_style field.name}};
{{~end~}}
}
{{~end~}}
{{~for table in __tables
key_type = table.key_ttype
value_type = table.value_ttype
name = (full_name table)
~}}
{{~if table.comment != '' ~}}
/**
* {{escape_comment table.comment}}
*/
{{~end~}}
class {{name}} {
{{~if table.is_map_table ~}}
private $_dataMap;
private $_dataList;
public function __construct($_json_) {
$this->_dataMap = [];
$this->_dataList = [];
foreach ($_json_ as $_json2_) {
{{deserialize '$_v' '$_json2_' value_type}};
array_push($this->_dataList, $_v);
$this->_dataMap[$_v->{{format_field_name __code_style table.index_field.name}}] = $_v;
}
}
public function getDataMap() { return $this->_dataMap; }
public function getDataList() { return $this->_dataList; }
public function get($key) { return $this->_dataMap[$key]; }
{{~else if table.is_list_table ~}}
private $_dataList;
public function __construct($_json_) {
$this->_dataList = [];
foreach ($_json_ as $_json2_) {
{{deserialize '$_v' '$_json2_' value_type}};
array_push($this->_dataList, $_v);
}
}
public function getDataList() { return $this->_dataList; }
public function get($index) { return $this->_dataList[$index]; }
{{~else~}}
private $_data;
public function __construct($_json_) {
if (count($_json_) != 1) throw new \Exception('table:{{table.name}} mode=one, but size != 1');
{{deserialize '$this->_data' '$_json_[0]' value_type}};
}
public function getData() { return $this->_data; }
{{~ for field in value_type.def_bean.hierarchy_export_fields ~}}
{{~if field.comment != '' ~}}
/**
* {{escape_comment field.comment}}
*/
{{~end~}}
public function get{{format_field_name __code_style field.name}}() { return $this->_data->{{format_field_name __code_style field.name}}; }
{{~end~}}
{{end}}
}
{{~end~}}
class {{__name}} {
{{~ for table in __tables ~}}
private $_{{table.name}};
{{~if table.comment != '' ~}}
/**
* {{escape_comment table.comment}}
*/
{{~end~}}
public function get{{table.name}}() { return $this->_{{table.name}}; }
{{~end~}}
public function __construct($loader) {
{{~for table in __tables ~}}
$this->_{{table.name}} = new {{full_name table}}($loader('{{table.output_data_file}}'));
{{~end~}}
}
}
{{~namespace_with_grace_end __namespace~}}