extends ActionWithTarget class_name ActionCastSkill func execute(character: Character, target: Character, blackboard: Blackboard) -> int: var skill: Skill = character.skill var status: Status = character.status var dir: Vector2 = target.pos2D() - character.pos2D() var dist: float = dir.length() if status.is_skill_running: if int(status.break_level) < Enum.EBreakLevel.Break: if dist < 0.5: character.move_to(-dir) elif dist > 2: character.move_to(dir) return RUNNING for skill_cfg: SkillCfg in skill.skill_dict.values(): #检查姿态 var stance_from: int = skill_cfg.stance_from var check_any_ground: bool = (stance_from == Enum.EStance.GroundAny) and status.is_on_floor var check_any_air: bool = (stance_from == Enum.EStance.AirAny) and not status.is_on_floor var check_any: bool = (stance_from == Enum.EStance.Any) or check_any_ground or check_any_air if (stance_from != int(status.stance)) and not check_any: continue #检查距离 if dist > skill_cfg.range: continue #检查远程最小释放距离 if dist < skill_cfg.range - 2: continue #施放技能 var ret: bool = skill.cast_skill(skill_cfg, dir) if ret: return SUCCESS return FAILURE