summaryrefslogtreecommitdiff
path: root/src/engine/components
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/components')
-rw-r--r--src/engine/components/ComponentNames.ts1
-rw-r--r--src/engine/components/Control.ts11
-rw-r--r--src/engine/components/FacingDirection.ts10
-rw-r--r--src/engine/components/Sprite.ts6
-rw-r--r--src/engine/components/index.ts1
5 files changed, 27 insertions, 2 deletions
diff --git a/src/engine/components/ComponentNames.ts b/src/engine/components/ComponentNames.ts
index 0f1200a..bfeb101 100644
--- a/src/engine/components/ComponentNames.ts
+++ b/src/engine/components/ComponentNames.ts
@@ -3,4 +3,5 @@ export namespace ComponentNames {
export const FacingDirection = "FacingDirection";
export const GridPosition = "GridPosition";
export const BoundingBox = "BoundingBox";
+ export const Control = "Control";
}
diff --git a/src/engine/components/Control.ts b/src/engine/components/Control.ts
new file mode 100644
index 0000000..48983b2
--- /dev/null
+++ b/src/engine/components/Control.ts
@@ -0,0 +1,11 @@
+import { Component, ComponentNames } from ".";
+
+export class Control extends Component {
+ public isControllable: boolean = true;
+
+ constructor(isControllable = true) {
+ super(ComponentNames.Control);
+
+ this.isControllable = isControllable;
+ }
+}
diff --git a/src/engine/components/FacingDirection.ts b/src/engine/components/FacingDirection.ts
index a449d21..7108366 100644
--- a/src/engine/components/FacingDirection.ts
+++ b/src/engine/components/FacingDirection.ts
@@ -1,12 +1,18 @@
import { Component, ComponentNames, Sprite } from ".";
-import { type Direction } from "../interfaces";
+import { Direction } from "../interfaces";
export class FacingDirection extends Component {
public readonly directionSprites: Map<Direction, Sprite>;
+ public currentDirection: Direction;
- constructor() {
+ constructor(currentDirection: Direction = Direction.NONE) {
super(ComponentNames.FacingDirection);
+ this.currentDirection = currentDirection;
this.directionSprites = new Map<Direction, Sprite>();
}
+
+ public setDirection(direction: Direction) {
+ this.currentDirection = direction;
+ }
}
diff --git a/src/engine/components/Sprite.ts b/src/engine/components/Sprite.ts
index 6a66a5c..82d7011 100644
--- a/src/engine/components/Sprite.ts
+++ b/src/engine/components/Sprite.ts
@@ -1,5 +1,6 @@
import { Component, ComponentNames } from ".";
import type { Dimension2D, DrawArgs, Coord2D } from "../interfaces";
+import { clamp } from "../utils";
export class Sprite extends Component {
private sheet: HTMLImageElement;
@@ -31,6 +32,11 @@ export class Sprite extends Component {
this.currentFrame = 0;
}
+ public fillTimingsFromSprite(sprite: Sprite) {
+ this.msSinceLastFrame = clamp(sprite.msSinceLastFrame, 0, this.msPerFrame);
+ this.currentFrame = clamp(sprite.currentFrame, 0, this.numFrames - 1);
+ }
+
public update(dt: number) {
this.msSinceLastFrame += dt;
if (this.msSinceLastFrame >= this.msPerFrame) {
diff --git a/src/engine/components/index.ts b/src/engine/components/index.ts
index 30fe50a..d3a32ad 100644
--- a/src/engine/components/index.ts
+++ b/src/engine/components/index.ts
@@ -4,3 +4,4 @@ export * from "./Sprite";
export * from "./FacingDirection";
export * from "./GridPosition";
export * from "./BoundingBox";
+export * from "./Control";