extends LimboHSM @onready var root: Normal = %Normal ##自动跳跃逻辑 @export var auto_jump_cached_time: float = .2 var auto_jump_timer: float func _setup() -> void: #region Jump and fall #Jump State -> Fall State self.add_transition(root.jump_state,root.fall_state,root.jump_state.EVENT_FINISHED) #Fall State -> Jump State self.add_transition(root.fall_state,root.jump_state,&"air_to_jump") #endregion #region Wall jump #ANYSTATE -> Wall Jump State self.add_transition(ANYSTATE,root.wall_jump_state,&"wall_jump") #Wall Jump State -> Fall State self.add_transition(root.wall_jump_state,root.fall_state,root.wall_jump_state.EVENT_FINISHED) #endregion self.add_event_handler(&"trigger_jump",_handler_trigger_jump) func _enter() -> void: var want_to_jump = blackboard.get_var(&"want_to_jump",false) initial_state = root.fall_state if want_to_jump: initial_state = root.jump_state self.blackboard.set_var(&"want_to_jump",false) func _update(delta: float) -> void: if auto_jump_timer > 0: auto_jump_timer -= delta if agent.is_on_floor() && agent.velocity.y >= 0: #自动跳 if auto_jump_timer > 0: auto_jump_timer = 0 self.blackboard.set_var(&"want_to_jump",true) change_active_state(root.jump_state) get_root().dispatch(self.EVENT_FINISHED) func _cache_auto_jump_timer() -> void: auto_jump_timer = auto_jump_cached_time #region 输入绑定事件 func _handler_trigger_jump() -> bool: if agent.is_on_wall_only(): get_root().dispatch(&"wall_jump") _cache_auto_jump_timer() return true #endregion