Noah Petherbridge
08e65c32b5
* Player character now experiences acceleration and friction when walking around the map! * Actor position and movement had to be converted from int's (render.Point) to float64's to support fine-grained acceleration steps. * Added "physics" package and physics.Vector to be a float64 counterpart for render.Point. Vector is used for uix.Actor.Position() for the sake of movement math. Vector is flattened back to a render.Point for collision purposes, since the levels and hitboxes are pixel-bound. * Refactor the uix.Actor to no longer extend the doodads.Drawing (so it can have a Position that's a Vector instead of a Point). This broke some code that expected `.Doodad` to directly reference the Drawing.Doodad: now you had to refer to it as `a.Drawing.Doodad` which was ugly. Added convenience method .Doodad() for a shortcut. * Moved functions like GetBoundingRect() from doodads package to collision, where it uses its own slimmer Actor interface for just the relevant methods it needs.
34 lines
767 B
Go
34 lines
767 B
Go
package physics
|
|
|
|
// Mover is a moving object.
|
|
type Mover struct {
|
|
Acceleration float64
|
|
Friction float64
|
|
// Gravity Vector
|
|
|
|
// // Position and previous frame's position.
|
|
// Position render.Point
|
|
// OldPosition render.Point
|
|
//
|
|
// // Speed and previous frame's speed.
|
|
// Speed render.Point
|
|
// OldSpeed render.Point
|
|
MaxSpeed Vector
|
|
//
|
|
// // Object is on the ground and its grounded state last frame.
|
|
// Grounded bool
|
|
// WasGrounded bool
|
|
}
|
|
|
|
// NewMover initializes state for a moving object.
|
|
func NewMover() *Mover {
|
|
return &Mover{}
|
|
}
|
|
|
|
// // UpdatePhysics runs calculations on the mover's physics each frame.
|
|
// func (m *Mover) UpdatePhysics() {
|
|
// m.OldPosition = m.Position
|
|
// m.OldSpeed = m.Speed
|
|
// m.WasGrounded = m.Grounded
|
|
// }
|