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.
44 lines
1.2 KiB
GDScript
44 lines
1.2 KiB
GDScript
extends Node3D
|
|
class_name CharacterManager
|
|
|
|
var character_map = {}
|
|
var character_idx : int = 0
|
|
|
|
func _ready():
|
|
Global.character_mgr = self
|
|
|
|
func create_character(cfg:CharacterCfg,team:Enum.ETeam,pos:Vector3):
|
|
var characterNode:Node
|
|
match cfg.type:
|
|
Enum.ECharacterType.Player:
|
|
characterNode = ResourceManager.scene_player.instantiate()
|
|
Enum.ECharacterType.Monster:
|
|
characterNode = ResourceManager.scene_monster.instantiate()
|
|
add_child(characterNode)
|
|
characterNode.name = cfg.name
|
|
var character = characterNode as Character
|
|
character_idx += 1
|
|
character_map[character_idx]=character
|
|
character.init(character_idx,cfg,team)
|
|
character.set_material(ResourceManager.character_material.duplicate())
|
|
character.set_pos(pos)
|
|
SignalManager.character_create.emit(character_idx,team,pos)
|
|
character.init_after()
|
|
|
|
func get_character(id:int) -> Character:
|
|
if id in character_map:
|
|
return character_map[id] as Character
|
|
else:
|
|
return null
|
|
|
|
func get_enemy_list(id:int) -> Array[Character]:
|
|
var ret:Array[Character] = []
|
|
var target = get_character(id)
|
|
if !target:
|
|
return ret
|
|
for key in character_map:
|
|
var character = character_map[key] as Character
|
|
if character.team() != target.team():
|
|
ret.append(character)
|
|
return ret
|