Final Game Jam version

This commit is contained in:
Exobyt 2025-09-06 23:19:31 +02:00
parent 35ce267482
commit 104a1e4297
141 changed files with 4485 additions and 206 deletions

View file

@ -2,9 +2,14 @@ extends Node3D
@onready var characterScene = preload("res://scenes/character/character.tscn")
@onready var turnTimer: Timer = $TurnTimer
@onready var shootPhaseTimer: Timer = $ShootPhaseTimer
@onready var camera = $cameraRottion/Camera3D
@onready var charactersContainer = $CharactersContainer
var state: GLOBALS.GAMESTATE = GLOBALS.GAMESTATE.SETUP
var players: Array[Player]
var selectablePlayers: Array[Player] = players.duplicate()
var guns: Array[Gun]
@ -15,39 +20,148 @@ var rotationInterval: float = 360 / playerCount
var currentPlayer: Player
var currentPlayerIndex: int = 0
func _ready() -> void:
camera.itemSelected.connect(selectItem.bind())
camera.nextTurn.connect(nextTurn.bind())
addNewPlayer("Test 1")
addNewPlayer("Test 2")
players[1].bot = true
players[0].addItem(StandardBullet.new())
players[0].addItem(LuckyBullet.new())
nextRound()
nextTurn()
var completedAnimations = 0
func nextTurn():
func _process(delta: float) -> void:
if not turnTimer.is_stopped():
camera.updatTurnTime(turnTimer.time_left, turnTimer.wait_time)
else:
camera.resetTimer()
func _ready() -> void:
setState(GLOBALS.GAMESTATE.SETUP)
func playerDied(_player: Player) -> void:
selectablePlayers.erase(_player)
camera.setSelectablePlayers(selectablePlayers)
print("Player " + _player.getGameName() + " is dead")
## Give every player a random Gun
func givePlayersRandomGun():
randomize()
var gunPool = guns.duplicate()
for i in selectablePlayers.size():
var newGun = gunPool.pick_random()
selectablePlayers[i].giveGun(newGun)
gunPool.erase(newGun)
## Gives the gun back to it's owner
func givePlayersGun():
for i in guns:
i.mainOwner.giveGun(i)
i.mainOwner.gun.resetMagazine()
## Sets the Game State
func setState(_state: GLOBALS.GAMESTATE):
state = _state
next()
camera.updateGameState(state)
## Calls the function thats fits the current game state
func next():
camera.updateUi()
match state:
GLOBALS.GAMESTATE.SETUP:
setupGame()
GLOBALS.GAMESTATE.ROUNDSTART:
nextRound()
GLOBALS.GAMESTATE.PLAYER:
nextPlayer()
GLOBALS.GAMESTATE.POOL:
gunIntoPool()
GLOBALS.GAMESTATE.AIM:
aimGuns()
GLOBALS.GAMESTATE.SHOOT:
shootPlayers()
GLOBALS.GAMESTATE.END:
endGame()
func setupGame() -> void:
playerCount = 2
print("-- SETUP --")
rotationInterval = 360 / playerCount
for i in range(0, playerCount):
addNewPlayer("Enemy") #addNewPlayer("Player " + str(i+1))
players[0].gameName = "You"
players[1].gameName = "Enemy"
camera.itemSelected.connect(selectItem.bind())
camera.nextTurn.connect(next.bind())
players[1].bot = true
players[1].setBotLogic(Bot.new(GLOBALS.BOTDIFFICULTY.EASY))
setState(GLOBALS.GAMESTATE.ROUNDSTART)
func nextRound() -> void:
print("-- ROUNDSTART --")
for i in players:
i.addItem(StandardBullet.new())
i.character.resetAim()
i.character.loadGun()
roundCount += 1
camera.setRound(roundCount)
currentPlayerIndex = 0
setState(GLOBALS.GAMESTATE.PLAYER)
func nextPlayer():
print("-- PLAYER --")
if currentPlayerIndex + 1 > selectablePlayers.size():
print("Shoot")
currentPlayerIndex = 0
givePlayersRandomGun()
shootPlayers()
turnTimer.stop()
setState(GLOBALS.GAMESTATE.POOL)
else:
currentPlayer = selectablePlayers[currentPlayerIndex]
currentPlayerIndex += 1
#if not currentPlayer.bot:
camera.setCurrentPlayer(currentPlayer)
if currentPlayer.isBot():
for i in currentPlayer.botLogic.chooseItems(currentPlayer.getItems(), currentPlayer.gun.magazineSize):
currentPlayer.useItem(i)
turnTimer.start(2)
else:
turnTimer.start(10)
camera.displayPlayerStats(currentPlayer)
func gunIntoPool():
print("-- POOL --")
for i in selectablePlayers:
i.character.addGunToPool()
i.character.setAim(i.selectedPlayer)
givePlayersRandomGun()
func aimGuns():
print("-- AIM --")
for i in selectablePlayers:
i.character.aimGun()
setState(GLOBALS.GAMESTATE.SHOOT)
func shootPlayers():
print("-- SHOOT --")
currentPlayerIndex = 0
await get_tree().create_timer(1.0).timeout
for i in selectablePlayers:
i.shootAtSelectedPlayer()
func endGame() -> void:
print("-- END --")
print(selectablePlayers[0].getGameName() + " hat gewonnen")
## Adds a new Player
func addNewPlayer(_name: String):
var newGun = Gun.new()
guns.append(newGun)
var newCharacter = addCharacter()
var newPlayer = Player.new(_name, newGun, newCharacter)
newCharacter.addGunToPoolFinished.connect(addGunToPoolFinished.bind())
newCharacter.aimGunFinished.connect(aimGunFinished.bind())
newCharacter.aimGunFinished.connect(shootGunFinished.bind())
var newPlayer: Player = Player.new(_name, newGun, newCharacter)
newPlayer.character.setGameName(newPlayer.getGameName())
players.append(newPlayer)
selectablePlayers.append(newPlayer)
camera.selectablePlayers = selectablePlayers
camera.setSelectablePlayers(selectablePlayers)
newPlayer.dead.connect(playerDied.bind())
## Adds a new Character to represent the Player Visualy
func addCharacter() -> Character:
var newCharacter = characterScene.instantiate()
charactersContainer.add_child(newCharacter)
@ -55,46 +169,49 @@ func addCharacter() -> Character:
newCharacter.rotation_degrees.y += lastCharacterRotation
return newCharacter
func playerDied(_player: Player) -> void:
selectablePlayers.erase(_player)
camera.selectablePlayers = selectablePlayers
print("Player " + _player.getGameName() + " is dead")
func givePlayersRandomGun():
randomize()
var gunPool = guns.duplicate()
for i in guns.size():
var newGun = gunPool.pick_random()
selectablePlayers[i].giveGun(newGun)
gunPool.erase(newGun)
func givePlayersGun():
for i in guns:
i.mainOwner.giveGun(i)
i.mainOwner.gun.resetMagazine()
func nextRound() -> void:
givePlayersGun()
for i in players:
i.addItem(StandardBullet.new())
roundCount += 1
camera.setRound(roundCount)
currentPlayerIndex = 0
func shootPlayers():
for i in selectablePlayers:
i.shootAtSelectedPlayer()
nextRound()
nextTurn()
## Use Item. Called by Camera via Signal "itemSelected"
func selectItem(_itemType: GLOBALS.ITEMTYPES):
playerUseItemType(currentPlayer, _itemType)
print(_itemType)
## Use item from player
func playerUseItemType(_player: Player, _type: GLOBALS.ITEMTYPES) -> void:
for i in currentPlayer.getItems():
if i.type == _type:
currentPlayer.useItem(i)
break
camera.updatePlayerStats()
camera.displayPlayerStats(currentPlayer)
func addGunToPoolFinished() -> void:
completedAnimations += 1
print(completedAnimations)
if completedAnimations >= selectablePlayers.size():
setState(GLOBALS.GAMESTATE.AIM)
completedAnimations = 0
func aimGunFinished() -> void:
completedAnimations += 1
print(completedAnimations)
if completedAnimations >= selectablePlayers.size():
setState(GLOBALS.GAMESTATE.SHOOT)
completedAnimations = 0
func shootGunFinished() -> void:
completedAnimations += 1
print(completedAnimations)
if completedAnimations >= selectablePlayers.size():
shootPhaseTimer.start()
#setState(GLOBALS.GAMESTATE.ROUNDSTART)
completedAnimations = 0
func _on_turn_timer_timeout() -> void:
currentPlayer.selectPlayer(camera.getPlayerSelection())
nextPlayer()
func _on_shoot_phase_timer_timeout() -> void:
givePlayersGun()
if selectablePlayers.size() <= 1:
setState(GLOBALS.GAMESTATE.END)
else:
setState(GLOBALS.GAMESTATE.ROUNDSTART)

