HighNoonRoulette/scenes/camera/camera.gd
2025-09-06 23:19:31 +02:00

182 lines
5.4 KiB
GDScript

extends Camera3D
@onready var playerSelectButton = preload("res://scenes/camera/UI/playerSelectionButton.tscn")
@onready var roundLabel = $CanvasLayer/Control/General/HBoxContainer/roundLabel
@onready var playerNameLabel = $CanvasLayer/Control/Player/HBoxContainer2/PlayerNameLabel
@onready var itemCards = $CanvasLayer/Control/Player/Stats/ItemCards
@onready var magazineLabel = $CanvasLayer/Control/Player/Stats/HBoxContainer/MagazineLabel
@onready var playerSelection = $CanvasLayer/Control/Player/Stats/PlayerSelection
@onready var stats = $CanvasLayer/Control/Player/Stats
@onready var player = $CanvasLayer/Control/Player
@onready var turnTimeLabel = $CanvasLayer/Control/Player/Stats/turnTimeLabel
@onready var timer = $CanvasLayer/Control/Player/Stats/Timer
@onready var winInfo = $CanvasLayer/Control/WinInfo
@onready var general = $CanvasLayer/Control/General
@onready var poolLabel = $CanvasLayer/Control/PoolLabel
@onready var winnerLabel = $CanvasLayer/Control/WinInfo/winScreen/WinnerLabel
@onready var winRoundLabel = $CanvasLayer/Control/WinInfo/winScreen/WinRoundLabel
#@onready var itemStandardBulletButton = $
var currentPlayer: Player
var selectablePlayers: Array[Player]
var currentGameState: GLOBALS.GAMESTATE
signal itemSelected(_itemType: GLOBALS.ITEMTYPES)
signal nextTurn()
func updateUi():
match currentGameState:
GLOBALS.GAMESTATE.SETUP:
print("-- CAMERA SETUP --")
setup()
player.visible = false
winInfo.visible = false
general.visible = true
poolLabel.visible = false
GLOBALS.GAMESTATE.ROUNDSTART:
print("-- CAMERA ROUNDSTART --")
player.visible = false
winInfo.visible = false
general.visible = true
poolLabel.visible = false
GLOBALS.GAMESTATE.PLAYER:
print("-- CAMERA PLAYER --")
player.visible = true
updatePlayerStats()
if currentPlayer.isBot():
stats.visible = false
else:
stats.visible = true
winInfo.visible = false
general.visible = true
poolLabel.visible = false
GLOBALS.GAMESTATE.POOL:
print("-- CAMERA POOL --")
player.visible = false
winInfo.visible = false
general.visible = true
poolLabel.visible = true
GLOBALS.GAMESTATE.AIM:
print("-- CAMERA AIM --")
player.visible = false
winInfo.visible = false
general.visible = true
poolLabel.visible = false
GLOBALS.GAMESTATE.SHOOT:
print("-- CAMERA SHOOT --")
player.visible = false
winInfo.visible = false
general.visible = true
poolLabel.visible = false
GLOBALS.GAMESTATE.END:
print("-- CAMERA END --")
if selectablePlayers.size() > 0:
winnerLabel.text = selectablePlayers[0].getGameName()
else:
winnerLabel.text = "DRAW"
winInfo.visible = true
general.visible = false
func setup():
for i in itemCards.get_children():
if i.has_signal("selected"):
i.selected.connect(selectItem.bind())
func displayPlayerStats(_player) -> void:
currentPlayer = _player
updateUi()
func setSelectablePlayers(_players: Array[Player]) -> void:
selectablePlayers = _players
updateUi()
func updateGameState(_state: GLOBALS.GAMESTATE) -> void:
currentGameState = _state
updateUi()
func getPlayerSelection() -> Player:
for i in playerSelection.get_children():
if i.button_pressed == true:
return i.player
return currentPlayer
func updatePlayerStats():
if currentPlayer != null:
playerNameLabel.text = str(currentPlayer.getGameName())
magazineLabel.text = str(currentPlayer.gun.magazineSize) + "/" + str(currentPlayer.gun.getBulletAmount())
updateItemCards()
updatePlayerSelection()
func updateItemCards() -> void:
if currentPlayer.gun.magazineSizeLeft() <= 0:
for i in itemCards.get_children():
if i.has_node("ItemButton"):
i.itemButton.disabled = true
else:
for i in itemCards.get_children():
if i.has_node("ItemButton"):
i.itemButton.disabled = false
for i in GLOBALS.ITEMTYPES:
var counter = 0
for j in currentPlayer.getItems():
if j.type == GLOBALS.ITEMTYPES[i]:
counter += 1
for j in itemCards.get_children():
if j.has_node("ItemButton/ItemAmountLabel") and j.itemType == GLOBALS.ITEMTYPES[i]:
j.setAmount(counter)
if counter <= 0:
j.visible = false
else:
j.visible = true
func updatePlayerSelection() -> void:
for i in playerSelection.get_children():
i.free()
var newButtonGroup = ButtonGroup.new()
for i in selectablePlayers:
if i != currentPlayer:
var newSelection = playerSelectButton.instantiate()
newSelection.setPlayer(i)
newSelection.button_group = newButtonGroup
playerSelection.add_child(newSelection)
if playerSelection.get_child(0) != null:
playerSelection.get_child(0).button_pressed = true
var newSelection = playerSelectButton.instantiate()
newSelection.setPlayer(currentPlayer)
newSelection.button_group = newButtonGroup
playerSelection.add_child(newSelection)
func setRound(_round: int) -> void:
roundLabel.text = str(_round)
winRoundLabel.text = str(_round)
func updatTurnTime(_timeLeft: float, _endTime: float) -> void:
timer.setTime(_timeLeft, _endTime)
turnTimeLabel.text = str(_timeLeft)
func selectItem(_itemType: GLOBALS.ITEMTYPES):
print(currentPlayer.gun.magazineSizeLeft())
if currentPlayer.gun.magazineSizeLeft() > 0:
itemSelected.emit(_itemType)
func resetTimer() -> void:
timer.reset()
func _on_next_turn_button_pressed() -> void:
currentPlayer.selectPlayer(getPlayerSelection())
nextTurn.emit()
func _on_button_pressed() -> void:
var mainMenu: PackedScene = load("res://scenes/mainMenu/mainMenu.tscn")
get_tree().change_scene_to_packed(mainMenu)