feat: instantiate dragons with initial animation
This commit is contained in:
parent
48b6cd42cf
commit
c422a83f59
6 changed files with 62 additions and 9 deletions
|
@ -16,7 +16,12 @@ var _instantiator: DragonInstantiator
|
|||
var _save_load: SaveLoad
|
||||
var _library: DragonLibrary
|
||||
|
||||
var _dragon_entities: Dictionary = {}
|
||||
var _dragon_entities: Dictionary[int, Dragon] = {}
|
||||
var _instantiated_dragons: Dictionary[int, DragonEntity] = {}
|
||||
var rng: RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
|
||||
@export var min_dragon_instantiation_time: float
|
||||
@export var max_dragon_instantiation_time: float
|
||||
|
||||
|
||||
func _ready():
|
||||
|
@ -27,10 +32,36 @@ func _ready():
|
|||
await get_tree().process_frame
|
||||
move_window_to_bottom_right()
|
||||
_load_game()
|
||||
_queue_dragon_instantiation()
|
||||
|
||||
|
||||
func _queue_dragon_instantiation():
|
||||
await get_tree().create_timer(rng.randf_range(min_dragon_instantiation_time, max_dragon_instantiation_time)).timeout
|
||||
_instantiate_random_dragon()
|
||||
|
||||
|
||||
func _instantiate_random_dragon():
|
||||
pass
|
||||
for spot in dragon_spots:
|
||||
if not _filled_spots.has(spot):
|
||||
var dragon: DragonEntity = _pick_random_dragon(spot.position)
|
||||
if dragon != null:
|
||||
_filled_spots[spot] = dragon.id
|
||||
break
|
||||
_queue_dragon_instantiation()
|
||||
|
||||
|
||||
func _pick_random_dragon(pos: Vector2) -> DragonEntity:
|
||||
for dragon in _library.dragons:
|
||||
var id: int = dragon['id']
|
||||
if _instantiated_dragons.has(id) or _dragon_entities.has(id):
|
||||
continue
|
||||
var dragon_name: String = dragon['name']
|
||||
var hat: Texture2D = hat_outfits.get_texture(dragon['hat'])
|
||||
var shirt: Texture2D = shirt_outfits.get_texture(dragon['shirt'])
|
||||
var shoes: Texture2D = shoes_outfits.get_texture(dragon['shoes'])
|
||||
return _instantiate_dragon_ingame(pos, hat, shirt, shoes, dragon_name, id)
|
||||
|
||||
return null
|
||||
|
||||
|
||||
func move_window_to_bottom_right():
|
||||
|
@ -69,7 +100,7 @@ func _load_game():
|
|||
print(_save_load.contents_to_save)
|
||||
|
||||
|
||||
func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, id: int):
|
||||
func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, id: int) -> DragonEntity:
|
||||
var dragon: DragonEntity = dragon_ingame.instantiate()
|
||||
dragon.dress(hat, shirt, shoes)
|
||||
dragon.set_dragon_name(dragon_name)
|
||||
|
@ -77,6 +108,8 @@ func _instantiate_dragon_ingame(position: Vector2, hat: Texture2D, shirt: Textur
|
|||
dragon.id = id
|
||||
dragon.position = position
|
||||
dragon.on_pick.connect(_pick_dragon)
|
||||
_instantiated_dragons[id] = dragon
|
||||
return dragon
|
||||
|
||||
|
||||
func _pick_dragon(id: int, position: Vector2, hat: Texture2D, shirt: Texture2D, shoes: Texture2D, dragon_name: String, drag: bool = true):
|
||||
|
@ -85,6 +118,7 @@ func _pick_dragon(id: int, position: Vector2, hat: Texture2D, shirt: Texture2D,
|
|||
_dragon_entities[id] = dragon
|
||||
dragon.place_back.connect(_dragon_place_back)
|
||||
add_child(dragon)
|
||||
_instantiated_dragons.erase(id)
|
||||
|
||||
for spot in _filled_spots:
|
||||
if _filled_spots[spot] == id:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue