protected override IEnumerator GameStartReady() { while (true) { if (TowerGameState.IsMapLoad) { break; } yield return(null); } SceneManager.instance.ShowLoadingTipPanel(false); float delay = 1f + Time.time; while (true) { if (delay < Time.time) { break; } yield return(null); } DungeonTable.TowerInfo lowData = _LowDataMgr.instance.GetLowDataTower(StageId); TimeLimit = lowData.limitTime; GameStart(); }
public override void OnEnter(System.Action callback) { if (0 < lastSelectStageId) { //DungeonTable.GoldBattleInfo gLowData = _LowDataMgr.instance.GetLowDataGoldBattle((byte)lastSelectStageId); DungeonTable.TowerInfo tLowData = _LowDataMgr.instance.GetLowDataTower(lastSelectStageId); StageName = tLowData.mapName; } else { StageName = "Devildom_001"; } base.OnEnter(callback); LoadLevelAsync(StageName); GameReadyState.NextAction = _ACTION.PLAY_TOWER; /* * Bloom bloomdata = CameraManager.instance.mainCamera.GetComponentInChildren<Bloom>(); * bloomdata.enabled = true; * bloomdata.bloomIntensity = 0.2f; * bloomdata.bloomThreshhold = 0.25f; * bloomdata.bloomBlurIterations = 2; */ // xray 일단 주석처리 // CameraManager.instance.XRayComponent.DefualtCameraMode(); }
/// <summary> 입장 </summary> void OnClickEntry() { if (TowerLowDataList.Count <= CurrentLowDataArr)//뭔가 잘못되었다. { return; } DungeonTable.TowerInfo towerLowData = TowerLowDataList[CurrentLowDataArr]; if (LastClearFloor + 1 <= towerLowData.level)//입장 불가능한 지역. { uiMgr.AddErrorPopup((int)Sw.ErrorCode.ER_TowerBattleStartS_Pre_Stage_Error); return; } int now = 0, max = 0; NetData.instance.GetUserInfo().GetCompleteCount(EtcID.TowerCount, ref now, ref max); transform.FindChild("Info").gameObject.SetActive(false); transform.FindChild("FloorList").gameObject.SetActive(false); UIMgr.OpenReadyPopup(GAME_MODE.TOWER, this, now, max); }
void InitSpawnCtlr() { DungeonTable.TowerInfo tLowData = _LowDataMgr.instance.GetLowDataTower(StageId); //TimeLimit = tLowData.limitTime; // 난이도 선택 및 NPCSpawn 시작! SpawnController[] spawnCtlrs = GameObject.FindObjectsOfType <SpawnController>(); if (null == spawnCtlrs || 0 == spawnCtlrs.Length) { spawnCtlr = ResourceMgr.InstAndGetComponent <SpawnController>("MapComponent/SpawnController"); } else { spawnCtlr = spawnCtlrs[0]; } spawnCtlr.Init(G_GameInfo.PlayerController.Leader.gameObject); //<========================================== // 스폰될 NPC들 설정해주기 //<========================================== uint[] Group1_UnitId = new uint[] { tLowData.MobId1, tLowData.MobId2, tLowData.MobId3, }; uint[] Group2_UnitId = new uint[] { tLowData.MobId4, tLowData.MobId5, tLowData.MobId6, }; uint[] Group3_UnitId = new uint[] { tLowData.MobId7, tLowData.MobId8, tLowData.MobId9, tLowData.MobId10, tLowData.MobId11 //얘가 보스. }; spawnGroup = spawnCtlr.GetList <SpawnGroup>(); int totalMonster = 0; List <string> SpawnEffects = new List <string>(); for (int i = 0; i < spawnGroup.Count; i++) { SpawnGroup group = spawnGroup[i]; totalMonster += group.spawnerList.Count; uint[] unitId = Group1_UnitId; if (group.groupNo == 2) { unitId = Group2_UnitId; } if (group.groupNo == 3) { unitId = Group3_UnitId; } for (int spawnerNo = 0; spawnerNo < group.spawnerList.Count; spawnerNo++) { //if (unitId[spawnerNo] == 0)continue; // NPCSpawner만 골라서 처리해주도록 한다. NPCSpawner npcSpawner = group.spawnerList[spawnerNo] as NPCSpawner; if (null == npcSpawner) { continue; } npcSpawner.unitId = (int)unitId[spawnerNo]; npcSpawner.Owner = group; } // 스폰불가능한 Spawner는 지우도록 한다. group.spawnerList.RemoveAll((spawner) => { bool removed = false; if (spawner is NPCSpawner) { removed = (spawner as NPCSpawner).unitId == 0; } if (removed) { DestroyImmediate((spawner as NPCSpawner).gameObject); } return(removed); }); } spawnCtlr.StartController(); //< 이펙트를 풀에 생성해둔다 for (int i = 0; i < SpawnEffects.Count; i++) { FillSpawnPool(effectPool, SpawnEffects[i], 3); } int dropGold = NetData.instance._RewardData.GetCoin; NormalDropGold = Mathf.CeilToInt(dropGold / (totalMonster + 5)); BossDropGold = dropGold - (NormalDropGold * (totalMonster - 1)); }
/// <summary> 층을 클릭함. </summary> void OnClickFloor(int arr) { if (TowerLowDataList.Count <= arr) { return; } CurrentLowDataArr = arr; DungeonTable.TowerInfo towerLowData = TowerLowDataList[arr]; CurrentFloor.text = string.Format(FloorText, towerLowData.level); //최초 보상 셋팅 GatchaReward.FixedRewardInfo fixedReward = _LowDataMgr.instance.GetFixedRewardItem(towerLowData.FirstReward); FirstReward.SetLowDataItemSlot(fixedReward.ItemId, 0, (key) => { UIMgr.OpenDetailPopup(this, (uint)key); }); //보상아이템 셋팅 List <string> rewardList = towerLowData.rewarditemId.list; int listCount = InvenSlotList.Count; uint myClass = NetData.instance.GetUserInfo().GetCharIdx(); switch (myClass) { case 11000: myClass = 1; break; case 12000: myClass = 2; break; case 13000: myClass = 3; break; } for (int i = 0; i < listCount; i++) { if (rewardList.Count <= i) { InvenSlotList[i].gameObject.SetActive(false); continue; } uint itemId = uint.Parse(rewardList[i]); InvenSlotList[i].gameObject.SetActive(true); Transform slotTf = InvenSlotList[i].transform; InvenSlotList[i].SetLowDataItemSlot(itemId, 0, (lowDataId) => { UIMgr.OpenDetailPopup(this, (uint)lowDataId); }); } ItemScroll.enabled = true; ItemScroll.ResetPosition(); if (rewardList.Count <= 4) { ItemScroll.enabled = false; } if (towerLowData.level < LastClearFloor)//클리어함 { FirstRewardClear.SetActive(true); } else//미클리어 { FirstRewardClear.SetActive(false); } if (LastClearFloor - 1 == arr) { SelectEff.localPosition = new Vector2(-1000, 1000); } else { Transform effTf = FloorGrid.transform.GetChild(arr).FindChild("eff_root"); SelectEff.parent = effTf; SelectEff.localPosition = Vector3.zero; SelectEff.localScale = Vector3.one; } //랭킹 NetworkClient.instance.SendPMsgTowerRankQueryC(towerLowData.level); }
public override void LateInit() { base.LateInit(); if (mStarted) { return; } LastClearFloor = NetData.instance.GetUserInfo().TowerFloor + 1; int treeCount = 0; int floorCount = TowerLowDataList.Count; for (int i = 0; i < floorCount; i++) { Transform tf = FloorGrid.GetChild(i); Vector2 floorLbPos; if (i % 2 == 0) { tf.GetComponent <UISprite>().flip = UIBasicSprite.Flip.Nothing; floorLbPos = new Vector2(26, 20); } else { tf.GetComponent <UISprite>().flip = UIBasicSprite.Flip.Horizontally; floorLbPos = new Vector2(-100, 20); } if (i % 2 == 0) { tf.FindChild("eff_root").localPosition = new Vector2(-123, 12); } else { tf.FindChild("eff_root").localPosition = new Vector2(123, 12); } if (LastClearFloor - 1 == i) { ArrowEff.parent = tf.FindChild("eff_root"); ArrowEff.localPosition = Vector3.zero; ArrowEff.localScale = Vector3.one; UIHelper.CreateEffectInGame(tf.FindChild("eff_root"), "Fx_UI_tower_position_01"); } if (LastClearFloor - 1 < i)//진행 불가 { tf.FindChild("floor/Box").GetComponent <UISprite>().spriteName = "Img_JewelBox01_off"; } else//진행 가능 { tf.FindChild("floor/Box").GetComponent <UISprite>().spriteName = "Img_JewelBox01_on"; } if (LastClearFloor - 1 <= i) { tf.FindChild("Top").GetComponent <UISprite>().spriteName = "Img_pve_tower_off"; } else { tf.FindChild("Top").GetComponent <UISprite>().spriteName = "Img_pve_tower_on"; } bool isTree = false; if (i <= 50 && FloorTreeStart <= i) { ++treeCount; if (FloorTreeStart == i) { isTree = true; treeCount = 0; } if (FloorTreeCount <= treeCount) { isTree = true; treeCount = 0; } } tf.FindChild("Top/tree").gameObject.SetActive(isTree); int arr = i; UIEventTrigger uiTri = tf.GetComponent <UIEventTrigger>(); UILabel floorLbl = tf.FindChild("floor").GetComponent <UILabel>(); tf.FindChild("floor").localPosition = floorLbPos; EventDelegate.Set(uiTri.onClick, delegate() { OnClickFloor(arr); SoundManager.instance.PlaySfxSound(eUISfx.UI_dark_tower_choice, false); }); floorLbl.text = string.Format(FloorText, i + 1); } //if (TowerLowDataList.Count <= LastClearFloor)//모든 층 클리어. // LastClearFloor = TowerLowDataList.Count;//99층 FloorGrid.parent.gameObject.SetActive(true); UIGrid grid = FloorGrid.GetComponent <UIGrid>(); float startY = 0; if (93 < LastClearFloor) //층 이상이면 무시 { startY = -grid.cellHeight * 93; //FloorMaxHeight; } else if (1 < LastClearFloor) { startY = ((LastClearFloor - 1) * -grid.cellHeight);// + -FloorGrid.cellHeight; } Destroy(FloorPrefab); grid.repositionNow = true; FloorScroll.MoveRelative(new Vector3(0, -startY, 0)); int startFloor = 0; if (0 < parameters.Length && 0 < (uint)parameters[0])//지정된 층으로 이동. { DungeonTable.TowerInfo towerInfo = _LowDataMgr.instance.GetLowDataTower((uint)parameters[0]); startFloor = (int)towerInfo.level - 1; } else { if (TowerLowDataList.Count <= LastClearFloor) //모든 층 클리어. { startFloor = TowerLowDataList.Count - 1; //99층 } else { startFloor = LastClearFloor - 1; } } OnClickFloor(startFloor);//(int)LastClearFloor);//이렇게 넣으면 이 다음층으로 선택됨. if (SceneManager.instance.UiOpenType == UI_OPEN_TYPE.NEXT_ZONE) { OnClickEntry(); } SceneManager.instance.UiOpenType = UI_OPEN_TYPE.NONE; if (SceneManager.instance.CurTutorial == TutorialType.TOWER) { if (OnSubTutorial()) { uiMgr.TopMenu.TutoSupport.TutoType = TutorialType.NONE; } } }