From d08e0105cbc59c6cc804f04aaf1e4e625a13960c Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Fri, 1 Mar 2024 19:45:33 -0700 Subject: eyes follow cursor --- src/engine/components/ComponentNames.ts | 1 + src/engine/components/Control.ts | 11 +++++++++++ src/engine/components/FacingDirection.ts | 10 ++++++++-- src/engine/components/Sprite.ts | 6 ++++++ src/engine/components/index.ts | 1 + 5 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 src/engine/components/Control.ts (limited to 'src/engine/components') 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; + public currentDirection: Direction; - constructor() { + constructor(currentDirection: Direction = Direction.NONE) { super(ComponentNames.FacingDirection); + this.currentDirection = currentDirection; this.directionSprites = new Map(); } + + 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"; -- cgit v1.2.3-70-g09d2