Noah Petherbridge
e141203c4b
Known bugs: * The Pixel format in the Grid has DX and DY attributes and it wreaks havoc on collision detection in Play Mode when you come straight from the editor. Reloading the map from disk to play is OK cuz it lacks these attrs.
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,
|
|
})
|
|
}
|