Files
ClickerGacha/User Interface/Header.gd

121 lines
3.6 KiB
GDScript

extends Control
var score = 0
var clickAdd = 1
var scorePerSec = 1
var scoreMultiplier = 1
var current_score: int = Global.globalDamage
var target_score: int = 0
var animation_duration: float = 1
var elapsed_time: float = 0.0
var is_animating: bool = false
# Called when the node enters the scene tree for the first time.
func _ready():
$Timer.connect("timeout", _on_Timer_timeout)
$Score.text = str(round(Global.globalDamage))
#Prints all input events, only for debugging
#func _input(event):
#print(event.as_text())
func _on_Timer_timeout():
#get the current score based on values before new calculation
current_score = Global.globalDamage
#update values on new calculation
Global.globalDamage += Global.globalDamagePerSec * Global.globalDamageMultiplier
update_score()
pass
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
if Global.globalDamage <= 999:
if is_animating:
elapsed_time += delta
var t = elapsed_time / animation_duration
if t >= 1:
t = 1
is_animating = false
current_score = lerp(current_score, target_score, t)
$Score.text = str(round(current_score))
else:
$Score.text = str(format_number(Global.globalDamage))
#Puts commas in score, can't get it with animations yet
#if Global.globalDamage > 999:
#$Score.text = str(scoreFormat(current_score))
#else:
#$Score.text = str(Global.globalDamage) #Changes the score number
#print("Tween step: ", current_score)
#update_score()
$ClickAdd.text = str(Global.globalDamagePerClick)
$PerSec.text = str(Global.globalDamagePerSec)
$Multiplier.text = str(Global.globalDamageMultiplier)
func update_score():
target_score = Global.globalDamage # Increment the target score (or set it based on your game logic)
print("Update score called, target score: ", target_score)
#Displays normal numbers until commas are needed
#commented out for animation testing
start_animation(current_score, target_score)
func start_animation(from_score: int, to_score: int):
print("Animating score from ", from_score, " to ", to_score)
elapsed_time = 0.0
is_animating = true
func format_number(n: int) -> String:
if n >= 1_000_000_000_000:
# ran for every number <n> greater or equal to a trillion
var i:float = snapped(float(n)/1_000_000_000_000, .01)
return str(i).replace(",", ".") + "T"
elif n >= 1_000_000_000:
# ran for every number <n> smaller than 1 trillion BUT
# still greater or equal to 1 Billion
var i:float = snapped(float(n)/1_000_000_000, .01)
return str(i).replace(",", ".") + "B"
elif n >= 1_000_000:
# ran for every number <n> smaller than 1 trillion BUT
# still greater or equal to 1 million
var i:float = snapped(float(n)/1_000_000, .01)
return str(i).replace(",", ".") + "M"
elif n >= 1_000:
# ran for every number <n> smaller than 1 million BUT
# still greater or equal to 1 thousand
var i:float = snapped(float(n)/1_000, .01)
return str(i).replace(",", ".") + "k"
else:
# ran otherwise
return str(n)
#This checks any input that comes in
func _input(event):
#Function to record every left click as a "Click" to add to the score
if event.is_action_pressed("left_mouse"):
leftClick()
#_on_button_pressed()
#Formats the score string so commas are inserted
func scoreFormat(score):
# Convert value to string.
var str_value: String = str(Global.globalDamage)
# Loop backward starting at the last 3 digits,
# add comma then, repeat every 3rd step.
for i in range(str_value.length()-3, 0, -3):
str_value = str_value.insert(i, ",")
score = str_value
return score
func leftClick():
Global.globalDamage += Global.globalDamagePerClick * Global.globalDamageMultiplier
update_score()