Ejemplo n.º 1
0
 void OnClickDirect(BaseTile grid)
 {
     _clickMark.gameObject.SetActive(false);
     ModuleManager.getInstance.GetModule <BattlefieldInputModule>().Pause(true);
     ModuleManager.getInstance.GetModule <BattlefieldInputModule>().onClickedTile -= OnClickDirect;
     MonoBehaviourHelper.StartCoroutine(GuideRunning(1, "你已经成功的移动了,注意移动会消耗AP,如果AP全部消耗任务将会失败,继续移动吧", OnOpenClickPanel, OnStepFinish));
 }
Ejemplo n.º 2
0
        public void CreateMissileItem()
        {
            if (missile_item == null)
            {
                missile_item = GameObject.Instantiate(Resources.Load("Prefabs/Boss/" + missile_item_name)) as GameObject;
            }
            var m = ModuleManager.getInstance.GetModule <BattlefieldModule>();

            saved_tile = m.Field.GetRandomTile("Bunker.Game.NormalTile", true);
            saved_tile = m.Field.GetTile(1, 0);
            missile_item.transform.SetParent(saved_tile.Node.transform);
            missile_item.transform.localPosition = Vector3.zero;
            missile_item.GetComponent <SpriteRenderer>().sortingOrder = saved_tile.GetSortingOrder() + 1;
            missile_item.SetActive(true);
            //使用名字后缀描述的方法····
            missile_item.name = missile_item.name + Constant.CAN_WALK_SUFFIX;
        }
Ejemplo n.º 3
0
        public void EliminationGrids(List <BaseTile> elimiGrids)
        {
            foreach (var g in elimiGrids)
            {
                Debug.Log("EliminationGrid: " + g.ParentGrid.ColID + "," + g.ParentGrid.RowID);
                BaseTile newtile = g.Elimination();
                var      grid    = g.ParentGrid;

                g.OnEliminationed();

                RemoveTile(grid);
                //var newg = GridLoader.CreateTile("NormalTile", grid);
                SetTile(grid, newtile);
            }

            OnElimination?.Invoke(elimiGrids.Count);
        }
