last_light/game/model/player.go

77 lines
1.2 KiB
Go
Raw Normal View History

2024-04-24 17:11:33 +03:00
package model
import (
"mvvasilev/last_light/util"
"github.com/gdamore/tcell/v2"
"github.com/gdamore/tcell/v2/views"
"github.com/google/uuid"
)
type Player struct {
id uuid.UUID
position util.Position
style tcell.Style
}
func CreatePlayer(x, y uint16, style tcell.Style) *Player {
p := new(Player)
p.id = uuid.New()
p.position = util.PositionAt(x, y)
return p
}
func (p *Player) UniqueId() uuid.UUID {
return p.id
}
func (p *Player) Move(dir Direction) {
x, y := p.position.XYUint16()
switch dir {
case Up:
p.position = util.PositionAt(x, y-1)
case Down:
p.position = util.PositionAt(x, y+1)
case Left:
p.position = util.PositionAt(x-1, y)
case Right:
p.position = util.PositionAt(x+1, y)
}
}
func (p *Player) Draw(v views.View) {
x, y := p.position.XY()
v.SetContent(x, y, '@', nil, p.style)
}
func (p *Player) Input(e *tcell.EventKey) {
switch e.Key() {
case tcell.KeyUp:
p.Move(Up)
case tcell.KeyDown:
p.Move(Down)
case tcell.KeyLeft:
p.Move(Left)
case tcell.KeyRight:
p.Move(Right)
case tcell.KeyRune:
switch e.Rune() {
case 'w':
p.Move(Up)
case 'a':
p.Move(Left)
case 's':
p.Move(Down)
case 'd':
p.Move(Right)
}
}
}
func (p *Player) Tick(dt int64) {
}