diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-08-26 17:55:27 -0600 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-08-26 17:55:27 -0600 |
commit | 6ce6946a4401d2ee6fa5cb747fab7d4c658a63c8 (patch) | |
tree | e60767dc5295edf379cf421e20171dc418e548b7 /engine/entities/Entity.ts | |
parent | 594921352c8d82fe5f1a6201a4d5f9fbd9b719fc (diff) | |
download | jumpstorm-6ce6946a4401d2ee6fa5cb747fab7d4c658a63c8.tar.gz jumpstorm-6ce6946a4401d2ee6fa5cb747fab7d4c658a63c8.zip |
add entity updates over network!
Diffstat (limited to 'engine/entities/Entity.ts')
-rw-r--r-- | engine/entities/Entity.ts | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/engine/entities/Entity.ts b/engine/entities/Entity.ts index b016fc0..63fb370 100644 --- a/engine/entities/Entity.ts +++ b/engine/entities/Entity.ts @@ -1,12 +1,15 @@ -import { EntityNames, Player } from '.'; -import type { Component } from '../components'; +import { EntityNames, Floor, Player } from '.'; +import { type Component } from '../components'; + +const randomId = () => + (performance.now() + Math.random() * 10_000_000).toString(); export abstract class Entity { public id: string; public components: Map<string, Component>; public name: string; - constructor(name: string, id: string = crypto.randomUUID()) { + constructor(name: string, id: string = randomId()) { this.name = name; this.id = id; this.components = new Map(); @@ -31,14 +34,29 @@ export abstract class Entity { return this.components.has(name); } - static from(entityName: string, args: any): Entity { + public static from(entityName: string, id: string, args: any): Entity { + let entity: Entity; + switch (entityName) { case EntityNames.Player: - const player = new Player(args.playerId); - player.id = args.id; - return player; + const player = new Player(); + player.setFrom(args); + entity = player; + break; + case EntityNames.Floor: + const floor = new Floor(args.floorWidth); + floor.setFrom(args); + entity = floor; + break; default: throw new Error('.from() Entity type not implemented: ' + entityName); } + + entity.id = id; + return entity; } + + public abstract setFrom(args: Record<string, any>): void; + + public abstract serialize(): Record<string, any>; } |