From 6ce6946a4401d2ee6fa5cb747fab7d4c658a63c8 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sat, 26 Aug 2023 17:55:27 -0600 Subject: add entity updates over network! --- engine/entities/Player.ts | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) (limited to 'engine/entities/Player.ts') diff --git a/engine/entities/Player.ts b/engine/entities/Player.ts index 947fbd6..4d91c6f 100644 --- a/engine/entities/Player.ts +++ b/engine/entities/Player.ts @@ -10,9 +10,10 @@ import { WallBounded, Forces, Collide, - Control, Mass, - Moment + Moment, + ComponentNames, + Control } from '../components'; import { Direction } from '../interfaces'; @@ -24,14 +25,14 @@ export class Player extends Entity { Sprites.COFFEE ) as SpriteSpec; - constructor(playerId: string) { + constructor() { super(EntityNames.Player); this.addComponent( new BoundingBox( { - x: 300, - y: 100 + x: 0, + y: 0 }, { width: Player.spriteSpec.width, height: Player.spriteSpec.height }, 0 @@ -48,7 +49,6 @@ export class Player extends Entity { this.addComponent(new Gravity()); this.addComponent(new Jump()); - this.addComponent(new Control(playerId)); this.addComponent(new Collide()); this.addComponent(new WallBounded()); @@ -69,6 +69,36 @@ export class Player extends Entity { ); this.addComponent(new FacingDirection(leftSprite, rightSprite)); - this.addComponent(leftSprite); // face Left by default + this.addComponent(leftSprite); // face left by default + } + + public serialize(): Record { + return { + control: this.getComponent(ComponentNames.Control), + boundingBox: this.getComponent(ComponentNames.BoundingBox), + velocity: this.getComponent(ComponentNames.Velocity), + forces: this.getComponent(ComponentNames.Forces) + }; + } + + public setFrom(args: Record) { + const { control, velocity, forces, boundingBox } = args; + + let center = boundingBox.center; + + const myCenter = this.getComponent( + ComponentNames.BoundingBox + ).center; + const distance = Math.sqrt( + Math.pow(center.y - myCenter.y, 2) + Math.pow(center.x - myCenter.x, 2) + ); + if (distance < 30) center = myCenter; + + [ + Object.assign(new Control(control.controllableBy), control), + new Velocity(velocity.velocity), + new Forces(forces.forces), + new BoundingBox(center, boundingBox.dimension, boundingBox.rotation) + ].forEach((component) => this.addComponent(component)); } } -- cgit v1.2.3-70-g09d2