added fruit queue up to three fruits while brewing is busy
parent
7d17c1312e
commit
ec27fa03e4
|
|
@ -4,6 +4,7 @@ class_name DropsBase
|
||||||
var witch
|
var witch
|
||||||
var player
|
var player
|
||||||
var is_spawning = true
|
var is_spawning = true
|
||||||
|
var in_orbit: bool = false
|
||||||
signal collected
|
signal collected
|
||||||
|
|
||||||
var _collect_sfx = preload("res://assets/music&sfx/sfx/lesiakower-coin-collect-retro-8-bit-sound-effect-145251.mp3")
|
var _collect_sfx = preload("res://assets/music&sfx/sfx/lesiakower-coin-collect-retro-8-bit-sound-effect-145251.mp3")
|
||||||
|
|
@ -44,9 +45,14 @@ func _animate_spawn() -> void:
|
||||||
is_spawning = false
|
is_spawning = false
|
||||||
|
|
||||||
func _on_body_entered(body: Node2D) -> void:
|
func _on_body_entered(body: Node2D) -> void:
|
||||||
if body == player and not is_spawning:
|
if body == player and not is_spawning and not in_orbit:
|
||||||
|
var cauldron = witch.get_node("CauldronBar")
|
||||||
|
if cauldron.is_brewing and player.fruit_queue.size() < 3:
|
||||||
|
_sfx_player.pitch_scale = randf_range(0.85, 1.15)
|
||||||
|
_sfx_player.play()
|
||||||
|
player.add_to_queue(self)
|
||||||
|
else:
|
||||||
collect()
|
collect()
|
||||||
pass
|
|
||||||
|
|
||||||
func collect():
|
func collect():
|
||||||
_sfx_player.pitch_scale = randf_range(0.85, 1.15)
|
_sfx_player.pitch_scale = randf_range(0.85, 1.15)
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ var progres_index = 0
|
||||||
var is_brewing
|
var is_brewing
|
||||||
var brew_explosion = true
|
var brew_explosion = true
|
||||||
@onready var witch = get_parent()
|
@onready var witch = get_parent()
|
||||||
|
@onready var player = get_node("/root/Game/Player")
|
||||||
var explosion_scene = preload("res://scenes/explosion.tscn")
|
var explosion_scene = preload("res://scenes/explosion.tscn")
|
||||||
var _ignite_sfx = preload("res://assets/music&sfx/sfx/data_pion-sfx9-fwoosh-324525.mp3")
|
var _ignite_sfx = preload("res://assets/music&sfx/sfx/data_pion-sfx9-fwoosh-324525.mp3")
|
||||||
var _ignite_player: AudioStreamPlayer
|
var _ignite_player: AudioStreamPlayer
|
||||||
|
|
@ -122,6 +123,7 @@ func brew(fruits):
|
||||||
SpellLibrary.LASER: witch.shoot_laser()
|
SpellLibrary.LASER: witch.shoot_laser()
|
||||||
reset_texture()
|
reset_texture()
|
||||||
is_brewing = false
|
is_brewing = false
|
||||||
|
player.flush_queue()
|
||||||
|
|
||||||
func get_unique_fruits() -> Array:
|
func get_unique_fruits() -> Array:
|
||||||
var unique = []
|
var unique = []
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,13 @@ extends CanvasLayer
|
||||||
@onready var _spawn_control = get_node("/root/Game/SpawnControl")
|
@onready var _spawn_control = get_node("/root/Game/SpawnControl")
|
||||||
@onready var _witch = get_node("/root/Game/Witch")
|
@onready var _witch = get_node("/root/Game/Witch")
|
||||||
@onready var _drop_manager = get_node("/root/Game/DropManager")
|
@onready var _drop_manager = get_node("/root/Game/DropManager")
|
||||||
|
@onready var _player = get_node("/root/Game/Player")
|
||||||
|
|
||||||
|
var _fruit_scenes: Dictionary = {
|
||||||
|
"Apple": preload("res://scenes/apple.tscn"),
|
||||||
|
"Grape": preload("res://scenes/grape.tscn"),
|
||||||
|
"Chili": preload("res://scenes/chili.tscn"),
|
||||||
|
}
|
||||||
|
|
||||||
var _spell_dispatch: Dictionary
|
var _spell_dispatch: Dictionary
|
||||||
var _lvl_disable_btn: Button
|
var _lvl_disable_btn: Button
|
||||||
|
|
@ -73,6 +80,10 @@ func _build_ui() -> void:
|
||||||
btn.pressed.connect(_skip_time.bind(float(secs)))
|
btn.pressed.connect(_skip_time.bind(float(secs)))
|
||||||
hbox_time.add_child(btn)
|
hbox_time.add_child(btn)
|
||||||
|
|
||||||
|
_add_section(vbox, "FRUITS")
|
||||||
|
for fruit_name in _fruit_scenes.keys():
|
||||||
|
_add_button(vbox, fruit_name, _spawn_fruit.bind(fruit_name))
|
||||||
|
|
||||||
_add_section(vbox, "SPELLS")
|
_add_section(vbox, "SPELLS")
|
||||||
for spell_id in SpellLibrary.recipes.keys():
|
for spell_id in SpellLibrary.recipes.keys():
|
||||||
if _spell_dispatch.has(spell_id):
|
if _spell_dispatch.has(spell_id):
|
||||||
|
|
@ -100,6 +111,11 @@ func _add_button(parent: VBoxContainer, label: String, callback: Callable) -> vo
|
||||||
btn.pressed.connect(callback)
|
btn.pressed.connect(callback)
|
||||||
parent.add_child(btn)
|
parent.add_child(btn)
|
||||||
|
|
||||||
|
func _spawn_fruit(fruit_name: String) -> void:
|
||||||
|
var fruit = _fruit_scenes[fruit_name].instantiate()
|
||||||
|
fruit.global_position = _player.global_position + Vector2(randf_range(-30, 30), randf_range(-30, 30))
|
||||||
|
get_node("/root/Game").add_child(fruit)
|
||||||
|
|
||||||
func _kill_all_enemies() -> void:
|
func _kill_all_enemies() -> void:
|
||||||
for enemy in get_tree().get_nodes_in_group("enemies"):
|
for enemy in get_tree().get_nodes_in_group("enemies"):
|
||||||
if is_instance_valid(enemy):
|
if is_instance_valid(enemy):
|
||||||
|
|
|
||||||
|
|
@ -6,11 +6,22 @@ var level = 1
|
||||||
var speed = 60
|
var speed = 60
|
||||||
var strength = 3
|
var strength = 3
|
||||||
var attacks = false
|
var attacks = false
|
||||||
|
var fruit_queue: Array = []
|
||||||
|
var orbit_angle: float = 0.0
|
||||||
|
const ORBIT_RADIUS := 20.0
|
||||||
|
const ORBIT_SPEED := 2.5
|
||||||
|
|
||||||
func _physics_process(delta):
|
func _physics_process(delta):
|
||||||
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||||
velocity = direction * speed
|
velocity = direction * speed
|
||||||
move_and_slide()
|
move_and_slide()
|
||||||
|
orbit_angle += ORBIT_SPEED * delta
|
||||||
|
for i in fruit_queue.size():
|
||||||
|
var fruit = fruit_queue[i]
|
||||||
|
if is_instance_valid(fruit):
|
||||||
|
var angle = orbit_angle + (TAU / fruit_queue.size()) * i
|
||||||
|
var target_pos = global_position + Vector2.from_angle(angle) * ORBIT_RADIUS
|
||||||
|
fruit.global_position = fruit.global_position.lerp(target_pos, 1.0 - exp(-12.0 * delta))
|
||||||
if attacks == true:
|
if attacks == true:
|
||||||
return
|
return
|
||||||
if direction == Vector2.ZERO:
|
if direction == Vector2.ZERO:
|
||||||
|
|
@ -76,6 +87,19 @@ func _on_attack_speed_timeout() -> void:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func add_to_queue(fruit) -> void:
|
||||||
|
fruit.in_orbit = true
|
||||||
|
fruit_queue.append(fruit)
|
||||||
|
|
||||||
|
func flush_queue() -> void:
|
||||||
|
var to_flush = fruit_queue.duplicate()
|
||||||
|
fruit_queue.clear()
|
||||||
|
for fruit in to_flush:
|
||||||
|
if is_instance_valid(fruit):
|
||||||
|
fruit.in_orbit = false
|
||||||
|
fruit.collect()
|
||||||
|
await get_tree().create_timer(0.15).timeout
|
||||||
|
|
||||||
func _on_melee_area_body_entered(body: Node2D) -> void:
|
func _on_melee_area_body_entered(body: Node2D) -> void:
|
||||||
if body.is_in_group("enemies"):
|
if body.is_in_group("enemies"):
|
||||||
if $AttackSpeed.is_stopped():
|
if $AttackSpeed.is_stopped():
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue