完善客户端功能并同步差距文档
This commit is contained in:
@@ -28,6 +28,9 @@ var anim: Node # Metin2AnimPlayer
|
||||
var _dir := ""
|
||||
var _motions := {} # MOTION_NAME(String) -> 绝对 .msa 路径
|
||||
var _state := ""
|
||||
var _audio: Node
|
||||
var _sound_instances: Array = []
|
||||
var _sound_frame := -1
|
||||
|
||||
# root/npclist.txt: vnum -> 模型代号(bear_brown / tiger_big / stray_dog…)。
|
||||
# 翻译版 mob_proto 把 szName 也本地化了("Brown Bear"),解不出目录,必须靠这张表。
|
||||
@@ -109,6 +112,10 @@ func build(assets_root: String, proto: Node, race: int, pump := Callable()) -> b
|
||||
CharShadow.attach(self, 1.6) # 怪脚印大一点
|
||||
return true
|
||||
|
||||
func set_audio(audio_node: Node) -> void:
|
||||
_audio = audio_node
|
||||
_refresh_sound_script(String(anim.get("anim_path")) if anim else "")
|
||||
|
||||
func set_anim_state(s: String) -> void:
|
||||
if s == _state or anim == null:
|
||||
return
|
||||
@@ -118,6 +125,27 @@ func set_anim_state(s: String) -> void:
|
||||
return
|
||||
anim.set("loop", s in ["wait", "walk", "run"])
|
||||
anim.set("anim_path", msa)
|
||||
_refresh_sound_script(msa)
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if _audio == null or anim == null or _sound_instances.is_empty() or not anim.has_method("get_time") \
|
||||
or not bool(anim.get("playing")):
|
||||
return
|
||||
var current_time: float = anim.call("get_time")
|
||||
var frame := int(floor(current_time * 60.0))
|
||||
if frame == _sound_frame:
|
||||
return
|
||||
_sound_frame = frame
|
||||
_audio.update_sound_instances_3d(global_position.x, global_position.y, global_position.z,
|
||||
frame, _sound_instances, true)
|
||||
|
||||
func _refresh_sound_script(motion_path: String) -> void:
|
||||
_sound_instances = []
|
||||
_sound_frame = -1
|
||||
if _audio == null or motion_path == "" or not motion_path.to_lower().ends_with(".msa"):
|
||||
return
|
||||
if _audio.has_method("load_mss_for_motion"):
|
||||
_sound_instances = _audio.load_mss_for_motion(motion_path)
|
||||
|
||||
# 供 net_world._on_info 用:真模型没有统一的名字节点时补一个。
|
||||
func set_display_name(n: String) -> void:
|
||||
|
||||
Reference in New Issue
Block a user