Archived
1
0
Fork 0
This repository has been archived on 2026-01-19. You can view files and clone it, but cannot push or open issues or pull requests.
Danmaku/client/danmaku!/Network/Game Modes/br_server_tick_manager.gd
2025-09-09 16:51:13 -07:00

67 lines
2.1 KiB
GDScript

extends Node
@export var controlled_world: Node2D
@export var network: Network
func _ready() -> void:
LocalTimer.next_tick.connect(_broadcast)
LocalTimer.start_ticking()
func _broadcast() -> void:
if !controlled_world:
return
var delta_vel = controlled_world.player.get_and_reset_delta_vel()
var json_string = JSON.stringify({"utctime": Time.get_unix_time_from_system(), "tick": LocalTimer.predicted_tick, "vel_x": delta_vel.x, "vel_y": delta_vel.y})
#print("SEND: ", json_string)
network.nakama_socket.send_match_state_async(network.current_match_id, 0, json_string)
func _on_match_state(p_state : NakamaRTAPI.MatchData):
if !controlled_world:
return
match p_state.op_code:
2:
var data = JSON.parse_string(p_state.data)
# Set player position if server demands a forced position
if true:#data["forcePlayerPos"]:
controlled_world.player.set_position_data(
Vector2(
float(data["playerHitPos"]["x"]),
float(data["playerHitPos"]["y"])
),
float(data["playerHitPos"]["radius"]),
float(data["playerGrazePos"]["radius"])
)
controlled_world.ui.text = "Graze: " + str(data["graze"])
# Handle player death if there is an ongoing death timer
#if int(data["deathTimer"]) > 0:
# controlled_world.player.kill()
#elif int(data["deathTimer"]) == 0:
# controlled_world.player.resurrect()
# Spawn new bullets
#for b in data["serverEvents"]:
#var bullet = DanmakuBullet.new()
#bullet.setup_bullet(
#int(b["class"]),
#int(b["tick"]),
#b["x"],
#b["y"],
#b["radius"],
#b["vel_x"],
#b["vel_y"])
#bullet.texture = load("res://test-bullet.png")
#bullet.position = bullet.get_current_pos(int(b["tick"]))
#
## Reimplemented from ScalableSprite2D here atm
#var scale_ratio = (b["radius"] * 2) / bullet.texture.get_width()
#bullet.scale = Vector2(scale_ratio, scale_ratio)
#bullet.z_index = 4
#
#controlled_world.bullet_manager.add_child(bullet)
#controlled_world.bullet_manager.bullets.append(bullet)
#LocalTimer.predicted_tick = int(b["tick"])
#LocalTimer.delta_counter = 0