예제 #1
0
        private void PickColorAt(int x, int y)
        {
            var pick_x = x;
            var pick_y = y;

            TypedMessager <byte> .Emit(MessageCodes.ColorPicked, CurrentSpritesheet.GetColorAt(pick_x, pick_y));
        }
예제 #2
0
        public SpriteSheetNavigator(string id, int width, int height, Rect source_rect) : base(id, width, height)
        {
            Instance             = this;
            _current_source_rect = source_rect;

            EmitRectChanged();

            TypedMessager <int> .On(MessageCodes.SpriteNavigatorCursorSizeChanged, SetCursorSize);
        }
예제 #3
0
        public override void OnMouseDown(MouseButton button, int x, int y)
        {
            foreach (var(index, tool_button) in _tool_buttons)
            {
                if (!tool_button.Area.Contains(x, y))
                {
                    continue;
                }

                if (tool_button.Mode == ToolButton.ToolButtonMode.Tool)
                {
                    _current_tool_index = index;
                }
                else if (tool_button.Mode == ToolButton.ToolButtonMode.Modifier)
                {
                    _current_pressed_action_index = index;
                }

                TypedMessager <int> .Emit(MessageCodes.ToolTriggered, tool_button.Action);
            }
        }
예제 #4
0
        public SpriteSheetEditor(string id, int width, int height) : base(id, width, height)
        {
            _canvas = Game.Instance.Canvas;

            _tool_action_params = new ToolActionParams()
            {
                Blitter = Game.Instance.Canvas,
            };

            _tools = new Dictionary <int, Tool>
            {
                { (int)Tools.Pen, new PenTool() },
                { (int)Tools.Select, new SelectTool() },
                { (int)Tools.Fill, new FillTool() }
            };

            SetCurrentTool(Tools.Pen);
            SetBrushSize(CurrentTool.BrushSize);

            _sprite_source_rect = Rect.Empty;

            _overlay_surface = Assets.CreatePixmap(Width, Height);
            _select_surface  = Assets.CreatePixmap(Width, Height);

            _tool_action_params.Overlay = _overlay_surface;

            TypedMessager <Rect> .On(MessageCodes.SelectionRectResize, OnSelectRectChanged);

            TypedMessager <Rect> .On(MessageCodes.SelectionRectMoved, OnSelectionRectMoved);

            TypedMessager <Rect> .On(MessageCodes.SourceRectChanged, OnNavigatorSourceRectChanged);

            TypedMessager <byte> .On(MessageCodes.ColorSelected, SetPaintColor);

            TypedMessager <int> .On(MessageCodes.SpriteSheetEditorBrushSizeChanged, SetBrushSize);

            Messager.On(MessageCodes.SelectionStartedMoving, OnSelectionRectStartedMoving);
            _dashed_rect = new DashedRect();
        }
예제 #5
0
        public SpriteEditor(string id, int width, int height) : base(id, width, height)
        {
            TileSize = Game.Instance.TileSize;

            var pixmap_surface_size = TileSize * AppLayout.Data.EditorPixmapSizeMultiplier;

            _sprite_sheet = Assets.CreateSpriteSheet(pixmap_surface_size, pixmap_surface_size);

            var horizontal_container = new Container("hor_container", width, height);

            var left_vertical_container = new Container("left_vert_container", 0, 0);

            var right_vertical_container = new Container("right_vert_container", 0, 0);

            horizontal_container.Add(left_vertical_container);
            horizontal_container.Add(right_vertical_container);

            _sprite_id_label = new Label("sprite_id_label", $"#000", 1);

            var sprite_editor_size = TileSize * AppLayout.Data.EditorSizeMultiplier;

            _sprite_sheet_editor =
                new SpriteSheetEditor("sprite_sheet_editor", sprite_editor_size, sprite_editor_size);


            _tool_box = new ToolSelector("tool_selector");

            var spritesheet_navigator_size = TileSize * AppLayout.Data.NavigatorSizeMultiplier;

            _sprite_sheet_navigator = new SpriteSheetNavigator("sprite_sheet_nav", spritesheet_navigator_size,
                                                               spritesheet_navigator_size, new Rect(0, 0, TileSize, TileSize));

            _color_picker = new ColorPicker("color_picker");

            _source_rect_size_mult_slider = new SelectorSlider("source_rect_size_slider", AppLayout.Data.SelectorThumbSize, new[] { 1, 2, 4, 8 });

            _brush_size_slider =
                new SelectorSlider("brush_size_slider", AppLayout.Data.SelectorThumbSize, new[] { 1, 2, 4 });

            _sprite_sheet_editor.SetSpriteSheet(_sprite_sheet);
            _sprite_sheet_navigator.SetSpriteSheet(_sprite_sheet);
            _sprite_sheet_editor.SetPaintColor(_color_picker.CurrentColor);

            left_vertical_container.Add(_brush_size_slider);
            left_vertical_container.Add(_sprite_id_label);
            left_vertical_container.Add(_sprite_sheet_editor);
            left_vertical_container.Add(_tool_box);
            left_vertical_container.Add(_color_picker);

            right_vertical_container.Add(_source_rect_size_mult_slider);
            right_vertical_container.Add(_sprite_sheet_navigator);

            Add(horizontal_container);

            horizontal_container.Layout(Orientation.Horizontal, ContainerAlignment.Stretch, ContainerAlignment.Stretch, 10, 10);
            left_vertical_container.Layout(Orientation.Vertical, ContainerAlignment.Center, ContainerAlignment.Center, 0, 10);
            right_vertical_container.Layout(Orientation.Vertical, ContainerAlignment.Center, ContainerAlignment.Center, 0, 10);

            TypedMessager <byte> .On(MessageCodes.ColorPicked, OnColorPick);

            _source_rect_size_mult_slider.OnChange += (int value) =>
            {
                TypedMessager <int> .Emit(MessageCodes.SpriteNavigatorCursorSizeChanged, value);
            };

            _brush_size_slider.OnChange += (int value) =>
            {
                TypedMessager <int> .Emit(MessageCodes.SpriteSheetEditorBrushSizeChanged, value);
            };

            TypedMessager <int> .On(MessageCodes.ToolTriggered, OnToolActionTriggered);

            TypedMessager <int> .On(MessageCodes.SpriteIdChanged, OnSpriteIdChanged);
        }
예제 #6
0
 public void SetColor(byte color)
 {
     CurrentColor = color;
     TypedMessager <byte> .Emit(MessageCodes.ColorSelected, color);
 }
예제 #7
0
 private void UpdateSpriteIdFromSourceRect()
 {
     CurrentSpriteId = (_current_source_rect.X + _current_source_rect.Y * (CurrentSpritesheet.Width / SpriteEditor.TileSize)) / SpriteEditor.TileSize;
     TypedMessager <int> .Emit(MessageCodes.SpriteIdChanged, CurrentSpriteId);
 }
예제 #8
0
 private void EmitRectChanged()
 {
     TypedMessager <Rect> .Emit(MessageCodes.SourceRectChanged, _current_source_rect);
 }