Ejemplo n.º 4
0
        public override void OnStartTurn()
        {
            base.OnStartTurn();
            //锁住场景操作
            _bim.locked = true;
            //将此关卡载入时的任务系统完成后的回调断开
            MissionManager.getInstance.OnMissionValueHandler = null;
            //
            switch (state)
            {
            case ENTRANCE:      //特效
            {
                _bui.ShowBossWarningVFX(BOSSWARNING_TIME, GotoNextState);
                remainTalk = bossTalk_num;
                break;
            }

            case STAGE_1:       //前期唠嗑
                break;

            case STAGE_2:       //战斗阶段,在boss回合开始前,进行对小鬼的补充
            {
                int n = _rmm.GetRobotCount(ROBOT_TYPE_NAME);
                if (n < MAX_GHOST_COUNT)
                {
                    for (int i = MAX_GHOST_COUNT - n; i > 0; i--)
                    {
                        var t = _bfm.Field.GetRandomTile("Bunker.Game.NormalTile", true);

                        if (t != null)
                        {
                            var robot = _rmm.CreateRobot(ROBOT_TYPE_NAME);
                            robot.SetToGird(t.ParentGrid);
                        }
                    }
                }
                //
                if (curRound == LOCATION_ROUND)
                {
                    //随机找到特殊格子,及其位置,播放移动动画
                    Vector2Int rnd = new Vector2Int(UnityEngine.Random.Range(1, 8), 9);
                    dest_tile = _bfm.Field.GetTile(rnd.x, rnd.y);
                    var dest_pos = new Vector3(dest_tile.Node.transform.position.x,
                                               boss_body.transform.position.y,
                                               boss_body.transform.position.z);
                    boss_body.transform.DOMove(dest_pos, 1.2f).OnComplete(CB_OnFinishMovement);
                }
                else if (curRound == CHARGE_ROUND)
                {
                    //播放枪口处的充能动画 或者是充能特效
                    boss_body.OnCharge();
                    CB_OnFinishMovement();
                }
                else if (curRound == LAZER_ROUND)
                {
                    const float lazer_speed = 30f;
                    const float bias        = .5f;
                    //释放lazer
                    float dist_1      = 20;
                    float dist_2      = 20;
                    float dist_1_time = 0;
                    float dist_2_time = 0;
                    //两个起始点,进行向前扫描
                    var t_1 = _bfm.Field.GetTile(dest_tile.ParentGrid.ColID + 1, dest_tile.ParentGrid.RowID);
                    var t_2 = _bfm.Field.GetTile(dest_tile.ParentGrid.ColID - 1, dest_tile.ParentGrid.RowID);
                    if (t_1 != null)
                    {
                        int grid_x = dest_tile.ParentGrid.ColID + 1;
                        int grid_y = 9;         //此处应该是mapsize
                        for (int y = grid_y; y >= 0; y--)
                        {
                            if (CanBlockLazer(grid_x, y))
                            {
                                var t = _bfm.Field.GetTile(grid_x, y);
                                dist_1 = Mathf.Abs(t.Node.transform.position.y -
                                                   boss_body.Emiter_1.position.y) + bias;
                                dest_grid_1.Set(grid_x, y);
                                CDebug.Log(string.Format("创建激光[1],距离{0},时间{1} | GRID:{2},{3}", dist_1, dist_1_time, grid_x, y), Constant.COLOR_NAME.ORANGE);
                                break;
                            }
                        }
                        //
                        dist_1_time = dist_1 / lazer_speed;

                        Sequence mySequence = DOTween.Sequence();
                        mySequence.Append(DOTween.To(CB_Lazer_1_HeightUpdate, 1.5f, dist_1, dist_1_time))
                        .AppendInterval(.5f).AppendCallback(CB_Lazer_Shoot_Finish);
                    }
                    if (t_2 != null)
                    {
                        int grid_x = dest_tile.ParentGrid.ColID - 1;
                        int grid_y = 9;         //此处应该是mapsize
                        for (int y = grid_y; y >= 0; y--)
                        {
                            if (CanBlockLazer(grid_x, y))
                            {
                                var t = _bfm.Field.GetTile(grid_x, y);
                                dist_2 = Mathf.Abs(t.Node.transform.position.y -
                                                   boss_body.Emiter_2.position.y) + bias;
                                dest_grid_2.Set(grid_x, y);
                                CDebug.Log(string.Format("创建激光[1],距离{0},时间{1} | GRID:{2},{3}", dist_2, dist_2_time, grid_x, y), Constant.COLOR_NAME.ORANGE);
                                break;
                            }
                        }
                        //
                        dist_2_time = dist_2 / lazer_speed;

                        Sequence mySequence = DOTween.Sequence();
                        mySequence.Append(DOTween.To(CB_Lazer_2_HeightUpdate, 1.5f, dist_2, dist_2_time))
                        .AppendInterval(.5f).AppendCallback(CB_Lazer_Shoot_Finish);
                    }
                    //
                    boss_body.OnShoot();
                }
            }
            break;

            case STAGE_3:
                break;
            }
        }
