private void HandlePlayerConnected(RealmEventBase playerConnectedEventData) { PlayerConnectedEvent playerConnectedEvent = playerConnectedEventData as PlayerConnectedEvent; string playerSessionId = playerConnectedEvent.playerSessionId; string playerId = playerConnectedEvent.playerId; Debug.Log("Player Connected {playerId: " + playerId + ", playerSessionId: " + playerSessionId); Vector3Int spawnPosition = RealmStateManager.GetRealmState().GetMapState().GetSpawnPosition(); GameObject playerAvatar = Instantiate(playerAvatarPrefab, mapGrid.CellToWorld(spawnPosition), Quaternion.identity); playerAvatar.GetComponent <Player>().playerId = playerId; IReadPlayerState playerState = RealmStateManager.GetRealmState().GetPlayerState(playerId); Color playerColor = new Color(); if (ColorUtility.TryParseHtmlString(playerState.GetColor(), out playerColor)) { playerAvatar.GetComponent <MeshRenderer>().material.color = playerColor; } if (playerGameObjects.ContainsKey(playerId)) { Debug.LogError("Player with ID attmempted to connect twice: " + playerId); } playerGameObjects.Add(playerId, playerAvatar); }
private void HandlePlayerMove(RealmEventBase baseEvent) { PlayerMoveEvent playerMoveEvent = baseEvent as PlayerMoveEvent; Vector2Int playerPosition = RealmStateManager.GetRealmState().GetPlayerState(playerMoveEvent.playerId).GetPosition(); IReadHexState hexState = RealmStateManager.GetRealmState().GetMapState().GetHexState(playerPosition); if (hexState.IsVisible()) { if (hexState.GetTerrain().Equals("GRASS")) { instance.tilemap.SetTile((Vector3Int)playerPosition, instance.grassTile); } else { instance.tilemap.SetTile((Vector3Int)playerPosition, instance.waterTile); } } }
// Start is called before the first frame update async void Start() { RealmState initialState = await NetworkConnection.GetStateAsync(); RealmStateManager.UpdateState(initialState); MapManager.InitMap(initialState.map); await NetworkConnection.Connect(); while (NetworkConnection.IsOpen()) { string message = await NetworkConnection.Receive(); if (!string.IsNullOrEmpty(message)) { try { NetworkMessage <RealmEventBase> networkMessage = NetworkMessageFactory.GetNetworkMessage(message); if (networkMessage != null && networkMessage.realmEvent != null && !string.IsNullOrEmpty(networkMessage.realmEventType)) { // Re-parse with the appropriate event type. This is ugly. Type eventType = RealmEventRegistry.GetEventDataType(networkMessage.realmEventType); Type networkMessageType = typeof(NetworkMessage <>).MakeGenericType(eventType); object genericMessage = NetworkMessageFactory.GetNetworkMessage(message, networkMessageType); object realmEvent = networkMessageType.GetField("realmEvent").GetValue(genericMessage); RealmStateManager.UpdateState(networkMessage.realmStateFragment); // TODO: Fire off this event and continue. Don't wait for a result. EventManager.TriggerEvent(networkMessage.realmEventType, realmEvent as RealmEventBase); //RealmStateManager.UpdateState(networkMessage.realmStateFragment); } } catch (Exception e) { Debug.Log("Exception in NetworkHandler: " + e.Message); Debug.Log(e.StackTrace); } } } }