View file

@ -1,25 +1,36 @@
[gd_scene load_steps=4 format=3 uid="uid://y6lc82qrb1e2"]
[gd_scene load_steps=5 format=3 uid="uid://y6lc82qrb1e2"]
[ext_resource type="Script" uid="uid://ylobnrrhfy5j" path="res://scenes/game/game.gd" id="1_sul5r"]
[ext_resource type="PackedScene" uid="uid://rch2yvsj0pdn" path="res://scenes/room/room.tscn" id="2_7h61r"]
[ext_resource type="PackedScene" uid="uid://ct45lmxlrkhaj" path="res://scenes/camera/camera.tscn" id="4_kelw5"]
[ext_resource type="AudioStream" uid="uid://dg3yo3eedvjun" path="res://assets/music/it's worth The Risk.wav" id="4_lfrn8"]
[node name="Game" type="Node3D"]
script = ExtResource("1_sul5r")
[node name="Room" parent="." instance=ExtResource("2_7h61r")]
[node name="CharactersContainer" type="Node3D" parent="."]
[node name="light" type="Node3D" parent="."]
[node name="OmniLight3D" type="OmniLight3D" parent="light"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.52843, 0)
omni_range = 10.5
[node name="Room" parent="." instance=ExtResource("2_7h61r")]
[node name="cameraRottion" type="Node3D" parent="."]
[node name="Camera3D" parent="cameraRottion" instance=ExtResource("4_kelw5")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.51089, 1.46703)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 1.5)
[node name="OmniLight3D" type="OmniLight3D" parent="cameraRottion/Camera3D"]
[node name="TurnTimer" type="Timer" parent="."]
wait_time = 10.0
one_shot = true
[node name="ShootPhaseTimer" type="Timer" parent="."]
wait_time = 2.0
one_shot = true
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
stream = ExtResource("4_lfrn8")
volume_db = -15.0
autoplay = true
[connection signal="timeout" from="TurnTimer" to="." method="_on_turn_timer_timeout"]
[connection signal="timeout" from="ShootPhaseTimer" to="." method="_on_shoot_phase_timer_timeout"]