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.

95 lines
2.7 KiB
GDScript

extends Node3D
class_name Core
@onready var character: Character = (get_owner() as Character)
@onready var status: Status = (%Status as Status)
@onready var skill: Skill = (%Skill as Skill)
@onready var move: Move = (%Move as Move)
var active_core_action_list: Array[String] = ["free_attack_heavy", "free_attack_light", "free_jump", "free_interact", "lock_attack_heavy", "lock_attack_light", "lock_jump", "lock_interact"]
func _ready():
for i in range(8):
status.core_active_list.append(null)
func _process(delta):
pass
func get_action_index(action: String) -> int:
return active_core_action_list.find(action)
func cast_skill_sub(index: int, cast_dir: Vector2, target: int) -> void:
var core: CoreCfg = status.core_active_list[index]
if not core:
return
#施放技能扣除mp
var skill_cfg: SkillCfg = core.get_skill_cfg(0) #todo
if not skill.cast_skill_mp_cost(skill_cfg):
return
var sub_character: Character = Global.character_mgr.get_character(status.sub_character_id)
if not sub_character:
return
var skill_order = Status.SkillOrder.new()
skill_order.skill_cfg = skill_cfg
skill_order.cast_dir = cast_dir
skill_order.target = target
sub_character.add_ai_skill_order(skill_order)
func cast_skill_by_action(action: String, cast_dir: Vector2) -> bool:
var index: int = active_core_action_list.find(action)
if index < 0:
return false
return cast_skill(index, cast_dir)
func cast_skill(index: int, cast_dir: Vector2) -> bool:
var core: CoreCfg = status.core_active_list[index]
if not core:
return false
match core.type:
Enum.ECoreType.Passive: return false
_: pass
var skill_cfg: SkillCfg = core.get_skill_cfg(0) #todo
#施放技能条件检查
if not skill.cast_skill_check(skill_cfg, status.break_level):
return false
#施放技能扣除mp
if not skill.cast_skill_mp_cost(skill_cfg):
return false
skill.cast_skill(skill_cfg, cast_dir)
return true
func set_active_core(index: int, core: CoreCfg) -> void:
match core.type:
Enum.ECoreType.Passive: return
_: pass
if (index < 0) or (index >= 8):
return
status.core_active_list[index] = core
status.emit_status("core_active_list")
return
func add_passive_core(core: CoreCfg) -> void:
match core.type:
Enum.ECoreType.Active: return
_: pass
status.core_passive_list.append(core)
status.emit_status("core_passive_list")
return
func remove_passive_core(core: CoreCfg) -> void:
match core.type:
Enum.ECoreType.Active: return
_: pass
status.core_passive_list.filter(func(c): return c!=core)
status.emit_status("core_passive_list")
return