@rpgjs/physic
Version:
A deterministic 2D top-down physics library for RPG, sandbox and MMO games
75 lines • 2.15 kB
TypeScript
import { MovementBody, MovementStrategy } from '../MovementStrategy';
/**
* Type of projectile trajectory.
*/
export declare enum ProjectileType {
Straight = "straight",
Arc = "arc",
Bounce = "bounce"
}
/**
* Configuration for a projectile trajectory.
*/
export interface ProjectileOptions {
/** Horizontal speed in units per second */
speed: number;
/** Heading direction (will be normalized) */
direction: {
x: number;
y: number;
};
/** Maximum travel distance (optional) */
maxRange?: number;
/** Maximum lifetime in seconds (optional) */
lifetime?: number;
/** Initial vertical height */
initialHeight?: number;
/** Apex height for arc trajectories */
maxHeight?: number;
/** Gravity strength applied to arc/bounce projectiles */
gravity?: number;
/** Number of allowed bounces */
maxBounces?: number;
/** Energy retained after each bounce (0-1) */
bounciness?: number;
/** Drag factor applied per second (0-1) */
drag?: number;
/** Optional callback receiving height updates */
onHeightUpdate?: (height: number, body: MovementBody) => void;
}
/**
* Moves an entity following a projectile trajectory.
*
* @example
* ```typescript
* const projectile = new ProjectileMovement(ProjectileType.Arc, {
* speed: 12,
* direction: { x: 1, y: 0 },
* maxHeight: 3,
* gravity: 30,
* });
* movementManager.add(entity, projectile);
* ```
*/
export declare class ProjectileMovement implements MovementStrategy {
private readonly type;
private elapsed;
private distanceTraveled;
private startPosition;
private bounceCount;
private stage;
private finished;
private currentHeight;
private verticalVelocity;
private readonly direction;
private readonly options;
constructor(type: ProjectileType, options: ProjectileOptions);
update(body: MovementBody, dt: number): void;
isFinished(): boolean;
getHeight(): number;
getProgress(): number;
private updateFlying;
private updateRolling;
private finish;
}
//# sourceMappingURL=ProjectileMovement.d.ts.map