71 lines
1.2 KiB
Go
71 lines
1.2 KiB
Go
|
package doodads
|
||
|
|
||
|
import (
|
||
|
"git.kirsle.net/apps/doodle/render"
|
||
|
)
|
||
|
|
||
|
// PlayerID is the Doodad ID for the player character.
|
||
|
const PlayerID = "PLAYER"
|
||
|
|
||
|
// Player is a special doodad for the player character.
|
||
|
type Player struct {
|
||
|
point render.Point
|
||
|
velocity render.Point
|
||
|
size render.Rect
|
||
|
}
|
||
|
|
||
|
// NewPlayer creates the special Player Character doodad.
|
||
|
func NewPlayer() *Player {
|
||
|
return &Player{
|
||
|
point: render.Point{
|
||
|
X: 100,
|
||
|
Y: 100,
|
||
|
},
|
||
|
size: render.Rect{
|
||
|
W: 16,
|
||
|
H: 16,
|
||
|
},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// ID of the Player singleton.
|
||
|
func (p *Player) ID() string {
|
||
|
return PlayerID
|
||
|
}
|
||
|
|
||
|
// Position of the player.
|
||
|
func (p *Player) Position() render.Point {
|
||
|
return p.point
|
||
|
}
|
||
|
|
||
|
// MoveBy a relative delta position.
|
||
|
func (p *Player) MoveBy(by render.Point) {
|
||
|
p.point.X += by.X
|
||
|
p.point.Y += by.Y
|
||
|
}
|
||
|
|
||
|
// MoveTo an absolute position.
|
||
|
func (p *Player) MoveTo(to render.Point) {
|
||
|
p.point = to
|
||
|
}
|
||
|
|
||
|
// Velocity returns the player's current velocity.
|
||
|
func (p *Player) Velocity() render.Point {
|
||
|
return p.velocity
|
||
|
}
|
||
|
|
||
|
// Size returns the player's size.
|
||
|
func (p *Player) Size() render.Rect {
|
||
|
return p.size
|
||
|
}
|
||
|
|
||
|
// Draw the player sprite.
|
||
|
func (p *Player) Draw(e render.Engine) {
|
||
|
e.DrawRect(render.Magenta, render.Rect{
|
||
|
X: p.point.X,
|
||
|
Y: p.point.Y,
|
||
|
W: p.size.W,
|
||
|
H: p.size.H,
|
||
|
})
|
||
|
}
|