conforms file names to consistant standard
This commit is contained in:
78
scenes/boom_box/scr_boom_box.gd
Normal file
78
scenes/boom_box/scr_boom_box.gd
Normal file
@@ -0,0 +1,78 @@
|
||||
class_name BoomBox extends StaticBody3D
|
||||
|
||||
@export var button: InteractButton
|
||||
@export var button_collider: CollisionShape3D
|
||||
@export var cassette_selection_menu: PackedScene
|
||||
|
||||
var cassettes_generated: int = 0
|
||||
var reply_player: Hero
|
||||
var spawned_cassettes: Array[CassetteItem] = []
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
button.hover_text = tr("PROMPT_RADIO_INTERACT")
|
||||
|
||||
|
||||
func generate_rarity() -> int:
|
||||
var weight_total: int = 0
|
||||
for rarity: String in Data.Rarity:
|
||||
weight_total += Data.rarity_weights[rarity]
|
||||
|
||||
var generated_rarity: int = NoiseRandom.randi_in_range(4 * cassettes_generated, 0, weight_total)
|
||||
cassettes_generated += 1
|
||||
var decided_rarity: int = 0
|
||||
|
||||
for rarity: String in Data.Rarity:
|
||||
weight_total -= Data.rarity_weights[rarity]
|
||||
if generated_rarity >= weight_total:
|
||||
decided_rarity = Data.Rarity[rarity]
|
||||
break
|
||||
return decided_rarity
|
||||
|
||||
|
||||
func find_cassettes(role: Cassette.Role, rarity: Data.Rarity, allowed_cassettes: Array[Cassette]) -> void:
|
||||
var decided_rarity: int = rarity
|
||||
if rarity == null:
|
||||
decided_rarity = generate_rarity()
|
||||
var cassette_choices: Array[Cassette] = allowed_cassettes
|
||||
if !cassette_choices:
|
||||
cassette_choices = Cassette.get_role_cassettes(role)
|
||||
var cassettes: Array[Cassette] = []
|
||||
var valid_cassettes_found: bool = false
|
||||
var testing_rarity: int = decided_rarity
|
||||
while !valid_cassettes_found:
|
||||
for cassette: Cassette in cassette_choices:
|
||||
if cassette.rarity == testing_rarity:
|
||||
cassettes.append(cassette)
|
||||
if cassettes.size() != 0:
|
||||
valid_cassettes_found = true
|
||||
testing_rarity -= 1
|
||||
if testing_rarity < 0:
|
||||
testing_rarity = 4
|
||||
if testing_rarity == decided_rarity:
|
||||
print("This character doesn't have any cassettes!")
|
||||
return
|
||||
var menu: ChooseCassetteScreen = cassette_selection_menu.instantiate() as ChooseCassetteScreen
|
||||
menu.add_cassettes(cassettes)
|
||||
menu.cassette_chosen.connect(output_cassette)
|
||||
reply_player.pause()
|
||||
reply_player.hud.add_child(menu)
|
||||
|
||||
|
||||
func output_cassette(cassette: Cassette) -> void:
|
||||
reply_player.add_cassette(cassette)
|
||||
reply_player.unpause()
|
||||
reply_player = null
|
||||
button_collider.disabled = false
|
||||
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||
|
||||
|
||||
func _on_static_body_3d_button_interacted(_value: int, reply: Hero) -> void:
|
||||
reply_player = reply
|
||||
if reply.blank_cassettes >= 1:
|
||||
reply.blank_cassettes -= 1
|
||||
else:
|
||||
return
|
||||
button_collider.disabled = true
|
||||
$StaticBody3D/AudioStreamPlayer3D.play()
|
||||
find_cassettes(reply.hero_class.role, reply.game_manager.level_config.waves[reply.game_manager.wave - 1].station, reply.game_manager.level_config.allowed_cassettes)
|
||||
Reference in New Issue
Block a user