OverviewFilesCommitsIssuesDocsReleasesPeers

hypergodot commits / 7246f64

Fixes for multiplayer demo, send data only when necessary
7246f6490b04134fd4b4793b26013d0196224aef
by mauve <ranger@mauve.moe> · 2021-09-27T21:11:16.000Z

Changed files (9) +85 -16

src/HyperChat/HyperChat.gd +1 -0
……@@ -16,6 +16,7 @@ const LRU = preload('res://src/utils/LRU.gd')
1616# Broadcast self when seeing a new remotePublicKey
1717
1818export var archiveRoot = 'hyper://blog.mauve.moe/'
19#export var archiveRoot = 'hyper://70338a94d7415990ab4a3160cf98a5d940243d7fa24dd297352e66b52d3ff841/'
1920export var extensionName = 'hyperchat-example-1'
2021
2122var extensionsFolder = archiveRoot + '$/extensions/'
src/HyperLoad/HyperLoad.tscn +1 -1
……@@ -87,5 +87,5 @@ __meta__ = {
8787[connection signal="started_gateway" from="HyperGateway" to="StatusLabel" method="setGatewayLoaded"]
8888[connection signal="starting_gateway" from="HyperGateway" to="StatusLabel" method="setGatewayLoading"]
8989[connection signal="loading_data" from="HyperGateway/HyperRequest" to="StatusLabel" method="setLoading"]
90[connection signal="request_completed" from="HyperGateway/HyperRequest" to="ScrollContainer/Output" method="_on_HyperLoad_request_completed"]
9190[connection signal="request_completed" from="HyperGateway/HyperRequest" to="StatusLabel" method="_on_HyperLoad_request_completed"]
91[connection signal="request_completed" from="HyperGateway/HyperRequest" to="ScrollContainer/Output" method="_on_HyperLoad_request_completed"]
src/MultiplayerDemo/Bullet.gd +1 -0
……@@ -1,5 +1,6 @@
11extends Area2D
22
3var created_by = 'me'
34var initialSpeed = 600
45var velocity = Vector2(initialSpeed, 0)
56
src/MultiplayerDemo/FlyBalls.gd +54 -9
……@@ -1,14 +1,17 @@
11extends Node2D
22
3var PlayerSprite = preload("res://src/MultiplayerDemo/PlayerSprite.tscn")
3var RemotePlayer = preload("res://src/MultiplayerDemo/RemotePlayer.tscn")
4var RemoteBullet = preload("res://src/MultiplayerDemo/RemoteBullet.tscn")
45
5export var url: String = "hyper://blog.mauve.moe/"
6#export var url: String = "hyper://blog.mauve.moe/"
7export var url: String = "hyper://70338a94d7415990ab4a3160cf98a5d940243d7fa24dd297352e66b52d3ff841/"
68
79onready var gossip = $HyperGossip
810onready var player = $Player
911onready var gateway = $HyperGateway
1012
1113const POSITION = 'position'
14const SHOOT = 'shoot'
1215
1316const knownPlayers = {}
1417
……@@ -18,40 +21,79 @@ func _ready():
1821func get_player_object(id):
1922 if knownPlayers.has(id): return knownPlayers[id]
2023
21 var playerSprite = PlayerSprite.instance()
22 knownPlayers[id] = playerSprite
24 var remotePlayer = RemotePlayer.instance()
25 knownPlayers[id] = remotePlayer
2326
27 add_child(remotePlayer)
2428 _broadcast_player()
2529
26 return playerSprite
30 return remotePlayer
2731
2832func _broadcast_player():
2933 var position = player.position
3034 var rotation = player.rotation_degrees
35 var velocity = player.velocity
3136 var data = {
3237 "position": {
3338 "x": position.x,
3439 "y": position.y
3540 },
41 "velocity": {
42 "x": velocity.x,
43 "y": velocity.y
44 },
3645 "rotation": rotation
3746 }
47 print('Broadcasting', data)
3848 gossip.broadcast_event(POSITION, data)
3949
50func _broadcast_shoot(direction,location):
51 var data = {
52 "direction": direction,
53 "position": {
54 "x": location.x,
55 "y": location.y
56 }
57 }
58
59 gossip.broadcast_event(SHOOT, data)
60
4061func _on_remote_player_moved(positionData, id):
62 # print('Moving player', id, " ", positionData)
4163 var remotePlayer = get_player_object(id)
4264 var rotation_degrees = positionData.rotation
4365 var raw_position = positionData.position
44 remotePlayer.rotation_degrees = rotation_degrees
45 remotePlayer.position.x = raw_position.x
46 remotePlayer.position.y = raw_position.y
66 var raw_velocity = positionData.velocity
67
68 remotePlayer.update_position(
69 Vector2(raw_position.x, raw_position.y),
70 rotation_degrees,
71 Vector2(raw_velocity.x, raw_velocity.y)
72 )
73
74func _on_remote_player_shoot(positionData, id):
75 var direction = positionData.direction
76 var raw_position = positionData.position
77 var new_position = Vector2(raw_position.x, raw_position.y)
78
79 var bullet = RemoteBullet.instance()
80 bullet.rotation = direction
81 bullet.position = new_position
82 bullet.velocity = bullet.velocity.rotated(direction)
83 bullet.created_by = id
84
85 add_child(bullet)
4786
4887func _on_Player_shoot(Bullet, direction, location):
4988 var bullet = Bullet.instance()
50 add_child(bullet)
5189 bullet.rotation = direction
5290 bullet.position = location
5391 bullet.velocity = bullet.velocity.rotated(direction)
5492
93 add_child(bullet)
94
95 _broadcast_shoot(direction, location)
96
5597func _on_HyperGateway_started_gateway(_pid):
5698 gossip.url = url
5799 gossip.start_listening()
……@@ -62,8 +104,11 @@ func _on_HyperGossip_listening(_extension_name):
62104 _broadcast_player()
63105
64106func _on_HyperGossip_event(type, data, from):
107 # print("Event ", type, " ", from)
65108 if type == POSITION:
66109 _on_remote_player_moved(data, from)
110 if type == SHOOT:
111 _on_remote_player_shoot(data, from)
67112
68113func _on_Player_moved(_position, _rotation, _velocity):
69114 # TODO: Don't broadcast too often to avoid flooding the system
src/MultiplayerDemo/Player.gd +4 -5
……@@ -8,28 +8,27 @@ signal shoot(bullet, direction, location)
88signal moved(position, rotation, velocity)
99
1010var velocity = Vector2()
11var old_velocity = Vector2()
1112
1213func proccess_input():
13 var hasMoved = false
1414 look_at(get_global_mouse_position())
15 old_velocity = velocity
1516 velocity = Vector2()
1617 if Input.is_action_pressed("right"):
17 hasMoved = true
1818 velocity.x += 1
1919 if Input.is_action_pressed("left"):
20 hasMoved = true
2120 velocity.x -= 1
2221 if Input.is_action_pressed("down"):
23 hasMoved = true
2422 velocity.y += 1
2523 if Input.is_action_pressed("up"):
26 hasMoved = true
2724 velocity.y -= 1
2825
2926 velocity = velocity.normalized() * speed
3027
3128 if Input.is_action_just_pressed("click"):
3229 emit_signal("shoot", Bullet, rotation, position)
30
31 var hasMoved = !velocity.is_equal_approx(old_velocity)
3332
3433 return hasMoved
3534
src/MultiplayerDemo/RemoteBullet.tscn +5 -0
……@@ -0,0 +1,5 @@
1[gd_scene load_steps=2 format=2]
2
3[ext_resource path="res://src/MultiplayerDemo/Bullet.tscn" type="PackedScene" id=1]
4
5[node name="Bullet" instance=ExtResource( 1 )]
src/MultiplayerDemo/RemotePlayer.gd +11 -0
……@@ -0,0 +1,11 @@
1extends "res://src/MultiplayerDemo/PlayerSprite.gd"
2
3var velocity = Vector2()
4
5func update_position(new_position, new_rotation, new_velocity):
6 position = new_position
7 rotation_degrees = new_rotation
8 velocity = new_velocity
9
10func _physics_process(_delta):
11 velocity = move_and_slide(velocity)
src/MultiplayerDemo/RemotePlayer.tscn +7 -0
……@@ -0,0 +1,7 @@
1[gd_scene load_steps=3 format=2]
2
3[ext_resource path="res://src/MultiplayerDemo/PlayerSprite.tscn" type="PackedScene" id=1]
4[ext_resource path="res://src/MultiplayerDemo/RemotePlayer.gd" type="Script" id=2]
5
6[node name="PlayerSprite" instance=ExtResource( 1 )]
7script = ExtResource( 2 )
src/multiplayer/HyperGossip.gd +1 -1
……@@ -26,7 +26,7 @@ func _ready():
2626 add_child(broadcastRequest)
2727 broadcastRequest.connect("request_completed", self, "_on_broadcast_completed")
2828
29 eventSource.connect("event", self, "_on_extesnion_event")
29 eventSource.connect("event", self, "_on_event")
3030 eventSource.connect("response_started", self, "_on_events_started")
3131
3232func start_listening():