From b191ba2a948ada9974c9d43331023a01bc8a737d Mon Sep 17 00:00:00 2001 From: Nick Thomas Date: Sat, 18 Apr 2020 11:44:05 +0100 Subject: [PATCH] Simplify bounds clipping a tiny bit --- internal/scenario/draw.go | 25 +++++++++++++++++++------ internal/scenario/manage.go | 14 ++------------ internal/scenario/scenario.go | 5 +++-- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/internal/scenario/draw.go b/internal/scenario/draw.go index 944f766..2afa432 100644 --- a/internal/scenario/draw.go +++ b/internal/scenario/draw.go @@ -22,6 +22,17 @@ type IsoPt struct { func (s *Scenario) Update(screenX, screenY int) error { s.tick += 1 + x, y := ebiten.CursorPosition() + screenPos := CartPt{ + X: float64(s.Viewpoint.X + x), + Y: float64(s.Viewpoint.Y + y), + } + + s.selectedCell = screenPos.ToISO() + + // TODO: zoom support will need a camera + // FIXME: adjust for Z level + return nil } @@ -33,13 +44,15 @@ func (s *Scenario) Draw(screen *ebiten.Image) error { sw, sh := screen.Size() - topLeft := CartPt{X: float64(s.Viewpoint.X), Y: float64(s.Viewpoint.Y)}.ToISO() - topLeft.X -= 5 // Ensure we paint to every visible section of the screeen. - topLeft.X -= 5 // FIXME: haxxx + topLeft := CartPt{ + X: float64(s.Viewpoint.X - 2*cellWidth), // Ensure all visible cells are rendered + Y: float64(s.Viewpoint.Y - 2*cellHeight), + }.ToISO() - bottomRight := CartPt{X: float64(s.Viewpoint.X + sw), Y: float64(s.Viewpoint.Y + sh)}.ToISO() - bottomRight.X += 5 - bottomRight.Y += 5 + bottomRight := CartPt{ + X: float64(s.Viewpoint.X + sw + 2*cellHeight), + Y: float64(s.Viewpoint.Y + sh + 5*cellHeight), // Z dimension requires it + }.ToISO() // X+Y is constant for all tiles in a column // X-Y is constant for all tiles in a row diff --git a/internal/scenario/manage.go b/internal/scenario/manage.go index 7e2ab8f..7dbd6d4 100644 --- a/internal/scenario/manage.go +++ b/internal/scenario/manage.go @@ -1,10 +1,6 @@ package scenario import ( - // "image" - - "github.com/hajimehoshi/ebiten" - "code.ur.gs/lupine/ordoor/internal/maps" ) @@ -14,12 +10,6 @@ type CellPoint struct { } func (s *Scenario) CellAtCursor() (maps.Cell, CellPoint) { - x, y := ebiten.CursorPosition() - screenPos := CartPt{X: float64(s.Viewpoint.X + x), Y: float64(s.Viewpoint.Y + y)} - isoPos := screenPos.ToISO() - // Convert to cell coordinates. - // TODO: zoom support will need a camera - // FIXME: adjust for Z level - - return s.area.Cell(int(isoPos.X), int(isoPos.Y), 0), CellPoint{IsoPt: isoPos, Z: s.ZIdx} + cell := s.area.Cell(int(s.selectedCell.X), int(s.selectedCell.Y), 0) + return cell, CellPoint{IsoPt: s.selectedCell, Z: 0} } diff --git a/internal/scenario/scenario.go b/internal/scenario/scenario.go index 493ddc8..572f714 100644 --- a/internal/scenario/scenario.go +++ b/internal/scenario/scenario.go @@ -11,8 +11,9 @@ import ( type Scenario struct { area *assetstore.Map - tick int - turn int + tick int + turn int + selectedCell IsoPt // All these must be modified by user actions somehow. // TODO: extract into the idea of a viewport passed to Update / Draw somehow?