Zoom Progress: Actor/Link Tool Hitboxes
* When the Actor Tool or Link Tool is active, mouse-over hitboxes on the level's actors now works correctly while zoomed and scrolling in the level. * Regression: Level chunks don't appear outside a certain range from origin while zoomed in. * Regression: Actors don't draw their sprite while zoomed in, but do when zoomed out.
This commit is contained in:
parent
731d142dd6
commit
6f5bd910c8
|
@ -304,9 +304,20 @@ func (w *Canvas) loopEditable(ev *event.State) error {
|
||||||
|
|
||||||
var deleteActors = []*level.Actor{}
|
var deleteActors = []*level.Actor{}
|
||||||
for _, actor := range w.actors {
|
for _, actor := range w.actors {
|
||||||
|
|
||||||
|
// Compute the bounding box on screen where this doodad
|
||||||
|
// visually appears.
|
||||||
|
var scrollBias = render.Point{
|
||||||
|
X: w.Scroll.X,
|
||||||
|
Y: w.Scroll.Y,
|
||||||
|
}
|
||||||
|
if w.Zoom != 0 {
|
||||||
|
scrollBias.X = w.ZoomDivide(scrollBias.X)
|
||||||
|
scrollBias.Y = w.ZoomDivide(scrollBias.Y)
|
||||||
|
}
|
||||||
box := render.Rect{
|
box := render.Rect{
|
||||||
X: actor.Actor.Point.X - P.X - w.Scroll.X,
|
X: actor.Actor.Point.X - P.X - scrollBias.X,
|
||||||
Y: actor.Actor.Point.Y - P.Y - w.Scroll.Y,
|
Y: actor.Actor.Point.Y - P.Y - scrollBias.Y,
|
||||||
W: actor.Canvas.Size().W,
|
W: actor.Canvas.Size().W,
|
||||||
H: actor.Canvas.Size().H,
|
H: actor.Canvas.Size().H,
|
||||||
}
|
}
|
||||||
|
@ -356,9 +367,19 @@ func (w *Canvas) loopEditable(ev *event.State) error {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Compute the bounding box on screen where this doodad
|
||||||
|
// visually appears.
|
||||||
|
var scrollBias = render.Point{
|
||||||
|
X: w.Scroll.X,
|
||||||
|
Y: w.Scroll.Y,
|
||||||
|
}
|
||||||
|
if w.Zoom != 0 {
|
||||||
|
scrollBias.X = w.ZoomDivide(scrollBias.X)
|
||||||
|
scrollBias.Y = w.ZoomDivide(scrollBias.Y)
|
||||||
|
}
|
||||||
box := render.Rect{
|
box := render.Rect{
|
||||||
X: actor.Actor.Point.X - P.X - w.Scroll.X,
|
X: actor.Actor.Point.X - P.X - scrollBias.X,
|
||||||
Y: actor.Actor.Point.Y - P.Y - w.Scroll.Y,
|
Y: actor.Actor.Point.Y - P.Y - scrollBias.Y,
|
||||||
W: actor.Canvas.Size().W,
|
W: actor.Canvas.Size().W,
|
||||||
H: actor.Canvas.Size().H,
|
H: actor.Canvas.Size().H,
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,15 +69,10 @@ func (w *Canvas) Present(e render.Engine, p render.Point) {
|
||||||
// (0, 0) = (0,0, 127,127) chunk A
|
// (0, 0) = (0,0, 127,127) chunk A
|
||||||
// (1, 0) = (128,128, 255,255) chunk B
|
// (1, 0) = (128,128, 255,255) chunk B
|
||||||
// At 2x zoom, Chunk A is still half on screen at -128 scroll
|
// At 2x zoom, Chunk A is still half on screen at -128 scroll
|
||||||
if w.Zoom > 0 {
|
// if w.Zoom > 0 {
|
||||||
// Since disappearing chunks happens on Zoom In the most?
|
// Viewport.X = w.ZoomDivide(w.chunks.Size)
|
||||||
// Grow the viewport's X and Y offsets back the other
|
// Viewport.Y = w.ZoomDivide(w.chunks.Size)
|
||||||
// way, so chunks sliding off the screen don't unload early.
|
// }
|
||||||
// This kinda thing makes no difference at all?
|
|
||||||
// var orig = Viewport
|
|
||||||
// Viewport.X = w.ZoomDivide(w.chunks.Size)
|
|
||||||
// Viewport.Y = w.ZoomDivide(w.chunks.Size)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the chunks in the viewport and cache their textures.
|
// Get the chunks in the viewport and cache their textures.
|
||||||
for coord := range w.chunks.IterViewportChunks(Viewport) {
|
for coord := range w.chunks.IterViewportChunks(Viewport) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user