Skip to content

Commit 7a8b62a

Browse files
jmeinekeJoseph C Meineke
andauthored
Modify MyRoom.ts to delete player on leave and to set state according to the online example, add dictionary key check to Callbacks.cs to prevent a KeyNotFound exception, update PlayerMovement.cs to use v.16. Sprite was missing on player, so I just assigned an existing sprite to it. modified .gitignore to exclude IntelliJ artifacts. (#241)
Co-authored-by: Joseph C Meineke <[email protected]>
1 parent 587bacd commit 7a8b62a

File tree

7 files changed

+89
-70
lines changed

7 files changed

+89
-70
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Server/build
77
.DS_Store
88
.vs/
99
.vsconfig
10+
.idea/
1011

1112
#Mono Project Files
1213
*.pidb

Assets/Colyseus/Runtime/Colyseus/Serializer/Schema/Callbacks/Callbacks.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,13 +250,12 @@ protected void TriggerChanges(ref List<DataChange> allChanges)
250250
//
251251
// trigger onRemove on child structure.
252252
//
253-
if (
254-
(change.Op & (byte)OPERATION.DELETE) == (byte)OPERATION.DELETE &&
255-
change.PreviousValue is Schema
256-
)
253+
if ((change.Op & (byte)OPERATION.DELETE) == (byte)OPERATION.DELETE && change.PreviousValue is Schema)
257254
{
258255
Decoder.Refs.callbacks.TryGetValue(((Schema)change.PreviousValue).__refId, out var deleteCallbacks);
259-
if (deleteCallbacks != null && deleteCallbacks[OPERATION.DELETE] != null)
256+
if (deleteCallbacks != null
257+
&& deleteCallbacks.ContainsKey(OPERATION.DELETE)
258+
&& deleteCallbacks[OPERATION.DELETE] != null)
260259
{
261260
foreach (var callback in deleteCallbacks[OPERATION.DELETE])
262261
{
Binary file not shown.
Lines changed: 74 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,79 @@
11
using System;
2+
using System.Threading.Tasks;
3+
using Colyseus;
4+
using Colyseus.Schema;
25
using UnityEngine;
36

47
public class PlayerMovement : MonoBehaviour
58
{
6-
public float speed = 10f;
7-
private bool _moving;
8-
private NetworkManager _networkManager;
9-
private Vector2 _targetPosition;
10-
11-
public async void Start()
12-
{
13-
// Initialize game room.
14-
_networkManager = gameObject.AddComponent<NetworkManager>();
15-
await _networkManager.JoinOrCreateGame();
16-
17-
// Assigning listener for incoming messages
18-
_networkManager.GameRoom.OnMessage<string>("welcomeMessage", message =>
19-
{
20-
Debug.Log(message);
21-
});
22-
23-
// Set player's new position after synchronized the mouse click's position with the Colyseus server.
24-
25-
_networkManager.GameRoom.State.OnChange(() =>
26-
{
27-
var player = _networkManager.GameRoom.State.players[_networkManager.GameRoom.SessionId];
28-
_targetPosition = new Vector2(player.x, player.y);
29-
_moving = true;
30-
});
31-
32-
_networkManager.GameRoom.State.players.OnAdd((key, player) =>
33-
{
34-
Debug.Log($"Player {key} has joined the Game!");
35-
});
36-
}
37-
38-
private void Update()
39-
{
40-
if (Input.GetMouseButtonDown(0))
41-
{
42-
// Synchronize mouse click position with the Colyseus server.
43-
_networkManager.PlayerPosition(Camera.main.ScreenToWorldPoint(Input.mousePosition));
44-
}
45-
46-
if (_moving && (Vector2)transform.position != _targetPosition)
47-
{
48-
var step = speed * Time.deltaTime;
49-
transform.position = Vector2.MoveTowards(transform.position, _targetPosition, step);
50-
}
51-
else
52-
{
53-
_moving = false;
54-
}
55-
}
56-
}
9+
public float speed = 10f;
10+
private bool _moving;
11+
private NetworkManager _networkManager;
12+
private Vector2 _targetPosition;
13+
private StateCallbackStrategy<MyRoomState> _callBacks;
14+
15+
private void Awake()
16+
{
17+
_networkManager = gameObject.AddComponent<NetworkManager>();
18+
}
19+
20+
private async void Start()
21+
{
22+
await _networkManager.JoinOrCreateGame();
23+
registerListeners();
24+
}
25+
26+
private void Update()
27+
{
28+
if (Input.GetMouseButtonDown(0))
29+
{
30+
// Synchronize mouse click position with the Colyseus server.
31+
_networkManager.PlayerPosition(Camera.main.ScreenToWorldPoint(Input.mousePosition));
32+
}
33+
34+
if (_moving && (Vector2)transform.position != _targetPosition)
35+
{
36+
var step = speed * Time.deltaTime;
37+
transform.position = Vector2.MoveTowards(transform.position, _targetPosition, step);
38+
}
39+
else
40+
{
41+
_moving = false;
42+
}
43+
}
44+
45+
private void registerListeners()
46+
{
47+
// Retrieve the StateCallbackStrategy object
48+
_callBacks = Callbacks.Get(_networkManager.GameRoom);
49+
50+
// Assign listener for incoming messages
51+
_networkManager.GameRoom.OnMessage<string>("welcomeMessage", message =>
52+
{
53+
Debug.Log(message);
54+
});
55+
56+
// Assign listeners for state change/add/remove
57+
_networkManager.GameRoom.OnStateChange += (changedState, firstState) =>
58+
{
59+
if (!firstState)
60+
return;
61+
62+
_callBacks.OnAdd(addedState => addedState.players, (sessionId, addedPlayer) =>
63+
{
64+
Debug.Log($"player {sessionId} joined)");
65+
66+
_callBacks.OnChange(addedPlayer, () =>
67+
{
68+
_targetPosition = new Vector2(addedPlayer.x, addedPlayer.y);
69+
_moving = true;
70+
});
71+
});
72+
73+
_callBacks.OnRemove(removedState => removedState.players, (sessionId, removedPlayer) =>
74+
{
75+
Debug.Log($"player {sessionId} left");
76+
});
77+
};
78+
}
79+
}

Assets/Colyseus/Runtime/Example~/Scripts/PlayerMovement.cs.meta

Lines changed: 1 addition & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/Colyseus/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "io.colyseus.sdk",
3-
"version": "0.16.7",
3+
"version": "0.16.8",
44
"displayName": "Colyseus SDK",
55
"description": "Colyseus Multiplayer SDK for Unity",
66
"unity": "2019.1",

Server/src/rooms/MyRoom.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,17 @@ export type PositionMessage = {
88

99
export class MyRoom extends Room<MyRoomState> {
1010

11+
state = new MyRoomState();
12+
1113
onCreate (options: any) {
12-
this.setState(new MyRoomState());
14+
this.setMetadata({
15+
//Set room metadata here, e.g.,
16+
//RoomName: options.RoomName
17+
})
1318
}
1419

1520
onAuth(client: Client, options: any, context: AuthContext) {
16-
return false;
21+
return true;
1722
}
1823

1924
onJoin (client: Client, options: any) {
@@ -34,11 +39,11 @@ export class MyRoom extends Room<MyRoomState> {
3439
}
3540

3641
onLeave (client: Client, consented: boolean) {
42+
this.state.players.delete(client.sessionId);
3743
console.log(client.sessionId, "left!");
3844
}
3945

4046
onDispose() {
4147
console.log("room", this.roomId, "disposing...");
4248
}
43-
4449
}

0 commit comments

Comments
 (0)