Ejemplo n.º 1
0
 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");
     }
 }
Ejemplo n.º 2
0
    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");
                }
            }
        }
    }