Ejemplo n.º 1
0
    // Start is called before the first frame update
    void Start()
    {
        // finds gameplay manager if not set.
        if (gameManager == null)
        {
            gameManager = FindObjectOfType <GameplayManager>();
        }

        // if the item spawenr has not been set, search for it.
        if (itemSpawner == null)
        {
            itemSpawner = FindObjectOfType <ItemSpawner>();
        }


        // if server hasn't been set.
        if (server == null)
        {
            server = FindObjectOfType <UdpServerX>();

            // no server object exists, so make one (if applicable)
            if (server == null && generateServer)
            {
                server = new UdpServerX();
            }
        }

        // server is set, so add endpoints.
        if (server != null)
        {
            // set blocking sockets value
            server.SetBlockingSockets(blocking);

            // adds remote clients
            for (int i = 0; i < startupEndpoints; i++)
            {
                server.AddEndPoint(serverBufferSize);
            }
        }

        // if the client hasn't been set.
        if (client == null)
        {
            client = FindObjectOfType <UdpClient>();

            // makes client if one does not exist (if applicable)
            if (client == null && generateClient)
            {
                client = new UdpClient();
            }
        }

        // set blocking sockets value
        if (client != null)
        {
            client.SetBlockingSockets(blocking);
        }

        // if the server or client should be run on start.
        // note that if either one is set to 'true' by default, they will override this.
        if (runHostOnStart)
        {
            if (isMaster)
            {
                server.RunServer();
            }
            else
            {
                client.RunClient();
            }
        }


        // interval setter
        {
            // if the interval timer is not set, look for it on the object.
            if (intervalTimer == null)
            {
                intervalTimer = GetComponent <IntervalTimer>();
            }

            // interval timer found
            if (intervalTimer != null)
            {
                intervalTimer.startOnInterval = false;
                intervalTimer.intervalLength  = intervalLength;
                intervalTimer.countdown       = 0; // send immediately
            }
        }


        // timer not set.
        if (timer == null)
        {
            timer = FindObjectOfType <TimerObject>();
        }

        // TODO: when the game is starting, this is getting ahold of the players that are about to be deleted.
        // this needs to either change how it operates, or have a delay for getting remote players.

        // if the list hasn't had anything put into it.
        if (findPlayers)
        {
            if (players.Count == 0)
            {
                // only pulls from players with the remote player component active.
                RemotePlayer[] arr = FindObjectsOfType <RemotePlayer>(false);

                // adds players to list.
                foreach (RemotePlayer rp in arr)
                {
                    players.Add(rp);
                }
            }
        }


        // finds controlled player
        foreach (RemotePlayer rp in players)
        {
            if (rp.player.controllablePlayer)
            {
                localPlayer = rp;
                break;
            }
        }
    }