public void HandleSkillSpawnProcessForMP(byte randomSkill, Vector3 skillPos) { if (randomSkill != 3) { PickableSkill ps = Instantiate(SkillPrefabs[randomSkill], skillPos, SkillPrefabs[randomSkill].transform.rotation) .GetComponent <PickableSkill>(); ps.GM = this; CharCameraController.SkillPositions.Add(ps.transform.position); } else { Transform freezer = Instantiate(SkillPrefabs[randomSkill], skillPos, SkillPrefabs[randomSkill].transform.rotation) .GetComponent <Transform>(); FreezerSkill fs = freezer.Find("Freezer").GetComponent <FreezerSkill>(); fs.GM = GetComponent <GameManager>(); fs.SinglePlayer = singlePlayer; CharCameraController.FreezerSpawned = true; CharCameraController.FreezerTr = freezer.Find("Freezer"); } }
IEnumerator HandleSkillSpawnProcess() { if (singlePlayer || PhotonNetwork.IsMasterClient) { while (true) { yield return(new WaitForSeconds(skillSpawnFrequence)); byte randomSkill = (byte)(Random.Range(0, 70) % 7); Vector3 skillPos = FindRandomPointInMesh(); if (PhotonNetwork.IsMasterClient) { object[] content = { randomSkill, skillPos }; RaiseEventOptions reo = new RaiseEventOptions() { Receivers = ReceiverGroup.Others }; SendOptions so = new SendOptions() { Reliability = true }; PhotonNetwork.RaiseEvent(2, content, reo, so); } if (randomSkill != 3) { PickableSkill ps = Instantiate(SkillPrefabs[randomSkill], skillPos, SkillPrefabs[randomSkill].transform.rotation) .GetComponent <PickableSkill>(); ps.GM = this; // inform all agents if (singlePlayer) { float[] playerDistacesToSkill = new float[numberOfPlayers]; for (int i = 0; i < numberOfPlayers; i++) { if (!players[i]) { playerDistacesToSkill[i] = float.PositiveInfinity; continue; } float distance = (players[i].transform.position - skillPos).sqrMagnitude; if (i != 0) { for (int j = 0; j < i; j++) { if (playerDistacesToSkill[j] + 9 < distance && !float.IsInfinity(playerDistacesToSkill[j])) { playerDistacesToSkill[i] = float.PositiveInfinity; break; } else { playerDistacesToSkill[i] = distance; } } } else { playerDistacesToSkill[i] = distance; } } for (int i = 0; i < numberOfPlayers; i++) { if (myPlayerId != i && !float.IsInfinity(playerDistacesToSkill[i])) { AIHandler handler = players[i].GetComponent <AIHandler>(); handler.DontUpdateDest = true; handler.SkillPosition = skillPos; handler.PickSkill = true; } } } CharCameraController.SkillPositions.Add(ps.transform.position); } else { Transform freezer = Instantiate(SkillPrefabs[randomSkill], skillPos, SkillPrefabs[randomSkill].transform.rotation) .GetComponent <Transform>(); FreezerSkill fs = freezer.Find("Freezer").GetComponent <FreezerSkill>(); fs.GM = GetComponent <GameManager>(); fs.SinglePlayer = singlePlayer; if (singlePlayer) { for (int i = 0; i < numberOfPlayers; i++) { if (!players[i]) { continue; } if (myPlayerId != i) { AIHandler handler = players[i].GetComponent <AIHandler>(); handler.FreezerSkillSpawned = true; handler.FreezerTr = freezer.Find("Freezer"); } } } CharCameraController.FreezerSpawned = true; CharCameraController.FreezerTr = freezer.Find("Freezer"); } } } }