Unify coordinate systems
parent
dbf2d00b37
commit
39a46bbcea
@ -0,0 +1,31 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"code.rocketnine.space/tslocum/commandeuropa/component"
|
||||
"code.rocketnine.space/tslocum/commandeuropa/world"
|
||||
"code.rocketnine.space/tslocum/gohan"
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
type HandleSelection struct {
|
||||
Position *component.Position
|
||||
Unit *component.Unit
|
||||
}
|
||||
|
||||
func (s *HandleSelection) Update(e gohan.Entity) error {
|
||||
return gohan.ErrUnregister
|
||||
}
|
||||
|
||||
func (s *HandleSelection) Draw(e gohan.Entity, screen *ebiten.Image) error {
|
||||
if world.SelectX == -1 && world.SelectY == -1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if s.Position.X == world.SelectX && s.Position.Y == world.SelectY {
|
||||
log.Println("FOUND UNIT")
|
||||
}
|
||||
log.Println(s.Position.X, s.Position.Y, world.SelectX, world.SelectY)
|
||||
return nil
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"image/color"
|
||||
|
||||
"code.rocketnine.space/tslocum/commandeuropa/component"
|
||||
"code.rocketnine.space/tslocum/commandeuropa/world"
|
||||
"code.rocketnine.space/tslocum/gohan"
|
||||
"github.com/hajimehoshi/ebiten/v2"
|
||||
)
|
||||
|
||||
type RenderSelection struct {
|
||||
Unit *component.Unit
|
||||
Position *component.Position
|
||||
Sprite *component.Sprite
|
||||
|
||||
op *ebiten.DrawImageOptions
|
||||
initialized bool
|
||||
}
|
||||
|
||||
func (r *RenderSelection) Initialize() {
|
||||
r.op = &ebiten.DrawImageOptions{}
|
||||
}
|
||||
|
||||
func (r *RenderSelection) Update(e gohan.Entity) error {
|
||||
return gohan.ErrUnregister
|
||||
}
|
||||
|
||||
func (r *RenderSelection) Draw(e gohan.Entity, screen *ebiten.Image) error {
|
||||
if !r.initialized {
|
||||
r.Initialize()
|
||||
}
|
||||
|
||||
if !r.Unit.Selected {
|
||||
return nil
|
||||
}
|
||||
|
||||
dx, dy := world.LevelCoordinatesToScreen(r.Position.X, r.Position.Y)
|
||||
drawHighlight(screen, dx, dy, r.Sprite.Width, r.Sprite.Height)
|
||||
return nil
|
||||
}
|
||||
|
||||
func drawHighlight(target *ebiten.Image, x, y, w, h float64) {
|
||||
right, bottom := x+w*world.CamScale, y+h*world.CamScale
|
||||
|
||||
outerColor := color.RGBA{0, 0, 0, 255}
|
||||
outerSize := 3 * world.CamScale
|
||||
target.SubImage(floatRect(x, y, right, y+outerSize)).(*ebiten.Image).Fill(outerColor)
|
||||
target.SubImage(floatRect(x, bottom-outerSize, right, bottom)).(*ebiten.Image).Fill(outerColor)
|
||||
target.SubImage(floatRect(x, y, x+outerSize, bottom)).(*ebiten.Image).Fill(outerColor)
|
||||
target.SubImage(floatRect(right-outerSize, y, right, bottom)).(*ebiten.Image).Fill(outerColor)
|
||||
|
||||
innerColor := color.RGBA{255, 255, 255, 255}
|
||||
innerPadding := 1 * world.CamScale
|
||||
innerSize := 1 * world.CamScale
|
||||
target.SubImage(floatRect(x+innerPadding, y+innerPadding, right-innerPadding, y+innerPadding+innerSize)).(*ebiten.Image).Fill(innerColor)
|
||||
target.SubImage(floatRect(x+innerPadding, bottom-innerPadding-innerSize, right-innerPadding, bottom-innerPadding)).(*ebiten.Image).Fill(innerColor)
|
||||
target.SubImage(floatRect(x+innerPadding, y+innerPadding, x+innerPadding+innerSize, bottom-innerPadding)).(*ebiten.Image).Fill(innerColor)
|
||||
target.SubImage(floatRect(right-innerPadding-innerSize, y+innerPadding, right-innerPadding, bottom-innerPadding)).(*ebiten.Image).Fill(innerColor)
|
||||
}
|
Loading…
Reference in New Issue