60 lines
1.9 KiB
GDScript
60 lines
1.9 KiB
GDScript
extends Label
|
|
|
|
@export var stopwatch: Stopwatch
|
|
|
|
const API_BASE = "https://flask-hello-world-nine-psi.vercel.app"
|
|
|
|
func get_scores():
|
|
$HTTPRequest.request(API_BASE + "/leaderboard")
|
|
|
|
func submit_score():
|
|
var encrypted_score = "EGH" + Marshalls.utf8_to_base64(str(stopwatch.time_elapsed))
|
|
print(encrypted_score)
|
|
$HTTPRequest.request_completed.connect(_on_request_completed)
|
|
$HTTPRequest.request(API_BASE + "https://flask-hello-world-nine-psi.vercel.app/leaderboard?score=%s" % encrypted_score, [], HTTPClient.METHOD_POST)
|
|
|
|
func _on_request_completed(result, response_code, headers, body):
|
|
if body.get_string_from_utf8() == "OK":
|
|
get_scores()
|
|
return true
|
|
var json = JSON.parse_string(body.get_string_from_utf8())
|
|
#print(json)
|
|
if json and "scores" in json:
|
|
var scores = json["scores"]
|
|
#print(scores)
|
|
var score = stopwatch.time_elapsed
|
|
var placement = closest(score, scores)
|
|
print(placement)
|
|
print(len(scores))
|
|
|
|
if placement < 50:
|
|
text = "You placed #%d\n" % [placement]
|
|
else:
|
|
text = "You placed top %d%%\n" % [(float(placement) / len(scores)) * 100]
|
|
var n = 1
|
|
while n <= 5 and n <= len(scores):
|
|
text += "%d. %s\n" % [ n, seconds2mmss(scores[n-1]) ]
|
|
n += 1
|
|
|
|
func closest(my_number:int, my_array:Array)->int:
|
|
# Initialize
|
|
var closest_num:int
|
|
var closest_delta:int = 0
|
|
var closest_idx = -1
|
|
var temp_delta:int = 0
|
|
# Loop through entire array
|
|
for i in range(my_array.size()):
|
|
if my_array[i] == my_number: return my_array[i] # exact match found!
|
|
temp_delta = int(abs(my_array[i]-my_number))
|
|
if closest_delta == 0 or temp_delta < closest_delta:
|
|
closest_num = my_array[i]
|
|
closest_idx = i
|
|
closest_delta = temp_delta
|
|
# Return closest number found
|
|
return closest_idx
|
|
|
|
func seconds2mmss(total_seconds: float) -> String:
|
|
var seconds: float = fmod(total_seconds , 60.0)
|
|
var minutes: int = int(total_seconds / 60.0) % 60
|
|
var hhmmss_string: String = "%02d:%05.2f" % [minutes, seconds]
|
|
return hhmmss_string
|