-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplayer.go
83 lines (67 loc) · 1.73 KB
/
player.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"sync/atomic"
"time"
mol "github.com/LiterMC/molecular"
"github.com/g3n/engine/camera"
"github.com/g3n/engine/math32"
)
var playerStandCube = mol.NewCube(mol.Vec3{-0.25, -1, -0.1}, mol.Vec3{0.5, 1.8, 0.2})
var playerSneakCube = mol.NewCube(mol.Vec3{-0.25, -0.4, -0.2}, mol.Vec3{0.5, 0.9, 0.4})
type Player struct {
ctrl *FollowControl
outline *mol.Cube
object *mol.Object
queued atomic.Bool
// status
enabled FollowEnabled
status followStatus
lostFocus bool
lastX, lastY float32
}
func NewPlayer(cam *camera.Camera) (p *Player) {
p = new(Player)
p.ctrl = NewFollowControl(cam)
p.ctrl.OnMove = func(dist float32, direction *math32.Vector3) bool {
var quat math32.Quaternion
p.ctrl.Camera().WorldQuaternion(&quat)
dir := *direction
dir.ApplyQuaternion(&quat)
dir.Normalize()
dir.MultiplyScalar(dist)
// Get world position
vel := p.object.VelocityLocked()
vel.Add(ToMolVec3(&dir))
p.object.SetVelocity(vel)
return true
}
p.ctrl.SetEnabled(FollowRot | FollowZoom | FollowMove | FollowKeys)
p.outline = playerStandCube
p.enabled = FollowAll
return
}
func (p *Player) SetObject(o *mol.Object) {
p.object = o
}
func (p *Player) Mass() float64 {
return 1e3
}
func (p *Player) Material(f mol.Facing) *mol.Material {
return nil
}
func (p *Player) Outline() *mol.Cube {
return p.outline
}
func (p *Player) Tick(dt float64) {
}
func (p *Player) renderTick(r *Runner, dt time.Duration) {
obj := p.object
pos := obj.AbsPosLocked()
r.stats.Speed = obj.VelocityLocked().Len()
r.stats.Pos = obj.PosLocked()
r.stats.Anchor = obj.AnchorLocked()
cam := p.ctrl.Camera()
p.ctrl.Tick(dt)
pos.ScaleN(1. / posScale)
cam.SetPosition(float32(pos.X), float32(pos.Y), float32(pos.Z))
}