Example #1
0
        public EditorResourceBrush(EditorViewportControllerWidget editorWidget, ResourceTypeInfo resource, WorldRenderer wr)
        {
            this.editorWidget   = editorWidget;
            ResourceType        = resource;
            worldRenderer       = wr;
            world               = wr.World;
            editorActionManager = world.WorldActor.Trait <EditorActionManager>();
            editorCursor        = world.WorldActor.Trait <EditorCursorLayer>();
            action              = new AddResourcesEditorAction(world.Map, ResourceType);

            cursorToken = editorCursor.SetResource(wr, resource);
        }
Example #2
0
        public bool HandleMouseInput(MouseInput mi)
        {
            // Exclusively uses left and right mouse buttons, but nothing else
            if (mi.Button != MouseButton.Left && mi.Button != MouseButton.Right)
            {
                return(false);
            }

            if (mi.Button == MouseButton.Right)
            {
                if (mi.Event == MouseInputEvent.Up)
                {
                    editorWidget.ClearBrush();
                    return(true);
                }

                return(false);
            }

            if (editorCursor.CurrentToken != cursorToken)
            {
                return(false);
            }

            var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);

            if (mi.Button == MouseButton.Left && mi.Event != MouseInputEvent.Up && AllowResourceAt(cell))
            {
                var type  = (byte)ResourceType.ResourceType;
                var index = (byte)ResourceType.MaxDensity;
                action.Add(new CellResource(cell, world.Map.Resources[cell], new ResourceTile(type, index)));
                resourceAdded = true;
            }
            else if (resourceAdded && mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Up)
            {
                editorActionManager.Add(action);
                action        = new AddResourcesEditorAction(world.Map, ResourceType);
                resourceAdded = false;
            }

            return(true);
        }
Example #3
0
        public bool HandleMouseInput(MouseInput mi)
        {
            // Exclusively uses left and right mouse buttons, but nothing else
            if (mi.Button != MouseButton.Left && mi.Button != MouseButton.Right)
            {
                return(false);
            }

            if (mi.Button == MouseButton.Right)
            {
                if (mi.Event == MouseInputEvent.Up)
                {
                    editorWidget.ClearBrush();
                    return(true);
                }

                return(false);
            }

            if (editorCursor.CurrentToken != cursorToken)
            {
                return(false);
            }

            var cell = worldRenderer.Viewport.ViewToWorld(mi.Location);

            if (mi.Button == MouseButton.Left && mi.Event != MouseInputEvent.Up && resourceLayer.CanAddResource(ResourceType, cell))
            {
                action.Add(new CellResource(cell, resourceLayer.GetResource(cell), ResourceType));
                resourceAdded = true;
            }
            else if (resourceAdded && mi.Button == MouseButton.Left && mi.Event == MouseInputEvent.Up)
            {
                editorActionManager.Add(action);
                action        = new AddResourcesEditorAction(world.Map, ResourceType, resourceLayer);
                resourceAdded = false;
            }

            return(true);
        }
Example #4
0
        public EditorResourceBrush(EditorViewportControllerWidget editorWidget, ResourceTypeInfo resource, WorldRenderer wr)
        {
            this.editorWidget   = editorWidget;
            ResourceType        = resource;
            worldRenderer       = wr;
            world               = wr.World;
            editorActionManager = world.WorldActor.Trait <EditorActionManager>();
            action              = new AddResourcesEditorAction(world.Map, ResourceType);

            preview           = editorWidget.Get <SpriteWidget>("DRAG_LAYER_PREVIEW");
            preview.Palette   = resource.Palette;
            preview.GetScale  = () => worldRenderer.Viewport.Zoom;
            preview.IsVisible = () => editorWidget.CurrentBrush == this;

            var variant  = resource.Sequences.FirstOrDefault();
            var sequence = wr.World.Map.Rules.Sequences.GetSequence("resources", variant);
            var sprite   = sequence.GetSprite(resource.MaxDensity - 1);

            preview.GetSprite = () => sprite;

            // The preview widget may be rendered by the higher-level code before it is ticked.
            // Force a manual tick to ensure the bounds are set correctly for this first draw.
            Tick();
        }