示例#1
0
    private Vector3 GetRandomSpawnPoint()
    {
        if (spawnPoints != null)
        {
            if (spawnPoints.Length > 0)
            {
                bool    isFreeSpawner = false;
                Vector3 newStartPos   = originalPosition;

                float timeOut = Time.time + 2f;

                while (!isFreeSpawner && Time.time < timeOut)
                {
                    NetworkStartPosition startPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];
                    SpawnPoint           spawnPoint = startPoint.GetComponent <SpawnPoint>();

                    if (spawnPoint.IsOccupied == false)
                    {
                        isFreeSpawner = true;
                        newStartPos   = startPoint.transform.position;
                    }
                }
                return(newStartPos);
            }
        }
        return(originalPosition);
    }
示例#2
0
    public void RpcRespawn()
    {
        if (!isLocalPlayer)
        {
            return;
        }
        Vector3 spawnPoint = Vector3.zero;

        if (spawnPoints != null && spawnPoints.Length > 0)
        {
            //Shuffle the spawnpoint array so that we can have a random one.
            //Knuth shuffle algorithm, posted by harvesteR on unity forums.
            for (int t = 0; t < spawnPoints.Length; t++)
            {
                NetworkStartPosition tmp = spawnPoints[t];
                int r = Random.Range(t, spawnPoints.Length);
                spawnPoints[t] = spawnPoints[r];
                spawnPoints[r] = tmp;
            }

            foreach (NetworkStartPosition point in spawnPoints)
            {
                if (CheckSpawnPoint(point))
                {
                    spawnPoint = point.transform.position;
                    break;
                }
            }
        }
        transform.position = spawnPoint;
    }
示例#3
0
    public Vector3 GetRandomSpawnPosition()
    {
        if (spawnPoints != null)
        {
            bool    foundSpawner     = false;
            Vector3 newStartPosition = new Vector3();
            float   timeOut          = Time.time + 2f;

            while (!foundSpawner)

            {
                NetworkStartPosition startPoint = spawnPoints[Random.Range(0, spawnPoints.Length)];
                SpawnPoint           spawnPoint = startPoint.GetComponent <SpawnPoint>();
                if (spawnPoint.isOcupied == false)
                {
                    newStartPosition = startPoint.transform.position;
                    foundSpawner     = true;
                }

                if (Time.time > timeOut)
                {
                    foundSpawner     = true;
                    newStartPosition = originalPosition;
                }
            }

            return(newStartPosition);
        }

        return(originalPosition);
    }
    // client-side
    void RespawnAtOrigin()
    {
        NetworkStartPosition[] spawnPoints = FindObjectsOfType <NetworkStartPosition>().ToArray();
        int randomSpawnPointIndex          = (int)Mathf.Round(UnityEngine.Random.Range(0, spawnPoints.Length - 1));
        NetworkStartPosition spawnPoint    = spawnPoints[randomSpawnPointIndex];

        transform.position = spawnPoint.transform.position;
    }
示例#5
0
 Vector3 GetRandomSpawnPosition()
 {
     if (m_spawnPoints != null)
     {
         NetworkStartPosition startPos = m_spawnPoints[Random.Range(0, m_spawnPoints.Length)];
         return(startPos.transform.position);
     }
     return(m_originalPosition);
 }
 Vector3 GetSpawnPosition()
 {
     if (m_spawnPosArray != null && m_spawnPosArray.Length > 0)
     {
         NetworkStartPosition pos = m_spawnPosArray[UnityEngine.Random.Range(0, m_spawnPosArray.Length)];
         return(pos.transform.position);
     }
     return(m_originalSpawnPos);
 }
示例#7
0
    public void respawnPlayer(Player player)
    {
        int index = Random.Range(0, players.Count - 1);

        NetworkStartPosition startPosition = startPositions[index];

        player.transform.rotation = startPosition.transform.rotation;
        player.setPosition(startPosition.transform.position);
    }
示例#8
0
    //is called when the local client's scene starts
    public override void OnStartLocalPlayer()
    {
        float minDistance = 0.0f;
        NetworkStartPosition closestPosition = null;

        foreach (var point in FindObjectsOfType <NetworkStartPosition>())
        {
            float dist = Vector3.Distance(point.transform.position, transform.position);
            if (closestPosition == null || dist < minDistance)
            {
                minDistance     = dist;
                closestPosition = point;
            }
        }

        // CANNOT ROTATE CAMERA WITH THE PLAYER.
        // transform.rotation = closestPosition.transform.rotation;

        if (GetComponent <NavMeshAgent>())
        {
            GetComponent <NavMeshAgent>().enabled = true;
        }

        /*if this is the VR Master, do:
         * enable VR if not done already
         * disable the default camera
         * enable the OpenVR cam rig
         * move transform up a bit (to compensate for the scale increase in Start()) [this is a temporary visualisation, to be removed once a proper Master representation is done]
         * append (VR MASTER) to the player name */
        if (isMonster)
        {
            /*UnityEngine.XR.XRSettings.enabled = true;
             *          QualitySettings.vSyncCount = 0; //this is an ugly fix, proper fix would be to globally save the player-set vsync state and recover it after the match is done.
             * FindObjectOfType<CameraManager>().nonVRCamera.SetActive(false);
             * FindObjectOfType<CameraManager>().vrCamera.SetActive(true);*/
            //transform.position += Vector3.up;
            pName          = pName + " (MONSTER)";
            gameObject.tag = "Crawler_Monster";
        }

        /*if not, do:
         * disable VR if not done already
         * enable the default camera
         * disable the OpenVR cam rig
         * set this gameObject as the main cam target */
        //else
        //{
        UnityEngine.XR.XRSettings.enabled = false;
        //FindObjectOfType<CameraManager>().vrCamera.SetActive(false);
        FindObjectOfType <CameraManager>().nonVRCamera.SetActive(true);
        Camera.main.GetComponent <DungeonCamera>().target = this.gameObject;
        Camera.main.GetComponent <DungeonCamera>().shakeDistanceTarget = transform;
        //}
    }
