//a method that initializes a single player game: private bool InitSinglePlayerGame() { //if there's no single player manager then if (LobbyManager.instance == null) { return(false); //do not proceed. } //If there's a map manager script in the scene, it means that we just came from the single player menu, so we need to set the NPC players settings! //randomzie the faction slots List <int> factionSlots = RTSHelper.GenerateIndexList(factions.Count); RTSHelper.ShuffleList <int>(factionSlots); //randomize the faction slots indexes list IDs by shuffling it. RandomizeFactionSlots(factionSlots.ToArray()); //This where we will set the NPC settings using the info from the single player manager: //First check if we have enough faction slots available: if (LobbyManager.instance.LobbyFactions.Count <= factions.Count) { defeatCondition = LobbyManager.instance.UIMgr.defeatConditionMenu.GetValue(); //set defeat condition speedModifier = LobbyManager.instance.UIMgr.speedModifierMenu.GetValue(); //set speed modifier //loop through the factions slots of this map: for (int i = 0; i < LobbyManager.instance.LobbyFactions.Count; i++) { factions[i].Init( LobbyManager.instance.LobbyFactions[i].GetFactionName(), LobbyManager.instance.LobbyFactions[i].GetFactionType(), LobbyManager.instance.LobbyFactions[i].GetFactionColor(), LobbyManager.instance.LobbyFactions[i].PlayerControlled, LobbyManager.instance.GetCurrentMap().GetInitialPopulation(), LobbyManager.instance.LobbyFactions[i].GetNPCType(), gameObject.AddComponent <FactionManager>(), i, this); } //if there are more slots than required. while (LobbyManager.instance.LobbyFactions.Count < factions.Count) { //remove the extra slots: factions[factions.Count - 1].InitDestroy(); factions.RemoveAt(factions.Count - 1); } //Destroy the map manager script because we don't really need it anymore: DestroyImmediate(LobbyManager.instance.gameObject); return(true); } else { Debug.LogError("[Game Manager]: Not enough slots available for all the factions coming from the single player menu."); return(false); } }
//called by the server when the game is about to start: public void OnStartGame() { if (isLocalPlayer == false || manager.IsHost == false) //the host must be the only one able to start the game { return; } List <int> factionSlots = RTSHelper.GenerateIndexList(manager.maxConnections); RTSHelper.ShuffleList <int>(factionSlots); //randomize the faction slots list IDs by shuffling it RpcOnGameStart(factionSlots.ToArray()); //let all clients know that the game is starting }
//called to activate the border public void ActivateBorder() { //make sure to get the game manager and resource manager components GameMgr = GameManager.Instance; ResourceMgr = GameMgr.ResourceMgr; //if the border is not active yet if (IsActive == false) { //shuffle building defs list: RTSHelper.ShuffleList <BuildingsInsideBorderVars>(BuildingsInsideBorder); //if we're allowed to spawn the border object if (SpawnBorderObj == true) { //create and spawn it BorderObj = (GameObject)Instantiate(BorderObj, new Vector3(transform.position.x, BorderHeight, transform.position.z), Quaternion.identity); BorderObj.transform.localScale = new Vector3(Size * BorderSizeMultiplier, BorderObj.transform.localScale.y, Size * BorderSizeMultiplier); BorderObj.transform.SetParent(transform, true); //Set the border's color to the faction it belongs to: Color FactionColor = GameMgr.Factions[MainBuilding.FactionID].FactionColor; BorderObj.GetComponent <MeshRenderer>().material.color = new Color(FactionColor.r, FactionColor.g, FactionColor.b, BorderColorTransparency); //Set the border's sorting order: BorderObj.GetComponent <MeshRenderer>().sortingOrder = GameMgr.LastBorderSortingOrder; GameMgr.LastBorderSortingOrder--; } //Add the border to all borders list: GameMgr.AllBorders.Add(this); CheckBorderResources(); //check the resources around the border IsActive = true; //mark the border as active //Custom Event: if (GameMgr.Events) { GameMgr.Events.OnBorderActivated(this); } } //set the faction manager FactionMgr = GameMgr.Factions[MainBuilding.FactionID].FactionMgr; //check the buildings in the border CheckBuildingsInBorder(); }