public void ShowCampaigns(int index, Vector3 position) { HideCampaigns(); int count = selectedCampaignSet.campaignDefinitions.Count; Add(_campaigns = new Layout("CampaignLayout", 4, count + 1, 0.25f, 0.1f, count + 1, container)); _campaigns.SetPosition(position + (Vector3.left * (campaignSets.width - 0.5f)) + (Vector3.back * ((_campaigns.height * 0.5f) - 0.5f))); _campaigns.Add(new List <RenameableDeletableButton>( RenameableDeletableButton.GetButtons(count, (int capturedIndex) => new RenameableDeletableButton(GetCampaign(capturedIndex).name, 4, 1, container, fontSize: 20, DeleteStay: (Button button) => { if (Input.GetMouseButtonUp(0)) { selectedCampaignSet.Remove(GetCampaign(index)); ShowCampaigns(index, position); ShowCampaignSets(); } }, EndInput: (Field field) => { GetCampaign(capturedIndex).name = field.label.text; field.SetColor(Color.white); }, Enter: (Button button) => button.SetColor(Color.green), Stay: (Button button) => { if (Input.GetMouseButtonDown(0)) { selectedCampaign = GetCampaign(capturedIndex); HideCampaigns(); HideCampaignSets(); ShowCampaignMap(); ShowCampaignSets(); ShowCampaignEditor(); } }, Exit: (Button button) => button.SetColor(Color.white))))); _campaigns.Add(new Button("New Campaign", 4, 1, container, "NewCampaign", fontSize: 20, Enter: (Button button) => button.SetColor(Color.green), Stay: (Button button) => { if (Input.GetMouseButtonDown(0)) { ScriptableObjects.Add(CampaignDefinition.Default(), selectedCampaignSet); ShowCampaigns(index, position); } }, Exit: (Button button) => button.SetColor(Color.white)), true); }
public IEnumerator SessionHandler(Session session, CampaignDefinition selectedCampaign, int selectedCampaignIndex) { if (!Definitions.initialized) { Definitions.Initialize(Assets.Get(Assets.ObjectDataSets.Default)); } session.Hide(); while (!session.player.progress.HasCampaignProgress(selectedCampaignIndex)) { session.player.progress.AddCampaignProgress(); } MissionDefinition missionDefinition = session.player.progress.IsNewGame(selectedCampaignIndex) ? selectedCampaign.GetMissionDefinition(selectedCampaign.firstMissionIndex) : null; int missionIndex = selectedCampaign.firstMissionIndex; if (missionDefinition == null) { Vector3 offset = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, Camera.main.transform.position.y)) + (Vector3.left * selectedCampaign.width * 0.5f) + (Vector3.forward * selectedCampaign.height * 0.5f); CampaignMap campaignMap = new CampaignMap(selectedCampaign.width, selectedCampaign.height, selectedCampaign.columns, selectedCampaign.rows, offset); Layout campaignLayout = new Layout("Campaign", gameObject); for (int i = 0; campaignMap.tileMap.count > i; i++) { int iIndex = i; if (selectedCampaign.Has(i) && session.player.progress.HasCompleted(selectedCampaignIndex, i)) { Button button = new Button(selectedCampaign.GetMissionDefinition(i).name, campaignMap.tileMap.tileWidth - 1, campaignMap.tileMap.tileHeight * 0.5f, gameObject, "CampaignMap" + i, fontSize: 20, Enter: (Button b) => b.SetColor(Color.green), Stay: (Button b) => { if (Input.GetMouseButtonDown(0)) { missionIndex = iIndex; missionDefinition = selectedCampaign.GetMissionDefinition(iIndex); } }, Exit: (Button b) => b.SetColor(Color.cyan)); campaignLayout.Add(button); button.SetColor(Color.cyan); button.SetPosition(campaignMap.tileMap.PositionOf(i)); for (int j = 0; selectedCampaign.connections.Count > j; j++) { int jIndex = j; if (selectedCampaign.connections[j].fromIndex == i) { if (!session.player.progress.HasCompleted(selectedCampaignIndex, selectedCampaign.connections[j].toIndex)) { Button butt = new Button(selectedCampaign.GetMissionDefinition(selectedCampaign.connections[j].toIndex).name, campaignMap.tileMap.tileWidth - 1, campaignMap.tileMap.tileHeight * 0.5f, gameObject, "CampaignMap" + selectedCampaign.connections[j].toIndex, fontSize: 20, Enter: (Button b) => b.SetColor(Color.green), Stay: (Button b) => { if (Input.GetMouseButtonDown(0)) { missionIndex = selectedCampaign.connections[jIndex].toIndex; missionDefinition = selectedCampaign.GetMissionDefinition(selectedCampaign.connections[jIndex].toIndex); } }, Exit: (Button b) => b.SetColor(Color.white)); campaignLayout.Add(butt); butt.SetPosition(campaignMap.tileMap.PositionOf(selectedCampaign.connections[jIndex].toIndex)); } } } } } while (missionDefinition == null) { campaignLayout.Update(); yield return(null); } campaignLayout.Hide(); campaignLayout.Destroy(); } GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad); quad.transform.rotation = Quaternion.Euler(90, 0, 0); quad.transform.position = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, Camera.main.transform.position.y)); quad.transform.localScale = new Vector3(12, 4, 1); TextMesh textMesh = new GameObject("StartText").AddComponent <TextMesh>(); textMesh.transform.localRotation = quad.transform.rotation; textMesh.transform.SetPositionAndRotation(quad.transform.position + Vector3.up, quad.transform.rotation); textMesh.fontSize = 200; textMesh.color = Color.black; textMesh.characterSize = 0.15f; textMesh.anchor = TextAnchor.MiddleCenter; textMesh.alignment = TextAlignment.Center; textMesh.text = "START"; float wait = Time.time + 3; while (wait > Time.time) { yield return(null); } quad.SetActive(false); textMesh.gameObject.SetActive(false); StageDefinition stageDefinition = missionDefinition.stageDefinition; session.SetConveyor(new Conveyor( speed: 7, width: 4, height: 15 + (1 * (stageDefinition.laneCount - 1)), itemInterval: 1, itemLimit: 8, itemWidthPadding: 1, itemSpacing: 0.1f)); session.SetStage(new Stage(stageDefinition, session.player, session.conveyor)); Level level = new Level(missionDefinition.duration); for (int i = 0; missionDefinition.waveDefinitions.Count > i; i++) { Wave wave = new Wave(missionDefinition.waveTimes[i] * missionDefinition.duration, session.stage); level.Add(wave); for (int j = 0; missionDefinition.waveDefinitions[i].waveEvents.Count > j; j++) { switch ((WaveEvent.Type)missionDefinition.waveDefinitions[i].waveEvents[j].type) { case WaveEvent.Type.SpawnEnemy: wave.Add(new SpawnEnemyEvent(Definitions.Enemy(Definitions.Enemies.Mini), missionDefinition.waveDefinitions[i].waveEvents[j])); break; } } } session.SetLevel(level); session.Show(); int heroCount = session.player.inventory.heroes.Count; int start = heroCount == 1 ? 2 : heroCount == 2 ? 1 : 0; int stride = start == 2 ? 0 : 2; for (int i = 0; session.player.inventory.heroes.Count > i; i++) { session.stage.AddHero(session.stage.LaneBy(start + (stride * i)), Definitions.Hero(Definitions.Heroes.Default)); } while (1 > session.level.progress || session.stage.enemies > 0 || session.stage.items > 0) { session.Update(1 > session.level.progress || session.stage.enemies > 0); yield return(null); } quad.SetActive(true); textMesh.gameObject.SetActive(true); session.stage.DestroyLanes(); session.level.HideProgress(); session.coinCounter.Hide(); if (session.heldItem != null) { session.heldItem.conveyorItem.Destroy(); session.heldItem.Destroy(); } session.Destroy(); textMesh.text = "STOP"; wait = Time.time + 3; while (wait > Time.time) { yield return(null); } quad.SetActive(false); textMesh.gameObject.SetActive(false); Destroy(textMesh.gameObject); Destroy(quad); //boss warning? //boss battle? //end of level fanfare if (!session.player.progress.HasCompleted(selectedCampaignIndex, missionIndex)) { session.player.progress.AddCompleted(selectedCampaignIndex, missionIndex); } Shop shop = new Shop(); shop.Show(session.player); while (!Input.GetMouseButtonDown(1)) { shop.Update(); yield return(null); } shop.Hide(); PlayerPrefs.SetString(session.player.name, JsonUtility.ToJson(session.player)); PlayerPrefs.Save(); StartSession(session.player, selectedCampaign, selectedCampaignIndex); }
void StartSession(Player player, CampaignDefinition selectedCampaign, int selectedCampaignIndex) => StartCoroutine(SessionHandler(new Session(player), selectedCampaign, selectedCampaignIndex));
public void SetSelectedCampaign(CampaignDefinition selectedCampaign) => this.selectedCampaign = selectedCampaign;