Ejemplo n.º 5
0
        public static bool LoadGrid(string areaName, string levelName, out Grid[] rows, out Grid[] cols, out Grid[,] grids)
        {
            //------------------------

            //------------------------
            if (_rootNode == null)
            {
                _rootNode = new GameObject("TileRoot").transform;
            }
            var map = Resources.Load <MapData>(string.Format("{0}/{1}/{2}", "Map", areaName, levelName));

            if (map == null)
            {
                //这里不应该找不到,如果找不到,应该是通关了!!
                rows  = null;
                cols  = null;
                grids = null;
                Debug.Log(string.Format("Map {0}/{1} not found", areaName, levelName));
                return(false);
            }

            var rmax = map.row;
            var cmax = map.column;

            var offsetr = Constant.MaxRow - rmax;
            var offsetc = Constant.MaxCol - cmax;

            GridField.zeroOffset = new Vector3(
                Constant.TileSize.x * offsetc * 0.5f,
                -Constant.TileSize.y * offsetr * 0.5f,
                0
                );

            //这里需要
            //1 保存各个行和各个列的首节点
            //2 对各个节点的上下左右节点进行赋值,通过缓存上一行的节点和同行的前一个节点来实现
            //如果出现了rows[x] == null的情况,说明这一行都没有数据 cols同理
            rows = new Grid[map.row];
            cols = new Grid[map.column];

            grids = new Grid[map.column, map.row];

            //缓存读入的在同一行上的上一个块
            //cache current
            Grid lastTileInRow  = null;
            Grid firstTileInRow = null;

            //缓存读入的上一行上的同一列上的上一个块
            //cache1 cache2 cache3
            //1      2      3
            Grid[] lastRowTileInCol  = new Grid[map.column];
            Grid[] firstRowTileInCol = new Grid[map.column];
            for (int i = 0; i < map.row; ++i)
            {
                lastTileInRow  = null;//换行了,清空这个
                firstTileInRow = null;
                for (int j = 0; j < map.column; ++j)
                {
                    var tiledata       = map.data[i * map.row + j];
                    var additionalData = map.additionaldata[i * map.row + j];

                    var resname = Constant.Tiles[tiledata];

                    var grid = new Grid(j, i);
                    grid.AttachTile = null;
                    grid.Up         = null;
                    grid.Down       = null;
                    grid.Left       = null;
                    grid.Right      = null;

                    BaseTile tile = null;

                    //是否为空墙
                    if (resname != "Empty")
                    {
                        tile = CreateTile(resname, grid, additionalData);

                        grid.AttachTile = tile;
                        tile.ParentGrid = grid;
                    }

                    //行列的开头节点
                    if (i == 0 && grid.AttachTile != null)
                    {
                        cols[j] = grid;
                    }
                    if (j == 0 && grid.AttachTile != null)
                    {
                        rows[i] = grid;
                    }

                    var lastTileInCol = lastRowTileInCol[j];
                    //四周节点
                    //上下
                    if (grid.AttachTile != null)
                    {
                        //如果之前cols[j]为空,说明第一行的第j列是空的,那么这一列的第一个节点就要向下顺延
                        if (cols[j] == null)
                        {
                            cols[j] = grid;
                        }

                        if (lastTileInCol == null)
                        {
                            grid.Up              = null;
                            grid.Down            = null;
                            firstRowTileInCol[j] = grid;
                            if (cols[j] == null)
                            {
                                cols[j] = grid;
                            }
                        }
                        else
                        {
                            grid.Up            = lastTileInCol;
                            lastTileInCol.Down = grid;
                        }
                        lastRowTileInCol[j] = grid;
                    }

                    //左右
                    if (grid.AttachTile != null)
                    {
                        //if (rows[i] == null)
                        //{
                        //    rows[i] = grid;
                        //}

                        if (lastTileInRow == null)
                        {
                            firstTileInRow = grid;
                            grid.Left      = null;
                            grid.Right     = null;
                            if (rows[i] == null)
                            {
                                rows[i] = grid;
                            }
                        }
                        else
                        {
                            grid.Left           = lastTileInRow;
                            lastTileInRow.Right = grid;
                        }
                        lastTileInRow = grid;
                    }

                    grids[j, i] = grid;
                }

                if (lastTileInRow != null && firstTileInRow != null)
                {
                    lastTileInRow.Right = firstTileInRow;
                    firstTileInRow.Left = lastTileInRow;
                }
            }

            for (int i = 0; i < lastRowTileInCol.Length; ++i)
            {
                var first = firstRowTileInCol[i];
                var last  = lastRowTileInCol[i];
                if (first != null && last != null)
                {
                    first.Up  = last;
                    last.Down = first;
                }
            }

            for (int i = 0; i < map.row; ++i)
            {
                for (int j = 0; j < map.column; ++j)
                {
                    if (grids[j, i] != null && grids[j, i].AttachTile != null)
                    {
                        grids[j, i].AttachTile.OnStart();
                    }
                }
            }

            //create mask
            //var mask = GameObject.Instantiate( Resources.Load("Prefabs/Tiles/TileMask")) as GameObject;
            //if(mask != null)
            //{
            //    var sm = mask.GetComponent<SpriteMask>();
            //    if(sm != null)
            //    {
            //        sm.transform.parent = _rootNode;

            //        sm.gameObject.transform.localScale = new Vector3(
            //        (float)map.column,
            //        (float)map.row + 1,
            //        0.0f
            //            );

            //        sm.transform.position = GridField.ZeroPos + new Vector3(
            //        Constant.TileSize.x * (map.column * 0.5f) - Constant.TileSize.x * 0.5f,
            //        -Constant.TileSize.y * (map.row * 0.5f) + Constant.TileSize.y * 1.0f,
            //        0
            //            );


            //    }
            //}
            //Create Mission Data
            var md = map.mission;

            MissionManager.getInstance.LoadMissionData(md);
            //Create UI Mission Item
            foreach (var pair in md.Missions)
            {
                var item = ModuleManager.getInstance.GetModule <BattleUIModule>().CreateMissionItem(
                    MissionDataHelper.MCT_2_SpriteNames(pair.Key),
                    pair.Value);
                MissionManager.getInstance.RegisterMissionItemPos(pair.Key, item.transform as RectTransform);
                MissionManager.getInstance.RegisterMissionChangeDelegate(pair.Key, item.OnChange);
                MissionManager.getInstance.InvokeMissionDelegate(pair.Key);
            }
            foreach (var pair in md.ProtectMissions)
            {
                var item = ModuleManager.getInstance.GetModule <BattleUIModule>().CreateMissionItem(
                    MissionDataHelper.MCT_2_SpriteNames(pair.Key),
                    pair.Value);
                MissionManager.getInstance.RegisterMissionItemPos(pair.Key, item.transform as RectTransform);
                MissionManager.getInstance.RegisterMissionChangeDelegate(pair.Key, item.OnChange);
                MissionManager.getInstance.InvokeMissionDelegate(pair.Key);
            }
            MissionManager.getInstance.RegisterStepChanageDelegate(
                //ModuleManager.getInstance.GetModule<BattleUIModule>().GetBattleUIPanel().SetProgressNum);
                ModuleManager.getInstance.GetModule <BattleUIModule>().GetBattleUIPanel().SetAPNum);
            //UI level 的设置
            ModuleManager.getInstance.GetModule <BattleUIModule>().GetBattleUIPanel().SetLevelText(
                ModuleManager.getInstance.GetModule <BattlefieldModule>().LevelNum
                );
            //这张地图是否有boss
            ModuleManager.getInstance.GetModule <BattleTurnsModule>().InsertTurn(map.boss_type, true);
            //清理一下item工场
            BattleItemFactory.getInstance.Reset();
            //add by wwh 2021-4-19
            //将有效的list传入robotManager
            ModuleManager.getInstance.GetModule <RobotManagerModule>().UpdateEnemyTypeList(map.enemy_types);
            ModuleManager.getInstance.GetModule <RobotManagerModule>().UpdateFriendlyTypeList(map.friendly_types);
            //add by wwh 2021-5-12 读取主角的组件,然后动态生成出主角
            if (map.starredComponents != null)
            {
                ModuleManager.getInstance.GetModule <StarredModule>().CreateStarringRole(map.starredComponents);
            }

            return(true);
        }
