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); } }
bool OpenEditor() { if (!CanOpen()) { Debug.LogError("[e2d] Failed to open editor."); return(false); } if (!Camera) { Camera = Camera.main; } if (FontColorAuto) { Color bg = Camera.backgroundColor; FontColor = new Color(bg.r, bg.g, bg.b, 1f); } if (buffer == null) { var chunk = ChunkUtil.Alloc(TileSize, MinArea, MaxArea, Sorting); buffer = CreateBuffer(ref chunk); var theme = new Overlay.Theme() { cursor = T0Cursor, grid_square = T1GridSquare, grid_active = T2GridActive, background = T3Background, border = PaletteBorder, font = Font, font_scaling = FontScaling, font_color = FontColor, status_color = StatusColor, status_padding = StatusPadding, palette_area = new Vector2Int(PaletteWidth, PaletteHeight), palette_display = PreviewPosition, show_preview_text = ShowPreviewText, preview_width = PreviewWidth, relative_position = RelativePosition }; Overlay.Initialize(transform, theme, buffer.palette); } if (OnEditorOpened != null) { OnEditorOpened(this, buffer); } return(true); }
void LoadLevel() { if (!Camera) { Camera = Camera.main; } var chunk = ChunkUtil.Alloc(TileSize, MinArea, MaxArea, Sorting); var tmp_buffer = CreateBuffer(ref chunk); tmp_buffer.LoadBufferFromFile(); tmp_buffer.Free(); }
void ClearLevel() { if (!Camera) { Camera = Camera.main; } var chunk = ChunkUtil.Alloc(TileSize, MinArea, MaxArea, Sorting); var tmp_buffer = CreateBuffer(ref chunk); for (int layer = 0; layer < chunk.layers.Count; layer++) { tmp_buffer.layer = layer; tmp_buffer.SelectAllInLayer(); tmp_buffer.Erase(); } tmp_buffer.Free(); }
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); } }