package main import "surdeus.su/core/gg/ox" import "surdeus.su/core/gg/mx" import "surdeus.su/core/gg" import "log" var ( camera *Camera ) type Camera struct { ox.Camera ScaleSpeed mx.Float RotationSpeed mx.Float } func NewCamera() *Camera { camera := &Camera{} camera.Camera = ox.NewCamera() camera.ScaleSpeed = 5. camera.RotationSpeed = .3 return camera } func (cam *Camera) OnUpdate(c gg.Context) { dt := c.Engine().DT().Seconds() mov := c.Events().Mouse.Move wheel := c.Events().Mouse.WheelChange shiftPressed := c.Engine().IsPressed(gg.KeyShift) d := float64(1.) if shiftPressed { d *= -1 } // Moving. if mov != nil && c.Engine().IsButtoned( gg.MouseButtonRight, ) { cam.Move(mov.AbsDelta) } // Scale. if wheel != nil { k := 1.5 log.Println(wheel.Offset.Y) if wheel.Offset.Y < 0 { k = 1/k } cam.Scale(mx.V2( k, //wheel.Offset.Y * dt * cam.ScaleSpeed * 40, )) } // Scale and rotation. for _, key := range c.Engine().GetKeyboardKeys() { switch key { case gg.KeyF: cam.AddScale(mx.VX(d*cam.ScaleSpeed * dt)) case gg.KeyG: cam.AddScale(mx.VY(d*cam.ScaleSpeed * dt)) case gg.KeyR: cam.Rotate(d*mx.Pi * cam.RotationSpeed * dt) } } }