internal void LoadBufferFromFile() { chunk.layers.Clear(); Action <LvlLayer> create_layer = (l) => { if (l.layer_id >= chunk.layers.Count) { ChunkUtil.Realloc(ref chunk, 1, l.z_depth); } // Assume layer_id as the layer index layer = l.layer_id; }; Action <LvlEntity, Vector2Int> create_entity = (entity, grid_pos) => { float x = (chunk.bounds.x + grid_pos.x) * chunk.cell_scale; float y = (chunk.bounds.y + grid_pos.y) * chunk.cell_scale; Vector3 position = new Vector3(x, y, chunk.layers[layer].z_depth); CreateFromLvlEntity(entity, position); }; using (var fs = File.OpenRead(config.path)) { using (var bin = new BinaryReader(fs)) { var lvl = new LvlReader(bin); undo.PushFrame(layer); // Need new frame for generated entities if (!lvl.ReadAll(create_layer, create_entity, out LvlHeader header)) { return; } saved_view.position = new Vector3( header.camera.x, header.camera.y, header.camera.z); saved_view.orthographic_size = header.camera.ortho_size; if (config.set_camera_color) { view.backgroundColor = new Color32( r: header.camera.r, g: header.camera.g, b: header.camera.b, a: 0); } } } RestoreView(); log = string.Format("Open: {0}", config.path); if (OnFileOpened != null) { OnFileOpened(this, config.path); } }
public static void Run(Command cmd, Buffer buffer) { switch (cmd) { case Command.Nop: return; case Command.Up: HandleTransform(buffer, Vector2.up); break; case Command.Down: HandleTransform(buffer, Vector2.down); break; case Command.Left: HandleTransform(buffer, Vector2.left); break; case Command.Right: HandleTransform(buffer, Vector2.right); break; case Command.NextLayer: if (buffer.layer >= buffer.chunk.layers.Count - 1) { buffer.layer = 0; break; } buffer.layer++; break; case Command.PreviousLayer: if (buffer.layer <= 0) { buffer.layer = buffer.chunk.layers.Count - 1; break; } buffer.layer--; break; case Command.NewLayer: ChunkUtil.Realloc(ref buffer.chunk, 1); buffer.layer = buffer.chunk.layers.Count - 1; break; case Command.LayerZInc: buffer.MoveLayerZ(+1.0f); break; case Command.LayerZDec: buffer.MoveLayerZ(-1.0f); break; case Command.ToggleGrab: buffer.SwitchMode(Buffer.Mode.Grab); break; case Command.NormalMode: buffer.SwitchMode(Buffer.Mode.Normal); break; case Command.ToggleCamera: buffer.SwitchMode(Buffer.Mode.Camera); break; case Command.ToggleBoxSelect: buffer.SwitchMode(Buffer.Mode.Box); break; case Command.ToggleLineSelect: buffer.SwitchMode(Buffer.Mode.Line); break; case Command.NextModel: if (buffer.palette_index < buffer.palette.Length - 1) { buffer.palette_index++; } break; case Command.PreviousModel: if (buffer.palette_index > 0) { buffer.palette_index--; } break; case Command.Write: buffer.CreateFromPalette(buffer.palette_index); break; case Command.Erase: buffer.Erase(); break; case Command.Clone: buffer.Clone(); break; case Command.FlipHorizontal: buffer.Flip(new Vector3(0, 1)); break; case Command.FlipVertical: buffer.Flip(new Vector3(1, 0)); break; case Command.Rotate: buffer.Rotate(); break; case Command.SelectItem: if (buffer.mode != Buffer.Mode.Normal) { buffer.SwitchMode(Buffer.Mode.Normal); } buffer.PinCursor(); break; case Command.SelectSimilar: buffer.SelectSimilar(); break; case Command.SelectAll: buffer.SelectAllInLayer(); break; case Command.DeselectItem: buffer.RemovePinnedCursor(); return; case Command.DeselectAll: buffer.DeselectAll(); break; case Command.RandomDeselect: buffer.RandomDeselect(); break; case Command.RandomInc: buffer.random_threshold = Mathf.Clamp01(buffer.random_threshold + 0.05f); buffer.log = buffer.random_threshold.ToString("0.00"); break; case Command.RandomDec: buffer.random_threshold = Mathf.Clamp01(buffer.random_threshold - 0.05f); buffer.log = buffer.random_threshold.ToString("0.00"); break; case Command.CreateVertex: buffer.LineCreateVertex(); break; case Command.Undo: if (buffer.undo.PopFrame(out Undo.Frame frame)) { buffer.Revert(frame); break; } buffer.log = "Already at oldest change"; break; case Command.FocusView: buffer.FocusAtCursors(); break; case Command.TogglePalette: buffer.SwitchMode(Buffer.Mode.Palette); break; case Command.WriteLvl: buffer.WriteBufferToFile(); break; case Command.OpenLvl: buffer.LoadBufferFromFile(); break; case Command.ZoomIn: buffer.ZoomView(+1); break; case Command.ZoomOut: buffer.ZoomView(-1); break; case Command.MacroPlay: record = false; foreach (var c in recording) { Run(c, buffer); } buffer.log = string.Format("{0} actions", recording.Count); return; case Command.MacroStart: recording.Clear(); record = true; buffer.log = "recording..."; return; case Command.MacroStop: record = false; buffer.log = string.Format("{0} actions", recording.Count); return; } if (record) { recording.Add(cmd); } }