"""
Ren'Py Character Generator
生成角色立绘相关命令
"""
from core.base_sentence_generator import BaseSentenceGenerator
[文档]
class CharacterGenerator(BaseSentenceGenerator):
"""角色生成器"""
param_config = {
"SpriteCommand": {
"translate_type": "Command",
"default": "show",
},
"Character": {
"translate_type": "Character",
},
"Sprite": {
"translate_type": "Sprite",
},
"Varient": {
"translate_type": "Varient",
},
"Atr1": {},
"Atr2": {},
"Atr3": {},
"SpriteAt": {
"translate_type": "Transform",
"format": " at {value}"
},
"SpriteOnlayer": {
"translate_type": "Layer",
"format": " onlayer {value}",
},
"SpriteWith": {
"translate_type": "Transition",
"format": " with {value}",
"default": "dissolve"
},
"SpriteWithAtr": {
"format": "({value})",
},
"SpriteATLType": {},
}
@property
def category(self):
return "Character"
@property
def priority(self) -> int:
return 250
[文档]
def process(self, data):
"""
构建立绘命令
Args:
data: 参数字典
Returns:
List[str]: 生成的角色命令
"""
if not self.can_process(data):
return None
data = self.do_translate(data)
lines = []
if self.exists_param("Character", data) or self.exists_param("Sprite", data):
character = self.get_value("Character", data)
sprite = self.get_value("Sprite", data)
image = character or sprite
# 构建立绘命令
command = self.get_value("SpriteCommand", data, use_default=True) + " "
# 添加非层叠式图像属性
varient = self.get_value("Varient", data)
if varient:
image = f"{image} {varient}"
# 添加所有属性(差分)
for i in range(1, 4): # 支持最多3个属性
atr_key = f"Atr{i}"
if self.exists_param(atr_key, data):
atr_value = self.get_value(atr_key, data)
image += f" {atr_value}"
# 添加位置
at = self.get_sentence("SpriteAt", data)
# 添加图层
onlayer = self.get_sentence("SpriteOnlayer", data)
# 添加过渡效果
transition = self.get_value("SpriteWith", data, use_default=True)
if transition != "empty":
transition = self.get_sentence("SpriteWith", data, use_default=True)
with_atr = self.get_sentence("SpriteWithAtr", data)
if with_atr:
transition += with_atr
else:
transition = ""
# 构建最终命令
line = f"{command}{image}{at}{onlayer}{transition}"
if self.exists_param("SpriteATLType", data):
line = f"{line}:"
lines.append(line)
return lines