Compare commits
4 Commits
bd43b0bd1e
...
6a591b9e3a
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a591b9e3a | |||
| 70d41fc21b | |||
| 4bfb72d749 | |||
| 3ae1e089aa |
@@ -29,13 +29,13 @@ func _ready() -> void:
|
|||||||
func _on_body_entered(body: Node3D) -> void:
|
func _on_body_entered(body: Node3D) -> void:
|
||||||
if not NetworkManager.owns_world():
|
if not NetworkManager.owns_world():
|
||||||
return
|
return
|
||||||
SweetLogger.debug("enabled: {0}", [enabled], "container.gd", "_on_body_entered")
|
SweetLogger.debug("enabled: {0}", [enabled])
|
||||||
if not enabled:
|
if not enabled:
|
||||||
SweetLogger.debug("disabled in _on_body_entered body", [], "container.gd", "_on_body_entered")
|
SweetLogger.debug("disabled in _on_body_entered body")
|
||||||
return
|
return
|
||||||
if not body.is_in_group(target_group):
|
if not body.is_in_group(target_group):
|
||||||
return
|
return
|
||||||
SweetLogger.debug("body: {0}", [body], "container.gd", "_on_body_entered")
|
SweetLogger.debug("body: {0}", [body])
|
||||||
|
|
||||||
|
|
||||||
# If one of us is in a station
|
# If one of us is in a station
|
||||||
@@ -50,10 +50,10 @@ func _on_body_entered(body: Node3D) -> void:
|
|||||||
var meal_count := contained_items.filter(func(f): return f.type == FoodItem.Type.MEAL).size()
|
var meal_count := contained_items.filter(func(f): return f.type == FoodItem.Type.MEAL).size()
|
||||||
var side_count := contained_items.filter(func(f): return f.type == FoodItem.Type.SIDE).size()
|
var side_count := contained_items.filter(func(f): return f.type == FoodItem.Type.SIDE).size()
|
||||||
if food_item.type == FoodItem.Type.MEAL and meal_count < meal_positions.size():
|
if food_item.type == FoodItem.Type.MEAL and meal_count < meal_positions.size():
|
||||||
SweetLogger.debug("adding meal", [], "container.gd", "_on_body_entered")
|
SweetLogger.debug("adding meal")
|
||||||
_add_item(body)
|
_add_item(body)
|
||||||
if food_item.type == FoodItem.Type.SIDE and side_count < side_positions.size():
|
if food_item.type == FoodItem.Type.SIDE and side_count < side_positions.size():
|
||||||
SweetLogger.debug("adding side", [], "container.gd", "_on_body_entered")
|
SweetLogger.debug("adding side")
|
||||||
_add_item(body)
|
_add_item(body)
|
||||||
|
|
||||||
|
|
||||||
@@ -93,7 +93,7 @@ func _add_item(item: Node3D) -> void:
|
|||||||
NetworkManager.despawn_item(item)
|
NetworkManager.despawn_item(item)
|
||||||
# In case the container is on a table that needs to register this addition,
|
# In case the container is on a table that needs to register this addition,
|
||||||
# ask all table in scene to absorb any new items.
|
# ask all table in scene to absorb any new items.
|
||||||
SweetLogger.debug("group call absorb_items()", [], "container.gd", "_add_item")
|
SweetLogger.debug("group call absorb_items()")
|
||||||
get_tree().call_group("table", "absorb_items")
|
get_tree().call_group("table", "absorb_items")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+9
-9
@@ -51,7 +51,7 @@ func _set_net_held_by(value: int) -> void:
|
|||||||
var old := net_held_by
|
var old := net_held_by
|
||||||
net_held_by = value
|
net_held_by = value
|
||||||
if old != value and NetworkManager.is_online():
|
if old != value and NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0} net_held_by: {1} -> {2} (local state: {3}, authority={4})", [_pickable.name, old, value, _holder_desc(), get_multiplayer_authority()], "net_pickable.gd", "_set_net_held_by")
|
SweetLogger.debug("{0} net_held_by: {1} -> {2} (local state: {3}, authority={4})", [_pickable.name, old, value, _holder_desc(), get_multiplayer_authority()])
|
||||||
apply_held_state()
|
apply_held_state()
|
||||||
|
|
||||||
|
|
||||||
@@ -82,7 +82,7 @@ func apply_held_state() -> void:
|
|||||||
or _pickable.collision_mask != _pickable.original_collision_mask
|
or _pickable.collision_mask != _pickable.original_collision_mask
|
||||||
if changed:
|
if changed:
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0}: reclaiming ownership, restoring freeze_mode {1}->{2} collision_mask {3}->{4}", [_pickable.name, _pickable.freeze_mode, _original_freeze_mode, _pickable.collision_mask, _pickable.original_collision_mask], "net_pickable.gd", "apply_held_state")
|
SweetLogger.debug("{0}: reclaiming ownership, restoring freeze_mode {1}->{2} collision_mask {3}->{4}", [_pickable.name, _pickable.freeze_mode, _original_freeze_mode, _pickable.collision_mask, _pickable.original_collision_mask])
|
||||||
_pickable.freeze_mode = _original_freeze_mode
|
_pickable.freeze_mode = _original_freeze_mode
|
||||||
_pickable.collision_mask = _pickable.original_collision_mask
|
_pickable.collision_mask = _pickable.original_collision_mask
|
||||||
# Unlike freeze/collision (which XRToolsPickable manages itself while
|
# Unlike freeze/collision (which XRToolsPickable manages itself while
|
||||||
@@ -97,7 +97,7 @@ func apply_held_state() -> void:
|
|||||||
# driver that then fell out of the station.
|
# driver that then fell out of the station.
|
||||||
if _pickable.enabled != _original_enabled:
|
if _pickable.enabled != _original_enabled:
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0}: reclaiming ownership, restoring enabled {1}->{2}", [_pickable.name, _pickable.enabled, _original_enabled], "net_pickable.gd", "apply_held_state")
|
SweetLogger.debug("{0}: reclaiming ownership, restoring enabled {1}->{2}", [_pickable.name, _pickable.enabled, _original_enabled])
|
||||||
_pickable.enabled = _original_enabled
|
_pickable.enabled = _original_enabled
|
||||||
return
|
return
|
||||||
# A net_held_by/position sync update can race ahead of the
|
# A net_held_by/position sync update can race ahead of the
|
||||||
@@ -110,13 +110,13 @@ func apply_held_state() -> void:
|
|||||||
# Log once per grab, not once per tick.
|
# Log once per grab, not once per tick.
|
||||||
if NetworkManager.is_online() and not _grab_race_logged:
|
if NetworkManager.is_online() and not _grab_race_logged:
|
||||||
_grab_race_logged = true
|
_grab_race_logged = true
|
||||||
SweetLogger.debug("{0}: ignoring non-authority sync (net_held_by={1}) — still actively held by our own hand (grab-race guard)", [_pickable.name, net_held_by], "net_pickable.gd", "apply_held_state")
|
SweetLogger.debug("{0}: ignoring non-authority sync (net_held_by={1}) — still actively held by our own hand (grab-race guard)", [_pickable.name, net_held_by])
|
||||||
return
|
return
|
||||||
_grab_race_logged = false
|
_grab_race_logged = false
|
||||||
# Someone else owns it: stop simulating locally, just follow the sync.
|
# Someone else owns it: stop simulating locally, just follow the sync.
|
||||||
if _pickable.is_picked_up():
|
if _pickable.is_picked_up():
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0}: was held by {1} on this peer, but authority now says peer {2} owns it — force-dropping", [_pickable.name, _holder_desc(), net_held_by], "net_pickable.gd", "apply_held_state")
|
SweetLogger.debug("{0}: was held by {1} on this peer, but authority now says peer {2} owns it — force-dropping", [_pickable.name, _holder_desc(), net_held_by])
|
||||||
_pickable.drop()
|
_pickable.drop()
|
||||||
# Bail out when we're already in the follow-the-sync state. Without this the
|
# Bail out when we're already in the follow-the-sync state. Without this the
|
||||||
# writes below (and the line logged with them) repeated every tick for every
|
# writes below (and the line logged with them) repeated every tick for every
|
||||||
@@ -148,10 +148,10 @@ func _on_picked_up(_p) -> void:
|
|||||||
# addon's own "grab out of a snap zone" shortcut mid-cascade) — not a
|
# addon's own "grab out of a snap zone" shortcut mid-cascade) — not a
|
||||||
# player-initiated hand grab, so no authority request from here.
|
# player-initiated hand grab, so no authority request from here.
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0} picked up by {1} (not a hand) — no authority request", [_pickable.name, _holder_desc()], "net_pickable.gd", "_on_picked_up")
|
SweetLogger.debug("{0} picked up by {1} (not a hand) — no authority request", [_pickable.name, _holder_desc()])
|
||||||
return
|
return
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0} grabbed by hand (authority was peer {1}), requesting authority", [_pickable.name, net_held_by], "net_pickable.gd", "_on_picked_up")
|
SweetLogger.debug("{0} grabbed by hand (authority was peer {1}), requesting authority", [_pickable.name, net_held_by])
|
||||||
NetworkManager.request_item_authority_from(_pickable.get_path())
|
NetworkManager.request_item_authority_from(_pickable.get_path())
|
||||||
|
|
||||||
|
|
||||||
@@ -160,10 +160,10 @@ func _on_dropped(_p) -> void:
|
|||||||
# apply_held_state() losing authority (see above) must not re-report.
|
# apply_held_state() losing authority (see above) must not re-report.
|
||||||
if not is_multiplayer_authority():
|
if not is_multiplayer_authority():
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0} dropped locally, but we aren't its authority (peer {1} is) — not reporting", [_pickable.name, net_held_by], "net_pickable.gd", "_on_dropped")
|
SweetLogger.debug("{0} dropped locally, but we aren't its authority (peer {1} is) — not reporting", [_pickable.name, net_held_by])
|
||||||
return
|
return
|
||||||
if NetworkManager.is_online():
|
if NetworkManager.is_online():
|
||||||
SweetLogger.debug("{0} dropped, reporting release to server (lin={1} ang={2})", [_pickable.name, _pickable.linear_velocity, _pickable.angular_velocity], "net_pickable.gd", "_on_dropped")
|
SweetLogger.debug("{0} dropped, reporting release to server (lin={1} ang={2})", [_pickable.name, _pickable.linear_velocity, _pickable.angular_velocity])
|
||||||
# Send our own final transform too: we were the authority until now, and the
|
# Send our own final transform too: we were the authority until now, and the
|
||||||
# server's copy may not have received our last position sync yet.
|
# server's copy may not have received our last position sync yet.
|
||||||
NetworkManager.release_item_authority_from(
|
NetworkManager.release_item_authority_from(
|
||||||
|
|||||||
@@ -522,7 +522,7 @@ func _on_player_absent(peer_id: int) -> void:
|
|||||||
# --- Command-line driven test bootstrap -----------------------------------
|
# --- Command-line driven test bootstrap -----------------------------------
|
||||||
|
|
||||||
func _handle_cmdline() -> void:
|
func _handle_cmdline() -> void:
|
||||||
SweetLogger.info("Networkmanager _handle_cmdline()", [], "network_manager.gd", "_handle_cmdline")
|
SweetLogger.info("Networkmanager _handle_cmdline()")
|
||||||
var args := OS.get_cmdline_args()
|
var args := OS.get_cmdline_args()
|
||||||
if args.has("--server"):
|
if args.has("--server"):
|
||||||
log_line("cmdline: --server")
|
log_line("cmdline: --server")
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ func despawn_unheld_pickables():
|
|||||||
NetworkManager.despawn_item(pickable)
|
NetworkManager.despawn_item(pickable)
|
||||||
continue
|
continue
|
||||||
if not held_by.is_in_group("persistent_inventory"):
|
if not held_by.is_in_group("persistent_inventory"):
|
||||||
SweetLogger.debug("despawn_unheld_pickables held_by: {0}, pickable: {1}", [held_by, pickable], "build_mode_controller.gd", "despawn_unheld_pickables")
|
SweetLogger.debug("despawn_unheld_pickables held_by: {0}, pickable: {1}", [held_by, pickable])
|
||||||
NetworkManager.despawn_item(pickable)
|
NetworkManager.despawn_item(pickable)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ var _food_item: FoodItem
|
|||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
SweetLogger.debug("_ready(): {0}", [_pickable.name], "combinable_item.gd", "_ready")
|
SweetLogger.debug("_ready(): {0}", [_pickable.name])
|
||||||
_food_item = get_parent().get_node_or_null("FoodItem") as FoodItem
|
_food_item = get_parent().get_node_or_null("FoodItem") as FoodItem
|
||||||
if not _food_item:
|
if not _food_item:
|
||||||
push_error("CombinableItem is missing FoodItem reference. must be a sibling of a FoodItem on ", get_parent().name, ".")
|
push_error("CombinableItem is missing FoodItem reference. must be a sibling of a FoodItem on ", get_parent().name, ".")
|
||||||
@@ -52,24 +52,24 @@ func _on_body_entered(body: Node3D) -> void:
|
|||||||
if not NetworkManager.owns_world():
|
if not NetworkManager.owns_world():
|
||||||
return
|
return
|
||||||
if _combining or body == _pickable:
|
if _combining or body == _pickable:
|
||||||
SweetLogger.debug("other is our own pickable", [], "combinable_item.gd", "_on_body_entered")
|
SweetLogger.debug("other is our own pickable")
|
||||||
return
|
return
|
||||||
|
|
||||||
var other := Helper.find_food_item(body)
|
var other := Helper.find_food_item(body)
|
||||||
if not other:
|
if not other:
|
||||||
SweetLogger.debug("other is not a foodItem", [], "combinable_item.gd", "_on_body_entered")
|
SweetLogger.debug("other is not a foodItem")
|
||||||
return
|
return
|
||||||
|
|
||||||
var result: PackedScene = RecipeManager.get_combination_result(_food_item.id, other.id)
|
var result: PackedScene = RecipeManager.get_combination_result(_food_item.id, other.id)
|
||||||
if not result:
|
if not result:
|
||||||
SweetLogger.debug("There is no recipe for {0} + {1}", [_food_item.id, other.id], "combinable_item.gd", "_on_body_entered")
|
SweetLogger.debug("There is no recipe for {0} + {1}", [_food_item.id, other.id])
|
||||||
return
|
return
|
||||||
|
|
||||||
_combine(body, result)
|
_combine(body, result)
|
||||||
|
|
||||||
# Instantiate the result of combination and free the two ingredient items
|
# Instantiate the result of combination and free the two ingredient items
|
||||||
func _combine(other_body: Node3D, result: PackedScene) -> void:
|
func _combine(other_body: Node3D, result: PackedScene) -> void:
|
||||||
SweetLogger.debug("combining {0} + {1} into {2}", [_food_item.id, Helper.find_food_item(other_body).id, result.resource_path], "combinable_item.gd", "_combine")
|
SweetLogger.debug("combining {0} + {1} into {2}", [_food_item.id, Helper.find_food_item(other_body).id, result.resource_path])
|
||||||
|
|
||||||
# Get Snapzone
|
# Get Snapzone
|
||||||
var snap_zone := _pickable.get_picked_up_by()
|
var snap_zone := _pickable.get_picked_up_by()
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ func _process(delta: float) -> void:
|
|||||||
# Count down to zero and despawn
|
# Count down to zero and despawn
|
||||||
_time_left -= delta
|
_time_left -= delta
|
||||||
if _time_left <= 0:
|
if _time_left <= 0:
|
||||||
SweetLogger.debug("despawning {0}", [get_parent()], "despawning_item.gd", "_process")
|
SweetLogger.debug("despawning {0}", [get_parent()])
|
||||||
NetworkManager.despawn_item(get_parent())
|
NetworkManager.despawn_item(get_parent())
|
||||||
# Stop counting: despawn_item() only queues the free, so without this we
|
# Stop counting: despawn_item() only queues the free, so without this we
|
||||||
# keep re-reporting the same item every frame until it actually goes.
|
# keep re-reporting the same item every frame until it actually goes.
|
||||||
|
|||||||
@@ -9,10 +9,10 @@ func _ready() -> void:
|
|||||||
if not kitchen_scene:
|
if not kitchen_scene:
|
||||||
push_error("StationSpawner missing kitchen_scene")
|
push_error("StationSpawner missing kitchen_scene")
|
||||||
|
|
||||||
SweetLogger.debug("initializing", [], "kitchen_instantiator.gd", "_ready")
|
SweetLogger.debug("initializing")
|
||||||
|
|
||||||
if NetworkManager.owns_world():
|
if NetworkManager.owns_world():
|
||||||
SweetLogger.debug("initializing on server", [], "kitchen_instantiator.gd", "_ready")
|
SweetLogger.debug("initializing on server")
|
||||||
# Later we will do procedural generation here.
|
# Later we will do procedural generation here.
|
||||||
# For now we just load a scene.
|
# For now we just load a scene.
|
||||||
NetworkManager.call_deferred("spawn_item", kitchen_scene.resource_path, transform)
|
NetworkManager.call_deferred("spawn_item", kitchen_scene.resource_path, transform)
|
||||||
|
|||||||
@@ -30,14 +30,14 @@ func _reset_values() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func start_next_day() -> void:
|
func start_next_day() -> void:
|
||||||
SweetLogger.info("starting next day", [], "day_controller.gd", "start_next_day")
|
SweetLogger.info("starting next day")
|
||||||
_reset_values()
|
_reset_values()
|
||||||
GameManager.set_customers_per_day(GameManager.customers_per_day + GameManager.customers_count_increase_per_day)
|
GameManager.set_customers_per_day(GameManager.customers_per_day + GameManager.customers_count_increase_per_day)
|
||||||
GameManager.set_day_number(GameManager.day_number + 1)
|
GameManager.set_day_number(GameManager.day_number + 1)
|
||||||
|
|
||||||
|
|
||||||
func finish_current_day() -> void:
|
func finish_current_day() -> void:
|
||||||
SweetLogger.info("finishing current day", [], "day_controller.gd", "finish_current_day")
|
SweetLogger.info("finishing current day")
|
||||||
_reset_values()
|
_reset_values()
|
||||||
|
|
||||||
|
|
||||||
@@ -50,9 +50,9 @@ func _process(delta: float) -> void:
|
|||||||
#print("DayController: customers_at_this_time: ", customers_at_this_time)
|
#print("DayController: customers_at_this_time: ", customers_at_this_time)
|
||||||
if customers_spawned < customers_at_this_time:
|
if customers_spawned < customers_at_this_time:
|
||||||
customers_spawned += 1
|
customers_spawned += 1
|
||||||
SweetLogger.debug("spawning customer", [], "day_controller.gd", "_process")
|
SweetLogger.debug("spawning customer")
|
||||||
Signals.request_customer_spawn.emit()
|
Signals.request_customer_spawn.emit()
|
||||||
# If day complete
|
# If day complete
|
||||||
if GameManager.customers_per_day == customers_served and customers_spawned == GameManager.customers_per_day:
|
if GameManager.customers_per_day == customers_served and customers_spawned == GameManager.customers_per_day:
|
||||||
SweetLogger.info("day complete", [], "day_controller.gd", "_process")
|
SweetLogger.info("day complete")
|
||||||
finish_current_day()
|
finish_current_day()
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func spawn_customer() -> void:
|
|||||||
func _rebuild_table_list() -> void:
|
func _rebuild_table_list() -> void:
|
||||||
_tables.clear()
|
_tables.clear()
|
||||||
_tables.append_array(get_tree().get_nodes_in_group("table"))
|
_tables.append_array(get_tree().get_nodes_in_group("table"))
|
||||||
SweetLogger.debug("_rebuild_table_list complete: {0}", [_tables], "queue_controller.gd", "_rebuild_table_list")
|
SweetLogger.debug("_rebuild_table_list complete: {0}", [_tables])
|
||||||
|
|
||||||
|
|
||||||
func _try_to_assign_customers() -> void:
|
func _try_to_assign_customers() -> void:
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ transform = Transform3D(-1, 0, 8.742278e-08, 0, 1, 0, -8.742278e-08, 0, -1, 1.80
|
|||||||
spawn_path = NodePath("../WorldContent")
|
spawn_path = NodePath("../WorldContent")
|
||||||
|
|
||||||
[node name="PlayersSpawner" type="MultiplayerSpawner" parent="." unique_id=1840881658]
|
[node name="PlayersSpawner" type="MultiplayerSpawner" parent="." unique_id=1840881658]
|
||||||
_spawnable_scenes = PackedStringArray("res://Player/net_player.tscn")
|
_spawnable_scenes = PackedStringArray("uid://c58ns7csdahjy")
|
||||||
spawn_path = NodePath("../Players")
|
spawn_path = NodePath("../Players")
|
||||||
|
|
||||||
[node name="GameOverPanel" parent="." unique_id=522901881 instance=ExtResource("12_n58f2")]
|
[node name="GameOverPanel" parent="." unique_id=522901881 instance=ExtResource("12_n58f2")]
|
||||||
|
|||||||
+10
-10
@@ -114,14 +114,14 @@ func get_next(size, walls):
|
|||||||
var offset = [-1,-1]
|
var offset = [-1,-1]
|
||||||
|
|
||||||
walls.shuffle()
|
walls.shuffle()
|
||||||
SweetLogger.debug("get_next size: {0}", [size], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("get_next size: {0}", [size])
|
||||||
|
|
||||||
for wall in walls:
|
for wall in walls:
|
||||||
SweetLogger.debug("get_next wall: {0}", [wall], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("get_next wall: {0}", [wall])
|
||||||
if wall["der"][1] == 0:
|
if wall["der"][1] == 0:
|
||||||
SweetLogger.debug("get_next horizontal wall", [], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("get_next horizontal wall")
|
||||||
if size[0]<wall["len"]-6:
|
if size[0]<wall["len"]-6:
|
||||||
SweetLogger.debug("TileMapLayer get_next length 6 less can go anywhere", [], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("TileMapLayer get_next length 6 less can go anywhere")
|
||||||
if wall["der"][0] == 1:offset[1] = wall["pos"][1]
|
if wall["der"][0] == 1:offset[1] = wall["pos"][1]
|
||||||
else: offset[1] = wall["pos"][1]-size[1]
|
else: offset[1] = wall["pos"][1]-size[1]
|
||||||
|
|
||||||
@@ -130,16 +130,16 @@ func get_next(size, walls):
|
|||||||
if size[0]+offset[0]>wall["pos"][0]+wall["len"]-3:offset[0] = wall["len"]-(3+size[0])
|
if size[0]+offset[0]>wall["pos"][0]+wall["len"]-3:offset[0] = wall["len"]-(3+size[0])
|
||||||
|
|
||||||
elif size[0]<=wall["len"]-3:
|
elif size[0]<=wall["len"]-3:
|
||||||
SweetLogger.debug("TileMapLayer get_next 3 less needs to be on a corner", [], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("TileMapLayer get_next 3 less needs to be on a corner")
|
||||||
if wall["der"][0] == 1:offset[1] = wall["pos"][1]
|
if wall["der"][0] == 1:offset[1] = wall["pos"][1]
|
||||||
else: offset[1] = wall["pos"][1]-size[1]
|
else: offset[1] = wall["pos"][1]-size[1]
|
||||||
|
|
||||||
if randi_range(0, 1):offset[0]=wall["pos"][0]+wall["len"]-size[0]
|
if randi_range(0, 1):offset[0]=wall["pos"][0]+wall["len"]-size[0]
|
||||||
else:offset[0] = wall["pos"][0]
|
else:offset[0] = wall["pos"][0]
|
||||||
else:
|
else:
|
||||||
SweetLogger.debug("get_next vertical wall", [], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("get_next vertical wall")
|
||||||
if size[1]<wall["len"]-6:
|
if size[1]<wall["len"]-6:
|
||||||
SweetLogger.debug("TileMapLayer get_next length 6 less can go anywhere", [], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("TileMapLayer get_next length 6 less can go anywhere")
|
||||||
if wall["der"][1] == 1:offset[0] = wall["pos"][0]
|
if wall["der"][1] == 1:offset[0] = wall["pos"][0]
|
||||||
else: offset[0] = wall["pos"][0]-size[0]
|
else: offset[0] = wall["pos"][0]-size[0]
|
||||||
|
|
||||||
@@ -148,10 +148,10 @@ func get_next(size, walls):
|
|||||||
if size[1]+offset[1]>wall["len"]-3:offset[1] = wall["len"]-(3+size[1])
|
if size[1]+offset[1]>wall["len"]-3:offset[1] = wall["len"]-(3+size[1])
|
||||||
|
|
||||||
elif size[1]<=wall["len"]-3:
|
elif size[1]<=wall["len"]-3:
|
||||||
SweetLogger.debug("TileMapLayer get_next 3 less needs to be on a corner", [], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("TileMapLayer get_next 3 less needs to be on a corner")
|
||||||
if wall["der"][1] == 1:offset[0] = wall["pos"][0]
|
if wall["der"][1] == 1:offset[0] = wall["pos"][0]
|
||||||
else: offset[0] = wall["pos"][0]-size[0]
|
else: offset[0] = wall["pos"][0]-size[0]
|
||||||
SweetLogger.debug("get_next offset: {0}", [offset], "tile_map_layer.gd", "get_next")
|
SweetLogger.debug("get_next offset: {0}", [offset])
|
||||||
|
|
||||||
if randi() % 2:offset[1]=wall["pos"][1]+wall["len"]-size[1]
|
if randi() % 2:offset[1]=wall["pos"][1]+wall["len"]-size[1]
|
||||||
else:offset[1] = wall["pos"][1]
|
else:offset[1] = wall["pos"][1]
|
||||||
@@ -165,7 +165,7 @@ func get_next(size, walls):
|
|||||||
func draw_room(Size, offset=Vector2i(0, 0)):
|
func draw_room(Size, offset=Vector2i(0, 0)):
|
||||||
var walls = []
|
var walls = []
|
||||||
offset = Vector2i(offset[0], offset[1])
|
offset = Vector2i(offset[0], offset[1])
|
||||||
SweetLogger.debug("draw_room size: {0} offset: {1}", [Size, offset], "tile_map_layer.gd", "draw_room")
|
SweetLogger.debug("draw_room size: {0} offset: {1}", [Size, offset])
|
||||||
|
|
||||||
for i in range(Size[0]):
|
for i in range(Size[0]):
|
||||||
tile_map.set_cell(Vector2i(i+offset[0],offset[1]), 0, Vector2i(1,1))
|
tile_map.set_cell(Vector2i(i+offset[0],offset[1]), 0, Vector2i(1,1))
|
||||||
|
|||||||
@@ -62,14 +62,15 @@ move_ghost = NodePath("MoveGhost")
|
|||||||
|
|
||||||
[node name="MoveHandle" type="RigidBody3D" parent="." unique_id=954108203 groups=["platalbe_item"]]
|
[node name="MoveHandle" type="RigidBody3D" parent="." unique_id=954108203 groups=["platalbe_item"]]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||||
collision_layer = 4
|
collision_layer = 262144
|
||||||
collision_mask = 196615
|
collision_mask = 196615
|
||||||
axis_lock_linear_y = true
|
axis_lock_linear_y = true
|
||||||
axis_lock_angular_x = true
|
axis_lock_angular_x = true
|
||||||
axis_lock_angular_z = true
|
axis_lock_angular_z = true
|
||||||
mass = 0.004
|
mass = 0.001
|
||||||
gravity_scale = 0.5
|
gravity_scale = 0.5
|
||||||
linear_damp = 100.0
|
linear_damp = 100.0
|
||||||
|
angular_damp = 100.0
|
||||||
script = ExtResource("2_tbkb3")
|
script = ExtResource("2_tbkb3")
|
||||||
picked_up_layer = 64
|
picked_up_layer = 64
|
||||||
release_mode = 1
|
release_mode = 1
|
||||||
|
|||||||
+13
-13
@@ -47,7 +47,7 @@ func _set_result(value: String) -> void:
|
|||||||
if not process_result.is_empty():
|
if not process_result.is_empty():
|
||||||
knife.visible = true
|
knife.visible = true
|
||||||
knife.enabled = true
|
knife.enabled = true
|
||||||
SweetLogger.debug("chopping recipe set: {0}", [process_result], "counter.gd", "_set_result")
|
SweetLogger.debug("chopping recipe set: {0}", [process_result])
|
||||||
else:
|
else:
|
||||||
_hide_all_tools()
|
_hide_all_tools()
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ func _refresh_progress_bar() -> void:
|
|||||||
|
|
||||||
# Add work from gesture area (knife hits). This increments the chopping progress.
|
# Add work from gesture area (knife hits). This increments the chopping progress.
|
||||||
func add_work(work: float) -> void:
|
func add_work(work: float) -> void:
|
||||||
SweetLogger.debug("add_work: {0}", [work], "counter.gd", "add_work")
|
SweetLogger.debug("add_work: {0}", [work])
|
||||||
# Only the world owner should drive the authoritative state. Guarding is
|
# Only the world owner should drive the authoritative state. Guarding is
|
||||||
# handled by higher-level NetworkManager logic elsewhere, mirror hob's
|
# handled by higher-level NetworkManager logic elsewhere, mirror hob's
|
||||||
# convert_held_to_item which checks ownership before spawning.
|
# convert_held_to_item which checks ownership before spawning.
|
||||||
@@ -82,16 +82,16 @@ func add_work(work: float) -> void:
|
|||||||
audio.play()
|
audio.play()
|
||||||
# If we've reached the required time, convert the held item
|
# If we've reached the required time, convert the held item
|
||||||
if process_result != "" and process_result_work > 0 and work_progress >= process_result_work:
|
if process_result != "" and process_result_work > 0 and work_progress >= process_result_work:
|
||||||
SweetLogger.debug("chopping complete, converting item to: {0}", [process_result], "counter.gd", "add_work")
|
SweetLogger.debug("chopping complete, converting item to: {0}", [process_result])
|
||||||
work_progress = 0
|
work_progress = 0
|
||||||
convert_held_to_item(process_result)
|
convert_held_to_item(process_result)
|
||||||
|
|
||||||
|
|
||||||
func _on_gesture_area_body_entered(body: Node3D) -> void:
|
func _on_gesture_area_body_entered(body: Node3D) -> void:
|
||||||
SweetLogger.debug("gesture area entered: {0}", [body], "counter.gd", "_on_gesture_area_body_entered")
|
SweetLogger.debug("gesture area entered: {0}", [body])
|
||||||
if body.is_in_group("chopping_tool"):
|
if body.is_in_group("chopping_tool"):
|
||||||
if process_result == "":
|
if process_result == "":
|
||||||
SweetLogger.debug("knife entered but nothing to chop", [], "counter.gd", "_on_gesture_area_body_entered")
|
SweetLogger.debug("knife entered but nothing to chop")
|
||||||
return
|
return
|
||||||
|
|
||||||
var speed := 0.0
|
var speed := 0.0
|
||||||
@@ -101,31 +101,31 @@ func _on_gesture_area_body_entered(body: Node3D) -> void:
|
|||||||
speed = body.velocity.length()
|
speed = body.velocity.length()
|
||||||
|
|
||||||
if speed < chop_min_speed:
|
if speed < chop_min_speed:
|
||||||
SweetLogger.debug("knife too slow for chopping: {0}", [speed], "counter.gd", "_on_gesture_area_body_entered")
|
SweetLogger.debug("knife too slow for chopping: {0}", [speed])
|
||||||
return
|
return
|
||||||
|
|
||||||
add_work(chop_work_steps)
|
add_work(chop_work_steps)
|
||||||
|
|
||||||
|
|
||||||
func _on_object_picked_up(_item: Variant) -> void:
|
func _on_object_picked_up(_item: Variant) -> void:
|
||||||
SweetLogger.debug("object picked up: {0}", [_item], "counter.gd", "_on_object_picked_up")
|
SweetLogger.debug("object picked up: {0}", [_item])
|
||||||
var food_item = Helper.find_food_item(_item)
|
var food_item = Helper.find_food_item(_item)
|
||||||
if not food_item:
|
if not food_item:
|
||||||
SweetLogger.debug("held object is not a FoodItem", [], "counter.gd", "_on_object_picked_up")
|
SweetLogger.debug("held object is not a FoodItem")
|
||||||
return
|
return
|
||||||
|
|
||||||
var result = RecipeManager.get_chopping_result(food_item.id)
|
var result = RecipeManager.get_chopping_result(food_item.id)
|
||||||
if not result:
|
if not result:
|
||||||
SweetLogger.debug("held a FoodItem that is not choppable, id: {0} process_result: {1}", [food_item.id, result], "counter.gd", "_on_object_picked_up")
|
SweetLogger.debug("held a FoodItem that is not choppable, id: {0} process_result: {1}", [food_item.id, result])
|
||||||
return
|
return
|
||||||
|
|
||||||
process_result = result
|
process_result = result
|
||||||
process_result_work = RecipeManager.get_chopping_work(food_item.id)
|
process_result_work = RecipeManager.get_chopping_work(food_item.id)
|
||||||
SweetLogger.debug("set process_result {0} work: {1}", [process_result, process_result_work], "counter.gd", "_on_object_picked_up")
|
SweetLogger.debug("set process_result {0} work: {1}", [process_result, process_result_work])
|
||||||
|
|
||||||
|
|
||||||
func _on_object_dropped(_item: Variant) -> void:
|
func _on_object_dropped(_item: Variant) -> void:
|
||||||
SweetLogger.debug("object drop", [], "counter.gd", "_on_object_dropped")
|
SweetLogger.debug("object drop")
|
||||||
work_progress = 0
|
work_progress = 0
|
||||||
process_result = ""
|
process_result = ""
|
||||||
process_result_work = 0
|
process_result_work = 0
|
||||||
@@ -135,7 +135,7 @@ func _on_object_dropped(_item: Variant) -> void:
|
|||||||
func convert_held_to_item(_item: String) -> void:
|
func convert_held_to_item(_item: String) -> void:
|
||||||
if not NetworkManager.owns_world():
|
if not NetworkManager.owns_world():
|
||||||
return
|
return
|
||||||
SweetLogger.debug("converting {0}", [_item], "counter.gd", "convert_held_to_item")
|
SweetLogger.debug("converting {0}", [_item])
|
||||||
|
|
||||||
var old_pickable = snap_zone.picked_up_object
|
var old_pickable = snap_zone.picked_up_object
|
||||||
if not old_pickable:
|
if not old_pickable:
|
||||||
@@ -145,7 +145,7 @@ func convert_held_to_item(_item: String) -> void:
|
|||||||
var original_transform = old_pickable.global_transform
|
var original_transform = old_pickable.global_transform
|
||||||
var new_scene_instance = NetworkManager.spawn_item(RecipeManager.get_item_scene(_item).resource_path, original_transform)
|
var new_scene_instance = NetworkManager.spawn_item(RecipeManager.get_item_scene(_item).resource_path, original_transform)
|
||||||
|
|
||||||
SweetLogger.debug("freeing old_pickable {0}", [old_pickable], "counter.gd", "convert_held_to_item")
|
SweetLogger.debug("freeing old_pickable {0}", [old_pickable])
|
||||||
snap_zone.drop_object()
|
snap_zone.drop_object()
|
||||||
NetworkManager.despawn_item(old_pickable)
|
NetworkManager.despawn_item(old_pickable)
|
||||||
snap_zone.pick_up_object(new_scene_instance)
|
snap_zone.pick_up_object(new_scene_instance)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ func _makeDirty(item) -> void:
|
|||||||
return
|
return
|
||||||
var plate: PlateController = item.get_node_or_null("PlateController") as PlateController
|
var plate: PlateController = item.get_node_or_null("PlateController") as PlateController
|
||||||
if not plate:
|
if not plate:
|
||||||
SweetLogger.debug("held object is not a Plate", [], "dirt_station.gd", "_makeDirty")
|
SweetLogger.debug("held object is not a Plate")
|
||||||
return
|
return
|
||||||
if not plate.is_dirty:
|
if not plate.is_dirty:
|
||||||
plate.is_dirty = true
|
plate.is_dirty = true
|
||||||
|
|||||||
+7
-7
@@ -67,26 +67,26 @@ func _refresh_display() -> void:
|
|||||||
progress_bar.override_fill_color(Color.RED if cooking_result == "charcoal" else Color.GREEN)
|
progress_bar.override_fill_color(Color.RED if cooking_result == "charcoal" else Color.GREEN)
|
||||||
|
|
||||||
func _on_object_picked_up(_item) -> void:
|
func _on_object_picked_up(_item) -> void:
|
||||||
SweetLogger.debug("object picked up: {0}", [_item], "hob.gd", "_on_object_picked_up")
|
SweetLogger.debug("object picked up: {0}", [_item])
|
||||||
|
|
||||||
# Find the CookableItem in held object
|
# Find the CookableItem in held object
|
||||||
var _food_item = _item.get_node_or_null("FoodItem") as FoodItem
|
var _food_item = _item.get_node_or_null("FoodItem") as FoodItem
|
||||||
if not _food_item:
|
if not _food_item:
|
||||||
SweetLogger.debug("held object is not a FoodItem", [], "hob.gd", "_on_object_picked_up")
|
SweetLogger.debug("held object is not a FoodItem")
|
||||||
return
|
return
|
||||||
var result = RecipeManager.get_cooking_result(_food_item.id)
|
var result = RecipeManager.get_cooking_result(_food_item.id)
|
||||||
if not result:
|
if not result:
|
||||||
SweetLogger.debug("held a FoodItem that is not cookable, id: {0} result: {1}", [_food_item.id, result], "hob.gd", "_on_object_picked_up")
|
SweetLogger.debug("held a FoodItem that is not cookable, id: {0} result: {1}", [_food_item.id, result])
|
||||||
return
|
return
|
||||||
|
|
||||||
cooking_result = result
|
cooking_result = result
|
||||||
cooking_result_time = RecipeManager.get_cooking_time(_food_item.id)
|
cooking_result_time = RecipeManager.get_cooking_time(_food_item.id)
|
||||||
SweetLogger.debug("set cooking_result {0}", [cooking_result], "hob.gd", "_on_object_picked_up")
|
SweetLogger.debug("set cooking_result {0}", [cooking_result])
|
||||||
# The setters above already refresh the display and start the flames.
|
# The setters above already refresh the display and start the flames.
|
||||||
|
|
||||||
|
|
||||||
func _on_object_dropped(_item) -> void:
|
func _on_object_dropped(_item) -> void:
|
||||||
SweetLogger.debug("object drop", [], "hob.gd", "_on_object_dropped")
|
SweetLogger.debug("object drop")
|
||||||
time_cooked = 0
|
time_cooked = 0
|
||||||
cooking_result = ""
|
cooking_result = ""
|
||||||
cooking_result_time = 0
|
cooking_result_time = 0
|
||||||
@@ -95,7 +95,7 @@ func _on_object_dropped(_item) -> void:
|
|||||||
func convert_held_to_item(_item: String) -> void:
|
func convert_held_to_item(_item: String) -> void:
|
||||||
if not NetworkManager.owns_world():
|
if not NetworkManager.owns_world():
|
||||||
return
|
return
|
||||||
SweetLogger.debug("converting {0}", [_item], "hob.gd", "convert_held_to_item")
|
SweetLogger.debug("converting {0}", [_item])
|
||||||
|
|
||||||
var old_pickable = snap_zone.picked_up_object
|
var old_pickable = snap_zone.picked_up_object
|
||||||
if not old_pickable:
|
if not old_pickable:
|
||||||
@@ -108,7 +108,7 @@ func convert_held_to_item(_item: String) -> void:
|
|||||||
var new_scene_instance = NetworkManager.spawn_item(RecipeManager.get_item_scene(_item).resource_path, original_transform)
|
var new_scene_instance = NetworkManager.spawn_item(RecipeManager.get_item_scene(_item).resource_path, original_transform)
|
||||||
|
|
||||||
# Drop and free the old item and pick up the new one
|
# Drop and free the old item and pick up the new one
|
||||||
SweetLogger.debug("freeing old_pickable {0}", [old_pickable], "hob.gd", "convert_held_to_item")
|
SweetLogger.debug("freeing old_pickable {0}", [old_pickable])
|
||||||
snap_zone.drop_object()
|
snap_zone.drop_object()
|
||||||
NetworkManager.despawn_item(old_pickable)
|
NetworkManager.despawn_item(old_pickable)
|
||||||
snap_zone.pick_up_object(new_scene_instance)
|
snap_zone.pick_up_object(new_scene_instance)
|
||||||
|
|||||||
@@ -21,6 +21,6 @@ func _process(_delta: float) -> void:
|
|||||||
#return
|
#return
|
||||||
#
|
#
|
||||||
if not snap_zone.picked_up_object:
|
if not snap_zone.picked_up_object:
|
||||||
SweetLogger.debug("missing item, spawning new item", [], "item_dispenser.gd", "_process")
|
SweetLogger.debug("missing item, spawning new item")
|
||||||
var new_item = NetworkManager.spawn_item(item_scene.resource_path, snap_zone.global_transform)
|
var new_item = NetworkManager.spawn_item(item_scene.resource_path, snap_zone.global_transform)
|
||||||
snap_zone.pick_up_object(new_item)
|
snap_zone.pick_up_object(new_item)
|
||||||
|
|||||||
+4
-4
@@ -59,7 +59,7 @@ func _refresh_progress_bar() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_object_picked_up(_item) -> void:
|
func _on_object_picked_up(_item) -> void:
|
||||||
SweetLogger.debug("object picked up: {0}", [_item], "sink.gd", "_on_object_picked_up")
|
SweetLogger.debug("object picked up: {0}", [_item])
|
||||||
plate = _item.get_node_or_null("PlateController") as PlateController
|
plate = _item.get_node_or_null("PlateController") as PlateController
|
||||||
if plate:
|
if plate:
|
||||||
# The setter starts the effects and shows the bar, here and on clients.
|
# The setter starts the effects and shows the bar, here and on clients.
|
||||||
@@ -67,7 +67,7 @@ func _on_object_picked_up(_item) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_object_dropped(_item) -> void:
|
func _on_object_dropped(_item) -> void:
|
||||||
SweetLogger.debug("object drop", [], "sink.gd", "_on_object_dropped")
|
SweetLogger.debug("object drop")
|
||||||
_reset_sink()
|
_reset_sink()
|
||||||
|
|
||||||
|
|
||||||
@@ -81,14 +81,14 @@ func complete_washing():
|
|||||||
return
|
return
|
||||||
plate.is_dirty = false
|
plate.is_dirty = false
|
||||||
_reset_sink()
|
_reset_sink()
|
||||||
SweetLogger.debug("washing complete!", [], "sink.gd", "complete_washing")
|
SweetLogger.debug("washing complete!")
|
||||||
|
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
if is_washing:
|
if is_washing:
|
||||||
time_washed += wash_speed * delta
|
time_washed += wash_speed * delta
|
||||||
_refresh_progress_bar()
|
_refresh_progress_bar()
|
||||||
SweetLogger.debug("washing plate: {0}", [time_washed], "sink.gd", "_process")
|
SweetLogger.debug("washing plate: {0}", [time_washed])
|
||||||
|
|
||||||
if time_washed >= plate_wash_time:
|
if time_washed >= plate_wash_time:
|
||||||
complete_washing()
|
complete_washing()
|
||||||
|
|||||||
@@ -9,19 +9,19 @@ var move_handle_rigid: RigidBody3D
|
|||||||
var original_collision_layer: int = 0
|
var original_collision_layer: int = 0
|
||||||
var original_handle_y_pos: float = 0.0
|
var original_handle_y_pos: float = 0.0
|
||||||
var original_station_transform: Transform3D = Transform3D.IDENTITY
|
var original_station_transform: Transform3D = Transform3D.IDENTITY
|
||||||
@export var moving: bool = false
|
@export var is_moving: bool = false
|
||||||
var ghost_materials: Array[StandardMaterial3D] = []
|
var ghost_materials: Array[StandardMaterial3D] = []
|
||||||
|
|
||||||
# Ghost update throttling (clients send unreliable RPCs to server at this rate)
|
# Ghost update throttling (clients send unreliable RPCs to server at this rate)
|
||||||
var ghost_send_interval: float = 0.1 # seconds (10 Hz)
|
var ghost_send_interval: float = 0.1 # seconds (10 Hz)
|
||||||
var _ghost_send_accum: float = 0.0
|
var _ghost_send_accum: float = 0.0
|
||||||
|
var _was_last_pos_valid: bool = false
|
||||||
const GHOST_COLOR_VALID: Color = Color(0, 1, 0, 0.35)
|
const GHOST_COLOR_VALID: Color = Color(0, 1, 0, 0.35)
|
||||||
const GHOST_COLOR_INVALID: Color = Color(1, 0, 0, 0.35)
|
const GHOST_COLOR_INVALID: Color = Color(1, 0, 0, 0.35)
|
||||||
|
|
||||||
|
|
||||||
func set_move_handle_enabled(enabled: bool) -> void:
|
func set_move_handle_enabled(enabled: bool) -> void:
|
||||||
SweetLogger.debug("set_move_handle_enabled: {0}", [enabled], "station_movement.gd", "set_move_handle_enabled")
|
SweetLogger.debug("set_move_handle_enabled: {0}", [enabled])
|
||||||
move_handle.visible = enabled
|
move_handle.visible = enabled
|
||||||
move_handle.enabled = enabled
|
move_handle.enabled = enabled
|
||||||
if enabled:
|
if enabled:
|
||||||
@@ -37,6 +37,7 @@ func _on_station_bought(_instance: Node3D):
|
|||||||
set_move_handle_enabled(true)
|
set_move_handle_enabled(true)
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
SweetLogger.debug("enter")
|
||||||
if not station:
|
if not station:
|
||||||
push_error("StationMovement is missing referece to station")
|
push_error("StationMovement is missing referece to station")
|
||||||
if not move_handle:
|
if not move_handle:
|
||||||
@@ -52,11 +53,11 @@ func _ready() -> void:
|
|||||||
move_handle.dropped.connect(_handle_drop)
|
move_handle.dropped.connect(_handle_drop)
|
||||||
Signals.station_bought.connect(_on_station_bought)
|
Signals.station_bought.connect(_on_station_bought)
|
||||||
|
|
||||||
move_ghost.monitoring = true
|
|
||||||
move_ghost.visible = false
|
|
||||||
_cache_ghost_materials()
|
_cache_ghost_materials()
|
||||||
_set_ghost_color(GHOST_COLOR_VALID)
|
_set_ghost_color(GHOST_COLOR_VALID)
|
||||||
set_move_handle_enabled(GameManager.game_state == GameManager.GameState.BUILDING)
|
set_move_handle_enabled(GameManager.game_state == GameManager.GameState.BUILDING)
|
||||||
|
move_ghost.monitoring = true
|
||||||
|
move_ghost.visible = false
|
||||||
Signals.game_state_changed.connect(_on_game_state_changed)
|
Signals.game_state_changed.connect(_on_game_state_changed)
|
||||||
|
|
||||||
|
|
||||||
@@ -92,33 +93,37 @@ func _set_ghost_color(color: Color) -> void:
|
|||||||
material.albedo_color = color
|
material.albedo_color = color
|
||||||
|
|
||||||
|
|
||||||
|
func _apply_visibility_state(ghost_visible: bool, station_visible: bool) -> void:
|
||||||
|
move_ghost.visible = ghost_visible
|
||||||
|
station.visible = station_visible
|
||||||
|
if not NetworkManager.is_online():
|
||||||
|
return
|
||||||
|
if multiplayer.is_server():
|
||||||
|
server_update_visibility(ghost_visible, station_visible)
|
||||||
|
else:
|
||||||
|
server_update_visibility.rpc_id(1, ghost_visible, station_visible)
|
||||||
|
|
||||||
|
|
||||||
func _handle_pickup(_by: Node) -> void:
|
func _handle_pickup(_by: Node) -> void:
|
||||||
SweetLogger.info("handle pickup")
|
SweetLogger.info("handle pickup")
|
||||||
if move_handle.get_picked_up_by() is XRToolsSnapZone:
|
if move_handle.get_picked_up_by() and move_handle.get_picked_up_by() is XRToolsSnapZone:
|
||||||
SweetLogger.info("handle pickup by snap zone, dropping and resetting position")
|
SweetLogger.info("handle pickup by snap zone, dropping and resetting position")
|
||||||
move_handle.drop()
|
move_handle.drop()
|
||||||
move_handle.global_position = station.global_position + Vector3(0, original_handle_y_pos, 0)
|
move_handle.global_position = station.global_position + Vector3(0, original_handle_y_pos, 0)
|
||||||
move_handle.rotation = station.rotation
|
move_handle.rotation = station.rotation
|
||||||
return
|
return
|
||||||
|
|
||||||
moving = true
|
is_moving = true
|
||||||
station.collision_layer = 0
|
station.collision_layer = 0
|
||||||
original_station_transform = station.global_transform
|
original_station_transform = station.global_transform
|
||||||
move_ghost.global_transform = original_station_transform
|
move_ghost.global_transform = original_station_transform
|
||||||
if NetworkManager.is_online():
|
_apply_visibility_state(true, false)
|
||||||
# Ask the server to update visibility (reliable)
|
|
||||||
server_update_visibility.rpc_id(1, true, false)
|
|
||||||
else:
|
|
||||||
# If not connected to server (single-player or test), apply locally
|
|
||||||
move_ghost.visible = true
|
|
||||||
station.visible = false
|
|
||||||
|
|
||||||
|
|
||||||
func _handle_drop(_by: Node) -> void:
|
func _handle_drop(_by: Node) -> void:
|
||||||
SweetLogger.info("handle drop")
|
SweetLogger.info("handle drop")
|
||||||
moving = false
|
is_moving = false
|
||||||
move_ghost.visible = false
|
_apply_visibility_state(false, true)
|
||||||
station.visible = true
|
|
||||||
station.collision_layer = original_collision_layer
|
station.collision_layer = original_collision_layer
|
||||||
|
|
||||||
var is_valid: bool = _is_move_position_valid()
|
var is_valid: bool = _is_move_position_valid()
|
||||||
@@ -129,20 +134,17 @@ func _handle_drop(_by: Node) -> void:
|
|||||||
if is_valid:
|
if is_valid:
|
||||||
station.global_transform = move_ghost.global_transform
|
station.global_transform = move_ghost.global_transform
|
||||||
move_handle.global_transform = move_ghost.global_transform.translated(Vector3(0, original_handle_y_pos, 0))
|
move_handle.global_transform = move_ghost.global_transform.translated(Vector3(0, original_handle_y_pos, 0))
|
||||||
SweetLogger.debug("handle drop (local apply), station authority: {0} move_handle authority: {1}", [station.get_multiplayer_authority(), move_handle.get_multiplayer_authority()], "station_movement.gd", "_handle_drop")
|
SweetLogger.debug("handle drop (local apply), station authority: {0} move_handle authority: {1}", [station.get_multiplayer_authority(), move_handle.get_multiplayer_authority()])
|
||||||
else:
|
else:
|
||||||
station.global_transform = original_station_transform
|
station.global_transform = original_station_transform
|
||||||
move_handle.global_transform = original_station_transform.translated(Vector3(0, original_handle_y_pos, 0))
|
move_handle.global_transform = original_station_transform.translated(Vector3(0, original_handle_y_pos, 0))
|
||||||
SweetLogger.debug("handle drop (local reject), restoring original position", [], "station_movement.gd", "_handle_drop")
|
SweetLogger.debug("handle drop (local reject), restoring original position", [])
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
if not moving:
|
if not is_moving:
|
||||||
return
|
return
|
||||||
|
|
||||||
# Update the ghost locally for instant feedback and send throttled unreliable RPCs to the server
|
|
||||||
move_ghost.visible = true
|
|
||||||
station.visible = false
|
|
||||||
|
|
||||||
move_ghost.global_transform = Helper.get_snapped_transform(move_handle)
|
move_ghost.global_transform = Helper.get_snapped_transform(move_handle)
|
||||||
move_ghost.global_transform.origin.y = original_station_transform.origin.y
|
move_ghost.global_transform.origin.y = original_station_transform.origin.y
|
||||||
|
|
||||||
@@ -161,7 +163,7 @@ func _process(_delta: float) -> void:
|
|||||||
|
|
||||||
func _is_move_position_valid() -> bool:
|
func _is_move_position_valid() -> bool:
|
||||||
for body in move_ghost.get_overlapping_bodies():
|
for body in move_ghost.get_overlapping_bodies():
|
||||||
SweetLogger.debug("Overlapping body: {0}", [body], "station_movement.gd", "_is_move_position_valid")
|
SweetLogger.debug("Overlapping body: {0}", [body])
|
||||||
if body == move_handle:
|
if body == move_handle:
|
||||||
continue
|
continue
|
||||||
if body == station:
|
if body == station:
|
||||||
@@ -184,6 +186,7 @@ func _is_move_position_valid() -> bool:
|
|||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
func server_handle_drop(new_transform: Transform3D, client_thinks_valid: bool):
|
func server_handle_drop(new_transform: Transform3D, client_thinks_valid: bool):
|
||||||
|
SweetLogger.debug("enter")
|
||||||
if not multiplayer.is_server():
|
if not multiplayer.is_server():
|
||||||
return
|
return
|
||||||
if not (client_thinks_valid):
|
if not (client_thinks_valid):
|
||||||
@@ -192,41 +195,50 @@ func server_handle_drop(new_transform: Transform3D, client_thinks_valid: bool):
|
|||||||
server_update_station_transform.rpc(original_trans)
|
server_update_station_transform.rpc(original_trans)
|
||||||
server_update_move_ghost_transform.rpc(original_trans)
|
server_update_move_ghost_transform.rpc(original_trans)
|
||||||
server_update_handle_transform.rpc(original_trans.translated(Vector3(0, original_handle_y_pos, 0)))
|
server_update_handle_transform.rpc(original_trans.translated(Vector3(0, original_handle_y_pos, 0)))
|
||||||
server_update_visibility.rpc(false, true)
|
if not _was_last_pos_valid: # Edge case
|
||||||
SweetLogger.debug("server_handle_drop: transform rejected (invalid)", [], "station_movement.gd", "server_handle_drop")
|
server_update_visibility.rpc(false, true)
|
||||||
|
SweetLogger.warning("Can not not reset visibility to normal when the last pos was invalid")
|
||||||
|
SweetLogger.debug("transform rejected (invalid)")
|
||||||
|
_was_last_pos_valid = false
|
||||||
return
|
return
|
||||||
|
|
||||||
server_update_station_transform.rpc(new_transform)
|
server_update_station_transform.rpc(new_transform)
|
||||||
server_update_move_ghost_transform.rpc(new_transform)
|
server_update_move_ghost_transform.rpc(new_transform)
|
||||||
server_update_handle_transform.rpc(new_transform.translated(Vector3(0, original_handle_y_pos, 0)))
|
server_update_handle_transform.rpc(new_transform.translated(Vector3(0, original_handle_y_pos, 0)))
|
||||||
server_update_visibility.rpc(false, true)
|
server_update_visibility.rpc(false, true)
|
||||||
|
_was_last_pos_valid = true
|
||||||
|
|
||||||
SweetLogger.debug("server_handle_drop: transform applied", [], "station_movement.gd", "server_handle_drop")
|
SweetLogger.debug("transform applied")
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_local", "reliable") # Server updates clients
|
||||||
|
func server_artificial_pickup():
|
||||||
|
SweetLogger.debug("enter")
|
||||||
|
_handle_pickup(self) # Arg is not used, but required of the signal.
|
||||||
|
|
||||||
|
|
||||||
@rpc("any_peer", "call_local", "reliable") # Server updates clients
|
@rpc("any_peer", "call_local", "reliable") # Server updates clients
|
||||||
func server_update_station_transform(new_transform: Transform3D) -> void:
|
func server_update_station_transform(new_transform: Transform3D) -> void:
|
||||||
SweetLogger.debug("server_update_station_transform", [], "station_movement.gd", "server_update_station_transform")
|
SweetLogger.debug("entered")
|
||||||
station.global_transform = new_transform
|
station.global_transform = new_transform
|
||||||
original_station_transform = new_transform
|
original_station_transform = new_transform
|
||||||
|
|
||||||
|
|
||||||
@rpc("any_peer", "call_local", "reliable") # Server updates clients
|
@rpc("any_peer", "call_local", "reliable") # Server updates clients
|
||||||
func server_update_handle_transform(new_transform: Transform3D) -> void:
|
func server_update_handle_transform(new_transform: Transform3D) -> void:
|
||||||
SweetLogger.debug("server_update_handle_transform", [], "station_movement.gd", "server_update_handle_transform")
|
SweetLogger.debug("entered")
|
||||||
move_handle.global_transform = new_transform
|
move_handle.global_transform = new_transform
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@rpc("any_peer", "call_local", "reliable")
|
@rpc("any_peer", "call_local", "reliable")
|
||||||
func server_update_visibility(ghost_visible: bool, station_visible: bool) -> void:
|
func server_update_visibility(ghost_visible: bool, station_visible: bool) -> void:
|
||||||
SweetLogger.debug("server_update_visibility", [], "station_movement.gd", "server_update_visibility")
|
SweetLogger.debug("entered")
|
||||||
move_ghost.visible = ghost_visible
|
move_ghost.visible = ghost_visible
|
||||||
station.visible = station_visible
|
station.visible = station_visible
|
||||||
|
|
||||||
|
|
||||||
@rpc("any_peer", "call_local", "unreliable")
|
@rpc("any_peer", "call_local", "unreliable")
|
||||||
func server_update_move_ghost_transform(new_transform: Transform3D, new_color: Color = Color.YELLOW) -> void:
|
func server_update_move_ghost_transform(new_transform: Transform3D, new_color: Color = GHOST_COLOR_VALID) -> void:
|
||||||
SweetLogger.debug("server_update_move_ghost_transform", [], "station_movement.gd", "server_update_move_ghost_transform")
|
SweetLogger.debug("entered")
|
||||||
move_ghost.global_transform = new_transform
|
move_ghost.global_transform = new_transform
|
||||||
_set_ghost_color(new_color)
|
_set_ghost_color(new_color)
|
||||||
|
|||||||
+19
-19
@@ -47,7 +47,7 @@ var _players_count: int = 0
|
|||||||
|
|
||||||
|
|
||||||
func place_order() -> void:
|
func place_order() -> void:
|
||||||
SweetLogger.debug("place_order()", [], "table.gd", "place_order")
|
SweetLogger.debug("place_order()")
|
||||||
var new_orders: Array[String] = _unsatisfied_orders.duplicate()
|
var new_orders: Array[String] = _unsatisfied_orders.duplicate()
|
||||||
# for _i in range(0, randi_range(1, 2)):
|
# for _i in range(0, randi_range(1, 2)):
|
||||||
# new_orders.append(GameManager.get_random_meal())
|
# new_orders.append(GameManager.get_random_meal())
|
||||||
@@ -59,7 +59,7 @@ func place_order() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func absorb_items():
|
func absorb_items():
|
||||||
SweetLogger.debug("absorb_items()", [], "table.gd", "absorb_items")
|
SweetLogger.debug("absorb_items()")
|
||||||
for snap_zone_node in snap_zones:
|
for snap_zone_node in snap_zones:
|
||||||
var held_object = snap_zone_node.picked_up_object
|
var held_object = snap_zone_node.picked_up_object
|
||||||
if not held_object:
|
if not held_object:
|
||||||
@@ -69,7 +69,7 @@ func absorb_items():
|
|||||||
|
|
||||||
|
|
||||||
func satisfyAllOrders() -> void:
|
func satisfyAllOrders() -> void:
|
||||||
SweetLogger.debug("satisfyAllOrders()", [], "table.gd", "satisfyAllOrders")
|
SweetLogger.debug("satisfyAllOrders()")
|
||||||
_unsatisfied_orders.clear()
|
_unsatisfied_orders.clear()
|
||||||
_original_orders.clear()
|
_original_orders.clear()
|
||||||
clearAllFood()
|
clearAllFood()
|
||||||
@@ -77,7 +77,7 @@ func satisfyAllOrders() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func clearAllFood() -> void:
|
func clearAllFood() -> void:
|
||||||
SweetLogger.debug("clearAllFood()", [], "table.gd", "clearAllFood")
|
SweetLogger.debug("clearAllFood()")
|
||||||
for zone in snap_zones:
|
for zone in snap_zones:
|
||||||
var held_object = zone.picked_up_object
|
var held_object = zone.picked_up_object
|
||||||
if not held_object:
|
if not held_object:
|
||||||
@@ -98,7 +98,7 @@ func clearAllFood() -> void:
|
|||||||
# Group called from Queue when trying to assign customers to tables
|
# Group called from Queue when trying to assign customers to tables
|
||||||
func try_consume_customer() -> bool:
|
func try_consume_customer() -> bool:
|
||||||
if _state == TableState.EMPTY:
|
if _state == TableState.EMPTY:
|
||||||
SweetLogger.debug("try_consume_customer, consumed a customer", [], "table.gd", "try_consume_customer")
|
SweetLogger.debug("try_consume_customer, consumed a customer")
|
||||||
_state_end(TableState.EMPTY)
|
_state_end(TableState.EMPTY)
|
||||||
return true
|
return true
|
||||||
return false
|
return false
|
||||||
@@ -137,14 +137,14 @@ func _ready() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_object_picked_up(_item) -> void:
|
func _on_object_picked_up(_item) -> void:
|
||||||
SweetLogger.debug("object picked up: {0}", [_item], "table.gd", "_on_object_picked_up")
|
SweetLogger.debug("object picked up: {0}", [_item])
|
||||||
if _state == TableState.EATING:
|
if _state == TableState.EATING:
|
||||||
return
|
return
|
||||||
_absorb_item_if_correct(_item)
|
_absorb_item_if_correct(_item)
|
||||||
|
|
||||||
|
|
||||||
func _on_object_dropped(_item) -> void:
|
func _on_object_dropped(_item) -> void:
|
||||||
SweetLogger.debug("object dropped, item: {0}", [_item], "table.gd", "_on_object_dropped")
|
SweetLogger.debug("object dropped, item: {0}", [_item])
|
||||||
# If then player picks up a food_item (side) the table has already registerd, unregister
|
# If then player picks up a food_item (side) the table has already registerd, unregister
|
||||||
var food_item: FoodItem = Helper.find_food_item(_item)
|
var food_item: FoodItem = Helper.find_food_item(_item)
|
||||||
if food_item and food_item.type == FoodItem.Type.SIDE:
|
if food_item and food_item.type == FoodItem.Type.SIDE:
|
||||||
@@ -161,12 +161,12 @@ func _on_object_dropped(_item) -> void:
|
|||||||
# There is no on_stay signal, we have to track player with bool
|
# There is no on_stay signal, we have to track player with bool
|
||||||
func _on_player_enter(_body):
|
func _on_player_enter(_body):
|
||||||
_players_count += 1
|
_players_count += 1
|
||||||
SweetLogger.debug("_on_player_enter() players_count: {0}", [_players_count], "table.gd", "_on_player_enter")
|
SweetLogger.debug("_on_player_enter() players_count: {0}", [_players_count])
|
||||||
|
|
||||||
|
|
||||||
func _on_player_exit(_body):
|
func _on_player_exit(_body):
|
||||||
_players_count -= 1
|
_players_count -= 1
|
||||||
SweetLogger.debug("_on_player_exit() players_count: {0}", [_players_count], "table.gd", "_on_player_exit")
|
SweetLogger.debug("_on_player_exit() players_count: {0}", [_players_count])
|
||||||
|
|
||||||
|
|
||||||
func _place_order_if_player():
|
func _place_order_if_player():
|
||||||
@@ -183,20 +183,20 @@ func _place_order_if_player():
|
|||||||
|
|
||||||
func _get_plate_controller_from_item(_item: Node) -> PlateController:
|
func _get_plate_controller_from_item(_item: Node) -> PlateController:
|
||||||
if not _item:
|
if not _item:
|
||||||
SweetLogger.debug("_item is null", [], "table.gd", "_get_plate_controller_from_item")
|
SweetLogger.debug("_item is null")
|
||||||
return null
|
return null
|
||||||
|
|
||||||
for child in _item.get_children():
|
for child in _item.get_children():
|
||||||
if child is PlateController:
|
if child is PlateController:
|
||||||
SweetLogger.debug("found child", [], "table.gd", "_get_plate_controller_from_item")
|
SweetLogger.debug("found child")
|
||||||
return child
|
return child
|
||||||
|
|
||||||
SweetLogger.debug("no match", [], "table.gd", "_get_plate_controller_from_item")
|
SweetLogger.debug("no match")
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|
||||||
func _absorb_item_if_correct(_item: Node) -> void:
|
func _absorb_item_if_correct(_item: Node) -> void:
|
||||||
SweetLogger.debug("_absorb_item_if_correct, item: {0}", [_item], "table.gd", "_absorb_item_if_correct")
|
SweetLogger.debug("_absorb_item_if_correct, item: {0}", [_item])
|
||||||
if not _item:
|
if not _item:
|
||||||
return
|
return
|
||||||
if not (_state == TableState.WAITING_PRIMARY or _state == TableState.WAITING_FRIEND):
|
if not (_state == TableState.WAITING_PRIMARY or _state == TableState.WAITING_FRIEND):
|
||||||
@@ -204,14 +204,14 @@ func _absorb_item_if_correct(_item: Node) -> void:
|
|||||||
|
|
||||||
# Plate: Get plate controller in child of _item (hopefully a plate XRpickable)
|
# Plate: Get plate controller in child of _item (hopefully a plate XRpickable)
|
||||||
var plate_controller = _get_plate_controller_from_item(_item)
|
var plate_controller = _get_plate_controller_from_item(_item)
|
||||||
SweetLogger.debug("_absorb_item_if_correct plate_controller ref: {0}", [plate_controller], "table.gd", "_absorb_item_if_correct")
|
SweetLogger.debug("_absorb_item_if_correct plate_controller ref: {0}", [plate_controller])
|
||||||
_item.print_tree_pretty()
|
_item.print_tree_pretty()
|
||||||
|
|
||||||
if plate_controller:
|
if plate_controller:
|
||||||
# Absorm items from the plate we want
|
# Absorm items from the plate we want
|
||||||
for food_item: FoodItem in plate_controller.container.contained_items: # TOOD: handle registering the meal again when a side is added to the plate
|
for food_item: FoodItem in plate_controller.container.contained_items: # TOOD: handle registering the meal again when a side is added to the plate
|
||||||
if food_item.id in _unsatisfied_orders and not food_item.is_absorbed:
|
if food_item.id in _unsatisfied_orders and not food_item.is_absorbed:
|
||||||
SweetLogger.debug("_absorb_item_if_correct held a plate with FoodItem that is in unsatisfied orders, removing it", [], "table.gd", "_absorb_item_if_correct")
|
SweetLogger.debug("_absorb_item_if_correct held a plate with FoodItem that is in unsatisfied orders, removing it")
|
||||||
(plate_controller.get_parent() as XRToolsPickable).get_picked_up_by().enabled = false # Lock meal that is deliverd
|
(plate_controller.get_parent() as XRToolsPickable).get_picked_up_by().enabled = false # Lock meal that is deliverd
|
||||||
_unsatisfied_orders.erase(food_item.id)
|
_unsatisfied_orders.erase(food_item.id)
|
||||||
food_item.is_absorbed = true
|
food_item.is_absorbed = true
|
||||||
@@ -221,17 +221,17 @@ func _absorb_item_if_correct(_item: Node) -> void:
|
|||||||
# Side pickable item, no container
|
# Side pickable item, no container
|
||||||
var food_item: FoodItem = Helper.find_food_item(_item)
|
var food_item: FoodItem = Helper.find_food_item(_item)
|
||||||
if food_item and food_item.type == FoodItem.Type.SIDE:
|
if food_item and food_item.type == FoodItem.Type.SIDE:
|
||||||
SweetLogger.debug("_absorb_item_if_correct held a side that is in unsatisfied orders, removing it", [], "table.gd", "_absorb_item_if_correct")
|
SweetLogger.debug("_absorb_item_if_correct held a side that is in unsatisfied orders, removing it")
|
||||||
# Do not lock snap zone here. Problem if table want many meals, but to many sides have filled up slots, so can't place plates.
|
# Do not lock snap zone here. Problem if table want many meals, but to many sides have filled up slots, so can't place plates.
|
||||||
_unsatisfied_orders.erase(food_item.id)
|
_unsatisfied_orders.erase(food_item.id)
|
||||||
_update_state_from_orders()
|
_update_state_from_orders()
|
||||||
return
|
return
|
||||||
|
|
||||||
SweetLogger.debug("absorb_item_if_correct() held object is not a Plate or Side", [], "table.gd", "_absorb_item_if_correct")
|
SweetLogger.debug("absorb_item_if_correct() held object is not a Plate or Side")
|
||||||
|
|
||||||
|
|
||||||
func _update_state_from_orders():
|
func _update_state_from_orders():
|
||||||
SweetLogger.debug("_update_state_from_orders: unsatisfied_orders: {0}", [_unsatisfied_orders], "table.gd", "_update_state_from_orders")
|
SweetLogger.debug("_update_state_from_orders: unsatisfied_orders: {0}", [_unsatisfied_orders])
|
||||||
if _unsatisfied_orders.size() > 0 and _state != TableState.EATING:
|
if _unsatisfied_orders.size() > 0 and _state != TableState.EATING:
|
||||||
_set_state(TableState.WAITING_FRIEND)
|
_set_state(TableState.WAITING_FRIEND)
|
||||||
|
|
||||||
@@ -254,7 +254,7 @@ func _collect_money_from_food():
|
|||||||
elif food_item:
|
elif food_item:
|
||||||
GameManager.set_money(GameManager.money + food_item.sell_value)
|
GameManager.set_money(GameManager.money + food_item.sell_value)
|
||||||
|
|
||||||
SweetLogger.debug("_collect_money_from_food(), money: {0}", [GameManager.money], "table.gd", "_collect_money_from_food")
|
SweetLogger.debug("_collect_money_from_food(), money: {0}", [GameManager.money])
|
||||||
|
|
||||||
|
|
||||||
func _set_snap_zones_enabled(value: bool) -> void:
|
func _set_snap_zones_enabled(value: bool) -> void:
|
||||||
|
|||||||
@@ -16,28 +16,44 @@ func _ready() -> void:
|
|||||||
button.icon = icon_texture
|
button.icon = icon_texture
|
||||||
|
|
||||||
|
|
||||||
|
func _process(_delta: float) -> void:
|
||||||
|
button.disabled = GameManager.money < cost
|
||||||
|
|
||||||
|
|
||||||
func _on_button_pressed() -> void:
|
func _on_button_pressed() -> void:
|
||||||
SweetLogger.debug("buy {0}", [station_name], "shop_station_button.gd", "_on_button_pressed")
|
SweetLogger.debug("buy {0}", [station_name])
|
||||||
_buy_station()
|
_buy_station()
|
||||||
|
|
||||||
|
|
||||||
func _buy_station() -> void:
|
func _buy_station() -> void:
|
||||||
SweetLogger.debug("_buy_station: cost={0} current money={1}", [cost, GameManager.money], "shop_station_button.gd", "_buy_station")
|
SweetLogger.debug("cost={0} current money={1}", [cost, GameManager.money])
|
||||||
GameManager.set_money(GameManager.money - cost)
|
GameManager.set_money(GameManager.money - cost)
|
||||||
var transform = Helper.get_snapped_transform(XRHelpers.get_xr_origin(self).get_node_or_null("PlayerBody"))
|
var transform = Helper.get_snapped_transform(XRHelpers.get_xr_origin(self).get_node_or_null("PlayerBody"))
|
||||||
var forward: Vector3 = -transform.basis.z.normalized()
|
var forward: Vector3 = -transform.basis.z.normalized()
|
||||||
transform.origin += (forward * 0.6)
|
transform.origin += (forward * 0.6)
|
||||||
var instance = NetworkManager.spawn_item(station_scene.resource_path, transform)
|
|
||||||
|
|
||||||
|
var instance
|
||||||
if NetworkManager.is_online() and not NetworkManager.is_server():
|
if NetworkManager.is_online() and not NetworkManager.is_server():
|
||||||
_ask_server_to_spawn.rpc_id(1, station_scene.resource_path, transform)
|
_ask_server_to_spawn.rpc_id(1, station_scene.resource_path, transform)
|
||||||
|
else:
|
||||||
|
instance = NetworkManager.spawn_item(station_scene.resource_path, transform)
|
||||||
|
update_instance_move(instance)
|
||||||
Signals.station_bought.emit(instance)
|
Signals.station_bought.emit(instance)
|
||||||
|
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
func _ask_server_to_spawn(station_scene_path, transform):
|
func _ask_server_to_spawn(station_scene_path, transform):
|
||||||
NetworkManager.spawn_item(station_scene_path, transform)
|
if not multiplayer.is_server():
|
||||||
|
return
|
||||||
|
var instance = NetworkManager.spawn_item(station_scene_path, transform)
|
||||||
|
update_instance_move(instance)
|
||||||
|
|
||||||
|
|
||||||
|
func update_instance_move(instance: Node3D) -> void:
|
||||||
|
var move = Helper.find_first_child_of_type(instance, StationMovement) as StationMovement
|
||||||
|
if not move:
|
||||||
|
SweetLogger.error("Could not find StationMovement under station {0}", [instance.name])
|
||||||
|
move.server_artificial_pickup() # Make the new station appear as ghost, the player has to place it.
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
|
||||||
button.disabled = GameManager.money < cost
|
|
||||||
|
|
||||||
|
|||||||
+6
-6
@@ -32,9 +32,9 @@ func _process(_delta: float) -> void:
|
|||||||
|
|
||||||
func toggle_shop():
|
func toggle_shop():
|
||||||
if GameManager.game_state == GameManager.GameState.BUILDING:
|
if GameManager.game_state == GameManager.GameState.BUILDING:
|
||||||
SweetLogger.debug("toggle shop", [], "shop_ui.gd", "toggle_shop")
|
SweetLogger.debug("toggle shop")
|
||||||
enabled = !enabled
|
enabled = !enabled
|
||||||
SweetLogger.debug("_process: money={0} label text={1}", [GameManager.money, money_label.text], "shop_ui.gd", "toggle_shop")
|
SweetLogger.debug("_process: money={0} label text={1}", [GameManager.money, money_label.text])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -54,11 +54,11 @@ func _set_poke_enabled_for_controller(controller_node: XRController3D, value: bo
|
|||||||
|
|
||||||
var poke_node = Helper.find_first_child_of_type(controller_node, XRToolsPoke)
|
var poke_node = Helper.find_first_child_of_type(controller_node, XRToolsPoke)
|
||||||
if poke_node:
|
if poke_node:
|
||||||
SweetLogger.debug("_set_poke_enabled_for_controller: {0} poke enabled: {1}", [poke_node.get_path(), value], "shop_ui.gd", "_set_poke_enabled_for_controller")
|
SweetLogger.debug("_set_poke_enabled_for_controller: {0} poke enabled: {1}", [poke_node.name, value])
|
||||||
poke_node.enabled = value
|
poke_node.enabled = value
|
||||||
poke_node.visible = value
|
poke_node.visible = value
|
||||||
else:
|
else:
|
||||||
SweetLogger.debug("_set_poke_enabled_for_controller: {0} poke not found", [controller_node.name], "shop_ui.gd", "_set_poke_enabled_for_controller")
|
SweetLogger.debug("_set_poke_enabled_for_controller: {0} poke not found", [controller_node.name])
|
||||||
|
|
||||||
# For some reason, this is called every frame the button is down. So we need our own timer.
|
# For some reason, this is called every frame the button is down. So we need our own timer.
|
||||||
func _on_controller_button_pressed(button_name: String) -> void:
|
func _on_controller_button_pressed(button_name: String) -> void:
|
||||||
@@ -80,7 +80,7 @@ func _on_other_controller_button_pressed(button_name: String) -> void:
|
|||||||
func _on_station_bought(_instance) -> void:
|
func _on_station_bought(_instance) -> void:
|
||||||
enabled = false
|
enabled = false
|
||||||
money_label.text = str(GameManager.money) + "$"
|
money_label.text = str(GameManager.money) + "$"
|
||||||
SweetLogger.debug("_on_station_bought: new money: {0}", [GameManager.money], "shop_ui.gd", "_on_station_bought")
|
SweetLogger.debug("_on_station_bought: new money: {0}", [GameManager.money])
|
||||||
|
|
||||||
|
|
||||||
func detect_hand_from_xr_ancestor() -> void:
|
func detect_hand_from_xr_ancestor() -> void:
|
||||||
@@ -96,4 +96,4 @@ func detect_hand_from_xr_ancestor() -> void:
|
|||||||
other_controller = right_controller
|
other_controller = right_controller
|
||||||
elif controller == right_controller:
|
elif controller == right_controller:
|
||||||
other_controller = left_controller
|
other_controller = left_controller
|
||||||
SweetLogger.debug("detected hand: {0}", [controller.get_tracker_hand()], "shop_ui.gd", "detect_hand_from_xr_ancestor")
|
SweetLogger.debug("detected hand: {0}", [controller.get_tracker_hand()])
|
||||||
|
|||||||
@@ -2,6 +2,22 @@ extends Node
|
|||||||
|
|
||||||
const enable_debug = true
|
const enable_debug = true
|
||||||
|
|
||||||
|
# Inside SweetLogger or a static helper class:
|
||||||
|
static func get_current_function_name() -> String:
|
||||||
|
var stack = get_stack()
|
||||||
|
# Index 0 is 'get_current_function_name'
|
||||||
|
# Index 1 is the function that called 'get_current_function_name'
|
||||||
|
if stack.size() > 2:
|
||||||
|
return stack[2].function
|
||||||
|
return "unknown_func"
|
||||||
|
|
||||||
|
static func get_caller_file_name() -> String:
|
||||||
|
var stack = get_stack()
|
||||||
|
if stack.size() > 2:
|
||||||
|
return stack[2].source.get_file() # e.g., "station.gd"
|
||||||
|
return "unknown_file"
|
||||||
|
|
||||||
|
|
||||||
## Global Logger singleton for consistent logging across the game.
|
## Global Logger singleton for consistent logging across the game.
|
||||||
## All logs are prefixed with [peer_id]: to identify which instance is logging.
|
## All logs are prefixed with [peer_id]: to identify which instance is logging.
|
||||||
## Uses print_rich with colorized backgrounds for log type, local time, peer IDs, and script context.
|
## Uses print_rich with colorized backgrounds for log type, local time, peer IDs, and script context.
|
||||||
@@ -78,12 +94,16 @@ const TIMESTAMP_BG_COLOR = "#1e3a5f"
|
|||||||
# WIDTHS
|
# WIDTHS
|
||||||
#===================================================================================#
|
#===================================================================================#
|
||||||
## Column widths for alignment (in characters)
|
## Column widths for alignment (in characters)
|
||||||
const PEER_ID_COLUMN_WIDTH = 10
|
const PEER_ID_COLUMN_WIDTH = 6
|
||||||
const LOG_TYPE_COLUMN_WIDTH = 8
|
const LOG_TYPE_COLUMN_WIDTH = 7
|
||||||
## Default mm:ss:ms; with SHOW_TIMESTAMP_HOURS, hh:mm:ss:ms
|
## Default mm:ss:ms; with SHOW_TIMESTAMP_HOURS, hh:mm:ss:ms
|
||||||
const TIMESTAMP_COLUMN_WIDTH_MMSSMS = 9
|
const TIMESTAMP_COLUMN_WIDTH_MMSSMS = 9
|
||||||
const TIMESTAMP_COLUMN_WIDTH_HHMMSSMS = 12
|
const TIMESTAMP_COLUMN_WIDTH_HHMMSSMS = 12
|
||||||
const SCRIPT_FUNCTION_COLUMN_WIDTH = 40
|
const SCRIPT_FUNCTION_COLUMN_WIDTH = 50
|
||||||
|
|
||||||
|
const TRUNCATE_PEER_NAME = 6
|
||||||
|
const TRUNCATE_SCRIPT_NAME = 20
|
||||||
|
const TRUNCATE_FUNCTION_NAME = 30
|
||||||
#===================================================================================#
|
#===================================================================================#
|
||||||
|
|
||||||
# CONFIGURATION
|
# CONFIGURATION
|
||||||
@@ -95,7 +115,7 @@ var _peer_color_cache: Dictionary = {}
|
|||||||
@export var SHOW_SCRIPT_NAME = true
|
@export var SHOW_SCRIPT_NAME = true
|
||||||
@export var SHOW_FUNCTION_NAME = true
|
@export var SHOW_FUNCTION_NAME = true
|
||||||
## When false (default), timestamp is local mm:ss:ms. When true, local hh:mm:ss:ms (wider column).
|
## When false (default), timestamp is local mm:ss:ms. When true, local hh:mm:ss:ms (wider column).
|
||||||
@export var SHOW_TIMESTAMP_HOURS = false
|
@export var SHOW_TIMESTAMP_HOURS = true
|
||||||
#===================================================================================#
|
#===================================================================================#
|
||||||
|
|
||||||
# GETTERS
|
# GETTERS
|
||||||
@@ -203,7 +223,7 @@ func _print_rich_log(peer_id_str: String, log_type: String, message: String, scr
|
|||||||
var log_type_label = log_type.to_upper()
|
var log_type_label = log_type.to_upper()
|
||||||
|
|
||||||
# Pad peer ID column for alignment
|
# Pad peer ID column for alignment
|
||||||
var peer_padded = _pad_text(peer_label, PEER_ID_COLUMN_WIDTH)
|
var peer_padded = _truncate_text(_pad_text(peer_label, PEER_ID_COLUMN_WIDTH), TRUNCATE_PEER_NAME)
|
||||||
|
|
||||||
# Format peer ID with its background color
|
# Format peer ID with its background color
|
||||||
var peer_formatted = _format_rich_text(peer_padded, peer_color.bg_color, peer_color.text_color)
|
var peer_formatted = _format_rich_text(peer_padded, peer_color.bg_color, peer_color.text_color)
|
||||||
@@ -222,11 +242,11 @@ func _print_rich_log(peer_id_str: String, log_type: String, message: String, scr
|
|||||||
var script_function_parts: Array[String] = []
|
var script_function_parts: Array[String] = []
|
||||||
|
|
||||||
if SHOW_SCRIPT_NAME and script_name != "":
|
if SHOW_SCRIPT_NAME and script_name != "":
|
||||||
var script_truncated = _truncate_text(script_name, 18)
|
var script_truncated = _truncate_text(script_name, TRUNCATE_SCRIPT_NAME)
|
||||||
script_function_parts.append(script_truncated)
|
script_function_parts.append(script_truncated)
|
||||||
|
|
||||||
if SHOW_FUNCTION_NAME and function_name != "":
|
if SHOW_FUNCTION_NAME and function_name != "":
|
||||||
var function_truncated = _truncate_text(function_name, 20)
|
var function_truncated = _truncate_text(function_name, TRUNCATE_FUNCTION_NAME)
|
||||||
script_function_parts.append(function_truncated)
|
script_function_parts.append(function_truncated)
|
||||||
|
|
||||||
if not script_function_parts.is_empty():
|
if not script_function_parts.is_empty():
|
||||||
@@ -261,24 +281,40 @@ func _print_rich_log(peer_id_str: String, log_type: String, message: String, scr
|
|||||||
#===================================================================================#
|
#===================================================================================#
|
||||||
func log(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
func log(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
||||||
"""Basic log function with peer_id prefix."""
|
"""Basic log function with peer_id prefix."""
|
||||||
|
if script_name.is_empty():
|
||||||
|
script_name = get_caller_file_name()
|
||||||
|
if function_name.is_empty():
|
||||||
|
function_name = get_current_function_name()
|
||||||
var formatted = _format_message(message, args)
|
var formatted = _format_message(message, args)
|
||||||
var peer_id_str = _get_peer_id()
|
var peer_id_str = _get_peer_id()
|
||||||
_print_rich_log(peer_id_str, "log", formatted, script_name, function_name)
|
_print_rich_log(peer_id_str, "log", formatted, script_name, function_name)
|
||||||
|
|
||||||
func info(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
func info(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
||||||
"""Log an informational message."""
|
"""Log an informational message."""
|
||||||
|
if script_name.is_empty():
|
||||||
|
script_name = get_caller_file_name()
|
||||||
|
if function_name.is_empty():
|
||||||
|
function_name = get_current_function_name()
|
||||||
var formatted = _format_message(message, args)
|
var formatted = _format_message(message, args)
|
||||||
var peer_id_str = _get_peer_id()
|
var peer_id_str = _get_peer_id()
|
||||||
_print_rich_log(peer_id_str, "info", formatted, script_name, function_name)
|
_print_rich_log(peer_id_str, "info", formatted, script_name, function_name)
|
||||||
|
|
||||||
func warning(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
func warning(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
||||||
"""Log a warning message."""
|
"""Log a warning message."""
|
||||||
|
if script_name.is_empty():
|
||||||
|
script_name = get_caller_file_name()
|
||||||
|
if function_name.is_empty():
|
||||||
|
function_name = get_current_function_name()
|
||||||
var formatted = _format_message(message, args)
|
var formatted = _format_message(message, args)
|
||||||
var peer_id_str = _get_peer_id()
|
var peer_id_str = _get_peer_id()
|
||||||
_print_rich_log(peer_id_str, "warning", formatted, script_name, function_name)
|
_print_rich_log(peer_id_str, "warning", formatted, script_name, function_name)
|
||||||
|
|
||||||
func error(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
func error(message: String, args: Array = [], script_name: String = "", function_name: String = "") -> void:
|
||||||
"""Log an error message."""
|
"""Log an error message."""
|
||||||
|
if script_name.is_empty():
|
||||||
|
script_name = get_caller_file_name()
|
||||||
|
if function_name.is_empty():
|
||||||
|
function_name = get_current_function_name()
|
||||||
var formatted = _format_message(message, args)
|
var formatted = _format_message(message, args)
|
||||||
var peer_id_str = _get_peer_id()
|
var peer_id_str = _get_peer_id()
|
||||||
_print_rich_log(peer_id_str, "error", formatted, script_name, function_name)
|
_print_rich_log(peer_id_str, "error", formatted, script_name, function_name)
|
||||||
@@ -287,6 +323,10 @@ func debug(message: String, args: Array = [], script_name: String = "", function
|
|||||||
"""Log a debug message."""
|
"""Log a debug message."""
|
||||||
if not enable_debug:
|
if not enable_debug:
|
||||||
return
|
return
|
||||||
|
if script_name.is_empty():
|
||||||
|
script_name = get_caller_file_name()
|
||||||
|
if function_name.is_empty():
|
||||||
|
function_name = get_current_function_name()
|
||||||
var formatted = _format_message(message, args)
|
var formatted = _format_message(message, args)
|
||||||
var peer_id_str = _get_peer_id()
|
var peer_id_str = _get_peer_id()
|
||||||
_print_rich_log(peer_id_str, "debug", formatted, script_name, function_name)
|
_print_rich_log(peer_id_str, "debug", formatted, script_name, function_name)
|
||||||
|
|||||||
+24
-24
@@ -9,9 +9,9 @@ func set_money(value):
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
money = max(0,value)
|
money = max(0,value)
|
||||||
client_sync_money.rpc(money)
|
client_sync_money.rpc(money)
|
||||||
SweetLogger.info("set_money money set to {0}", [money], "GameManager.gd", "set_money")
|
SweetLogger.info("set_money money set to {0}", [money])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_money client/(peer_id={0}) attempted to set money directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_money")
|
SweetLogger.info("set_money client/(peer_id={0}) attempted to set money directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_money.rpc_id(1, value)
|
server_set_money.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable") # CLIENT -> SERVER: Request a change
|
@rpc("any_peer", "call_remote", "reliable") # CLIENT -> SERVER: Request a change
|
||||||
@@ -29,9 +29,9 @@ func set_day_number(value: int) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
day_number = value
|
day_number = value
|
||||||
client_sync_day_number.rpc(day_number)
|
client_sync_day_number.rpc(day_number)
|
||||||
SweetLogger.info("set_day_number day_number set to {0}", [day_number], "GameManager.gd", "set_day_number")
|
SweetLogger.info("set_day_number day_number set to {0}", [day_number])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_day_number client/(peer_id={0}) attempted to set day_number directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_day_number")
|
SweetLogger.info("set_day_number client/(peer_id={0}) attempted to set day_number directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_day_number.rpc_id(1, value)
|
server_set_day_number.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -51,9 +51,9 @@ func set_meals_in_play(value: Array[String]) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
meals_in_play = value
|
meals_in_play = value
|
||||||
client_sync_meals_in_play.rpc(meals_in_play)
|
client_sync_meals_in_play.rpc(meals_in_play)
|
||||||
SweetLogger.info("set_meals_in_play meals_in_play set to {0}", [meals_in_play], "GameManager.gd", "set_meals_in_play")
|
SweetLogger.info("set_meals_in_play meals_in_play set to {0}", [meals_in_play])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_meals_in_play client/(peer_id={0}) attempted to set meals_in_play directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_meals_in_play")
|
SweetLogger.info("set_meals_in_play client/(peer_id={0}) attempted to set meals_in_play directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_meals_in_play.rpc_id(1, value)
|
server_set_meals_in_play.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -73,9 +73,9 @@ func set_sides_in_play(value: Array[String]) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
sides_in_play = value
|
sides_in_play = value
|
||||||
client_sync_sides_in_play.rpc(sides_in_play)
|
client_sync_sides_in_play.rpc(sides_in_play)
|
||||||
SweetLogger.info("set_sides_in_play sides_in_play set to {0}", [sides_in_play], "GameManager.gd", "set_sides_in_play")
|
SweetLogger.info("set_sides_in_play sides_in_play set to {0}", [sides_in_play])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_sides_in_play client/(peer_id={0}) attempted to set sides_in_play directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_sides_in_play")
|
SweetLogger.info("set_sides_in_play client/(peer_id={0}) attempted to set sides_in_play directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_sides_in_play.rpc_id(1, value)
|
server_set_sides_in_play.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -96,9 +96,9 @@ func set_day_length_seconds(value: float) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
day_length_seconds = value
|
day_length_seconds = value
|
||||||
client_sync_day_length_seconds.rpc(day_length_seconds)
|
client_sync_day_length_seconds.rpc(day_length_seconds)
|
||||||
SweetLogger.info("set_day_length_seconds day_length_seconds set to {0}", [day_length_seconds], "GameManager.gd", "set_day_length_seconds")
|
SweetLogger.info("set_day_length_seconds day_length_seconds set to {0}", [day_length_seconds])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_day_length_seconds client/(peer_id={0}) attempted to set day_length_seconds directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_day_length_seconds")
|
SweetLogger.info("set_day_length_seconds client/(peer_id={0}) attempted to set day_length_seconds directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_day_length_seconds.rpc_id(1, value)
|
server_set_day_length_seconds.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -118,9 +118,9 @@ func set_customers_per_day(value: float) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
customers_per_day = value
|
customers_per_day = value
|
||||||
client_sync_customers_per_day.rpc(customers_per_day)
|
client_sync_customers_per_day.rpc(customers_per_day)
|
||||||
SweetLogger.info("set_customers_per_day customers_per_day set to {0}", [customers_per_day], "GameManager.gd", "set_customers_per_day")
|
SweetLogger.info("set_customers_per_day customers_per_day set to {0}", [customers_per_day])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_customers_per_day client/(peer_id={0}) attempted to set customers_per_day directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_customers_per_day")
|
SweetLogger.info("set_customers_per_day client/(peer_id={0}) attempted to set customers_per_day directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_customers_per_day.rpc_id(1, value)
|
server_set_customers_per_day.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -140,9 +140,9 @@ func set_customers_count_increase_per_day(value: float) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
customers_count_increase_per_day = value
|
customers_count_increase_per_day = value
|
||||||
client_sync_customers_count_increase_per_day.rpc(customers_count_increase_per_day)
|
client_sync_customers_count_increase_per_day.rpc(customers_count_increase_per_day)
|
||||||
SweetLogger.info("set_customers_count_increase_per_day customers_count_increase_per_day set to {0}", [customers_count_increase_per_day], "GameManager.gd", "set_customers_count_increase_per_day")
|
SweetLogger.info("set_customers_count_increase_per_day customers_count_increase_per_day set to {0}", [customers_count_increase_per_day])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_customers_count_increase_per_day client/(peer_id={0}) attempted to set customers_count_increase_per_day directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_customers_count_increase_per_day")
|
SweetLogger.info("set_customers_count_increase_per_day client/(peer_id={0}) attempted to set customers_count_increase_per_day directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_customers_count_increase_per_day.rpc_id(1, value)
|
server_set_customers_count_increase_per_day.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -162,9 +162,9 @@ func set_group_min_size(value: int) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
group_min_size = value
|
group_min_size = value
|
||||||
client_sync_group_min_size.rpc(group_min_size)
|
client_sync_group_min_size.rpc(group_min_size)
|
||||||
SweetLogger.info("set_group_min_size group_min_size set to {0}", [group_min_size], "GameManager.gd", "set_group_min_size")
|
SweetLogger.info("set_group_min_size group_min_size set to {0}", [group_min_size])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_group_min_size client/(peer_id={0}) attempted to set group_min_size directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_group_min_size")
|
SweetLogger.info("set_group_min_size client/(peer_id={0}) attempted to set group_min_size directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_group_min_size.rpc_id(1, value)
|
server_set_group_min_size.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -184,9 +184,9 @@ func set_group_max_size(value: int) -> void:
|
|||||||
if multiplayer.is_server():
|
if multiplayer.is_server():
|
||||||
group_max_size = value
|
group_max_size = value
|
||||||
client_sync_group_max_size.rpc(group_max_size)
|
client_sync_group_max_size.rpc(group_max_size)
|
||||||
SweetLogger.info("set_group_max_size group_max_size set to {0}", [group_max_size], "GameManager.gd", "set_group_max_size")
|
SweetLogger.info("set_group_max_size group_max_size set to {0}", [group_max_size])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_group_max_size client/(peer_id={0}) attempted to set group_max_size directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_group_max_size")
|
SweetLogger.info("set_group_max_size client/(peer_id={0}) attempted to set group_max_size directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_group_max_size.rpc_id(1, value)
|
server_set_group_max_size.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -213,9 +213,9 @@ func set_game_state(value: GameState) -> void:
|
|||||||
game_state = value
|
game_state = value
|
||||||
client_sync_game_state.rpc(game_state)
|
client_sync_game_state.rpc(game_state)
|
||||||
Signals.game_state_changed.emit(game_state)
|
Signals.game_state_changed.emit(game_state)
|
||||||
SweetLogger.info("set_game_state game_state set to {0}", [game_state], "GameManager.gd", "set_game_state")
|
SweetLogger.info("set_game_state game_state set to {0}", [game_state])
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("set_game_state client/(peer_id={0}) attempted to set game_state directly, sending request to server", [multiplayer.get_unique_id()], "GameManager.gd", "set_game_state")
|
SweetLogger.info("set_game_state client/(peer_id={0}) attempted to set game_state directly, sending request to server", [multiplayer.get_unique_id()])
|
||||||
server_set_game_state.rpc_id(1, value)
|
server_set_game_state.rpc_id(1, value)
|
||||||
|
|
||||||
@rpc("any_peer", "call_remote", "reliable")
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
@@ -233,12 +233,12 @@ func get_random_meal() -> String:
|
|||||||
push_error("GameManager: get_random_meal() called but meals_in_play is empty")
|
push_error("GameManager: get_random_meal() called but meals_in_play is empty")
|
||||||
return ""
|
return ""
|
||||||
var rand_index = randi() % meals_in_play.size()
|
var rand_index = randi() % meals_in_play.size()
|
||||||
SweetLogger.debug("get_random_meal() returning {0}", [meals_in_play[rand_index]], "GameManager.gd", "get_random_meal")
|
SweetLogger.debug("get_random_meal() returning {0}", [meals_in_play[rand_index]])
|
||||||
return meals_in_play[rand_index]
|
return meals_in_play[rand_index]
|
||||||
|
|
||||||
|
|
||||||
func get_random_side() -> String:
|
func get_random_side() -> String:
|
||||||
SweetLogger.debug("get_random_side()", [], "GameManager.gd", "get_random_side")
|
SweetLogger.debug("get_random_side()")
|
||||||
if sides_in_play.size() == 0:
|
if sides_in_play.size() == 0:
|
||||||
push_error("GameManager: get_random_side() called but sides_in_play is empty")
|
push_error("GameManager: get_random_side() called but sides_in_play is empty")
|
||||||
return ""
|
return ""
|
||||||
@@ -248,11 +248,11 @@ func get_random_side() -> String:
|
|||||||
|
|
||||||
|
|
||||||
func _restart():
|
func _restart():
|
||||||
SweetLogger.info("restart Game", [], "GameManager.gd", "_restart")
|
SweetLogger.info("restart Game")
|
||||||
game_state = GameState.RUNNING
|
game_state = GameState.RUNNING
|
||||||
|
|
||||||
|
|
||||||
func game_over():
|
func game_over():
|
||||||
SweetLogger.info("Game Over", [], "GameManager.gd", "game_over")
|
SweetLogger.info("Game Over")
|
||||||
game_state = GameState.GAME_OVER
|
game_state = GameState.GAME_OVER
|
||||||
Signals.game_over.emit()
|
Signals.game_over.emit()
|
||||||
|
|||||||
+10
-10
@@ -111,22 +111,22 @@ static func get_item_scene(item_id: StringName) -> PackedScene:
|
|||||||
static func print_all_recipes() -> void:
|
static func print_all_recipes() -> void:
|
||||||
load_recipes()
|
load_recipes()
|
||||||
if not _loaded:
|
if not _loaded:
|
||||||
SweetLogger.warning("could not load recipes.yaml; no recipes printed.", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.warning("could not load recipes.yaml; no recipes printed.")
|
||||||
return
|
return
|
||||||
|
|
||||||
if _combining_map.is_empty():
|
if _combining_map.is_empty():
|
||||||
SweetLogger.warning("no combining recipes found", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.warning("no combining recipes found")
|
||||||
return
|
return
|
||||||
|
|
||||||
SweetLogger.info("#### RecipeManager: Loaded recipes ####", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.info("#### RecipeManager: Loaded recipes ####")
|
||||||
_print_combining_recipes()
|
_print_combining_recipes()
|
||||||
SweetLogger.info("", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.info("")
|
||||||
_print_cooking_recipes()
|
_print_cooking_recipes()
|
||||||
SweetLogger.info("", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.info("")
|
||||||
_print_chopping_recipes()
|
_print_chopping_recipes()
|
||||||
SweetLogger.info("", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.info("")
|
||||||
_print_rolling_recipes()
|
_print_rolling_recipes()
|
||||||
SweetLogger.info("", [], "RecipeManager.gd", "print_all_recipes")
|
SweetLogger.info("")
|
||||||
_print_augmenting_recipes()
|
_print_augmenting_recipes()
|
||||||
|
|
||||||
static func _print_combining_recipes() -> void:
|
static func _print_combining_recipes() -> void:
|
||||||
@@ -135,12 +135,12 @@ static func _print_combining_recipes() -> void:
|
|||||||
var key_str = str(pair_key)
|
var key_str = str(pair_key)
|
||||||
var separator_index = key_str.find("|")
|
var separator_index = key_str.find("|")
|
||||||
if separator_index == -1:
|
if separator_index == -1:
|
||||||
SweetLogger.warning("invalid combining map key '{0}'", [key_str], "RecipeManager.gd", "_print_combining_recipes")
|
SweetLogger.warning("invalid combining map key '{0}'", [key_str])
|
||||||
continue
|
continue
|
||||||
|
|
||||||
var first = key_str.substr(0, separator_index)
|
var first = key_str.substr(0, separator_index)
|
||||||
var second = key_str.substr(separator_index + 1, key_str.length() - separator_index - 1)
|
var second = key_str.substr(separator_index + 1, key_str.length() - separator_index - 1)
|
||||||
SweetLogger.info(" {0} <-combine-- {1} + {2}", [result_id, first, second], "RecipeManager.gd", "_print_combining_recipes")
|
SweetLogger.info(" {0} <-combine-- {1} + {2}", [result_id, first, second])
|
||||||
|
|
||||||
|
|
||||||
static func _print_cooking_recipes() -> void:
|
static func _print_cooking_recipes() -> void:
|
||||||
@@ -171,7 +171,7 @@ static func _print_augmenting_recipes() -> void:
|
|||||||
var augment_def = _augmenting_map[target_id]
|
var augment_def = _augmenting_map[target_id]
|
||||||
for ingredient_id in augment_def.keys():
|
for ingredient_id in augment_def.keys():
|
||||||
var attr_key = augment_def[ingredient_id]
|
var attr_key = augment_def[ingredient_id]
|
||||||
SweetLogger.info(" {0} <-augment-- {1} adds attribute '{2}'", [target_id, ingredient_id, attr_key], "RecipeManager.gd", "_print_augmenting_recipes")
|
SweetLogger.info(" {0} <-augment-- {1} adds attribute '{2}'", [target_id, ingredient_id, attr_key])
|
||||||
|
|
||||||
|
|
||||||
static func _build_scene_paths() -> void:
|
static func _build_scene_paths() -> void:
|
||||||
|
|||||||
@@ -10,10 +10,11 @@ func _position_window() -> void:
|
|||||||
var is_server: bool = OS.get_cmdline_args().has("--server")
|
var is_server: bool = OS.get_cmdline_args().has("--server")
|
||||||
var screen_rect: Rect2i = DisplayServer.screen_get_usable_rect(DisplayServer.window_get_current_screen())
|
var screen_rect: Rect2i = DisplayServer.screen_get_usable_rect(DisplayServer.window_get_current_screen())
|
||||||
|
|
||||||
|
@warning_ignore("integer_division")
|
||||||
var window_width: int = screen_rect.size.x / 2
|
var window_width: int = screen_rect.size.x / 2
|
||||||
var window_height: int = int(screen_rect.size.y * (2.0 / 3.0))
|
var window_height: int = int(screen_rect.size.y * (2.0 / 3.0))
|
||||||
|
|
||||||
DisplayServer.window_set_size(Vector2i(window_width - 10, window_height))
|
DisplayServer.window_set_size(Vector2i(window_width - 10, window_height))
|
||||||
|
if is_server:
|
||||||
var x_pos: int = screen_rect.position.x + window_width if is_server else screen_rect.position.x
|
var x_pos: int = screen_rect.position.x + window_width
|
||||||
DisplayServer.window_set_position(Vector2i(x_pos, screen_rect.position.y))
|
DisplayServer.window_set_position(Vector2i(x_pos, screen_rect.position.y))
|
||||||
|
|||||||
@@ -28,14 +28,14 @@ func satisfy_table_orders() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func set_buidling_mode():
|
func set_buidling_mode():
|
||||||
SweetLogger.info("Setting building mode", [], "global_key_events.gd", "set_buidling_mode")
|
SweetLogger.info("Setting building mode")
|
||||||
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
||||||
|
|
||||||
|
|
||||||
func set_running_mode():
|
func set_running_mode():
|
||||||
SweetLogger.info("Setting running mode", [], "global_key_events.gd", "set_running_mode")
|
SweetLogger.info("Setting running mode")
|
||||||
GameManager.set_game_state(GameManager.GameState.RUNNING)
|
GameManager.set_game_state(GameManager.GameState.RUNNING)
|
||||||
|
|
||||||
func set_game_over():
|
func set_game_over():
|
||||||
SweetLogger.info("Setting game over", [], "global_key_events.gd", "set_game_over")
|
SweetLogger.info("Setting game over")
|
||||||
GameManager.set_game_state(GameManager.GameState.GAME_OVER)
|
GameManager.set_game_state(GameManager.GameState.GAME_OVER)
|
||||||
|
|||||||
+3
-3
@@ -25,15 +25,15 @@ static func find_first_child_of_type(node: Node, type: Variant) -> Node:
|
|||||||
# Returns true if decendant is a decendant node of root, false otherwise. Returns false if either node is null.
|
# Returns true if decendant is a decendant node of root, false otherwise. Returns false if either node is null.
|
||||||
static func is_node_decendant_of(decendant: Node, root: Node) -> bool:
|
static func is_node_decendant_of(decendant: Node, root: Node) -> bool:
|
||||||
if not decendant or not root:
|
if not decendant or not root:
|
||||||
SweetLogger.debug("is_node_decendant_of: decendant or root is null", [], "helper.gd", "is_node_decendant_of")
|
SweetLogger.debug("is_node_decendant_of: decendant or root is null")
|
||||||
return false
|
return false
|
||||||
var current: Node = decendant
|
var current: Node = decendant
|
||||||
while current:
|
while current:
|
||||||
if current == root:
|
if current == root:
|
||||||
SweetLogger.debug("is_node_decendant_of: decendant {0} is a descendant of root {1}", [decendant.name, root.name], "helper.gd", "is_node_decendant_of")
|
SweetLogger.debug("is_node_decendant_of: decendant {0} is a descendant of root {1}", [decendant.name, root.name])
|
||||||
return true
|
return true
|
||||||
current = current.get_parent()
|
current = current.get_parent()
|
||||||
SweetLogger.debug("is_node_decendant_of: decendant {0} is NOT a descendant of root {1}", [decendant.name, root.name], "helper.gd", "is_node_decendant_of")
|
SweetLogger.debug("is_node_decendant_of: decendant {0} is NOT a descendant of root {1}", [decendant.name, root.name])
|
||||||
return false
|
return false
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1419,11 +1419,11 @@ func _open_log() -> void:
|
|||||||
path = OS.get_environment("TEMP").path_join("vryhungry_mptest_%s.log" % role)
|
path = OS.get_environment("TEMP").path_join("vryhungry_mptest_%s.log" % role)
|
||||||
_log_file = FileAccess.open(path, FileAccess.WRITE)
|
_log_file = FileAccess.open(path, FileAccess.WRITE)
|
||||||
_log_path = ProjectSettings.globalize_path(path)
|
_log_path = ProjectSettings.globalize_path(path)
|
||||||
SweetLogger.info("[MPTEST] step log -> {0}", [_log_path], "mp_test_driver.gd", "_open_log")
|
SweetLogger.info("[MPTEST] step log -> {0}", [_log_path])
|
||||||
|
|
||||||
|
|
||||||
func _log(s: String) -> void:
|
func _log(s: String) -> void:
|
||||||
SweetLogger.info("[MPTEST {0}] {1}", [_role, s], "mp_test_driver.gd", "_log")
|
SweetLogger.info("[MPTEST {0}] {1}", [_role, s])
|
||||||
if _log_file:
|
if _log_file:
|
||||||
_log_file.store_line(s)
|
_log_file.store_line(s)
|
||||||
_log_file.flush()
|
_log_file.flush()
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ func _run() -> void:
|
|||||||
_clear_previous_results(logs_dir)
|
_clear_previous_results(logs_dir)
|
||||||
|
|
||||||
print_rich("[b]Running the multiplayer test suite...[/b]")
|
print_rich("[b]Running the multiplayer test suite...[/b]")
|
||||||
SweetLogger.info("the editor will be unresponsive until it finishes (~2 minutes)", [], "run_tests_in_editor.gd", "_run")
|
SweetLogger.info("the editor will be unresponsive until it finishes (~2 minutes)")
|
||||||
|
|
||||||
var server_pid := _launch(exe, project_dir, ["--server"], SERVER_SCENE)
|
var server_pid := _launch(exe, project_dir, ["--server"], SERVER_SCENE)
|
||||||
if server_pid <= 0:
|
if server_pid <= 0:
|
||||||
@@ -61,7 +61,7 @@ func _run() -> void:
|
|||||||
OS.delay_msec(500)
|
OS.delay_msec(500)
|
||||||
waited += 0.5
|
waited += 0.5
|
||||||
if OS.is_process_running(server_pid):
|
if OS.is_process_running(server_pid):
|
||||||
SweetLogger.warning("timed out after {0}s, stopping the instances", [TIMEOUT_SEC], "run_tests_in_editor.gd", "_run")
|
SweetLogger.warning("timed out after {0}s, stopping the instances", [TIMEOUT_SEC])
|
||||||
OS.kill(server_pid)
|
OS.kill(server_pid)
|
||||||
if OS.is_process_running(client_pid):
|
if OS.is_process_running(client_pid):
|
||||||
OS.kill(client_pid)
|
OS.kill(client_pid)
|
||||||
@@ -108,7 +108,7 @@ func _print_report(logs_dir: String) -> void:
|
|||||||
push_error("No report at %s — the run did not finish. Check logs/mptest_server.log" % path)
|
push_error("No report at %s — the run did not finish. Check logs/mptest_server.log" % path)
|
||||||
return
|
return
|
||||||
var text := FileAccess.get_file_as_string(path)
|
var text := FileAccess.get_file_as_string(path)
|
||||||
SweetLogger.info("", [], "run_tests_in_editor.gd", "_print_report")
|
SweetLogger.info("")
|
||||||
# Colour the summary so a failure is obvious in the Output panel.
|
# Colour the summary so a failure is obvious in the Output panel.
|
||||||
for line in text.split("\n"):
|
for line in text.split("\n"):
|
||||||
if line.begins_with("FAIL") or line.contains("RESULT: FAILED"):
|
if line.begins_with("FAIL") or line.contains("RESULT: FAILED"):
|
||||||
@@ -118,8 +118,8 @@ func _print_report(logs_dir: String) -> void:
|
|||||||
elif line.begins_with("PASS"):
|
elif line.begins_with("PASS"):
|
||||||
print_rich("[color=gray]%s[/color]" % line)
|
print_rich("[color=gray]%s[/color]" % line)
|
||||||
else:
|
else:
|
||||||
SweetLogger.info("{0}", [line], "run_tests_in_editor.gd", "_print_report")
|
SweetLogger.info("{0}", [line])
|
||||||
SweetLogger.info("report: {0}", [path], "run_tests_in_editor.gd", "_print_report")
|
SweetLogger.info("report: {0}", [path])
|
||||||
|
|
||||||
|
|
||||||
func _build_gif(project_dir: String, logs_dir: String) -> void:
|
func _build_gif(project_dir: String, logs_dir: String) -> void:
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ extends Node
|
|||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
SweetLogger.debug("stations: {0}", [get_stations()], "testworldLoad.gd", "_ready")
|
SweetLogger.debug("stations: {0}", [get_stations()])
|
||||||
SweetLogger.debug("items: {0}", [get_items()], "testworldLoad.gd", "_ready")
|
SweetLogger.debug("items: {0}", [get_items()])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user