// this is  for _host only_ to send messages to themself
        public void SendMatchStateMessageSelf <T>(MatchMessageType opCode, T message)
            where T : MatchMessage <T>
        {
            Debug.LogError("Sending Match Data to Self");
            // TODO: add more cases
            switch (opCode)
            {
            case MatchMessageType.AsteroidSpawned:
                OnAsteroidSpawned?.Invoke(message as MatchMessageSpawnElement);
                break;

            case MatchMessageType.PlayerSpawned:
                OnPlayerSpawned?.Invoke(message as MatchMessageSpawnShip);
                break;

            case MatchMessageType.BallSpawned:
                OnBallSpawned?.Invoke(message as MatchMessageSpawnElement);
                break;

            case MatchMessageType.GoalSpawned:
                OnGoalSpawned?.Invoke(message as MatchMessageSpawnElement);
                break;

            case MatchMessageType.StadiumEntered:
                OnStadiumEntered?.Invoke();
                break;
            }
        }
Пример #2
0
    public Player SpawnPlayer()
    {
        Player player = Instantiate(vrPlayerPrefab, new Vector3(0f, 0f, 0f), Quaternion.identity).GetComponent <Player>();

        OnPlayerSpawned?.Invoke(player, EventArgs.Empty);
        return(player);
    }
Пример #3
0
        private void SpawnDummyPlayer()
        {
            BattlePlayer player = ObjectPoolManager.Create <BattlePlayer>(playerPrefab_, Vector3.zero, Quaternion.identity, parent: this.gameObject);

            player.SetSkin(skin_);
            dummyPlayerRecyclable_            = player.GetComponentInChildren <RecyclablePrefab>();
            dummyPlayerRecyclable_.OnCleanup += RespawnDummyPlayer;
            OnPlayerSpawned.Invoke(player);
        }
Пример #4
0
 /// <summary>Clear out the characters to prepare for next set.</summary>
 public static void Clear()
 {
     foreach (var character in Characters)
     {
         Destroy(character.gameObject);
     }
     Characters.Clear();
     OnPlayerSpawned.RemoveAllListeners();
     OnPlayerRemoved.RemoveAllListeners();
 }
Пример #5
0
    public void Start()
    {
        if (Instance != this)
        {
            Destroy(gameObject);
            return;
        }

        foreach (var character in characters)
        {
            character.SetSpawned();
            OnPlayerSpawned.Invoke(character);
        }
    }
Пример #6
0
    // Update is called once per frame
    void Update()
    {
        if (CanSpawn())
        {
            var pos = transform.position;
            pos.z += 1f;

            if (pos.y > 10)
            {
                pos.y += -9.5f;
            }

            Instantiate(player, pos, Quaternion.identity);

            if (OnPlayerSpawned != null)
            {
                OnPlayerSpawned.Invoke();
            }
        }
    }
Пример #7
0
    /// <summary>Creates a Character game object from the given data and adds to the player roster.</summary>
    /// <param name="player">Roster index to place the character into.</param>
    /// <param name="characterData">Starting statistics to apply to the character.</param>
    /// <param name="deleteOld">If a character already exists in the given index, should it be replaced?</param>
    /// <returns>A reference to the spawned character. Null if an invalid index or a slot collision occurs and deleteOld is false.</returns>
    public static Character SpawnPlayerCharacter(int player, CharacterData characterData, bool deleteOld = true)
    {
        if (player < 0)
        {
            return(null);
        }

        if (player < Instance.characters.Count)
        {
            var current = Instance.characters[player];
            if (current)
            {
                if (deleteOld)
                {
                    Destroy(current.gameObject);
                }
                else
                {
                    return(current);
                }
            }
        }

        var character = Instantiate(Instance.characterPrefab, Instance.transform);

        character.PlayerNumber = player;
        character.Data         = characterData;

        if (player >= Instance.characters.Count)
        {
            Instance.characters.Insert(player, character);
        }
        else
        {
            Instance.characters[player] = character;
        }

        character.SetSpawned();
        OnPlayerSpawned.Invoke(character);
        return(character);
    }
