Add progress bar to Table
This commit is contained in:
+34
-15
@@ -3,17 +3,17 @@ extends StaticBody3D
|
|||||||
|
|
||||||
const GAME_MANAGER = preload("res://GameManager.gd")
|
const GAME_MANAGER = preload("res://GameManager.gd")
|
||||||
|
|
||||||
@export var initial_thinking_time: float = 6
|
@export var thinking_duration: float = 6
|
||||||
@export var initial_primary_time: float = 60
|
@export var primary_duration: float = 23
|
||||||
@export var initial_friend_time: float = 10
|
@export var friend_duration: float = 10
|
||||||
@export var initial_eating_time: float = 4
|
@export var eating_duration: float = 4
|
||||||
|
|
||||||
@onready var label_3d: Label3D = $Label3D
|
@onready var label_3d: Label3D = $Label3D
|
||||||
@onready var label_3d_time: Label3D = $Label3DTime
|
@onready var label_3d_time: Label3D = $Label3DTime
|
||||||
@onready var snap_zones: Array[XRToolsSnapZone] = []
|
@onready var snap_zones: Array[XRToolsSnapZone] = []
|
||||||
|
@onready var progress_bar: ProgressBar3D = $ProgressBar3D
|
||||||
|
|
||||||
const lbl_thinking: String = "Thinking..."
|
const lbl_thinking: String = "..."
|
||||||
const lbl_waiting_primary: String = "Waiting for food"
|
|
||||||
const lbl_gameover: String = "Game Over!"
|
const lbl_gameover: String = "Game Over!"
|
||||||
const lbl_eating: String = "Eating..."
|
const lbl_eating: String = "Eating..."
|
||||||
|
|
||||||
@@ -35,13 +35,18 @@ enum TableState {
|
|||||||
## the same text. Use _setState(), never assign _state directly.
|
## the same text. Use _setState(), never assign _state directly.
|
||||||
var _state: TableState = TableState.EMPTY: set = _set_state
|
var _state: TableState = TableState.EMPTY: set = _set_state
|
||||||
var _state_time: float = 0.0: set = _set_state_time
|
var _state_time: float = 0.0: set = _set_state_time
|
||||||
|
var _state_duration: float = 0.0 # set in _set_state_time
|
||||||
var _unsatisfied_orders: Array[String] = []: set = _set_unsatisfied_orders
|
var _unsatisfied_orders: Array[String] = []: set = _set_unsatisfied_orders
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
if not label_3d:
|
if not label_3d:
|
||||||
push_error("Table is missing reference to Label3D")
|
push_error("Table is missing reference to Label3D")
|
||||||
if not label_3d_time:
|
if not label_3d_time:
|
||||||
push_error("Table is missing reference to Label3DTime")
|
push_error("Table is missing reference to Label3DTime")
|
||||||
|
if not progress_bar or progress_bar is not ProgressBar3D:
|
||||||
|
push_error("Hob missing reference to progressbar, or wrong type:", progress_bar)
|
||||||
|
progress_bar.y_billboard = true
|
||||||
|
|
||||||
# Get snap_zones for plates, store in array snap_zones
|
# Get snap_zones for plates, store in array snap_zones
|
||||||
for child in get_children():
|
for child in get_children():
|
||||||
@@ -64,7 +69,6 @@ func _on_object_picked_up(_item) -> void:
|
|||||||
_absorb_item_if_correct(_item)
|
_absorb_item_if_correct(_item)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _on_object_dropped() -> void:
|
func _on_object_dropped() -> void:
|
||||||
print("Table: object dropped ")
|
print("Table: object dropped ")
|
||||||
|
|
||||||
@@ -128,14 +132,19 @@ func _setState(newState: TableState) -> void:
|
|||||||
match newState:
|
match newState:
|
||||||
TableState.EMPTY:
|
TableState.EMPTY:
|
||||||
_state_time = 0.0
|
_state_time = 0.0
|
||||||
|
_state_duration = 0.0
|
||||||
TableState.THINKING:
|
TableState.THINKING:
|
||||||
_state_time = initial_eating_time
|
_state_time = eating_duration
|
||||||
|
_state_duration = eating_duration # Can't be done in _set_state(), will set duration inside timer
|
||||||
TableState.WAITING_PRIMARY:
|
TableState.WAITING_PRIMARY:
|
||||||
_state_time = initial_primary_time
|
_state_time = primary_duration
|
||||||
|
_state_duration = primary_duration
|
||||||
TableState.WAITING_FRIEND:
|
TableState.WAITING_FRIEND:
|
||||||
_state_time = initial_friend_time
|
_state_time = friend_duration
|
||||||
|
_state_duration = friend_duration
|
||||||
TableState.EATING:
|
TableState.EATING:
|
||||||
_state_time = initial_eating_time
|
_state_time = eating_duration
|
||||||
|
_state_duration = eating_duration
|
||||||
|
|
||||||
_state = newState
|
_state = newState
|
||||||
|
|
||||||
@@ -143,19 +152,29 @@ func _setState(newState: TableState) -> void:
|
|||||||
## Pure presentation, driven off the current (locally authoritative or
|
## Pure presentation, driven off the current (locally authoritative or
|
||||||
## synced-from-server) state. Runs on every peer.
|
## synced-from-server) state. Runs on every peer.
|
||||||
func _refresh_display() -> void:
|
func _refresh_display() -> void:
|
||||||
if not label_3d:
|
|
||||||
return
|
|
||||||
match _state:
|
match _state:
|
||||||
TableState.EMPTY:
|
TableState.EMPTY:
|
||||||
|
progress_bar.set_bar_visible(false)
|
||||||
label_3d.text = "empty"
|
label_3d.text = "empty"
|
||||||
TableState.THINKING:
|
TableState.THINKING:
|
||||||
|
progress_bar.set_bar_visible(false)
|
||||||
label_3d.text = lbl_thinking
|
label_3d.text = lbl_thinking
|
||||||
TableState.WAITING_PRIMARY, TableState.WAITING_FRIEND:
|
TableState.WAITING_PRIMARY:
|
||||||
label_3d.text = "%s\n%s" % [TableState.keys()[_state], "\n".join(_unsatisfied_orders)]
|
label_3d.text = "%s\n%s" % [TableState.keys()[_state], "\n".join(_unsatisfied_orders)]
|
||||||
|
progress_bar.set_bar_visible(true)
|
||||||
|
progress_bar.override_fill_color(Color.RED if _state_time < 10 else Color.YELLOW)
|
||||||
|
TableState.WAITING_FRIEND:
|
||||||
|
label_3d.text = "%s\n%s" % [TableState.keys()[_state], "\n".join(_unsatisfied_orders)]
|
||||||
|
progress_bar.set_bar_visible(true)
|
||||||
|
progress_bar.override_fill_color(Color.RED if _state_time < 5 else Color.YELLOW)
|
||||||
TableState.EATING:
|
TableState.EATING:
|
||||||
label_3d.text = lbl_eating
|
label_3d.text = lbl_eating
|
||||||
if label_3d_time:
|
progress_bar.set_bar_visible(false)
|
||||||
|
|
||||||
label_3d_time.text = "%.1f" % _state_time
|
label_3d_time.text = "%.1f" % _state_time
|
||||||
|
print("_state_duration = ", _state_duration)
|
||||||
|
progress_bar.set_progress(clampf(float(_state_time) / _state_duration, 0.0, 1.0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _set_state(value: TableState) -> void:
|
func _set_state(value: TableState) -> void:
|
||||||
|
|||||||
+6
-1
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
[ext_resource type="Script" uid="uid://caeikc7e3igkd" path="res://Stations/table.gd" id="1_2vcpj"]
|
[ext_resource type="Script" uid="uid://caeikc7e3igkd" path="res://Stations/table.gd" id="1_2vcpj"]
|
||||||
[ext_resource type="Script" uid="uid://cquqe4f1m1sw6" path="res://addons/godot-xr-tools/objects/snap_zone.gd" id="1_8j1nt"]
|
[ext_resource type="Script" uid="uid://cquqe4f1m1sw6" path="res://addons/godot-xr-tools/objects/snap_zone.gd" id="1_8j1nt"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bxbocxdaayvwx" path="res://UI/progress_bar.tscn" id="3_kjf1i"]
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_24d3s"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_24d3s"]
|
||||||
|
|
||||||
@@ -162,10 +163,14 @@ vertical_alignment = 0
|
|||||||
line_spacing = -15.0
|
line_spacing = -15.0
|
||||||
|
|
||||||
[node name="Label3DTime" type="Label3D" parent="." unique_id=1534849507]
|
[node name="Label3DTime" type="Label3D" parent="." unique_id=1534849507]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3306234, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.4532461, 0)
|
||||||
pixel_size = 0.003
|
pixel_size = 0.003
|
||||||
billboard = 2
|
billboard = 2
|
||||||
text = "20.1s"
|
text = "20.1s"
|
||||||
|
|
||||||
[node name="Sync" type="MultiplayerSynchronizer" parent="." unique_id=2000411505]
|
[node name="Sync" type="MultiplayerSynchronizer" parent="." unique_id=2000411505]
|
||||||
replication_config = SubResource("SceneReplicationConfig_np_table")
|
replication_config = SubResource("SceneReplicationConfig_np_table")
|
||||||
|
|
||||||
|
[node name="ProgressBar3D" parent="." unique_id=654673176 instance=ExtResource("3_kjf1i")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.3676775, 0)
|
||||||
|
y_billboard = true
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
extends Node3D
|
extends Node3D
|
||||||
class_name ProgressBar3D
|
class_name ProgressBar3D
|
||||||
|
|
||||||
|
@export var y_billboard: bool = false
|
||||||
|
|
||||||
@onready var progress_bar: ProgressBar = $Sprite3D/SubViewport/ProgressBar
|
@onready var progress_bar: ProgressBar = $Sprite3D/SubViewport/ProgressBar
|
||||||
|
@onready var sprite_3d: Sprite3D = $Sprite3D
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
if not progress_bar:
|
if not progress_bar:
|
||||||
push_error("Progressbar3D missing reference to ProgressBar")
|
push_error("Progressbar3D missing reference to ProgressBar")
|
||||||
|
if y_billboard:
|
||||||
|
$Sprite3D.billboard = BaseMaterial3D.BillboardMode.BILLBOARD_FIXED_Y
|
||||||
|
|
||||||
func set_progress(value: float) -> void:
|
func set_progress(value: float) -> void:
|
||||||
print("ProgressBar set_progress: ", value)
|
print("ProgressBar set_progress: ", value)
|
||||||
|
|||||||
Reference in New Issue
Block a user