예제 #1
0
    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();
    }
예제 #2
0
    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();
    }
예제 #3
0
    /// <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);
    }
예제 #4
0
    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));
    }
예제 #5
0
    /// <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);
    }
예제 #6
0
    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;
            }
        }
    }