Пример #8
0
 private static void PlayerOnSpawn(Player __instance)
 {
     OnPlayerSpawned?.Invoke(__instance);
 }
        public void ReceiveMatchStateHandle(long opCode, string messageJson)
        {
            if (GameStarted == false)
            {
                inboundMessages.Enqueue(new IncommingMessageState(opCode, messageJson));
            }

            switch ((MatchMessageType)opCode)
            {
            case MatchMessageType.MatchEnded:
                break;

            case MatchMessageType.AsteroidSpawned:
                MatchMessageSpawnElement asteroidSpawn = MatchMessageSpawnElement.Parse(messageJson);
                OnAsteroidSpawned?.Invoke(asteroidSpawn);
                break;

            case MatchMessageType.StadiumEntered:
                OnStadiumEntered?.Invoke();
                break;

            case MatchMessageType.PlayerSpawned:
                MatchMessageSpawnShip playerSpawn = MatchMessageSpawnShip.Parse(messageJson);
                OnPlayerSpawned?.Invoke(playerSpawn);
                break;

            case MatchMessageType.BallSpawned:
                MatchMessageSpawnElement ballSpawn = MatchMessageSpawnElement.Parse(messageJson);
                OnBallSpawned?.Invoke(ballSpawn);
                break;

            case MatchMessageType.GoalSpawned:
                MatchMessageSpawnElement goalSpawn = MatchMessageSpawnElement.Parse(messageJson);
                OnGoalSpawned?.Invoke(goalSpawn);
                break;

            case MatchMessageType.AsteroidPositionUpdated:
            {
                UnityMainThreadDispatcher.Instance().Enqueue(() =>
                    {
                        var d = messageJson.FromJson <MatchMessageAsteroidPositionUpdated>();
                        OnAsteroidPositionUpdated?.Invoke(d.id, d.x, d.y);
                    });

                break;
            }

            case MatchMessageType.PlayerPositionUpdated:
            {
                var positionValues = messageJson.FromJson <MatchMessagePositionUpdated>();

                var posX  = positionValues.posX;
                var posY  = positionValues.posY;
                var angle = positionValues.angle;
                var id    = positionValues.id;

                UnityMainThreadDispatcher.Instance().Enqueue(() =>
                    {
                        OnPlayerPositionUpdated?.Invoke(posX, posY, angle, id);
                    });
            }
            break;

            case MatchMessageType.PlayerInputRotationUpdated:
            {
                var value = messageJson.FromJson <MatchMessageInputRotationUpdated>();

                var input = value.input;
                var id    = value.id;

                UnityMainThreadDispatcher.Instance().Enqueue(() =>
                    {
                        OnPlayerInputRotationUpdated?.Invoke(input, id);
                    });
            }
            break;

            case MatchMessageType.PlayerInputThrustUpdated:
            {
                var value = messageJson.FromJson <MatchMessageInputThrustUpdated>();

                var input = value.input;
                var id    = value.id;

                UnityMainThreadDispatcher.Instance().Enqueue(() =>
                    {
                        OnPlayerInputThrustUpdated?.Invoke(input, id);
                    });
            }

            break;

            case MatchMessageType.BallPositionUpdated:
            {
                var positionValues = messageJson.FromJson <MatchMessageBallPositionUpdated>();

                var posX  = positionValues.posX;
                var posY  = positionValues.posY;
                var angle = positionValues.angle;
                var id    = positionValues.id;

                UnityMainThreadDispatcher.Instance().Enqueue(() =>
                    {
                        OnBallPositionUpdated?.Invoke(posX, posY, angle, id);
                    });
            }
            break;

            default:
                Debug.Log("Needs more implementation!");
                break;
            }
        }