Draw editor terrain/resource preview as part of the world.

This commit is contained in:
Paul Chote
2020-01-12 12:28:06 +00:00
committed by abcdefg30
parent e74033bded
commit cc05621c10
8 changed files with 129 additions and 73 deletions

View File

@@ -10,7 +10,6 @@
#endregion
using System.Collections.Generic;
using System.Linq;
using OpenRA.Graphics;
using OpenRA.Mods.Common.Traits;
@@ -23,8 +22,9 @@ namespace OpenRA.Mods.Common.Widgets
readonly WorldRenderer worldRenderer;
readonly World world;
readonly EditorViewportControllerWidget editorWidget;
readonly SpriteWidget preview;
readonly EditorActionManager editorActionManager;
readonly EditorCursorLayer editorCursor;
readonly int cursorToken;
AddResourcesEditorAction action;
bool resourceAdded;
@@ -36,21 +36,10 @@ namespace OpenRA.Mods.Common.Widgets
worldRenderer = wr;
world = wr.World;
editorActionManager = world.WorldActor.Trait<EditorActionManager>();
editorCursor = world.WorldActor.Trait<EditorCursorLayer>();
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();
cursorToken = editorCursor.SetResource(wr, resource);
}
public bool HandleMouseInput(MouseInput mi)
@@ -70,6 +59,9 @@ namespace OpenRA.Mods.Common.Widgets
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))
@@ -111,20 +103,12 @@ namespace OpenRA.Mods.Common.Widgets
return ResourceType.AllowOnRamps || tileInfo.RampType == 0;
}
public void Tick()
public void Tick() { }
public void Dispose()
{
var cell = worldRenderer.Viewport.ViewToWorld(Viewport.LastMousePos);
var offset = WVec.Zero;
var location = world.Map.CenterOfCell(cell) + offset;
var cellScreenPosition = worldRenderer.ScreenPxPosition(location);
var cellScreenPixel = worldRenderer.Viewport.WorldToViewPx(cellScreenPosition);
preview.Bounds.X = cellScreenPixel.X;
preview.Bounds.Y = cellScreenPixel.Y;
editorCursor.Clear(cursorToken);
}
public void Dispose() { }
}
struct CellResource