aboutsummaryrefslogtreecommitdiff
path: root/client/game.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/game.gd')
-rw-r--r--client/game.gd36
1 files changed, 33 insertions, 3 deletions
diff --git a/client/game.gd b/client/game.gd
index 06e3a934..8f23fbed 100644
--- a/client/game.gd
+++ b/client/game.gd
@@ -23,6 +23,11 @@ signal data_updated()
signal joined()
signal left()
+enum SpectatingMode {
+ CENTER,
+ FREE,
+}
+
var player_id: int = -1
var item_names: Array = []
var item_index_by_name: Dictionary = {}
@@ -39,6 +44,8 @@ var last_position := Vector2(0, 0)
var players := {}
+var spectating_mode: SpectatingMode = SpectatingMode.CENTER
+
@onready var camera: FollowCamera = $FollowCamera
@onready var mp: Multiplayer = $Multiplayer
@onready var map: Map = $Map
@@ -106,7 +113,7 @@ func _ready():
if player == player_id:
last_position = pos
)
-
+
mp.movement_sync.connect(func():
if not players.has(player_id):
return
@@ -228,7 +235,7 @@ func _ready():
map.gi_bake()
await get_parent()._menu_open()
map.autobake = true
-
+
if in_lobby_:
popup_message.lobby()
else:
@@ -253,7 +260,7 @@ func _ready():
if lobby_state and not join_sent:
join()
)
-
+
mp.environment.connect($Environment.update)
func join():
@@ -287,6 +294,17 @@ func set_tile(tile: Vector2i, kind = null, neighbors = null):
func update_center():
if is_joined:
return
+ if Input.get_vector("left", "right", "forward", "backwards").normalized().length() > .1:
+ spectating_mode = SpectatingMode.FREE
+ elif spectating_mode == SpectatingMode.FREE and Input.is_action_just_pressed("reset"):
+ spectating_mode = SpectatingMode.CENTER
+ match spectating_mode:
+ SpectatingMode.CENTER:
+ spectate_center()
+ SpectatingMode.FREE:
+ spectate_free()
+
+func spectate_center():
var sum: int = 0
var player_sum: int = 0
var center: Vector3 = Vector3(0., 0., 0.)
@@ -309,3 +327,15 @@ func update_center():
var map_center = ((extents[0] + extents[1]) / 2) + Vector2(.5, .5)
new_center = Vector3(map_center.x, 0., map_center.y)
$Center.position = new_center
+
+func spectate_free():
+ var direction := Input.get_vector("left", "right", "forward", "backwards")
+ direction = direction.rotated(-camera.angle_target)
+ $Center.position += Vector3(
+ direction.x,
+ $Center.position.y,
+ direction.y
+ ) * get_process_delta_time() * 10.
+ var extents = map.extents()
+ $Center.position.x = clamp($Center.position.x, extents[0].x, extents[1].x)
+ $Center.position.z = clamp($Center.position.z, extents[0].y, extents[1].y)