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 player
|
||||
var is_spawning = true
|
||||
var in_orbit: bool = false
|
||||
signal collected
|
||||
|
||||
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
|
||||
|
||||
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()
|
||||
pass
|
||||
|
||||
func collect():
|
||||
_sfx_player.pitch_scale = randf_range(0.85, 1.15)
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ var progres_index = 0
|
|||
var is_brewing
|
||||
var brew_explosion = true
|
||||
@onready var witch = get_parent()
|
||||
@onready var player = get_node("/root/Game/Player")
|
||||
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_player: AudioStreamPlayer
|
||||
|
|
@ -122,6 +123,7 @@ func brew(fruits):
|
|||
SpellLibrary.LASER: witch.shoot_laser()
|
||||
reset_texture()
|
||||
is_brewing = false
|
||||
player.flush_queue()
|
||||
|
||||
func get_unique_fruits() -> Array:
|
||||
var unique = []
|
||||
|
|
|
|||
|
|
@ -3,6 +3,13 @@ extends CanvasLayer
|
|||
@onready var _spawn_control = get_node("/root/Game/SpawnControl")
|
||||
@onready var _witch = get_node("/root/Game/Witch")
|
||||
@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 _lvl_disable_btn: Button
|
||||
|
|
@ -73,6 +80,10 @@ func _build_ui() -> void:
|
|||
btn.pressed.connect(_skip_time.bind(float(secs)))
|
||||
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")
|
||||
for spell_id in SpellLibrary.recipes.keys():
|
||||
if _spell_dispatch.has(spell_id):
|
||||
|
|
@ -100,6 +111,11 @@ func _add_button(parent: VBoxContainer, label: String, callback: Callable) -> vo
|
|||
btn.pressed.connect(callback)
|
||||
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:
|
||||
for enemy in get_tree().get_nodes_in_group("enemies"):
|
||||
if is_instance_valid(enemy):
|
||||
|
|
|
|||
|
|
@ -6,11 +6,22 @@ var level = 1
|
|||
var speed = 60
|
||||
var strength = 3
|
||||
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):
|
||||
var direction = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
||||
velocity = direction * speed
|
||||
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:
|
||||
return
|
||||
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:
|
||||
if body.is_in_group("enemies"):
|
||||
if $AttackSpeed.is_stopped():
|
||||
|
|
|
|||
Loading…
Reference in New Issue