Ejemplo n.º 6
0
        public void CheckElimination(BaseTile tile, ref List <BaseTile> list, CheckEliminationType type = CheckEliminationType.Null)
        {
            if (tile != null)
            {
                var gridSelf = tile.ParentGrid;

                var gridUp    = gridSelf.Up;
                var gridDown  = gridSelf.Down;
                var gridLeft  = gridSelf.Left;
                var gridRight = gridSelf.Right;

                bool bUpOK    = false;
                bool bDownOK  = false;
                bool bLeftOK  = false;
                bool bRightOK = false;

                bool bHasUp    = false;
                bool bHasDown  = false;
                bool bHasLeft  = false;
                bool bHasRight = false;

                foreach (var t in list)
                {
                    if (t.ParentGrid == gridUp)
                    {
                        bHasUp = true;
                    }
                    if (t.ParentGrid == gridDown)
                    {
                        bHasDown = true;
                    }
                    if (t.ParentGrid == gridLeft)
                    {
                        bHasLeft = true;
                    }
                    if (t.ParentGrid == gridRight)
                    {
                        bHasRight = true;
                    }
                }

                if (gridUp.AttachTile != null)
                {
                    if (Mathf.Abs(gridUp.RowID - gridSelf.RowID) == 1)
                    {
                        if (gridUp.AttachTile.CanElimination() &&
                            tile.CanEliminationByOther(gridUp.AttachTile.GetGridType(), 0) &&
                            !bHasUp)
                        {
                            bUpOK = true;
                        }
                    }
                }
                if (gridDown.AttachTile != null)
                {
                    if (Mathf.Abs(gridDown.RowID - gridSelf.RowID) == 1)
                    {
                        if (gridDown.AttachTile.CanElimination() &&
                            tile.CanEliminationByOther(gridDown.AttachTile.GetGridType(), 1) &&
                            !bHasDown)
                        {
                            bDownOK = true;
                        }
                    }
                }
                if (gridLeft.AttachTile != null)
                {
                    if (Mathf.Abs(gridLeft.ColID - gridSelf.ColID) == 1)
                    {
                        if (gridLeft.AttachTile.CanElimination() &&
                            tile.CanEliminationByOther(gridLeft.AttachTile.GetGridType(), 2) &&
                            !bHasLeft)
                        {
                            bLeftOK = true;
                        }
                    }
                }
                if (gridRight.AttachTile != null)
                {
                    if (Mathf.Abs(gridRight.ColID - gridSelf.ColID) == 1)
                    {
                        if (gridRight.AttachTile.CanElimination() &&
                            tile.CanEliminationByOther(gridRight.AttachTile.GetGridType(), 3) &&
                            !bHasRight)
                        {
                            bRightOK = true;
                        }
                    }
                }

                if (type == CheckEliminationType.Null)
                {
                    if (bDownOK || bUpOK)
                    {
                        if (bUpOK)
                        {
                            list.Add(gridUp.AttachTile);
                            CheckElimination(gridUp.AttachTile, ref list, CheckEliminationType.Vertical_U);
                        }
                        if (bDownOK)
                        {
                            list.Add(gridDown.AttachTile);
                            CheckElimination(gridDown.AttachTile, ref list, CheckEliminationType.Vertical_D);
                        }
                    }
                    else if (bLeftOK || bRightOK)
                    {
                        if (bLeftOK)
                        {
                            Debug.Log("bLeftOK - first: " + gridLeft.ColID + "," + gridLeft.RowID);

                            list.Add(gridLeft.AttachTile);
                            CheckElimination(gridLeft.AttachTile, ref list, CheckEliminationType.Horizontal_L);
                        }
                        if (bRightOK)
                        {
                            Debug.Log("bRightOK - first: " + gridRight.ColID + "," + gridRight.RowID);

                            list.Add(gridRight.AttachTile);
                            CheckElimination(gridRight.AttachTile, ref list, CheckEliminationType.Horizontal_R);
                        }
                    }
                }
                else if (type == CheckEliminationType.Horizontal_L)
                {
                    Debug.Log("bLeftOK: " + gridLeft.ColID + "," + gridLeft.RowID);
                    if (bLeftOK)
                    {
                        list.Add(gridLeft.AttachTile);
                        CheckElimination(gridLeft.AttachTile, ref list, CheckEliminationType.Horizontal_L);
                    }
                }
                else if (type == CheckEliminationType.Horizontal_R)
                {
                    Debug.Log("bRightOK: " + gridRight.ColID + "," + gridRight.RowID);
                    if (bRightOK)
                    {
                        list.Add(gridRight.AttachTile);
                        CheckElimination(gridRight.AttachTile, ref list, CheckEliminationType.Horizontal_R);
                    }
                }
                else if (type == CheckEliminationType.Vertical_U)
                {
                    Debug.Log("bUpOK: " + gridUp.ColID + "," + gridUp.RowID);
                    if (bUpOK)
                    {
                        list.Add(gridUp.AttachTile);
                        CheckElimination(gridUp.AttachTile, ref list, CheckEliminationType.Vertical_U);
                    }
                }
                else if (type == CheckEliminationType.Vertical_D)
                {
                    Debug.Log("bDownOK: " + gridDown.ColID + "," + gridDown.RowID);
                    if (bDownOK)
                    {
                        list.Add(gridDown.AttachTile);
                        CheckElimination(gridDown.AttachTile, ref list, CheckEliminationType.Vertical_D);
                    }
                }
            }
        }
Ejemplo n.º 7
0
 public static void SetTile(Grid grid, BaseTile tile)
 {
     //SetTile(grid.ColID, grid.RowID, tile);
     grid.AttachTile = tile;
     tile.ParentGrid = grid;
 }