Esempio n. 1
0
        protected override void Parse()
        {
            m_xreader.ReadRootNode();

            foreach (XmlElement node in m_xreader.rootChildNodes)
            {
                MapMeta meta = new MapMeta(node.GetAttribute("id"));
                meta.NameKey = node.GetAttribute("name");
                meta.Cols    = int.Parse(node.GetAttribute("cols"));
                meta.Rows    = int.Parse(node.GetAttribute("rows"));

                var monsterRoot = node.SelectSingleNode("Monsters");
                m_xreader.TryReadChildNodesAttr(monsterRoot, "Monster", meta.Monsters);

                MapMetaManager.AddMeta(meta);
            }
        }
Esempio n. 2
0
        //创建单位, 英雄和怪物
        private void GenerateActor(MapMeta meta)
        {
            //我们固定英雄的位置
            HeroBornPos = m_tilesData.AddUnitToDict(Vector2Int.one * 5, 5);

            //2. 创建怪物
            foreach (var m in meta.Monsters)
            {
                for (int i = 0; i < m.z; i++)
                {
                    var pos = m_tilesData.FindFreeTileForMonster();
                    pos = m_tilesData.AddUnitToDict(pos, 2);
                    //type = id, subtype = level
                    m_grid.FillData(pos.x, pos.y, m.x, m.y, false);
                }
            }


            //TODO 创建boss, boss创建位置应该是精心调整的算法
        }
Esempio n. 3
0
        private void CreateMapData()
        {
            MapMeta m_mapMeta = MapMetaManager.GetMeta(LevelId);

            if (m_mapMeta == null)
            {
                Debug.LogError("Invalid Level id .. " + LevelId);
                return;
            }

            TMap.Instance.Init(m_mapMeta);
            m_builder = new DungeonMapBuilder(m_mapMeta);
            m_builder.CreateMap();
            m_builder.CopyUnWalkableToGrid(TMap.Instance.WalkableGrid);
            m_builder.CreateActor(TMap.Instance.WalkableGrid);
            m_builder.CopyActorUnWalkableToGrid(TMap.Instance.WalkableGrid);

            //读取加载地形数据, 并组装terrain3d comp
            m_terrainLayer = gameObject.GetOrCreateComponent <TileTerrainLayerComp>();
            m_terrainLayer.SetAssetGrid(m_builder.TerrainGrid);

            //读取加载没有逻辑的障碍
            m_blockLayer = gameObject.GetOrCreateComponent <TileBlockLayerComp>();
            m_blockLayer.SetAssetGrid(m_builder.BlockGrid);

            //加载没有逻辑的贴花
            m_decalLayer = gameObject.GetOrCreateComponent <TileDecalLayerComp>();
            m_decalLayer.SetAssetGrid(m_builder.DecalGrid);

            //加载角色数据
            m_actorLayer = gameObject.GetOrCreateComponent <TileActorLayerComp>();
            m_actorLayer.SetAssetGrid(m_builder.ActorGrid);

            //创建可通行debug层
            m_debugLayer = gameObject.GetOrCreateComponent <TileDebugLayerComp>();
            m_debugLayer.SetStarGrid(TMap.Instance.WalkableGrid);
        }
Esempio n. 4
0
 public void Generate(MapMeta meta, CStarGrid walkableGrid)
 {
     m_grid.Init(meta.Cols, meta.Rows);
     m_tilesData = new ActorGeneraterPlaceholder(walkableGrid);
     GenerateActor(meta);
 }
Esempio n. 5
0
 public void Init(MapMeta meta)
 {
     m_mapMeta = meta;
     CTileNavigationSystem.Instance.Initialize(meta.Cols, meta.Rows);
 }
Esempio n. 6
0
 public DungeonMapBuilder(MapMeta meta)
 {
     m_mapMeta = meta;
 }
Esempio n. 7
0
 public static void AddMeta(MapMeta meta)
 {
     m_dict.Add(meta.Id, meta);
 }