Example #1
0
    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);
    }
Example #2
0
    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);
            }
        }
    }
Example #3
0
    // 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);
                }
            }
        }
    }