diff --git a/.changeset/fluffy-files-sneeze.md b/.changeset/fluffy-files-sneeze.md new file mode 100644 index 0000000..ee3f6a2 --- /dev/null +++ b/.changeset/fluffy-files-sneeze.md @@ -0,0 +1,5 @@ +--- +'@tedengine/ted': minor +--- + +Add movement using axes to simple controller diff --git a/apps/docs/src/cameras/fixed-axis-controller.ts b/apps/docs/src/cameras/fixed-axis-controller.ts index 1416672..76bc457 100644 --- a/apps/docs/src/cameras/fixed-axis-controller.ts +++ b/apps/docs/src/cameras/fixed-axis-controller.ts @@ -13,11 +13,10 @@ import { TFixedAxisCameraController, TOrbitCamera, } from '@tedengine/ted'; -import type { TController, TActorWithOnUpdate } from '@tedengine/ted'; +import type { TActorWithOnUpdate } from '@tedengine/ted'; class Cube extends TPawn implements TActorWithOnUpdate { private speed = 10; - private isDown: { [key: string]: boolean } = {}; constructor(engine: TEngine, x: number, y: number, z: number) { super(); @@ -33,57 +32,17 @@ class Cube extends TPawn implements TActorWithOnUpdate { } async onUpdate(): Promise { - this.controller?.update(); + if (!this.controller) return; - const force = vec3.fromValues(0, 0, 0); - - if (this.isDown['left']) { - force[0] -= this.speed; - } - - if (this.isDown['right']) { - force[0] += this.speed; - } + this.controller.update(); - if (this.isDown['up']) { - force[2] -= this.speed; - } + const force = vec3.fromValues(0, 0, 0); - if (this.isDown['down']) { - force[2] += this.speed; - } + force[0] += this.speed * this.controller.getAxisValue('Horizontal'); + force[2] -= this.speed * this.controller.getAxisValue('Vertical'); this.rootComponent.applyCentralForce(force); } - - public setupController(controller: TController): void { - super.setupController(controller); - - controller.bindAction('Up', 'pressed', this.pressed('up').bind(this)); - controller.bindAction('Up', 'released', this.released('up').bind(this)); - controller.bindAction('Left', 'pressed', this.pressed('left').bind(this)); - controller.bindAction('Left', 'released', this.released('left').bind(this)); - controller.bindAction('Down', 'pressed', this.pressed('down').bind(this)); - controller.bindAction('Down', 'released', this.released('down').bind(this)); - controller.bindAction('Right', 'pressed', this.pressed('right').bind(this)); - controller.bindAction( - 'Right', - 'released', - this.released('right').bind(this), - ); - } - - private pressed(key: string) { - return () => { - this.isDown[key] = true; - }; - } - - private released(key: string) { - return () => { - this.isDown[key] = false; - }; - } } class Plane extends TActor { diff --git a/apps/docs/src/cameras/follow-component-controller.ts b/apps/docs/src/cameras/follow-component-controller.ts index 6349dfb..a94e63b 100644 --- a/apps/docs/src/cameras/follow-component-controller.ts +++ b/apps/docs/src/cameras/follow-component-controller.ts @@ -13,11 +13,10 @@ import { TOrbitCamera, TFollowComponentCameraController, } from '@tedengine/ted'; -import type { TController, TActorWithOnUpdate } from '@tedengine/ted'; +import type { TActorWithOnUpdate } from '@tedengine/ted'; class Cube extends TPawn implements TActorWithOnUpdate { private speed = 10; - private isDown: { [key: string]: boolean } = {}; constructor(engine: TEngine, x: number, y: number, z: number) { super(); @@ -33,57 +32,17 @@ class Cube extends TPawn implements TActorWithOnUpdate { } async onUpdate(): Promise { - this.controller?.update(); + if (!this.controller) return; - const force = vec3.fromValues(0, 0, 0); - - if (this.isDown['left']) { - force[0] -= this.speed; - } - - if (this.isDown['right']) { - force[0] += this.speed; - } + this.controller.update(); - if (this.isDown['up']) { - force[2] -= this.speed; - } + const force = vec3.fromValues(0, 0, 0); - if (this.isDown['down']) { - force[2] += this.speed; - } + force[0] += this.speed * this.controller.getAxisValue('Horizontal'); + force[2] -= this.speed * this.controller.getAxisValue('Vertical'); this.rootComponent.applyCentralForce(force); } - - public setupController(controller: TController): void { - super.setupController(controller); - - controller.bindAction('Up', 'pressed', this.pressed('up').bind(this)); - controller.bindAction('Up', 'released', this.released('up').bind(this)); - controller.bindAction('Left', 'pressed', this.pressed('left').bind(this)); - controller.bindAction('Left', 'released', this.released('left').bind(this)); - controller.bindAction('Down', 'pressed', this.pressed('down').bind(this)); - controller.bindAction('Down', 'released', this.released('down').bind(this)); - controller.bindAction('Right', 'pressed', this.pressed('right').bind(this)); - controller.bindAction( - 'Right', - 'released', - this.released('right').bind(this), - ); - } - - private pressed(key: string) { - return () => { - this.isDown[key] = true; - }; - } - - private released(key: string) { - return () => { - this.isDown[key] = false; - }; - } } class Plane extends TActor { diff --git a/apps/docs/src/physics/forces.ts b/apps/docs/src/physics/forces.ts index e5d3174..ae2e66e 100644 --- a/apps/docs/src/physics/forces.ts +++ b/apps/docs/src/physics/forces.ts @@ -11,11 +11,10 @@ import { TPawn, TSimpleController, } from '@tedengine/ted'; -import type { TController, TActorWithOnUpdate } from '@tedengine/ted'; +import type { TActorWithOnUpdate } from '@tedengine/ted'; class Cube extends TPawn implements TActorWithOnUpdate { private speed = 10; - private isDown: { [key: string]: boolean } = {}; constructor(engine: TEngine, x: number, y: number, z: number) { super(); @@ -31,57 +30,17 @@ class Cube extends TPawn implements TActorWithOnUpdate { } async onUpdate(): Promise { - this.controller?.update(); + if (!this.controller) return; - const force = vec3.fromValues(0, 0, 0); - - if (this.isDown['left']) { - force[0] -= this.speed; - } - - if (this.isDown['right']) { - force[0] += this.speed; - } + this.controller.update(); - if (this.isDown['up']) { - force[2] -= this.speed; - } + const force = vec3.fromValues(0, 0, 0); - if (this.isDown['down']) { - force[2] += this.speed; - } + force[0] += this.speed * this.controller.getAxisValue('Horizontal'); + force[2] -= this.speed * this.controller.getAxisValue('Vertical'); this.rootComponent.applyCentralForce(force); } - - public setupController(controller: TController): void { - super.setupController(controller); - - controller.bindAction('Up', 'pressed', this.pressed('up').bind(this)); - controller.bindAction('Up', 'released', this.released('up').bind(this)); - controller.bindAction('Left', 'pressed', this.pressed('left').bind(this)); - controller.bindAction('Left', 'released', this.released('left').bind(this)); - controller.bindAction('Down', 'pressed', this.pressed('down').bind(this)); - controller.bindAction('Down', 'released', this.released('down').bind(this)); - controller.bindAction('Right', 'pressed', this.pressed('right').bind(this)); - controller.bindAction( - 'Right', - 'released', - this.released('right').bind(this), - ); - } - - private pressed(key: string) { - return () => { - this.isDown[key] = true; - }; - } - - private released(key: string) { - return () => { - this.isDown[key] = false; - }; - } } class Plane extends TActor { diff --git a/packages/ted/src/input/simple-controller.ts b/packages/ted/src/input/simple-controller.ts index 58b79fd..55fc022 100644 --- a/packages/ted/src/input/simple-controller.ts +++ b/packages/ted/src/input/simple-controller.ts @@ -11,6 +11,11 @@ export default class TSimpleController extends TController { super(engine.events); // Movement + this.addAxisFromKeyEvent('Vertical', 'w', 1); + this.addAxisFromKeyEvent('Vertical', 's', -1); + this.addAxisFromKeyEvent('Horizontal', 'a', -1); + this.addAxisFromKeyEvent('Horizontal', 'd', 1); + this.addActionFromKeyEvent('Up', 'w'); this.addActionFromKeyEvent('Left', 'a'); this.addActionFromKeyEvent('Down', 's');