You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			GDScript
		
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			GDScript
		
	
| 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
 | |
|         #施放技能条件检查
 | |
|         if not skill.cast_skill_check(skill_cfg, status.break_level):
 | |
|             continue
 | |
|         #施放技能扣除mp
 | |
|         if not skill.cast_skill_mp_cost(skill_cfg):
 | |
|             continue
 | |
|         skill.cast_skill(skill_cfg, dir)
 | |
|         return SUCCESS
 | |
|     return FAILURE
 |