aboutsummaryrefslogtreecommitdiff
path: root/static/src/engine/trailing_position.ts
diff options
context:
space:
mode:
Diffstat (limited to 'static/src/engine/trailing_position.ts')
-rw-r--r--static/src/engine/trailing_position.ts33
1 files changed, 33 insertions, 0 deletions
diff --git a/static/src/engine/trailing_position.ts b/static/src/engine/trailing_position.ts
new file mode 100644
index 0000000..1ea22d3
--- /dev/null
+++ b/static/src/engine/trailing_position.ts
@@ -0,0 +1,33 @@
+import { ComponentType, TrailingPositionComponent } from "./component";
+import { Game } from "./game";
+import { System, SystemType } from "./system";
+
+export class TrailingPositionSystem extends System {
+ constructor(
+ private readonly point_filter: (
+ trail_point: {
+ x: number;
+ y: number;
+ time: number;
+ }[],
+ ) => {
+ x: number;
+ y: number;
+ time: number;
+ }[],
+ ) {
+ super(SystemType.TRAILING_POSITION);
+ }
+
+ public update(_dt: number, game: Game) {
+ game.for_each_entity_with_component(
+ ComponentType.TRAILING_POSITION,
+ (entity) => {
+ const trailing_position = entity.components[
+ ComponentType.TRAILING_POSITION
+ ] as TrailingPositionComponent;
+ trailing_position.trails = this.point_filter(trailing_position.trails);
+ },
+ );
+ }
+}