mirror of
https://codeberg.org/sunder/sunder.git
synced 2026-03-07 02:40:23 +00:00
55 lines
1.5 KiB
GDScript
55 lines
1.5 KiB
GDScript
extends Node
|
|
|
|
const TICK_RATE := 128
|
|
const TICK_INTERVAL := 1.0 / TICK_RATE
|
|
|
|
var tick_timer := 0.0
|
|
var server_time := 0.0
|
|
|
|
# Keep track of players
|
|
var players := {}
|
|
|
|
func _start_server(port:int = 9000) -> void:
|
|
var peer := ENetMultiplayerPeer.new()
|
|
peer.create_server(port, 1024)
|
|
multiplayer.multiplayer_peer = peer
|
|
multiplayer.peer_connected.connect(_on_peer_connected)
|
|
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
|
prints("server started on port", port)
|
|
|
|
func _process(delta: float) -> void:
|
|
tick_timer += delta
|
|
while tick_timer >= TICK_INTERVAL:
|
|
_server_tick()
|
|
tick_timer -= TICK_INTERVAL
|
|
|
|
func _server_tick() -> void:
|
|
server_time += TICK_INTERVAL
|
|
# for each player, update logic
|
|
for id:int in players.keys():
|
|
var player:Player = players[id]
|
|
player["position"] += player["velocity"] * TICK_INTERVAL
|
|
# broadcast game state to all clients
|
|
update_player_states.rpc(players)
|
|
|
|
func _on_peer_connected(peer_id:int) -> void:
|
|
print("Player connected:", peer_id)
|
|
players[peer_id] = {
|
|
"position": Vector2.ZERO,
|
|
"velocity": Vector2.ZERO
|
|
}
|
|
|
|
func _on_peer_disconnected(peer_id:int) -> void:
|
|
print("Player disconnected:", peer_id)
|
|
players.erase(peer_id)
|
|
|
|
@rpc("any_peer")
|
|
func send_input(input_velocity: Vector2) -> void:
|
|
var id:int = multiplayer.get_remote_sender_id()
|
|
if players.has(id):
|
|
players[id]["velocity"] = input_velocity
|
|
|
|
@rpc("authority", "unreliable")
|
|
func update_player_states(state:Array[Dictionary]) -> void:
|
|
print(state)
|
|
pass # No-op on server
|