优化 代码进阶优化教程 内的部分内容
This commit is contained in:
@@ -92,32 +92,30 @@ playerId = clientApi.GetLocalPlayerId()
|
||||
ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_create_flying", 0)
|
||||
ClientComp.CreateQueryVariable(levelId).Register("query.mod.ysm_is_elytra_flying", 0)
|
||||
|
||||
# key为需要监听的attr名称,value为需要设置的对应Molang变量名称
|
||||
queryDict = {
|
||||
"playerIsFlying": "query.mod.ysm_is_flying",
|
||||
"playerIsElytraFlying": "query.mod.ysm_is_elytra_flying"
|
||||
}
|
||||
|
||||
# 根据queryDict自动配置监听,简化代码
|
||||
def CreateAttrCallBack(bindQuery):
|
||||
def _eventFuckCallBack(args):
|
||||
ClientComp.CreateQueryVariable(args["entityId"]).Set(bindQuery, args["newValue"])
|
||||
return _eventFuckCallBack
|
||||
|
||||
class PlayerActionClientSystem(ClientSystem):
|
||||
def __init__(self, namespace, systemName):
|
||||
ClientSystem.__init__(self, namespace, systemName)
|
||||
# 注册本地玩家的属性值变化回调函数
|
||||
modAttr = ClientComp.CreateModAttr(playerId)
|
||||
modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged)
|
||||
modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged)
|
||||
for attr, query in queryDict.items():
|
||||
ClientComp.CreateModAttr(playerId).RegisterUpdateFunc(attr, CreateAttrCallBack(query))
|
||||
|
||||
def OnAddPlayerAOIClient(self, args):
|
||||
"""玩家加入游戏或进入视野时触发,注册属性值变化回调"""
|
||||
pId = args["playerId"]
|
||||
modAttr = ClientComp.CreateModAttr(pId)
|
||||
modAttr.RegisterUpdateFunc("playerIsCreateFlying", self.PlayerCreateFlyStateChanged)
|
||||
modAttr.RegisterUpdateFunc("playerIsElytraFlying", self.PlayerElytraFlyStateChanged)
|
||||
|
||||
def PlayerCreateFlyStateChanged(self, args):
|
||||
"""创造飞行状态变化回调"""
|
||||
molangVar = args["newValue"] # 属性变化后的值
|
||||
pId = args["entityId"] # 属性变化对应的实体Id
|
||||
ClientComp.CreateQueryVariable(pId).Set("query.mod.ysm_is_create_flying", molangVar)
|
||||
|
||||
def PlayerElytraFlyStateChanged(self, args):
|
||||
"""鞘翅飞行状态变化回调"""
|
||||
molangVar = args["newValue"] # 属性变化后的值
|
||||
pId = args["entityId"] # 属性变化对应的实体Id
|
||||
ClientComp.CreateQueryVariable(pId).Set("query.mod.ysm_is_elytra_flying", molangVar)
|
||||
for attr, query in queryDict.items():
|
||||
ClientComp.CreateModAttr(pId).RegisterUpdateFunc(attr, CreateAttrCallBack(query))
|
||||
```
|
||||
|
||||
### 工作流程说明
|
||||
|
||||
Reference in New Issue
Block a user