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

@ -3,11 +3,14 @@ class_name Card extends CenterContainer
@onready var itemButton = $ItemButton
@onready var ItemAmountLabel = $ItemButton/ItemAmountLabel
@onready var selectAduio = $selectAduio
@export var itemType: GLOBALS.ITEMTYPES = GLOBALS.ITEMTYPES.STANDARDBULLET
signal selected(_itemType: GLOBALS.ITEMTYPES)
func _on_item_button_pressed() -> void:
selectAduio.play()
selected.emit(itemType)
func setAmount(amount: int) -> void:

View file

@ -1,13 +1,21 @@
[gd_scene load_steps=6 format=3 uid="uid://bc84ynsnwc1ew"]
[gd_scene load_steps=11 format=3 uid="uid://bc84ynsnwc1ew"]
[ext_resource type="Texture2D" uid="uid://bprr1g5mf44sm" path="res://assets/cards/cardPlaceholder.png" id="1_fobdo"]
[ext_resource type="Script" uid="uid://culacsksqcquo" path="res://scenes/camera/UI/card.gd" id="1_wa0td"]
[ext_resource type="StyleBox" uid="uid://dxbfig6arg06u" path="res://scenes/camera/UI/card_pressed.tres" id="2_q4ux5"]
[ext_resource type="Texture2D" uid="uid://b14mvkqw7armg" path="res://assets/cards/cardPlaceholder_disabled.png" id="2_rvjyk"]
[ext_resource type="Texture2D" uid="uid://cmnnfrkp1h5s0" path="res://assets/cards/bullet.png" id="2_wa0td"]
[ext_resource type="StyleBox" uid="uid://b6j501unrtcd2" path="res://scenes/camera/UI/card_normal.tres" id="3_q4ux5"]
[ext_resource type="FontFile" uid="uid://bl6jbonkrdy03" path="res://assets/font/minecraft-font/MinecraftBold-nMK1.otf" id="4_24237"]
[ext_resource type="AudioStream" uid="uid://y6unwb25tb7y" path="res://assets/audio/select3.wav" id="7_xfrgu"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_qr7cc"]
texture = ExtResource("1_fobdo")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_rvjyk"]
[sub_resource type="LabelSettings" id="LabelSettings_6m2n3"]
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_xfrgu"]
texture = ExtResource("2_rvjyk")
[sub_resource type="LabelSettings" id="LabelSettings_q4ux5"]
font = ExtResource("4_24237")
font_size = 30
font_color = Color(0, 0, 0, 1)
[node name="Card" type="CenterContainer"]
@ -16,7 +24,11 @@ script = ExtResource("1_wa0td")
[node name="ItemButton" type="Button" parent="."]
layout_mode = 2
tooltip_auto_translate_mode = 1
theme_override_styles/normal = SubResource("StyleBoxTexture_qr7cc")
theme_override_styles/focus = SubResource("StyleBoxTexture_rvjyk")
theme_override_styles/disabled = SubResource("StyleBoxTexture_xfrgu")
theme_override_styles/hover = ExtResource("3_q4ux5")
theme_override_styles/pressed = ExtResource("2_q4ux5")
theme_override_styles/normal = ExtResource("3_q4ux5")
icon = ExtResource("2_wa0td")
[node name="ItemAmountLabel" type="Label" parent="ItemButton"]
@ -27,13 +39,16 @@ anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -48.0
offset_top = -30.0
offset_right = -8.0
offset_bottom = -7.0
offset_top = -52.0
offset_right = -27.0
offset_bottom = -22.0
grow_horizontal = 0
grow_vertical = 0
text = "1"
label_settings = SubResource("LabelSettings_6m2n3")
label_settings = SubResource("LabelSettings_q4ux5")
horizontal_alignment = 2
[node name="selectAduio" type="AudioStreamPlayer" parent="."]
stream = ExtResource("7_xfrgu")
[connection signal="pressed" from="ItemButton" to="." method="_on_item_button_pressed"]

View file

@ -0,0 +1,6 @@
[gd_resource type="StyleBoxTexture" load_steps=2 format=3 uid="uid://b6j501unrtcd2"]
[ext_resource type="Texture2D" uid="uid://bprr1g5mf44sm" path="res://assets/cards/cardPlaceholder.png" id="1_iajbi"]
[resource]
texture = ExtResource("1_iajbi")

View file

@ -0,0 +1,6 @@
[gd_resource type="StyleBoxTexture" load_steps=2 format=3 uid="uid://dxbfig6arg06u"]
[ext_resource type="Texture2D" uid="uid://cdmythlpvrcg5" path="res://assets/cards/cardPlaceholder_pressed.png" id="1_k2bfy"]
[resource]
texture = ExtResource("1_k2bfy")

View file

@ -2,42 +2,119 @@ extends Camera3D
@onready var playerSelectButton = preload("res://scenes/camera/UI/playerSelectionButton.tscn")
@onready var roundLabel = $CanvasLayer/Control/General/roundLabel
@onready var playerNameLabel = $CanvasLayer/Control/Player/PlayerNameLabel
@onready var itemCards = $CanvasLayer/Control/Player/ItemCards
@onready var magazineLabel = $CanvasLayer/Control/Player/MagazineLabel
@onready var playerSelection = $CanvasLayer/Control/Player/PlayerSelection
@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 _ready() -> void:
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 setRound(_round: int) -> void:
roundLabel.text = str(_round)
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():
playerNameLabel.text = str(currentPlayer.getGameName())
magazineLabel.text = str(currentPlayer.gun.magazineSize) + "/" + str(currentPlayer.gun.getBulletAmount())
updatePlayerSelection()
updateItemCards()
func setCurrentPlayer(_currentPlayer: Player):
currentPlayer = _currentPlayer
updatePlayerStats()
func selectItem(_itemType: GLOBALS.ITEMTYPES):
print(currentPlayer.gun.magazineSizeLeft())
if currentPlayer.gun.magazineSizeLeft() > 0:
itemSelected.emit(_itemType)
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:
@ -61,7 +138,6 @@ func updateItemCards() -> void:
else:
j.visible = true
func updatePlayerSelection() -> void:
for i in playerSelection.get_children():
i.free()
@ -72,22 +148,35 @@ func updatePlayerSelection() -> void:
newSelection.setPlayer(i)
newSelection.button_group = newButtonGroup
playerSelection.add_child(newSelection)
playerSelection.get_child(0).button_pressed = true
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 getPlayerSelection() -> Player:
for i in playerSelection.get_children():
if i.button_pressed == true:
return i.player
return currentPlayer
func _on_button_pressed() -> void:
var mainMenu: PackedScene = load("res://scenes/mainMenu/mainMenu.tscn")
get_tree().change_scene_to_packed(mainMenu)

View file

@ -1,7 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://ct45lmxlrkhaj"]
[gd_scene load_steps=8 format=3 uid="uid://ct45lmxlrkhaj"]
[ext_resource type="Script" uid="uid://bvkbh5ngdd0dt" path="res://scenes/camera/camera.gd" id="1_xejhd"]
[ext_resource type="PackedScene" uid="uid://bc84ynsnwc1ew" path="res://scenes/camera/UI/card.tscn" id="2_6m2n3"]
[ext_resource type="Theme" uid="uid://demtpbu7rvg6i" path="res://theme/mainTheme.tres" id="2_qr7cc"]
[ext_resource type="PackedScene" uid="uid://cft1rugofyhh3" path="res://scenes/timer/timer.tscn" id="3_0jiuk"]
[ext_resource type="LabelSettings" uid="uid://cktnsyumdnxq6" path="res://theme/mainLabel.tres" id="4_u3rx3"]
[ext_resource type="Texture2D" uid="uid://v27rn6a5n6yh" path="res://assets/board/board.png" id="6_4ph7v"]
[ext_resource type="LabelSettings" uid="uid://xy6r76by7usp" path="res://theme/bigLabel.tres" id="6_21tcn"]
[node name="Camera3D" type="Camera3D"]
current = true
@ -16,6 +21,7 @@ anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("2_qr7cc")
[node name="General" type="Control" parent="CanvasLayer/Control"]
layout_mode = 1
@ -25,17 +31,21 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="roundLabel" type="Label" parent="CanvasLayer/Control/General"]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -32.0
offset_top = 16.0
offset_right = -22.0
offset_bottom = 39.0
grow_horizontal = 0
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/General"]
layout_mode = 0
offset_left = 40.0
offset_top = 40.0
offset_right = 205.0
offset_bottom = 90.0
[node name="roundLabelInfo" type="Label" parent="CanvasLayer/Control/General/HBoxContainer"]
layout_mode = 2
text = "Round: "
[node name="roundLabel" type="Label" parent="CanvasLayer/Control/General/HBoxContainer"]
layout_mode = 2
text = "0"
label_settings = ExtResource("6_21tcn")
[node name="Player" type="Control" parent="CanvasLayer/Control"]
layout_mode = 1
@ -45,76 +55,223 @@ anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="PlayerNameLabel" type="Label" parent="CanvasLayer/Control/Player"]
[node name="HBoxContainer2" type="VBoxContainer" parent="CanvasLayer/Control/Player"]
layout_mode = 1
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = -24.0
offset_top = 16.0
offset_right = 24.0
offset_bottom = 39.0
offset_left = -198.5
offset_top = 40.0
offset_right = 198.5
offset_bottom = 124.0
grow_horizontal = 2
[node name="PlayerNameLabelInfo" type="Label" parent="CanvasLayer/Control/Player/HBoxContainer2"]
layout_mode = 2
text = "Turn"
horizontal_alignment = 1
[node name="PlayerNameLabel" type="Label" parent="CanvasLayer/Control/Player/HBoxContainer2"]
layout_mode = 2
text = "asdasd"
label_settings = ExtResource("6_21tcn")
horizontal_alignment = 1
vertical_alignment = 1
[node name="nextTurnButton" type="Button" parent="CanvasLayer/Control/Player"]
[node name="Stats" type="Control" parent="CanvasLayer/Control/Player"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="ItemCards" type="HBoxContainer" parent="CanvasLayer/Control/Player/Stats"]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 40.0
offset_top = -292.0
offset_right = 428.0
offset_bottom = -40.0
grow_vertical = 0
[node name="Card" parent="CanvasLayer/Control/Player/Stats/ItemCards" instance=ExtResource("2_6m2n3")]
layout_mode = 2
[node name="Card2" parent="CanvasLayer/Control/Player/Stats/ItemCards" instance=ExtResource("2_6m2n3")]
layout_mode = 2
itemType = 2
[node name="HBoxContainer" type="HBoxContainer" parent="CanvasLayer/Control/Player/Stats"]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 40.0
offset_top = -376.0
offset_right = 199.0
offset_bottom = -336.0
grow_vertical = 0
[node name="MagazineLabelInfo" type="Label" parent="CanvasLayer/Control/Player/Stats/HBoxContainer"]
layout_mode = 2
text = "Magazin: "
label_settings = ExtResource("4_u3rx3")
[node name="MagazineLabel" type="Label" parent="CanvasLayer/Control/Player/Stats/HBoxContainer"]
layout_mode = 2
text = "dfsdfsdf"
label_settings = ExtResource("6_21tcn")
[node name="PlayerSelection" type="VBoxContainer" parent="CanvasLayer/Control/Player/Stats"]
visible = false
layout_mode = 1
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_left = 48.0
offset_top = -20.0
offset_right = 88.0
offset_bottom = 20.0
grow_vertical = 2
alignment = 1
[node name="nextTurnButton" type="Button" parent="CanvasLayer/Control/Player/Stats"]
layout_mode = 1
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = -96.0
offset_top = -48.0
offset_right = -17.0
offset_bottom = -17.0
offset_left = -272.0
offset_top = -164.0
offset_right = -40.0
offset_bottom = -40.0
grow_horizontal = 0
grow_vertical = 0
text = "Continue"
text = "End Turn"
[node name="ItemCards" type="HBoxContainer" parent="CanvasLayer/Control/Player"]
[node name="turnTimeLabel" type="Label" parent="CanvasLayer/Control/Player/Stats"]
visible = false
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 16.0
offset_top = -136.0
offset_right = 112.0
offset_bottom = -10.0
grow_vertical = 0
[node name="Card" parent="CanvasLayer/Control/Player/ItemCards" instance=ExtResource("2_6m2n3")]
layout_mode = 2
[node name="Card2" parent="CanvasLayer/Control/Player/ItemCards" instance=ExtResource("2_6m2n3")]
layout_mode = 2
itemType = 2
[node name="MagazineLabel" type="Label" parent="CanvasLayer/Control/Player"]
layout_mode = 1
anchors_preset = 2
anchor_top = 1.0
anchor_bottom = 1.0
offset_left = 16.0
offset_top = -184.0
offset_right = 56.0
offset_bottom = -161.0
grow_vertical = 0
[node name="PlayerSelection" type="VBoxContainer" parent="CanvasLayer/Control/Player"]
layout_mode = 1
anchors_preset = 6
anchors_preset = 1
anchor_left = 1.0
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_left = -64.0
offset_top = -20.0
offset_right = -24.0
offset_bottom = 20.0
offset_left = -128.0
offset_top = 16.0
offset_right = -118.0
offset_bottom = 39.0
grow_horizontal = 0
text = "0"
[node name="Timer" parent="CanvasLayer/Control/Player/Stats" instance=ExtResource("3_0jiuk")]
layout_mode = 1
anchors_preset = 1
anchor_left = 1.0
anchor_right = 1.0
offset_left = -168.0
offset_top = 40.0
offset_right = -40.0
offset_bottom = 168.0
grow_horizontal = 0
[node name="WinInfo" type="TextureRect" parent="CanvasLayer/Control"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -269.0
offset_top = -217.5
offset_right = 269.0
offset_bottom = 217.5
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("6_4ph7v")
stretch_mode = 5
[node name="winScreen" type="VBoxContainer" parent="CanvasLayer/Control/WinInfo"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -32.0
offset_right = 20.0
offset_bottom = 32.0
grow_horizontal = 2
grow_vertical = 2
alignment = 1
[connection signal="pressed" from="CanvasLayer/Control/Player/nextTurnButton" to="." method="_on_next_turn_button_pressed"]
[node name="WinnerLabelInfo" type="Label" parent="CanvasLayer/Control/WinInfo/winScreen"]
layout_mode = 2
text = "Winner"
horizontal_alignment = 1
vertical_alignment = 1
[node name="WinnerLabel" type="Label" parent="CanvasLayer/Control/WinInfo/winScreen"]
layout_mode = 2
text = "1"
label_settings = ExtResource("6_21tcn")
horizontal_alignment = 1
vertical_alignment = 1
[node name="HSeparator" type="HSeparator" parent="CanvasLayer/Control/WinInfo/winScreen"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
[node name="HSeparator2" type="HSeparator" parent="CanvasLayer/Control/WinInfo/winScreen"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
[node name="WinnerLabelInfo2" type="Label" parent="CanvasLayer/Control/WinInfo/winScreen"]
layout_mode = 2
text = "Survived Rounds"
horizontal_alignment = 1
vertical_alignment = 1
[node name="WinRoundLabel" type="Label" parent="CanvasLayer/Control/WinInfo/winScreen"]
layout_mode = 2
text = "1"
label_settings = ExtResource("6_21tcn")
horizontal_alignment = 1
vertical_alignment = 1
[node name="HSeparator3" type="HSeparator" parent="CanvasLayer/Control/WinInfo/winScreen"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
[node name="HSeparator4" type="HSeparator" parent="CanvasLayer/Control/WinInfo/winScreen"]
modulate = Color(1, 1, 1, 0)
layout_mode = 2
[node name="Button" type="Button" parent="CanvasLayer/Control/WinInfo/winScreen"]
layout_mode = 2
text = "Back To Main Menu"
[node name="PoolLabel" type="Label" parent="CanvasLayer/Control"]
layout_mode = 1
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -20.0
offset_top = -15.0
offset_right = 20.0
offset_bottom = 15.0
grow_horizontal = 2
grow_vertical = 2
text = "Get Random Gun"
label_settings = ExtResource("6_21tcn")
[node name="AudioListener3D" type="AudioListener3D" parent="."]
current = true
[connection signal="pressed" from="CanvasLayer/Control/Player/Stats/nextTurnButton" to="." method="_on_next_turn_button_pressed"]
[connection signal="pressed" from="CanvasLayer/Control/WinInfo/winScreen/Button" to="." method="_on_button_pressed"]

View file

@ -1,10 +1,134 @@
class_name Character extends Node3D
@onready var shotAnimations = $Shots/shotAnimations
@onready var gunAnimations = $gun/gunAnimations
@onready var gunPosition1 = $GunPositions/GunPosition1
@onready var gunPosition2 = $GunPositions/GunPosition2
@onready var gunPosition3 = $GunPositions/GunPosition3
@onready var gunPosition4 = $GunPositions/GunPosition4
@onready var shotGlas1 = $Shots/ShotGlas1
@onready var shotGlas2 = $Shots/ShotGlas2
@onready var shotGlas3 = $Shots/ShotGlas3
@onready var gameNameLabel = $gameNameLabel
@onready var gun = $gun
@onready var headPosition = $HeadPosition
@onready var shots = $Shots
func shoot():
pass
@onready var shootAudio = $GunPositions/GunPosition1/shootAudio
@onready var triggerAudio = $gun/triggerAudio
func removeShot() -> void:
print("remove Shot")
shots.get_child(0).queue_free()
signal shootGunFinished
signal addGunToPoolFinished
signal aimGunFinished
signal shotDrinkingFinished
func shootGun(hit: bool):
var currentRotationDegrees = gun.rotation_degrees
var currentPosition = gun.position
var tween1 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)
var tween2 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)
triggerAudio.play()
if hit:
shootAudio.play()
gunAnimations.play("shoot")
tween1.finished.connect(emitShootGunFinished.bind())
tween2.tween_property(gun, "position", gun.position+Vector3(0,0,-0.2), 0.2)
tween1.tween_property(gun, "rotation_degrees", gun.rotation_degrees+Vector3(-10,0,0), 0.2)
tween2.tween_property(gun, "position", currentPosition, 1).set_trans(Tween.TRANS_QUART)
tween1.tween_property(gun, "rotation_degrees", currentRotationDegrees, 1).set_trans(Tween.TRANS_QUART)
else:
tween2.finished.connect(emitShootGunFinished.bind())
tween2.tween_property(gun, "position", gun.position+Vector3(-0.01,-0.01,-0.01), 0.2).set_trans(Tween.TRANS_BOUNCE)
#tween1.tween_property(gun, "rotation_degrees", gun.rotation_degrees+Vector3(10,0,0), 0.2).set_trans(Tween.TRANS_BOUNCE)
tween2.tween_property(gun, "position", currentPosition, 1).set_trans(Tween.TRANS_QUART)
#tween1.tween_property(gun, "rotation_degrees", currentRotationDegrees, 1).set_trans(Tween.TRANS_QUART)
func emitShootGunFinished():
shootGunFinished.emit()
func addGunToPool():
var tween1 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
var tween2 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
tween1.finished.connect(emitAddGunToPoolFinished.bind())
tween2.tween_property(gun, "position", gunPosition3.position, 0.6)
tween1.tween_property(gun, "rotation_degrees", gunPosition3.rotation_degrees, 0.6)
tween2.tween_property(gun, "position", gunPosition3.position, 1)
tween1.tween_property(gun, "rotation_degrees", gunPosition3.rotation_degrees, 1)
tween2.tween_property(gun, "position", gunPosition1.position, 0.6)
tween1.tween_property(gun, "rotation_degrees", gunPosition1.rotation_degrees, 0.6)
func emitAddGunToPoolFinished():
addGunToPoolFinished.emit()
func aimGun():
var tween1 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
var tween2 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
tween1.finished.connect(emitAimGunFinished.bind())
tween2.tween_property(gun, "position", gunPosition1.position, 0.6)
tween1.tween_property(gun, "rotation_degrees", gunPosition1.rotation_degrees, 0.6)
func setAim(_player: Player):
gunPosition1.look_at(Vector3(_player.character.getHeadPosition().x,_player.character.getHeadPosition().y,_player.character.getHeadPosition().z), Vector3.UP, true)
func resetAim():
gunPosition1.rotation = Vector3(0,0,0)
func emitAimGunFinished():
aimGunFinished.emit()
func loadGun():
var tween1 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
var tween2 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
tween2.tween_property(gun, "position", gunPosition4.position, 0.6)
tween1.tween_property(gun, "rotation_degrees", gunPosition4.rotation_degrees, 0.6)
#func aimGunAtPlayer(_player: Player):
#gunPosition1.look_at(Vector3(_player.character.getHeadPosition().x,_player.character.getHeadPosition().y,_player.character.getHeadPosition().z), Vector3.UP, true)
#moveGunTo(gunPosition1)
#func aimGunAtSelf():
#moveGunTo(gunPosition2)
#func addGunToPool():
#moveGunTo(gunPosition3)
#func removeGunToPool():
#moveGunTo(gunPosition1)
func moveGunTo(toPosition: Marker3D):
var tween1 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
var tween2 = get_tree().create_tween().bind_node(self).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_IN)
tween2.tween_property(gun, "position", toPosition.position, 0.6)
tween1.tween_property(gun, "rotation_degrees", toPosition.rotation_degrees, 0.6)
#print("Finish")
#func aimGun(_player: Player):
#var lookAt: Vector3 = gun.global_position
#lookAt = _player.character.getHeadPosition()
#gun.look_at(lookAt, Vector3.UP, true)
func drinkShot():
await get_tree().create_timer(1.0).timeout
if shotGlas1 != null:
shotAnimations.play("drinkShot1")
elif shotGlas2 != null:
shotAnimations.play("drinkShot2")
elif shotGlas3 != null:
shotAnimations.play("drinkShot3")
func getHeadPosition() -> Vector3:
return headPosition.global_position
func _on_shot_animations_current_animation_changed(name: String) -> void:
shotDrinkingFinished.emit()
func setGameName(_name: String):
gameNameLabel.text = _name

View file

@ -1,8 +1,14 @@
[gd_scene load_steps=7 format=3 uid="uid://dlsh4dfqgtvan"]
[gd_scene load_steps=21 format=3 uid="uid://dlsh4dfqgtvan"]
[ext_resource type="Texture2D" uid="uid://du3d2gb1rri4t" path="res://icon.svg" id="1_6nn2t"]
[ext_resource type="Script" uid="uid://1uwdiveyijuu" path="res://scenes/character/character.gd" id="1_cuyo6"]
[ext_resource type="Texture2D" uid="uid://dtxymku41phdj" path="res://assets/player/player.png" id="2_bix7t"]
[ext_resource type="PackedScene" uid="uid://bhr8ggg3suw46" path="res://scenes/character/shotGlas/shotGlas.tscn" id="3_mutn8"]
[ext_resource type="PackedScene" uid="uid://daj8ue8u3fjw6" path="res://scenes/character/gun/gun.tscn" id="4_fgi2k"]
[ext_resource type="AudioStream" uid="uid://bb2odit8okuma" path="res://assets/audio/shoot2.wav" id="5_7ex5l"]
[ext_resource type="AudioStream" uid="uid://d1plcwujuslyx" path="res://assets/audio/heal.wav" id="5_q52vl"]
[ext_resource type="AudioStream" uid="uid://b1jqrw6p8mtwu" path="res://assets/audio/trigger.wav" id="6_7ex5l"]
[ext_resource type="FontFile" uid="uid://bl6jbonkrdy03" path="res://assets/font/minecraft-font/MinecraftBold-nMK1.otf" id="8_bblvu"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cuyo6"]
albedo_texture = ExtResource("1_6nn2t")
@ -14,24 +20,386 @@ orientation = 2
[sub_resource type="BoxMesh" id="BoxMesh_cuyo6"]
[sub_resource type="Animation" id="Animation_bix7t"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Shots/ShotGlas1:position")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(-0.3, 1.12, -0.8)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Shots/ShotGlas1:rotation")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, 0)]
}
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Shots/ShotGlas2:position")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 1.12, -0.8)]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Shots/ShotGlas2:rotation")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, 0)]
}
tracks/4/type = "value"
tracks/4/imported = false
tracks/4/enabled = true
tracks/4/path = NodePath("Shots/ShotGlas3:position")
tracks/4/interp = 1
tracks/4/loop_wrap = true
tracks/4/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0.3, 1.12, -0.8)]
}
tracks/5/type = "value"
tracks/5/imported = false
tracks/5/enabled = true
tracks/5/path = NodePath("Shots/ShotGlas3:rotation")
tracks/5/interp = 1
tracks/5/loop_wrap = true
tracks/5/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector3(0, 0, 0)]
}
tracks/6/type = "value"
tracks/6/imported = false
tracks/6/enabled = true
tracks/6/path = NodePath("Shots/healAudio:playing")
tracks/6/interp = 1
tracks/6/loop_wrap = true
tracks/6/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [false]
}
[sub_resource type="Animation" id="Animation_7ex5l"]
resource_name = "drinkShot1"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Shots/ShotGlas1:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(-0.3, 1.12, -0.8), Vector3(0, 1.5, -1.1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Shots/ShotGlas1:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0), Vector3(-0.523599, 0, 0)]
}
tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Shots/ShotGlas1")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"queue_free"
}]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Shots/healAudio:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.933333),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_f8hpl"]
resource_name = "drinkShot2"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Shots/ShotGlas2:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0, 1.12, -0.8), Vector3(0, 1.5, -1.1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Shots/ShotGlas2:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0), Vector3(-0.523599, 0, 0)]
}
tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Shots/ShotGlas2")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"queue_free"
}]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Shots/healAudio:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.933333),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="Animation" id="Animation_bblvu"]
resource_name = "drinkShot3"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("Shots/ShotGlas3:position")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5),
"transitions": PackedFloat32Array(1, 1),
"update": 0,
"values": [Vector3(0.3, 1.12, -0.8), Vector3(0, 1.5, -1.1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath("Shots/ShotGlas3:rotation")
tracks/1/interp = 2
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 0.7),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector3(0, 0, 0), Vector3(0, 0, 0), Vector3(-0.523599, 0, 0)]
}
tracks/2/type = "method"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("Shots/ShotGlas3")
tracks/2/interp = 1
tracks/2/loop_wrap = true
tracks/2/keys = {
"times": PackedFloat32Array(1),
"transitions": PackedFloat32Array(1),
"values": [{
"args": [],
"method": &"queue_free"
}]
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Shots/healAudio:playing")
tracks/3/interp = 1
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0.933333),
"transitions": PackedFloat32Array(1),
"update": 1,
"values": [true]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_bblvu"]
_data = {
&"RESET": SubResource("Animation_bix7t"),
&"drinkShot1": SubResource("Animation_7ex5l"),
&"drinkShot2": SubResource("Animation_f8hpl"),
&"drinkShot3": SubResource("Animation_bblvu")
}
[sub_resource type="Animation" id="Animation_l884r"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../GunPositions/GunPosition1/DirectionalLight3D:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [false]
}
[sub_resource type="Animation" id="Animation_q52vl"]
resource_name = "shoot"
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath("../GunPositions/GunPosition1/DirectionalLight3D:visible")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.05, 0.1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [false, true, false]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_f8hpl"]
_data = {
&"RESET": SubResource("Animation_l884r"),
&"shoot": SubResource("Animation_q52vl")
}
[node name="Character" type="Node3D"]
script = ExtResource("1_cuyo6")
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, -1.2)
shaded = true
double_sided = false
texture_filter = 0
texture = ExtResource("2_bix7t")
[node name="Character" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4, -1.2)
visible = false
mesh = SubResource("PlaneMesh_mutn8")
[node name="Chair" type="CSGMesh3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.4, -1.2)
visible = false
mesh = SubResource("BoxMesh_cuyo6")
[node name="Shots" type="Node3D" parent="."]
[node name="ShotGlas3" parent="Shots" instance=ExtResource("3_mutn8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 1.1, -0.8)
[node name="ShotGlas1" parent="Shots" instance=ExtResource("3_mutn8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 1.12, -0.8)
[node name="ShotGlas2" parent="Shots" instance=ExtResource("3_mutn8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, -0.8)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.12, -0.8)
[node name="ShotGlas" parent="Shots" instance=ExtResource("3_mutn8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 1.1, -0.8)
[node name="ShotGlas3" parent="Shots" instance=ExtResource("3_mutn8")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 1.12, -0.8)
[node name="shotAnimations" type="AnimationPlayer" parent="Shots"]
root_node = NodePath("../..")
libraries = {
&"": SubResource("AnimationLibrary_bblvu")
}
[node name="healAudio" type="AudioStreamPlayer" parent="Shots"]
stream = ExtResource("5_q52vl")
[node name="gun" parent="." instance=ExtResource("4_fgi2k")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 1.3, -1)
[node name="gunAnimations" type="AnimationPlayer" parent="gun"]
libraries = {
&"": SubResource("AnimationLibrary_f8hpl")
}
[node name="triggerAudio" type="AudioStreamPlayer3D" parent="gun"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0.1)
stream = ExtResource("6_7ex5l")
[node name="HeadPosition" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 1.4, -1.2)
[node name="GunPositions" type="Node3D" parent="."]
[node name="GunPosition1" type="Marker3D" parent="GunPositions"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.3, 1.3, -1)
[node name="DirectionalLight3D" type="OmniLight3D" parent="GunPositions/GunPosition1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0.7)
visible = false
light_color = Color(1, 0.933333, 0, 1)
light_energy = 2.0
[node name="shootAudio" type="AudioStreamPlayer3D" parent="GunPositions/GunPosition1"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0.5)
stream = ExtResource("5_7ex5l")
volume_db = -15.0
[node name="GunPosition2" type="Marker3D" parent="GunPositions"]
transform = Transform3D(-0.173648, 0, 0.984808, 0, 1, 0, -0.984808, 0, -0.173648, -0.9, 1.42, -1)
[node name="GunPosition3" type="Marker3D" parent="GunPositions"]
transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, -0.0999999, 0.92, 3.72529e-08)
[node name="GunPosition4" type="Marker3D" parent="GunPositions"]
transform = Transform3D(0.839491, 0.460136, 0.289014, -0.37369, 0.875034, -0.307686, -0.394475, 0.150298, 0.906531, 0.3, 1.3, -1.2)
[node name="GunPosition5" type="Marker3D" parent="GunPositions"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.96046e-08, 0.82, 0.2)
[node name="cameraRottion" type="Node3D" parent="."]
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0, 0, 0)
[node name="gameNameLabel" type="Label3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -1.2)
visible = false
text = "asdasd"
font = ExtResource("8_bblvu")
[connection signal="current_animation_changed" from="Shots/shotAnimations" to="." method="_on_shot_animations_current_animation_changed"]

View file

@ -0,0 +1 @@
extends Node3D

View file

@ -0,0 +1 @@
uid://bndvv6x2gr7t

View file

@ -0,0 +1,30 @@
[gd_scene load_steps=5 format=3 uid="uid://daj8ue8u3fjw6"]
[ext_resource type="Texture2D" uid="uid://du3d2gb1rri4t" path="res://icon.svg" id="1_gpxws"]
[ext_resource type="Texture2D" uid="uid://xbypphjmwif4" path="res://assets/revolver/revolver.png" id="2_l135f"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_mutn8"]
albedo_texture = ExtResource("1_gpxws")
[sub_resource type="QuadMesh" id="QuadMesh_fgi2k"]
material = SubResource("StandardMaterial3D_mutn8")
size = Vector2(0.6, 0.2)
[node name="gun" type="Node3D"]
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0.1, 0.3)
visible = false
mesh = SubResource("QuadMesh_fgi2k")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, 0, 0.1, 0.3)
visible = false
mesh = SubResource("QuadMesh_fgi2k")
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -1.33227e-15, 0.1, 0.2)
shaded = true
texture_filter = 0
render_priority = 2
texture = ExtResource("2_l135f")

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://bhr8ggg3suw46"]
[ext_resource type="Texture2D" uid="uid://du3d2gb1rri4t" path="res://icon.svg" id="1_k57fi"]
[ext_resource type="Texture2D" uid="uid://bn4gu1d85c0nv" path="res://assets/shots/shot.png" id="1_k57fi"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tfdbf"]
albedo_texture = ExtResource("1_k57fi")
@ -12,8 +12,16 @@ size = Vector2(0.2, 0.2)
[node name="ShotGlas" type="Node3D"]
[node name="Front" type="MeshInstance3D" parent="."]
visible = false
mesh = SubResource("QuadMesh_ix4wg")
[node name="Back" type="MeshInstance3D" parent="."]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
visible = false
mesh = SubResource("QuadMesh_ix4wg")
[node name="Sprite3D" type="Sprite3D" parent="."]
shaded = true
texture_filter = 0
render_priority = 2
texture = ExtResource("1_k57fi")

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"]

View file

@ -0,0 +1,11 @@
extends Node3D
@onready var game: PackedScene = preload("res://scenes/game/game.tscn")
@onready var animationPlayer: AnimationPlayer = $CanvasLayer/Control/AnimationPlayer
func _ready() -> void:
animationPlayer.play("logoMovement")
func _on_button_pressed() -> void:
get_tree().change_scene_to_packed(game)

View file

@ -0,0 +1 @@
uid://y20mcd7ch2ga

File diff suppressed because one or more lines are too long

View file

@ -1,18 +1,16 @@
[gd_scene load_steps=7 format=3 uid="uid://rch2yvsj0pdn"]
[gd_scene load_steps=13 format=3 uid="uid://rch2yvsj0pdn"]
[ext_resource type="Texture2D" uid="uid://dv575ijvfdu7s" path="res://addons/kenney_prototype_textures/dark/texture_13.png" id="1_8xru0"]
[ext_resource type="Texture2D" uid="uid://bjnpeb5s4paqi" path="res://assets/chandelier/chandelier.png" id="1_w7vtx"]
[ext_resource type="Material" uid="uid://vxxgydkoi8qp" path="res://scenes/room/table.tres" id="2_kxljb"]
[sub_resource type="BoxMesh" id="BoxMesh_kxljb"]
size = Vector3(10, 5, 10)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y1kpu"]
albedo_texture = ExtResource("1_8xru0")
uv1_triplanar = true
[ext_resource type="Texture2D" uid="uid://dbo3rl06sx34j" path="res://assets/table/table.png" id="3_y1kpu"]
[ext_resource type="Texture2D" uid="uid://bgr04066pmqsl" path="res://assets/room/wall.png" id="4_vaubn"]
[ext_resource type="Texture2D" uid="uid://pe7t5j327khu" path="res://assets/room/floor.png" id="5_1w8vm"]
[ext_resource type="Texture2D" uid="uid://cbvxqlgfr8fhn" path="res://bottle/bottle.png" id="7_gui0a"]
[sub_resource type="CylinderMesh" id="CylinderMesh_y1kpu"]
top_radius = 1.0
bottom_radius = 1.0
top_radius = 0.8
bottom_radius = 0.8
height = 0.05
[sub_resource type="CylinderMesh" id="CylinderMesh_1w8vm"]
@ -20,13 +18,39 @@ top_radius = 0.1
bottom_radius = 0.1
height = 1.0
[sub_resource type="BoxMesh" id="BoxMesh_kxljb"]
size = Vector3(10, 4, 10)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_y1kpu"]
albedo_texture = ExtResource("1_8xru0")
uv1_triplanar = true
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_vaubn"]
albedo_color = Color(0.278431, 0.152941, 0, 1)
[node name="Room" type="Node3D"]
[node name="CSGMesh3D" type="CSGMesh3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5, 0)
flip_faces = true
mesh = SubResource("BoxMesh_kxljb")
material = SubResource("StandardMaterial3D_y1kpu")
[node name="Sprite3D7" type="Sprite3D" parent="."]
transform = Transform3D(0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, 0.707107, 0, 2.9, 0)
texture_filter = 0
texture = ExtResource("1_w7vtx")
[node name="Sprite3D8" type="Sprite3D" parent="."]
transform = Transform3D(-0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, -0.707107, 0, 2.9, 0)
texture_filter = 0
texture = ExtResource("1_w7vtx")
[node name="Sprite3D9" type="Sprite3D" parent="."]
transform = Transform3D(-0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, -0.707107, 0, 2.9, 0)
texture_filter = 0
render_priority = 1
texture = ExtResource("1_w7vtx")
[node name="Sprite3D10" type="Sprite3D" parent="."]
transform = Transform3D(0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, 0.707107, 0, 2.9, 0)
texture_filter = 0
render_priority = 1
texture = ExtResource("1_w7vtx")
[node name="Table" type="Node3D" parent="."]
@ -37,5 +61,134 @@ material = ExtResource("2_kxljb")
[node name="CSGMesh3D" type="CSGMesh3D" parent="Table"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.000680447, 0.472962, -9.13143e-05)
visible = false
mesh = SubResource("CylinderMesh_1w8vm")
material = ExtResource("2_kxljb")
[node name="Sprite3D" type="Sprite3D" parent="Table"]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1.03559, 0)
shaded = true
alpha_cut = 2
texture_filter = 0
render_priority = 1
texture = ExtResource("3_y1kpu")
[node name="CSGMesh3D" type="CSGMesh3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
visible = false
flip_faces = true
mesh = SubResource("BoxMesh_kxljb")
material = SubResource("StandardMaterial3D_y1kpu")
[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.3, 0)
light_energy = 0.8
shadow_enabled = true
omni_range = 13.0
[node name="Sprite3D" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, -5)
shaded = true
texture_filter = 0
texture = ExtResource("4_vaubn")
[node name="Sprite3D2" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 5)
shaded = true
texture_filter = 0
texture = ExtResource("4_vaubn")
[node name="Sprite3D3" type="Sprite3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -5, 2, 0)
shaded = true
texture_filter = 0
texture = ExtResource("4_vaubn")
[node name="Sprite3D4" type="Sprite3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 5, 2, 0)
shaded = true
texture_filter = 0
texture = ExtResource("4_vaubn")
[node name="Sprite3D5" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0)
shaded = true
texture_filter = 0
texture = ExtResource("5_1w8vm")
[node name="Sprite3D6" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 4, 0)
shaded = true
texture_filter = 0
texture = ExtResource("5_1w8vm")
[node name="corners" type="Node3D" parent="."]
[node name="Corner" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 2, 5)
size = Vector3(0.5, 4, 0.5)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner2" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 2, 5)
size = Vector3(0.5, 4, 0.5)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner3" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 2, -5)
size = Vector3(0.5, 4, 0.5)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner4" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 2, -5)
size = Vector3(0.5, 4, 0.5)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner5" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 0, 0)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner6" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 0)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner7" type="CSGBox3D" parent="corners"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 2.18557e-07, 0, -5)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner8" type="CSGBox3D" parent="corners"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -2.18557e-07, 0, 5)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner9" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 4, 0)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner10" type="CSGBox3D" parent="corners"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 4, 0)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner11" type="CSGBox3D" parent="corners"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 4, -5)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Corner12" type="CSGBox3D" parent="corners"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -2.18557e-07, 4, 5)
size = Vector3(0.5, 0.5, 10)
material = SubResource("StandardMaterial3D_vaubn")
[node name="Sprite3D11" type="Sprite3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.8, 1.2, 0)
billboard = 2
texture_filter = 0
render_priority = 1
texture = ExtResource("7_gui0a")

15
scenes/timer/timer.gd Normal file
View file

@ -0,0 +1,15 @@
extends TextureRect
@onready var animationPlayer = $AnimationPlayer
@onready var pointer = $pointer
func reset():
pointer.rotation_degrees = -90
animationPlayer.stop()
func setTime(currentTime: float, endTime: float):
var newRotation = (100/(endTime/(endTime-currentTime)))*3.60-90
if newRotation >= 180 and not animationPlayer.is_playing():
animationPlayer.play("warning")
pointer.rotation_degrees = newRotation

View file

@ -0,0 +1 @@
uid://cqp55bs6du0mg

91
scenes/timer/timer.tscn Normal file
View file

@ -0,0 +1,91 @@
[gd_scene load_steps=7 format=3 uid="uid://cft1rugofyhh3"]
[ext_resource type="Texture2D" uid="uid://ch02ekiy2xdm6" path="res://assets/timer/timer.png" id="1_ortn8"]
[ext_resource type="Script" uid="uid://cqp55bs6du0mg" path="res://scenes/timer/timer.gd" id="2_a6ox2"]
[ext_resource type="Texture2D" uid="uid://byi05kporqhoh" path="res://assets/timer/pointer.png" id="3_fvetu"]
[sub_resource type="Animation" id="Animation_a6ox2"]
length = 0.001
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 1
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0),
"transitions": PackedFloat32Array(1),
"update": 0,
"values": [Color(1, 1, 1, 1)]
}
[sub_resource type="Animation" id="Animation_ortn8"]
resource_name = "warning"
loop_mode = 1
tracks/0/type = "value"
tracks/0/imported = false
tracks/0/enabled = true
tracks/0/path = NodePath(".:scale")
tracks/0/interp = 2
tracks/0/loop_wrap = true
tracks/0/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Vector2(1, 1), Vector2(1.2, 1.2), Vector2(1, 1)]
}
tracks/1/type = "value"
tracks/1/imported = false
tracks/1/enabled = true
tracks/1/path = NodePath(".:modulate")
tracks/1/interp = 1
tracks/1/loop_wrap = true
tracks/1/keys = {
"times": PackedFloat32Array(0, 0.5, 1),
"transitions": PackedFloat32Array(1, 1, 1),
"update": 0,
"values": [Color(1, 1, 1, 1), Color(1, 0.83, 0.832833, 1), Color(1, 1, 1, 1)]
}
[sub_resource type="AnimationLibrary" id="AnimationLibrary_fvetu"]
_data = {
&"RESET": SubResource("Animation_a6ox2"),
&"warning": SubResource("Animation_ortn8")
}
[node name="Timer" type="TextureRect"]
offset_left = -16.0
offset_top = -28.0
offset_right = 112.0
offset_bottom = 100.0
pivot_offset = Vector2(64, 64)
texture = ExtResource("1_ortn8")
script = ExtResource("2_a6ox2")
[node name="pointer" type="TextureRect" parent="."]
layout_mode = 0
offset_left = 64.0
offset_top = 60.0
offset_right = 104.0
offset_bottom = 68.0
rotation = -1.5708
pivot_offset = Vector2(0, 4)
texture = ExtResource("3_fvetu")
expand_mode = 2
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = {
&"": SubResource("AnimationLibrary_fvetu")
}