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); } }
//创建单位, 英雄和怪物 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创建位置应该是精心调整的算法 }
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); }
public void Generate(MapMeta meta, CStarGrid walkableGrid) { m_grid.Init(meta.Cols, meta.Rows); m_tilesData = new ActorGeneraterPlaceholder(walkableGrid); GenerateActor(meta); }
public void Init(MapMeta meta) { m_mapMeta = meta; CTileNavigationSystem.Instance.Initialize(meta.Cols, meta.Rows); }
public DungeonMapBuilder(MapMeta meta) { m_mapMeta = meta; }
public static void AddMeta(MapMeta meta) { m_dict.Add(meta.Id, meta); }