182 lines
5.4 KiB
GDScript
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)
|