package objs import ( "github.com/Zyko0/go-sdl3/sdl" "ponger/ecs" "ponger/events" ) type Cursor struct { *ecs.GameObject MaxX, MaxY float32 Trail []sdl.FPoint Pressed bool } func (c *Cursor) ProcessMousePress(ev events.MousePress) { c.Pressed = ev.IsPressed } func (c *Cursor) ProcessWindowChange(ev events.WindowChange) { c.MaxX = float32(ev.Width) c.MaxY = float32(ev.Height) } func (c *Cursor) Render(renderer *sdl.Renderer) { if c.Pressed { c.Trail = append(c.Trail, c.Position) } else { c.Trail = nil } c.Safe(renderer.SetDrawColor(255, 0, 0, 255)) size := float32(13) r := &sdl.FRect{ X: c.Position.X - size/2, Y: c.Position.Y - size/2, W: size, H: size, } c.Safe(renderer.RenderRect(r)) if c.Trail != nil { c.Safe(renderer.RenderLines(c.Trail)) } } func (c *Cursor) ProcessMouseMotion(ev events.MouseMotion) { c.Position.X += ev.Dx c.Position.Y += ev.Dy if c.Position.X < 0 { c.Position.X = 0 } if c.Position.Y < 0 { c.Position.Y = 0 } if c.Position.X > c.MaxX { c.Position.X = c.MaxX } if c.Position.Y > c.MaxY { c.Position.Y = c.MaxY } } func NewCursor() ecs.IsGameObject { return &Cursor{ GameObject: &ecs.GameObject{}, } }