UNPKG

blaze-2d

Version:

A fast and simple WebGL 2 2D game engine written in TypeScript

30 lines 1.12 kB
import { vec2 } from "gl-matrix"; const force = vec2.create(); const airFriction = vec2.create(); export default function solveForces(obj, delta, gravity) { if (obj.getInverseMass() === 0 || !obj.isDynamic) return; const halfDelta = delta / 2; // gravity vec2.scaleAndAdd(force, obj.force, gravity, obj.getMass()); // scale force for mass of object vec2.scale(force, force, obj.getInverseMass()); // air resistance if (obj.airFriction !== 0) { const vel = vec2.len(obj.velocity); vec2.scale(airFriction, obj.velocity, -obj.airFriction * vel * halfDelta); vec2.add(force, force, airFriction); } // compute torque let torque = obj.torque * obj.getInverseInertia(); if (obj.lockXAxis) force[0] = 0; if (obj.lockYAxis) force[1] = 0; if (obj.lockRotation) torque = 0; vec2.scaleAndAdd(obj.velocity, obj.velocity, force, halfDelta); obj.angularVelocity += -obj.angularDamping * obj.angularVelocity * obj.angularVelocity; obj.angularVelocity += torque * halfDelta; } //# sourceMappingURL=forces.js.map