Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using SimpleJSON;
- using UnityEngine;
- #if UNITY_EDITOR
- using UnityEditor;
- #endif
- public static class LevelIndex
- {
- public const string LEVEL_RESOURCE = "levels";
- public const string LEVEL_FILENAME = "Resources/levels.json";
- private static Dictionary<char, TileType> _charTileDict = new Dictionary<char, TileType>
- {
- {'F', TileType.Floor},
- {'W', TileType.Wall},
- {'P', TileType.Pit},
- {'E', TileType.Exit},
- {'S', TileType.Spawn}
- };
- private static Dictionary<TileType, char> _tileCharDict = _charTileDict.ToDictionary(kv => kv.Value, kv => kv.Key);
- private static readonly Dictionary<string, MirrorMode> _strMirrorModeDict = new Dictionary<string, MirrorMode>
- {
- {"none", MirrorMode.None},
- {"horizontal", MirrorMode.Horizontal},
- {"vertical", MirrorMode.Vertical},
- {"both", MirrorMode.Both}
- };
- private static readonly Dictionary<MirrorMode, string> _mirrorModeStrDict = _strMirrorModeDict.ToDictionary(kv => kv.Value, kv => kv.Key);
- public static Dictionary<string, LevelData> Levels = new Dictionary<string, LevelData>();
- public static void LoadLevels()
- {
- var jsonString = Resources.Load<TextAsset>("levels").ToString();
- var json = JSON.Parse(jsonString);
- foreach (var level in json.Children)
- {
- var name = level["name"];
- Levels[name] = new LevelData
- {
- Name = name,
- Width = level["width"].AsInt,
- Length = level["length"].AsInt,
- Tiles = StringToTileArray(level["tiles"]),
- Mode = _strMirrorModeDict[level["mirror_mode"]],
- MirrorOffset = level["mirror_offset"].AsInt,
- Seed = level["seed"].AsInt
- };
- }
- }
- public static void SaveLevels()
- {
- var json = new JSONArray();
- foreach (var data in Levels.Values)
- {
- var level = new JSONClass();
- level["name"] = data.Name;
- level["width"].AsInt = data.Width;
- level["length"].AsInt = data.Length;
- level["tiles"] = TileArrayToString(data.Tiles);
- level["mirror_mode"] = _mirrorModeStrDict[data.Mode];
- level["mirror_offset"].AsInt = data.MirrorOffset;
- level["seed"].AsInt = data.Seed;
- json.Add(level);
- }
- #if UNITY_EDITOR
- File.WriteAllText(Application.dataPath + "/" + LEVEL_FILENAME, json.ToJSON(0));
- AssetDatabase.Refresh();
- #endif
- }
- private static TileType[] StringToTileArray(string tileString)
- {
- var count = tileString.Length;
- var tiles = new TileType[count];
- for (var i = 0; i < tileString.Length; i++)
- {
- tiles[i] = _charTileDict[tileString[i]];
- }
- return tiles;
- }
- private static string TileArrayToString(TileType[] tiles)
- {
- var tileString = new StringBuilder();
- foreach (var tile in tiles)
- {
- tileString.Append(_tileCharDict[tile]);
- }
- return tileString.ToString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement