StartGame() public static méthode

public static StartGame ( ) : void
Résultat void
Exemple #1
0
    /*---------------------------------------------------------------------------------------------------------------------
    *  -- METHOD: StartGame
    *  --
    *  -- DATE: March 10th, 2016
    *  --
    *  -- REVISIONS: March 10th, 2016: Created from refactored code in NetworkingManager
    *  --            March 20th, 2016: Add lighting to players and hide enemies
    *  --
    *  -- DESIGNER: Carson Roscoe
    *  --
    *  -- PROGRAMMER: Carson Roscoe / Micah Willems
    *  --
    *  -- INTERFACE: void StartGame(int seed to generate world from)
    *  --
    *  -- RETURNS: void
    *  --
    *  -- NOTES:
    *  -- Handles the physical creation of the game once we move over to the game scene. All the logic from
    *  -- creating our players, generating the map, assigning classes, teams, everything is done here.
    *  ---------------------------------------------------------------------------------------------------------------------*/
    public void StartGame(int seed)
    {
        int myPlayer = GameData.MyPlayer.PlayerID;
        int myTeam   = GameData.MyPlayer.TeamID;
        List <Pair <int, int> > kings = new List <Pair <int, int> >();

        //Generate map "packet" and force us to "receive" the packet locally to generate world
        NetworkingManager.instance.update_data(NetworkingManager.GenerateMapInJSON(seed));

        //Loop through every player in data from the Lobby and create that player
        foreach (var playerData in GameData.LobbyData.OrderBy(x => x.Key))
        {
            //Create the player at a spawn position determined by whatever team that player is on
            var createdPlayer = ((Transform)Instantiate(playerType, new Vector3(GameData.TeamSpawnPoints[playerData.Value.TeamID - 1].first, GameData.TeamSpawnPoints[playerData.Value.TeamID - 1].second, -10), Quaternion.identity)).gameObject;

            //Assign the new player a class
            switch (playerData.Value.ClassType)
            {
            case ClassType.Ninja:
                createdPlayer.AddComponent <NinjaClass>();
                break;

            case ClassType.Gunner:
                createdPlayer.AddComponent <GunnerClass>();
                break;

            case ClassType.Wizard:
                createdPlayer.AddComponent <WizardClass>();
                break;

            default:
                Debug.Log("Player " + playerData.Value.PlayerID + " has not selected a valid class. Defaulting to Gunner");
                createdPlayer.AddComponent <GunnerClass>();
                break;
            }


            createdPlayer.GetComponent <BaseClass>().team     = playerData.Value.TeamID;
            createdPlayer.GetComponent <BaseClass>().playerID = playerData.Value.PlayerID;

            kings.Add(new Pair <int, int>(playerData.Value.TeamID, playerData.Value.PlayerID));

            //If the created player is our player, make the camera follow it and give it movement script
            if (myPlayer == playerData.Value.PlayerID)
            {
                myTeam = playerData.Value.TeamID;
                player = createdPlayer;
                GameObject.Find("Main Camera").GetComponent <FollowCamera>().target = player.transform;
                if (GameObject.Find("Minimap Camera") != null)
                {
                    GameObject.Find("Minimap Camera").GetComponent <FollowCamera>().target = player.transform;
                }
                player.AddComponent <Movement>();
                player.AddComponent <Attack>();
                //Created our player
            }
            else
            {
                //Otherwise, this is another player. Hook them up to receive updates from server updates
                createdPlayer.AddComponent <PlayerReceiveUpdates>();
                createdPlayer.GetComponent <PlayerReceiveUpdates>().playerID = playerData.Value.PlayerID;
                //Created another player
            }

            //If they are on my team, add a light
            if (myTeam == playerData.Value.TeamID)
            {
                // Get the player/teammember's hpFrame and bar
                Transform hpFrame = createdPlayer.transform.GetChild(0);
                Transform hpBar   = hpFrame.transform.GetChild(0);
                createdPlayer.layer      = LayerMask.NameToLayer("Allies");
                hpFrame.gameObject.layer = LayerMask.NameToLayer("Allies");
                hpBar.gameObject.layer   = LayerMask.NameToLayer("Allies");

                switch (GameData.LobbyData[playerData.Value.PlayerID].ClassType)
                {
                case ClassType.Gunner:
                    // These are the FOV & peripheral vision occlusion masks
                    var lightingGunnerFOV = ((Transform)Instantiate(gunnerVision.lightSourceFOV, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    lightingGunnerFOV.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    lightingGunnerFOV.GetComponent <RotateWithPlayer>().target  = createdPlayer.transform;
                    lightingGunnerFOV.transform.Translate(0, 0, 8);
                    // Send the gunner a reference to this lightsource for their special attack
                    DynamicLight dl = lightingGunnerFOV.gameObject.GetComponent <DynamicLight>();
                    createdPlayer.GetComponent <GunnerClass>().FOVCone = dl;

                    var lightingGunnerPeripheral = ((Transform)Instantiate(gunnerVision.lightSourcePeripheral, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    lightingGunnerPeripheral.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    lightingGunnerPeripheral.transform.Translate(0, 0, 8);

                    // These are the FOV & peripheral vision stencil masks
                    var hiderLayerGunnerFOV = ((Transform)Instantiate(gunnerVision.hiderFOV, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    hiderLayerGunnerFOV.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    hiderLayerGunnerFOV.GetComponent <RotateWithPlayer>().target  = createdPlayer.transform;
                    hiderLayerGunnerFOV.transform.Translate(0, 0, 8);
                    // Send the gunner a reference to this lightsource for their special attack
                    createdPlayer.GetComponent <GunnerClass>().FOVConeHidden = hiderLayerGunnerFOV.gameObject.GetComponent <DynamicLight>();

                    var hiderLayerGunnerPeripheral = ((Transform)Instantiate(gunnerVision.hiderPeripheral, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    hiderLayerGunnerPeripheral.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    hiderLayerGunnerPeripheral.transform.Translate(0, 0, 8);

                    if (myPlayer == playerData.Value.PlayerID)
                    {
                        // shadow overlay square
                        var shadows = ((Transform)Instantiate(shadowoverlay, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                        // set to child of FOV lighting
                        shadows.transform.parent = lightingGunnerFOV.transform;
                        // move below everything
                        shadows.transform.Translate(0, 0, 11);
                    }

                    break;

                case ClassType.Ninja:

                    // These are the FOV & peripheral vision occlusion masks
                    var lightingNinjaFOV = ((Transform)Instantiate(ninjaVision.lightSourceFOV, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    lightingNinjaFOV.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    lightingNinjaFOV.GetComponent <RotateWithPlayer>().target  = createdPlayer.transform;
                    lightingNinjaFOV.transform.Translate(0, 0, 8);

                    var lightingNinjaPeripheral = ((Transform)Instantiate(ninjaVision.lightSourcePeripheral, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    lightingNinjaPeripheral.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    lightingNinjaPeripheral.transform.Translate(0, 0, 8);

                    // These are the FOV & peripheral vision stencil masks
                    var hiderLayerNinjaFOV = ((Transform)Instantiate(ninjaVision.hiderFOV, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    hiderLayerNinjaFOV.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    hiderLayerNinjaFOV.GetComponent <RotateWithPlayer>().target  = createdPlayer.transform;
                    hiderLayerNinjaFOV.transform.Translate(0, 0, 8);

                    var hiderLayerNinjaPeripheral = ((Transform)Instantiate(ninjaVision.hiderPeripheral, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    hiderLayerNinjaPeripheral.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    hiderLayerNinjaPeripheral.transform.Translate(0, 0, 8);

                    if (myPlayer == playerData.Value.PlayerID)
                    {
                        // shadow overlay square
                        var shadows = ((Transform)Instantiate(shadowoverlay, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                        // set to child of FOV lighting
                        shadows.transform.parent = lightingNinjaFOV.transform;
                        // move below everything
                        shadows.transform.Translate(0, 0, 11);
                    }

                    break;

                case ClassType.Wizard:

                    var lightingMagePeripheral = ((Transform)Instantiate(mageVision.lightSourcePeripheral, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    lightingMagePeripheral.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    lightingMagePeripheral.transform.Translate(0, 0, 8);

                    var hiderLayerMagePeripheral = ((Transform)Instantiate(mageVision.hiderPeripheral, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                    hiderLayerMagePeripheral.GetComponent <LightFollowPlayer>().target = createdPlayer.transform;
                    hiderLayerMagePeripheral.transform.Translate(0, 0, 8);

                    if (myPlayer == playerData.Value.PlayerID)
                    {
                        // shadow overlay square
                        var shadows = ((Transform)Instantiate(shadowoverlay, createdPlayer.transform.position, Quaternion.identity)).gameObject;
                        // set to child of FOV lighting
                        shadows.transform.parent = lightingMagePeripheral.transform;
                        // move below everything
                        shadows.transform.Translate(0, 0, 11);
                    }

                    break;

                default:
                    break;
                }
                //Otherwise, they are not on our team. They are enemies.
            }
            else
            {
                //Hide enemies
                // Fetch the stencil masked material
                Material hiddenMat = (Material)Resources.Load("Stencil_01_Diffuse Sprite", typeof(Material));
                // Move enemy behind stencil mask
                createdPlayer.transform.Translate(0, 0, 9);
                // set the enemy, hpFrame & hpBar materials to stencil masked and layer to hidden
                createdPlayer.GetComponent <SpriteRenderer> ().material = hiddenMat;
                SetLayerRecursively(createdPlayer, "HiddenThings");
                SetMaterialRecursively(createdPlayer, hiddenMat);
            }
        }

        //Invoke StartGame in NetworkingManager so we start listening for game updates
        NetworkingManager.StartGame();
    }
    /**
     *	Hosting
     */

    public void StartGame()
    {
        networkingManager.StartGame();
    }