import type { Rect } from "../../geometries/rectangle.ts"; import { Sphere } from "../../geometries/sphere.ts"; import { Vector2d } from "../../math/vector2d.ts"; import { Vector3d } from "../../math/vector3d.ts"; import type Renderable from "../../renderable/renderable.js"; import type { AdapterCapabilities, AdapterOptions, BodyDefinition, BodyShape, PhysicsAdapter, RaycastHit, RaycastHit3d } from "../adapter.ts"; import type { Bounds } from "../bounds.ts"; import type World from "../world.js"; import Body from "./body.js"; import Detector from "./detector.js"; /** * Default {@link PhysicsAdapter} that wraps melonJS's native SAT-based * physics. Owns the active body set, the {@link Detector}, gravity, and * the simulation step. Returns the legacy {@link Body} class as its body * handle so existing property-based game code (`body.vel.x = 5`, * `body.isStatic = true`) keeps working unchanged. * * Instantiated by default during `Application` construction; user code * only touches this directly when explicitly wiring it via * `new Application(w, h, { physic: { adapter: new BuiltinAdapter() } })`. * @category Physics */ export default class BuiltinAdapter implements PhysicsAdapter { /** * Short adapter identifier exposed as `world.physic`. Lets user code * branch on the active physics implementation without importing the * concrete adapter class. */ readonly physicLabel = "builtin"; /** * Advertised capabilities; user code may branch on these. */ readonly capabilities: AdapterCapabilities; /** * World gravity. Mutate to change at runtime. * @default <0, 0.98> */ gravity: Vector2d; /** * Active physics bodies in this simulation. */ readonly bodies: Set; /** * Collision detector instance, created in {@link init}. */ detector: Detector; /** * Back-reference to the owning world, set in {@link init}. */ private world; constructor(options?: AdapterOptions); init(world: World): void; destroy(): void; step(dt: number): void; syncFromPhysics(): void; addBody(renderable: Renderable, def: BodyDefinition): Body; removeBody(renderable: Renderable): void; updateShape(renderable: Renderable, shapes: BodyShape[]): void; getVelocity(renderable: Renderable, out?: Vector2d): Vector2d; setVelocity(renderable: Renderable, v: Vector2d): void; applyForce(renderable: Renderable, force: Vector2d, point?: Vector2d): void; applyImpulse(renderable: Renderable, impulse: Vector2d): void; setPosition(renderable: Renderable, p: Vector2d): void; setAngle(renderable: Renderable, angle: number): void; getAngle(renderable: Renderable): number; setAngularVelocity(renderable: Renderable, omega: number): void; getAngularVelocity(renderable: Renderable): number; applyTorque(renderable: Renderable, torque: number): void; setStatic(renderable: Renderable, isStatic: boolean): void; setGravityScale(renderable: Renderable, scale: number): void; setFrictionAir(renderable: Renderable, friction: number | { x: number; y: number; }): void; setMaxVelocity(renderable: Renderable, limit: { x: number; y: number; }): void; getMaxVelocity(renderable: Renderable): { x: number; y: number; }; setCollisionType(renderable: Renderable, type: number): void; setCollisionMask(renderable: Renderable, mask: number): void; setSensor(renderable: Renderable, isSensor: boolean): void; getBodyAABB(renderable: Renderable, out: Bounds): Bounds | undefined; getBodyShapes(renderable: Renderable): readonly BodyShape[]; isGrounded(renderable: Renderable): boolean; raycast(from: Vector2d, to: Vector2d): RaycastHit | null; raycast3d(from: Vector3d, to: Vector3d): RaycastHit3d | null; querySphere(center: Vector3d, radius: number): Renderable[]; querySphere(sphere: Sphere): Renderable[]; queryAABB(rect: Rect): Renderable[]; applyGravity(body: Body): void; } //# sourceMappingURL=builtin-adapter.d.ts.map