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.

43 lines
1.2 KiB
GDScript

2 years ago
extends Node3D
class_name CharacterManager
var scene_player = preload("res://scene/character/player.tscn")
var scene_monster = preload("res://scene/character/monster.tscn")
2 years ago
var character_material = preload("res://render/material/character.tres")
2 years ago
var character_map = {}
var character_idx : int = 0
func create_character(cfg:CharacterCfg,team:Enum.ETeam,pos:Vector3):
2 years ago
var characterNode:Node
match cfg.type:
Enum.ECharacterType.Player:
characterNode = scene_player.instantiate()
Enum.ECharacterType.Monster:
characterNode = scene_monster.instantiate()
add_child(characterNode)
characterNode.name = cfg.name
var character = characterNode as Character
2 years ago
character_idx += 1
character_map[character_idx]=character
2 years ago
character.init(self,character_idx,cfg,team)
2 years ago
character.set_material(character_material.duplicate())
character.set_pos(pos)
2 years ago
2 years ago
func get_character(id:int) -> Character:
if id in character_map:
return character_map[id] as Character
else:
return null
2 years ago
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