public static Dictionary<int, MapCellSetting> ArrayToDict(MapCellSetting[] cellSettings) { Dictionary<int, MapCellSetting> ret = new Dictionary<int, MapCellSetting>(); foreach (MapCellSetting cellSetting in cellSettings) ret[MapUtils.MakeKey((short)cellSetting.X, (short)cellSetting.Y)] = cellSetting; return ret; }
public void SetTerrainFlag(int x, int y, int radius, MapCellFlag flag, bool apply) { Dictionary<int, MapCellSetting> cellSettings = MapUtils.ArrayToDict(MapData.Cells); EditorMap map = GameEditor.Instance.Map; Vector2[] locations = MapUtils.Circle(x, y, radius); foreach (Vector2 location in locations) { MapCell cell = map.GetCell(location); if (cell == null) continue; if (apply) { MapCellSetting cellSetting; if (!cellSettings.TryGetValue(cell.Key, out cellSetting)) { cellSetting = new MapCellSetting(); cellSetting.X = cell.X; cellSetting.Y = cell.Y; cellSettings.Add(cell.Key, cellSetting); } EditorUtils.SetFlag(ref cellSetting.Flags, (int)flag, apply); } else { MapCellSetting cellSetting; if (cellSettings.TryGetValue(cell.Key, out cellSetting)) { EditorUtils.SetFlag(ref cellSetting.Flags, (int)flag, apply); if (cellSetting.Flags == 0) cellSettings.Remove(cell.Key); } } } MapData.Cells = MapUtils.DictToArray(cellSettings); InfoMap infos = new InfoMap(); infos["flag"] = flag; Modify(EditorEvent.MAP_TERRAIN_UPDATE, infos); }
internal void Load(MapCellSetting setting) { Flags = setting.Flags; }