Example #1
0
        public void Collect(MissionCollectionType mct)
        {
            var idx = curMissionData.Missions.FindIndex(s => { return(s.Key == mct); });

            if (idx != -1)
            {
                curMissionData.Missions[idx].Value += 1;
                if (MissionChangeDelegateDict.ContainsKey(mct))
                {
                    MissionChangeDelegateDict[mct]?.Invoke(
                        MissionDataHelper.MCT_2_Names(mct),
                        curMissionData.Missions[idx].Value,
                        OriginalMission.Missions[idx].Value);
                }
            }
            else
            {
                idx = curMissionData.ProtectMissions.FindIndex(s => { return(s.Key == mct); });
                if (idx != -1)
                {
                    curMissionData.ProtectMissions[idx].Value -= 1;

                    if (MissionChangeDelegateDict.ContainsKey(mct))
                    {
                        MissionChangeDelegateDict[mct]?.Invoke(
                            MissionDataHelper.MCT_2_Names(mct),
                            curMissionData.ProtectMissions[idx].Value,
                            OriginalMission.ProtectMissions[idx].Value);
                    }
                }
            }
        }
Example #2
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);
        }