Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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);
            }
        }