83 lines
1.8 KiB
Go
83 lines
1.8 KiB
Go
package gameobjects
|
|
|
|
import (
|
|
"github.com/faiface/pixel"
|
|
"github.com/faiface/pixel/pixelgl"
|
|
//"fmt"
|
|
)
|
|
|
|
type Player struct {
|
|
X, Y float64
|
|
PlayerVec pixel.Vec
|
|
sprFrame int
|
|
spriteSheet pixel.Picture
|
|
sprFrames []pixel.Rect
|
|
sprite *pixel.Sprite
|
|
speed float64
|
|
}
|
|
|
|
func NewPlayer(win *pixelgl.Window, spriteSheet pixel.Picture) (*Player){
|
|
var p *Player
|
|
p.X = win.Bounds().Max.X/2
|
|
p.Y = win.Bounds().Max.Y/2
|
|
p.PlayerVec = pixel.Vec{
|
|
X:win.Bounds().Max.X/2,
|
|
Y:win.Bounds().Max.Y/2,
|
|
}
|
|
p.sprFrame = 9
|
|
p.spriteSheet = spriteSheet
|
|
p.sprFrames = createSpriteFrames(spriteSheet)
|
|
p.sprite = pixel.NewSprite(spriteSheet, p.sprFrames[p.sprFrame])
|
|
p.speed = 10.0
|
|
return p
|
|
}
|
|
|
|
func (p *Player) Update(win *pixelgl.Window, dt int64) {
|
|
|
|
speed := p.speed
|
|
|
|
|
|
|
|
if win.Pressed(pixelgl.KeyA) { //left
|
|
p.sprFrame = 6
|
|
p.X -= speed
|
|
}
|
|
if win.Pressed(pixelgl.KeyD) { //Right
|
|
p.sprFrame = 3
|
|
p.X += speed
|
|
}
|
|
if win.Pressed(pixelgl.KeyS) { //Down
|
|
p.sprFrame = 9
|
|
p.Y -= speed
|
|
}
|
|
if win.Pressed(pixelgl.KeyW) { //up
|
|
p.sprFrame = 0
|
|
p.Y += speed
|
|
}
|
|
p.sprite.Set(p.spriteSheet, p.sprFrames[p.sprFrame])
|
|
|
|
//p.PlayerVec.X += vecX
|
|
//p.PlayerVec.Y += vecY
|
|
|
|
p.PlayerVec = pixel.Vec {
|
|
X: p.X,
|
|
Y: p.Y,
|
|
}
|
|
//fmt.Println(p.PlayerVec.X,p.PlayerVec.Y)
|
|
}
|
|
|
|
func (p *Player) Render(win *pixelgl.Window) { //include batch later
|
|
|
|
p.sprite.Draw(win, pixel.IM.Scaled(pixel.ZV, 4).Moved(p.PlayerVec))
|
|
}
|
|
|
|
func createSpriteFrames(spriteSheet pixel.Picture) ([]pixel.Rect) {
|
|
var sprFrames []pixel.Rect
|
|
var frameHeight, frameWidth float64 = 96, 96
|
|
for y := spriteSheet.Bounds().Min.Y; y < frameHeight*4; y += 96 {
|
|
for x := spriteSheet.Bounds().Min.X; x < frameWidth*3; x += 96 {
|
|
sprFrames = append(sprFrames, pixel.R(x, y, x+96, y+96)) // (x, y, width, height) of frame
|
|
}
|
|
}
|
|
return sprFrames
|
|
} |