Bubble-Blower/addons/ridiculous_coding/dock.gd
Marvin Dalheimer 0ab65e1df6
Init
2025-01-25 21:40:19 +01:00

168 lines
4.7 KiB
GDScript

@tool
extends Control
const BASE_XP: int = 50
const STATS_FILE: String = "user://ridiculous_xp.ini"
var explosions: bool = true
var blips: bool = true
var chars: bool = true
var shake: bool = true
var sound: bool = true
var fireworks: bool = true
var xp: int = 0
var xp_next: int = 2*BASE_XP
var level: int = 1
var stats: ConfigFile = ConfigFile.new()
@onready var explosion_checkbox: CheckButton = $VBoxContainer/GridContainer/explosionCheckbox
@onready var blip_checkbox: CheckButton = $VBoxContainer/GridContainer/blipCheckbox
@onready var chars_checkbox: CheckButton = $VBoxContainer/GridContainer/charsCheckbox
@onready var shake_checkbox: CheckButton = $VBoxContainer/GridContainer/shakeCheckbox
@onready var sound_checkbox: CheckButton = $VBoxContainer/GridContainer/soundCheckbox
@onready var fireworks_checkbox: CheckButton = $VBoxContainer/GridContainer/fireworksCheckbox
@onready var progress: TextureProgressBar = $VBoxContainer/XP/ProgressBar
@onready var sfx_fireworks: AudioStreamPlayer = $VBoxContainer/XP/ProgressBar/sfxFireworks
@onready var fireworks_timer: Timer = $VBoxContainer/XP/ProgressBar/fireworksTimer
@onready var fire_particles_one: GPUParticles2D = $VBoxContainer/XP/ProgressBar/fire1/GPUParticles2D
@onready var fire_particles_two: GPUParticles2D = $VBoxContainer/XP/ProgressBar/fire2/GPUParticles2D
@onready var xp_label: Label = $VBoxContainer/XP/HBoxContainer/xpLabel
@onready var level_label: Label = $VBoxContainer/XP/HBoxContainer/levelLabel
@onready var reset_button: Button = $VBoxContainer/CenterContainer/resetButton
func _ready():
reset_button.pressed.connect(on_reset_button_pressed)
load_checkbox_state()
connect_checkboxes()
fireworks_timer.timeout.connect(stop_fireworks)
load_experience_progress()
update_progress()
stop_fireworks()
func load_experience_progress():
if stats.load(STATS_FILE) == OK:
level = stats.get_value("xp", "level", 1)
xp = stats.get_value("xp", "xp", 0)
else:
level = 1
xp = 0
xp_next = 2*BASE_XP
progress.max_value = xp_next
for i in range(2,level+1):
xp_next += round(BASE_XP * i / 10.0) * 10
progress.max_value = round(BASE_XP * level / 10.0) * 10
progress.value = xp - (xp_next - progress.max_value)
func save_experioence_progress():
stats.set_value("xp", "level", level)
stats.set_value("xp", "xp", xp)
stats.save(STATS_FILE)
func _on_typing():
xp += 1
progress.value += 1
if progress.value >= progress.max_value:
level += 1
xp_next = xp + round(BASE_XP * level / 10.0) * 10
progress.value = 0
progress.max_value = xp_next - xp
if fireworks:
start_fireworks()
save_experioence_progress()
update_progress()
func start_fireworks():
sfx_fireworks.play()
fireworks_timer.start()
fire_particles_one.emitting = true
fire_particles_two.emitting = true
func stop_fireworks():
fire_particles_one.emitting = false
fire_particles_two.emitting = false
func update_progress():
xp_label.text = "XP: %d / %d" % [ xp, xp_next ]
level_label.text = "Level: %d" % level
func connect_checkboxes():
explosion_checkbox.toggled.connect(func(toggled):
explosions = toggled
save_checkbox_state()
)
blip_checkbox.toggled.connect(func(toggled):
blips = toggled
save_checkbox_state()
)
chars_checkbox.toggled.connect(func(toggled):
chars = toggled
save_checkbox_state()
)
shake_checkbox.toggled.connect(func(toggled):
shake = toggled
save_checkbox_state()
)
sound_checkbox.toggled.connect(func(toggled):
sound = toggled
save_checkbox_state()
)
fireworks_checkbox.toggled.connect(func(toggled):
fireworks = toggled
save_checkbox_state()
)
func save_checkbox_state():
stats.set_value("settings", "explosion", explosions)
stats.set_value("settings", "blips", blips)
stats.set_value("settings", "chars", chars)
stats.set_value("settings", "shake", shake)
stats.set_value("settings", "sound", sound)
stats.set_value("settings", "fireworks", fireworks)
stats.save(STATS_FILE)
func load_checkbox_state():
if stats.load(STATS_FILE) == OK:
explosions = stats.get_value("settings", "explosion", true)
blips = stats.get_value("settings", "blips", true)
chars = stats.get_value("settings", "chars", true)
shake = stats.get_value("settings", "shake", true)
sound = stats.get_value("settings", "sound", true)
fireworks = stats.get_value("settings", "fireworks", true)
explosion_checkbox.set_pressed_no_signal(explosions)
blip_checkbox.set_pressed_no_signal(blips)
chars_checkbox.set_pressed_no_signal(chars)
shake_checkbox.set_pressed_no_signal(shake)
sound_checkbox.set_pressed_no_signal(sound)
fireworks_checkbox.set_pressed_no_signal(fireworks)
func on_reset_button_pressed():
level = 1
xp = 0
xp_next = 2*BASE_XP
progress.value = 0
progress.max_value = xp_next
update_progress()