Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        public void Init(Data.TileMapData data)
        {
            Data = data;

            LayerFloor = new TileLayer();
            LayerFloor.Init(this, Width, Height);

            LayerCollide = new TileLayer();
            LayerCollide.Init(this, Width, Height);
        }
Exemplo n.º 4
0
        public Data.TileMapData GetLoadedMapData(uint lv)
        {
            Data.TileMapData map = null;
            if (mMaps.TryGetValue(lv, out map))
            {
                return(map);
            }

            return(null);
        }
Exemplo n.º 5
0
        public bool HasLoaded(uint lv)
        {
            Data.TileMapData map = null;
            if (mMaps.TryGetValue(lv, out map))
            {
                return(true);
            }

            return(false);
        }
Exemplo n.º 6
0
        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));
            }
        }