2018-01-23 11:58:35 -07:00

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
}