Started implementing the camera.
This commit is contained in:
parent
92db008ccf
commit
95a7b27ff8
4 changed files with 60 additions and 2 deletions
|
@ -31,7 +31,10 @@ func NewPlayer() *Player {
|
|||
}
|
||||
|
||||
func (p *Player) Update(e *gx.Engine) {
|
||||
p.Sprite.Object.T.P.Y += 40 * e.DT()
|
||||
//p.Sprite.Object.T.P.Y += 40 * e.DT()
|
||||
dt := e.DT()
|
||||
c := e.Camera()
|
||||
c.Object.T.P.X += 40 * dt
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
|
37
src/gx/camera.go
Normal file
37
src/gx/camera.go
Normal file
|
@ -0,0 +1,37 @@
|
|||
package gx
|
||||
|
||||
// Implements the camera component
|
||||
// for the main window.
|
||||
type Camera struct {
|
||||
*Object
|
||||
}
|
||||
|
||||
// Returns the matrix satysfying camera
|
||||
// position, scale and rotation to apply
|
||||
// it to the objects to get the real
|
||||
// transform to display on the screen.
|
||||
func (c *Camera)Matrix(scale bool) Matrix {
|
||||
g := &Matrix{}
|
||||
|
||||
g.Translate(
|
||||
c.Object.T.RA.X,
|
||||
c.Object.T.RA.Y,
|
||||
)
|
||||
|
||||
g.Rotate(c.Object.T.R)
|
||||
|
||||
g.Translate(
|
||||
-c.Object.T.P.X,
|
||||
-c.Object.T.P.Y,
|
||||
)
|
||||
|
||||
if scale {
|
||||
g.Scale(
|
||||
c.Object.T.S.X,
|
||||
c.Object.T.S.Y,
|
||||
)
|
||||
}
|
||||
|
||||
return *g
|
||||
}
|
||||
|
|
@ -22,10 +22,15 @@ type Engine struct {
|
|||
behavers []Behaver
|
||||
lastTime time.Time
|
||||
dt Float
|
||||
camera *Camera
|
||||
}
|
||||
|
||||
type engine Engine
|
||||
|
||||
func (e *Engine) Camera() *Camera {
|
||||
return e.camera
|
||||
}
|
||||
|
||||
func New(
|
||||
cfg *WindowConfig,
|
||||
) *Engine {
|
||||
|
@ -35,6 +40,13 @@ func New(
|
|||
Layer,
|
||||
*[]Drawer,
|
||||
](true),
|
||||
camera: &Camera{
|
||||
Object: &Object{
|
||||
T: Transform{
|
||||
S: Vector{0.1, 1},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import (
|
|||
type Sprite struct {
|
||||
*Object
|
||||
*Image
|
||||
Floating bool
|
||||
}
|
||||
|
||||
func (s *Sprite) Draw(
|
||||
|
@ -14,8 +15,13 @@ func (s *Sprite) Draw(
|
|||
i *Image,
|
||||
) {
|
||||
op := &ebiten.DrawImageOptions{}
|
||||
op.GeoM = s.Object.T.Matrix()
|
||||
m := s.Object.T.Matrix()
|
||||
|
||||
if e.camera != nil {
|
||||
m.Concat(e.camera.Matrix(true))
|
||||
}
|
||||
|
||||
op.GeoM = m
|
||||
i.DrawImage(s.Image, op)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue