2024-11-03 18:16:30 +00:00
|
|
|
extends Node
|
|
|
|
|
|
|
|
|
|
|
|
#var playerkeys: Array[int] = []
|
|
|
|
var players: Array[Player] = []
|
2024-11-09 11:44:44 +00:00
|
|
|
var last_players: Array[Player] = []
|
2024-11-03 18:16:30 +00:00
|
|
|
|
|
|
|
var userinput_prefix="inputP"
|
|
|
|
|
2024-11-06 06:38:44 +00:00
|
|
|
var time_elapsed=0
|
|
|
|
|
2024-11-09 12:47:13 +00:00
|
|
|
var map_scene_name=""
|
|
|
|
var map_scene_name_prefix="res://scenes/map_"
|
|
|
|
var map_scene_name_postfix=".tscn"
|
|
|
|
|
2024-11-09 12:58:22 +00:00
|
|
|
var rounds=1
|
2024-11-09 12:47:13 +00:00
|
|
|
|
2024-11-09 12:58:22 +00:00
|
|
|
func getRounds():
|
|
|
|
return rounds
|
|
|
|
|
|
|
|
func setRounds(r):
|
2024-11-09 13:27:34 +00:00
|
|
|
print("Rounds set to "+str(r))
|
2024-11-09 12:58:22 +00:00
|
|
|
rounds=r
|
|
|
|
|
2024-11-09 12:47:13 +00:00
|
|
|
func getSelectedMap():
|
|
|
|
return map_scene_name
|
|
|
|
|
|
|
|
func setSelectedMap(mapname):
|
|
|
|
map_scene_name=map_scene_name_prefix+mapname+map_scene_name_postfix
|
|
|
|
|
2024-11-09 11:44:44 +00:00
|
|
|
func checkColoriFree(i):
|
|
|
|
var free=true
|
|
|
|
for p in players:
|
|
|
|
if p.colori==i: #already taken
|
|
|
|
free=false
|
|
|
|
return free
|
|
|
|
|
|
|
|
|
2024-11-03 18:16:30 +00:00
|
|
|
func addPlayer(key:int):
|
2024-11-09 11:07:59 +00:00
|
|
|
#return -1 if player already exists with this key. else return id of player added
|
2024-11-09 11:44:44 +00:00
|
|
|
if not getPlayerkeys().has(key): #key is not yet registered
|
|
|
|
var prefered_colori=0
|
|
|
|
for p in last_players:
|
|
|
|
if p.inputkey==key: #key was used in last round
|
|
|
|
prefered_colori=p.colori
|
|
|
|
|
|
|
|
#check if color is free, else assign next free
|
|
|
|
while not checkColoriFree(prefered_colori):
|
|
|
|
prefered_colori+=1
|
|
|
|
|
|
|
|
players.append(Player.new(key,prefered_colori))
|
|
|
|
|
|
|
|
return prefered_colori
|
2024-11-09 11:07:59 +00:00
|
|
|
else:
|
|
|
|
return -1
|
2024-11-03 18:16:30 +00:00
|
|
|
|
|
|
|
func removeAllPlayers():
|
2024-11-09 11:44:44 +00:00
|
|
|
last_players=players
|
2024-11-03 18:16:30 +00:00
|
|
|
players=[]
|
|
|
|
|
2024-11-04 18:55:13 +00:00
|
|
|
|
2024-11-03 18:16:30 +00:00
|
|
|
func getPlayerkeys() -> Array[int]:
|
|
|
|
var playerkeys: Array[int] = []
|
|
|
|
for player in players:
|
|
|
|
playerkeys.append(player.inputkey)
|
|
|
|
return playerkeys
|
|
|
|
|
2024-11-04 18:55:13 +00:00
|
|
|
|
|
|
|
func getPlayers() -> Array[Player]:
|
|
|
|
return players
|
|
|
|
|
2024-11-03 18:16:30 +00:00
|
|
|
class Player:
|
|
|
|
var inputkey:int
|
|
|
|
var color:Color
|
2024-11-09 11:44:44 +00:00
|
|
|
var colori
|
2024-11-03 18:16:30 +00:00
|
|
|
|
2024-11-09 11:44:44 +00:00
|
|
|
func _init(key:int, pcolori:int=-1):
|
2024-11-03 18:16:30 +00:00
|
|
|
inputkey=key
|
2024-11-09 11:44:44 +00:00
|
|
|
colori=pcolori
|
2024-11-04 20:56:07 +00:00
|
|
|
var sat = 1.0
|
|
|
|
var val = 0.7
|
2024-11-03 18:16:30 +00:00
|
|
|
|
2024-11-09 11:44:44 +00:00
|
|
|
if colori<0:
|
2024-11-03 18:16:30 +00:00
|
|
|
color=Color.from_hsv(randf_range(0.0,1.0), sat,val,1.0)
|
|
|
|
else:
|
2024-11-09 11:44:44 +00:00
|
|
|
color=Color.from_hsv(fmod(0.3*colori,1.0), sat,val,1.0)
|
|
|
|
print("i is "+str(colori)+" h="+str(fmod(0.3*colori,1.0))+" assigned color "+str(color))
|
2024-11-03 18:16:30 +00:00
|
|
|
|
|
|
|
|
2024-11-06 06:38:44 +00:00
|
|
|
func startGame():
|
|
|
|
for player in players:
|
|
|
|
player.setRunning(true)
|
|
|
|
|
|
|
|
func addTimeElapsed(delta):
|
|
|
|
time_elapsed+=delta
|
|
|
|
|
|
|
|
func getTimeElapsed():
|
|
|
|
return time_elapsed
|
2024-11-09 10:54:56 +00:00
|
|
|
|
|
|
|
func resetTimeElapsed():
|
|
|
|
time_elapsed=0
|