/*--------------------------------------------------------------------------------------------------------------------- * -- 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(); }