Fix gamemanager state syncing
This commit is contained in:
@@ -112,8 +112,8 @@ func _populate_world_if_owner() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _init_recipes():
|
func _init_recipes():
|
||||||
GameManager.meals_in_play = ["hamburger"]
|
GameManager.set_meals_in_play(["hamburger"])
|
||||||
GameManager.sides_in_play = ["cube"]
|
GameManager.set_sides_in_play(["cube"])
|
||||||
|
|
||||||
|
|
||||||
# Free the authored template nodes. Done immediately rather than with
|
# Free the authored template nodes. Done immediately rather than with
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ var customers_served: int = 0
|
|||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
GameManager.game_state = GameManager.GameState.BUILDING
|
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
||||||
Signals.game_state_changed.connect(_on_game_state_changed)
|
Signals.game_state_changed.connect(_on_game_state_changed)
|
||||||
|
|
||||||
|
|
||||||
@@ -32,8 +32,8 @@ func _reset_values() -> void:
|
|||||||
func start_next_day() -> void:
|
func start_next_day() -> void:
|
||||||
print("DayController: start_next_day")
|
print("DayController: start_next_day")
|
||||||
_reset_values()
|
_reset_values()
|
||||||
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.day_number += 1
|
GameManager.set_day_number(GameManager.day_number + 1)
|
||||||
|
|
||||||
|
|
||||||
func finish_current_day() -> void:
|
func finish_current_day() -> void:
|
||||||
|
|||||||
+2
-2
@@ -250,9 +250,9 @@ func _collect_money_from_food():
|
|||||||
var food_item: FoodItem = Helper.find_food_item(held_object)
|
var food_item: FoodItem = Helper.find_food_item(held_object)
|
||||||
if plate:
|
if plate:
|
||||||
for fi: FoodItem in plate.get_food_items():
|
for fi: FoodItem in plate.get_food_items():
|
||||||
GameManager.money += fi.sell_value
|
GameManager.set_money(GameManager.money + fi.sell_value)
|
||||||
elif food_item:
|
elif food_item:
|
||||||
GameManager.money += food_item.sell_value
|
GameManager.set_money(GameManager.money + food_item.sell_value)
|
||||||
|
|
||||||
print("Table _collect_money_from_food(), money: ", GameManager.money)
|
print("Table _collect_money_from_food(), money: ", GameManager.money)
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ func _on_button_pressed() -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _buy_station() -> void:
|
func _buy_station() -> void:
|
||||||
GameManager.money -= cost
|
print("ShopStationButton _buy_station:, ", "cost=", cost, " current money=", GameManager.money)
|
||||||
|
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)
|
||||||
@@ -33,7 +34,7 @@ func _buy_station() -> void:
|
|||||||
|
|
||||||
Signals.station_bought.emit(instance)
|
Signals.station_bought.emit(instance)
|
||||||
|
|
||||||
@rpc("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)
|
NetworkManager.spawn_item(station_scene_path, transform)
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ func toggle_shop():
|
|||||||
if GameManager.game_state == GameManager.GameState.BUILDING:
|
if GameManager.game_state == GameManager.GameState.BUILDING:
|
||||||
print("Shop UI toggle shop")
|
print("Shop UI toggle shop")
|
||||||
enabled = !enabled
|
enabled = !enabled
|
||||||
|
print ("Shop UI _process: money=", GameManager.money, " label text=", money_label.text)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func _set_enabled(value: bool) -> void:
|
func _set_enabled(value: bool) -> void:
|
||||||
@@ -77,6 +79,8 @@ 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) + "$"
|
||||||
|
print("Shop UI _on_station_bought: new money: ", GameManager.money)
|
||||||
|
|
||||||
|
|
||||||
func detect_hand_from_xr_ancestor() -> void:
|
func detect_hand_from_xr_ancestor() -> void:
|
||||||
|
|||||||
+141
-75
@@ -3,140 +3,199 @@ extends Node
|
|||||||
const STAR_DAY_FREQUENCY: int = 3
|
const STAR_DAY_FREQUENCY: int = 3
|
||||||
|
|
||||||
var money: int = 1000:
|
var money: int = 1000:
|
||||||
get:
|
get: return money
|
||||||
return money
|
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
|
||||||
push_warning("Clients cannot modify money directly.")
|
|
||||||
return
|
|
||||||
money = max(0, value)
|
|
||||||
_sync_money.rpc(money)
|
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable") # Server updates clients
|
func set_money(value):
|
||||||
func _sync_money(new_amount: int) -> void:
|
if multiplayer.is_server():
|
||||||
money = new_amount
|
money = max(0,value)
|
||||||
|
client_sync_money.rpc(money)
|
||||||
|
print("GameManager: set_money money set to ", money)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_money client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set money directly, sending request to server")
|
||||||
|
server_set_money.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable") # CLIENT -> SERVER: Request a change
|
||||||
|
func server_set_money(value: int) -> void: set_money(value)
|
||||||
|
|
||||||
|
@rpc("authority", "call_remote", "reliable") # SERVER -> CLIENTS: Replicate new change
|
||||||
|
func client_sync_money(value: int) -> void: money = value
|
||||||
|
|
||||||
|
|
||||||
var day_number: int = 1:
|
var day_number: int = 1:
|
||||||
get:
|
get:
|
||||||
return day_number
|
return day_number
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_day_number(value: int) -> void:
|
||||||
push_warning("Clients cannot modify day_number directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
day_number = value
|
day_number = value
|
||||||
_sync_day_number.rpc(day_number)
|
client_sync_day_number.rpc(day_number)
|
||||||
|
print("GameManager: set_day_number day_number set to ", day_number)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_day_number client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set day_number directly, sending request to server")
|
||||||
|
server_set_day_number.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_day_number(value: int) -> void:
|
||||||
|
set_day_number(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_day_number(new_value: int) -> void:
|
func client_sync_day_number(value: int) -> void:
|
||||||
day_number = new_value
|
day_number = value
|
||||||
|
|
||||||
|
|
||||||
var meals_in_play: Array[String] = []:
|
var meals_in_play: Array[String] = []:
|
||||||
get:
|
get:
|
||||||
return meals_in_play
|
return meals_in_play
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_meals_in_play(value: Array[String]) -> void:
|
||||||
push_warning("Clients cannot modify meals_in_play directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
meals_in_play = value
|
meals_in_play = value
|
||||||
_sync_meals_in_play.rpc(meals_in_play)
|
client_sync_meals_in_play.rpc(meals_in_play)
|
||||||
|
print("GameManager: set_meals_in_play meals_in_play set to ", meals_in_play)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_meals_in_play client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set meals_in_play directly, sending request to server")
|
||||||
|
server_set_meals_in_play.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_meals_in_play(value: Array[String]) -> void:
|
||||||
|
set_meals_in_play(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_meals_in_play(new_value: Array[String]) -> void:
|
func client_sync_meals_in_play(value: Array[String]) -> void:
|
||||||
meals_in_play = new_value
|
meals_in_play = value
|
||||||
|
|
||||||
|
|
||||||
var sides_in_play: Array[String] = []:
|
var sides_in_play: Array[String] = []:
|
||||||
get:
|
get:
|
||||||
return sides_in_play
|
return sides_in_play
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_sides_in_play(value: Array[String]) -> void:
|
||||||
push_warning("Clients cannot modify sides_in_play directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
sides_in_play = value
|
sides_in_play = value
|
||||||
_sync_sides_in_play.rpc(sides_in_play)
|
client_sync_sides_in_play.rpc(sides_in_play)
|
||||||
|
print("GameManager: set_sides_in_play sides_in_play set to ", sides_in_play)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_sides_in_play client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set sides_in_play directly, sending request to server")
|
||||||
|
server_set_sides_in_play.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_sides_in_play(value: Array[String]) -> void:
|
||||||
|
set_sides_in_play(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_sides_in_play(new_value: Array[String]) -> void:
|
func client_sync_sides_in_play(value: Array[String]) -> void:
|
||||||
sides_in_play = new_value
|
sides_in_play = value
|
||||||
|
|
||||||
|
|
||||||
# GameConfig - difficulty settings
|
# GameConfig - difficulty settings
|
||||||
var day_length_seconds: float = 60.0:
|
var day_length_seconds: float = 60.0:
|
||||||
get:
|
get:
|
||||||
return day_length_seconds
|
return day_length_seconds
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_day_length_seconds(value: float) -> void:
|
||||||
push_warning("Clients cannot modify day_length_seconds directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
day_length_seconds = value
|
day_length_seconds = value
|
||||||
_sync_day_length_seconds.rpc(day_length_seconds)
|
client_sync_day_length_seconds.rpc(day_length_seconds)
|
||||||
|
print("GameManager: set_day_length_seconds day_length_seconds set to ", day_length_seconds)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_day_length_seconds client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set day_length_seconds directly, sending request to server")
|
||||||
|
server_set_day_length_seconds.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_day_length_seconds(value: float) -> void:
|
||||||
|
set_day_length_seconds(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_day_length_seconds(new_value: float) -> void:
|
func client_sync_day_length_seconds(value: float) -> void:
|
||||||
day_length_seconds = new_value
|
day_length_seconds = value
|
||||||
|
|
||||||
|
|
||||||
var customers_per_day: float = 5.0:
|
var customers_per_day: float = 5.0:
|
||||||
get:
|
get:
|
||||||
return customers_per_day
|
return customers_per_day
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_customers_per_day(value: float) -> void:
|
||||||
push_warning("Clients cannot modify customers_per_day directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
customers_per_day = value
|
customers_per_day = value
|
||||||
_sync_customers_per_day.rpc(customers_per_day)
|
client_sync_customers_per_day.rpc(customers_per_day)
|
||||||
|
print("GameManager: set_customers_per_day customers_per_day set to ", customers_per_day)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_customers_per_day client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set customers_per_day directly, sending request to server")
|
||||||
|
server_set_customers_per_day.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_customers_per_day(value: float) -> void:
|
||||||
|
set_customers_per_day(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_customers_per_day(new_value: float) -> void:
|
func client_sync_customers_per_day(value: float) -> void:
|
||||||
customers_per_day = new_value
|
customers_per_day = value
|
||||||
|
|
||||||
|
|
||||||
var customers_count_increase_per_day: float = 1.0:
|
var customers_count_increase_per_day: float = 1.0:
|
||||||
get:
|
get:
|
||||||
return customers_count_increase_per_day
|
return customers_count_increase_per_day
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_customers_count_increase_per_day(value: float) -> void:
|
||||||
push_warning("Clients cannot modify customers_count_increase_per_day directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
customers_count_increase_per_day = value
|
customers_count_increase_per_day = value
|
||||||
_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)
|
||||||
|
print("GameManager: set_customers_count_increase_per_day customers_count_increase_per_day set to ", customers_count_increase_per_day)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_customers_count_increase_per_day client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set customers_count_increase_per_day directly, sending request to server")
|
||||||
|
server_set_customers_count_increase_per_day.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_customers_count_increase_per_day(value: float) -> void:
|
||||||
|
set_customers_count_increase_per_day(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_customers_count_increase_per_day(new_value: float) -> void:
|
func client_sync_customers_count_increase_per_day(value: float) -> void:
|
||||||
customers_count_increase_per_day = new_value
|
customers_count_increase_per_day = value
|
||||||
|
|
||||||
|
|
||||||
var group_min_size: int = 1:
|
var group_min_size: int = 1:
|
||||||
get:
|
get:
|
||||||
return group_min_size
|
return group_min_size
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_group_min_size(value: int) -> void:
|
||||||
push_warning("Clients cannot modify group_min_size directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
group_min_size = value
|
group_min_size = value
|
||||||
_sync_group_min_size.rpc(group_min_size)
|
client_sync_group_min_size.rpc(group_min_size)
|
||||||
|
print("GameManager: set_group_min_size group_min_size set to ", group_min_size)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_group_min_size client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set group_min_size directly, sending request to server")
|
||||||
|
server_set_group_min_size.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_group_min_size(value: int) -> void:
|
||||||
|
set_group_min_size(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_group_min_size(new_value: int) -> void:
|
func client_sync_group_min_size(value: int) -> void:
|
||||||
group_min_size = new_value
|
group_min_size = value
|
||||||
|
|
||||||
|
|
||||||
var group_max_size: int = 2:
|
var group_max_size: int = 2:
|
||||||
get:
|
get:
|
||||||
return group_max_size
|
return group_max_size
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_group_max_size(value: int) -> void:
|
||||||
push_warning("Clients cannot modify group_max_size directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
group_max_size = value
|
group_max_size = value
|
||||||
_sync_group_max_size.rpc(group_max_size)
|
client_sync_group_max_size.rpc(group_max_size)
|
||||||
|
print("GameManager: set_group_max_size group_max_size set to ", group_max_size)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_group_max_size client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set group_max_size directly, sending request to server")
|
||||||
|
server_set_group_max_size.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_group_max_size(value: int) -> void:
|
||||||
|
set_group_max_size(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_group_max_size(new_value: int) -> void:
|
func client_sync_group_max_size(value: int) -> void:
|
||||||
group_max_size = new_value
|
group_max_size = value
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
enum GameState {
|
enum GameState {
|
||||||
@@ -148,17 +207,24 @@ enum GameState {
|
|||||||
var game_state: GameState = GameState.BUILDING:
|
var game_state: GameState = GameState.BUILDING:
|
||||||
get:
|
get:
|
||||||
return game_state
|
return game_state
|
||||||
set(value):
|
|
||||||
if not multiplayer.is_server():
|
func set_game_state(value: GameState) -> void:
|
||||||
push_warning("Clients cannot modify game_state directly.")
|
if multiplayer.is_server():
|
||||||
return
|
|
||||||
game_state = value
|
game_state = value
|
||||||
_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)
|
||||||
|
print("GameManager: set_game_state game_state set to ", game_state)
|
||||||
|
else:
|
||||||
|
print("GameManager: set_game_state client/(peer_id=", multiplayer.get_unique_id(), ") attempted to set game_state directly, sending request to server")
|
||||||
|
server_set_game_state.rpc_id(1, value)
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_remote", "reliable")
|
||||||
|
func server_set_game_state(value: GameState) -> void:
|
||||||
|
set_game_state(value)
|
||||||
|
|
||||||
@rpc("authority", "call_remote", "reliable")
|
@rpc("authority", "call_remote", "reliable")
|
||||||
func _sync_game_state(new_value: GameState) -> void:
|
func client_sync_game_state(value: GameState) -> void:
|
||||||
game_state = new_value
|
game_state = value
|
||||||
Signals.game_state_changed.emit(game_state)
|
Signals.game_state_changed.emit(game_state)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ func satisfy_table_orders() -> void:
|
|||||||
|
|
||||||
func set_buidling_mode():
|
func set_buidling_mode():
|
||||||
print("Global key event: Setting building mode")
|
print("Global key event: Setting building mode")
|
||||||
GameManager.game_state = GameManager.GameState.BUILDING
|
GameManager.set_game_state(GameManager.GameState.BUILDING)
|
||||||
|
|
||||||
|
|
||||||
func set_running_mode():
|
func set_running_mode():
|
||||||
print("Global key event: Setting running mode")
|
print("Global key event: Setting running mode")
|
||||||
GameManager.game_state = GameManager.GameState.RUNNING
|
GameManager.set_game_state(GameManager.GameState.RUNNING)
|
||||||
|
|
||||||
func set_game_over():
|
func set_game_over():
|
||||||
print("Global key event: Setting game over")
|
print("Global key event: Setting game over")
|
||||||
GameManager.game_state = GameManager.GameState.GAME_OVER
|
GameManager.set_game_state(GameManager.GameState.GAME_OVER)
|
||||||
|
|||||||
Reference in New Issue
Block a user