public IEnumerator LoadMap(uint lv) { Data.TileMapData tile_map_data = GetLoadedMapData(lv); if (tile_map_data == null) { var async = Resources.LoadAsync("level" + lv); yield return(async); var asset = async.asset as TextAsset; using (var stream = new MemoryStream(asset.bytes)) { var formatter = new BinaryFormatter(); tile_map_data = formatter.Deserialize(stream) as Data.TileMapData; mMaps[lv] = tile_map_data; } } var map = new TileMap(); map.Init(tile_map_data); yield return(map.LoadFromData()); yield return(map); }
public void Save(string file_path) { var tile_map_data = new Data.TileMapData(); tile_map_data.Level = Level; tile_map_data.Width = Width; tile_map_data.Height = Height; tile_map_data.FloorLayer = _parseFloorLayer(); tile_map_data.MonsterDatas = new List <Data.MonsterData>(); tile_map_data.PortalDatas = new List <Data.PortalData>(); tile_map_data.ItemDatas = new List <Data.ItemData>(); for (uint r = 0; r < Height; ++r) { for (uint c = 0; c < Width; ++c) { var go = mLayerCollide[r, c]; if (go == null) { continue; } var tile = go.GetComponent <Tile>(); switch (tile.TileType) { case Logic.Tile.EType.Monster: { var data = new Data.MonsterData(); data.Pos = new Logic.TilePosition(r, c); data.Id = (uint)tile.Properties["MonsterId"]; tile_map_data.MonsterDatas.Add(data); break; } case Logic.Tile.EType.Portal: { var data = new Data.PortalData(); data.Pos = new Logic.TilePosition(r, c); data.DestinationLevel = (uint)tile.Properties["DestLevel"]; data.DestinationPosition = (Logic.TilePosition)tile.Properties["DestPos"]; tile_map_data.PortalDatas.Add(data); break; } } } } using (var file = new FileStream(file_path, FileMode.Create)) { var formatter = new BinaryFormatter(); formatter.Serialize(file, tile_map_data); } }
public void Init(Data.TileMapData data) { Data = data; LayerFloor = new TileLayer(); LayerFloor.Init(this, Width, Height); LayerCollide = new TileLayer(); LayerCollide.Init(this, Width, Height); }
public Data.TileMapData GetLoadedMapData(uint lv) { Data.TileMapData map = null; if (mMaps.TryGetValue(lv, out map)) { return(map); } return(null); }
public bool HasLoaded(uint lv) { Data.TileMapData map = null; if (mMaps.TryGetValue(lv, out map)) { return(true); } return(false); }
void OnGUI() { if (Application.isPlaying) { EditorGUILayout.LabelField("Please exit the play mode."); return; } if (mTilemap == null) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Level"); mMapLevel = (uint)EditorGUILayout.IntField((int)mMapLevel); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("TileMap Width:"); var width = (uint)EditorGUILayout.IntField(11); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("TileMap Height"); var height = (uint)EditorGUILayout.IntField(11); EditorGUILayout.EndHorizontal(); if (GUILayout.Button("Generate TileMap")) { var tile_map_obj = new GameObject("TileMap"); mTilemap = tile_map_obj.AddComponent <EditorData.TileMap>(); tile_map_obj.tag = "TileMap"; mTilemap.Level = mMapLevel; mTilemap.Init(width, height); } if (GUILayout.Button("Load TileMap")) { var asset = Resources.Load("level" + mMapLevel) as TextAsset; Data.TileMapData tile_map_data = null; using (var stream = new MemoryStream(asset.bytes)) { var formatter = new BinaryFormatter(); tile_map_data = formatter.Deserialize(stream) as Data.TileMapData; } //var tile_map_data = AssetDatabase.LoadAssetAtPath("Assets/test.asset", typeof(Data.TileMapData)) as Data.TileMapData; var tile_map_obj = new GameObject("TileMap"); mTilemap = tile_map_obj.AddComponent <EditorData.TileMap>(); tile_map_obj.tag = "TileMap"; mTilemap.Level = tile_map_data.Level; mTilemap.Init(tile_map_data.Width, tile_map_data.Height); var floor_layer = tile_map_data.FloorLayer; for (int r = 0; r < floor_layer.GetLength(0); ++r) { for (int c = 0; c < floor_layer.GetLength(1); ++c) { var tile = TerrainList.CreateTile((Logic.Tile.EType)floor_layer[r, c]); mTilemap.SetTile(r, c, tile, ETileMapLayer.Floor); } } foreach (var monster_data in tile_map_data.MonsterDatas) { var monster = MonsterList.CreateTile(monster_data.Id); mTilemap.SetTile((int)monster_data.Pos.Row, (int)monster_data.Pos.Col, monster, ETileMapLayer.Collide); } foreach (var portal_data in tile_map_data.PortalDatas) { var portal = PortalList.CreateTile(portal_data.PortalType, portal_data.DestinationLevel, portal_data.DestinationPosition); mTilemap.SetTile((int)portal_data.Pos.Row, (int)portal_data.Pos.Col, portal, ETileMapLayer.Collide); } } return; } EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Level"); mTilemap.Level = (uint)EditorGUILayout.IntField((int)mTilemap.Level); EditorGUILayout.EndHorizontal(); mEditMode = (EEditMode)EditorGUILayout.EnumPopup("Edit Mode", mEditMode); if (mEditMode == EEditMode.Modify || mEditMode == EEditMode.Erase) { mEditRange = EditorGUILayout.IntSlider("Range", mEditRange, 1, 4); } mEditLayer = (ETileMapLayer)EditorGUILayout.EnumPopup("Edit Layer", mEditLayer); EditorGUILayout.LabelField("Terrain List", EditorStyles.boldLabel); if (mTerrainList.Draw()) { Repaint(); } EditorGUILayout.LabelField("Portal List", EditorStyles.boldLabel); if (mPortalList.Draw()) { Repaint(); } EditorGUILayout.LabelField("Monster List", EditorStyles.boldLabel); if (mMonsterList.Draw()) { Repaint(); } EditorGUILayout.LabelField("Item List", EditorStyles.boldLabel); if (mItemList.Draw()) { Repaint(); } if (GUILayout.Button("Save")) { mTilemap.Save(string.Format("Assets/Resources/level{0}.bytes", mTilemap.Level)); } }