示例#9
0
 private bool CheckSpawnPoint(NetworkStartPosition point)
 {
     foreach (Collider coll in Physics.OverlapSphere(point.transform.position, 5f))
     {
         if (coll.tag == "Player")
         {
             return(false);
         }
     }
     return(true);
 }
示例#10
0
    public void respawnPlayer(Player player, bool isLocal)
    {
        int index = Random.Range(0, startPositions.Length);

        NetworkStartPosition startPosition = startPositions[index];

        player.spawnInitialization();

        player.transform.rotation = startPosition.transform.rotation;
        player.setPosition(startPosition.transform.position);
    }
示例#11
0
    public override void Awake()
    {
        base.Awake();

        NetworkStartPosition startPos = GetComponentInChildren <NetworkStartPosition>();

        if (!startPos)
        {
            return;
        }
        startPos.Register(teamIndex);
    }
示例#12
0
    private NetworkStartPosition[] removeSpawnPoint(NetworkStartPosition start_pos, NetworkStartPosition[] spawn_points)
    {
        List <NetworkStartPosition> startArray = new List <NetworkStartPosition>();

        foreach (var item in spawn_points)
        {
            if (item != start_pos)
            {
                startArray.Add(item);
            }
        }
        return(startArray.ToArray());
    }
示例#13
0
    public void spawnPlayers()
    {
        // respawn players (round robin, for now)
        for (int i = 0; i < players.Count; i++)
        {
            Player player     = players[i];
            int    startIndex = i % startPositions.Length;
            NetworkStartPosition startPosition = startPositions[startIndex];

            player.transform.rotation = startPosition.transform.rotation;
            player.setPosition(startPosition.transform.position);
            player.spawnInitialization();
        }
    }
示例#14
0
 void Awake()
 {
     barInside     = healthBar.transform.Find("HealthColor").GetComponent <Image>();
     currentHealth = maxHealth;
     if (gameObject.tag == "Player")
     {
         player = GetComponent <PlayerController>();
     }
     NetworkStartPosition[] spawnPoints = FindObjectsOfType <NetworkStartPosition>();
     for (int i = 0; i < spawnPoints.Length; i++)
     {
         if (i == 0)
         {
             spawnPoint1 = spawnPoints[i];
         }
         else
         {
             spawnPoint2 = spawnPoints[i];
         }
     }
 }
示例#15
0
        public NetworkStartPosition GetNetworkStartPosition(int connectionId)
        {
            List <NetworkStartPosition> startPositions = new List <NetworkStartPosition>();

            GameObject[] gameObjects = SceneManager.GetSceneByName(playScene).GetRootGameObjects();

            foreach (GameObject obj in gameObjects)
            {
                NetworkStartPosition strPos = obj.GetComponent <NetworkStartPosition>();
                if (strPos != null)
                {
                    startPositions.Add(strPos);
                }
                else if (obj.name.Contains("4PlayersStartPositions"))
                {
                    foreach (NetworkStartPosition pos in obj.GetComponentsInChildren <NetworkStartPosition>(true))
                    {
                        startPositions.Add(pos);
                    }
                }
            }
            return(startPositions[connectionId]);
        }
示例#16
0
    // Use this for initialization
    void Start()
    {
        NetworkStartPosition[] allPos = FindObjectsOfType <NetworkStartPosition>();
        NetworkStartPosition   myPos  = allPos[0];

        foreach (NetworkStartPosition p in allPos)
        {
            if (p.gameObject.transform.position == transform.position)
            {
                myPos = p;
            }
        }
        // Set Despawnpoint
        myPos.GetComponentInChildren <EndzoneDespawn>().gameObject.transform.SetParent(this.transform);

        // Set Grid
        GridMaker gm = myPos.GetComponentInChildren <GridMaker>();

        gm.gameObject.transform.SetParent(this.transform);
        gm.transform.position.Set(transform.position.x, 0.0f, transform.position.z);
        GetComponent <PlayerController>().Init();
        GetComponentInChildren <AlgorithmBot>(true).gridMaker = gm.gameObject;
    }
示例#17
0
 private void OnEnable()
 {
     networkStartPosition = (NetworkStartPosition)target;
     lastPosition         = networkStartPosition.transform.position;
 }