// 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; } }
public Player SpawnPlayer() { Player player = Instantiate(vrPlayerPrefab, new Vector3(0f, 0f, 0f), Quaternion.identity).GetComponent <Player>(); OnPlayerSpawned?.Invoke(player, EventArgs.Empty); return(player); }
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); }
/// <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(); }
public void Start() { if (Instance != this) { Destroy(gameObject); return; } foreach (var character in characters) { character.SetSpawned(); OnPlayerSpawned.Invoke(character); } }
// 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(); } } }
/// <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); }
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; } }