make server update interval an inheritable trait on entities
This commit is contained in:
parent
fd1bb1cca9
commit
c551f519ca
@ -59,4 +59,6 @@ export abstract class Entity {
|
||||
public abstract setFrom(args: Record<string, any>): void;
|
||||
|
||||
public abstract serialize(): Record<string, any>;
|
||||
|
||||
public abstract getNextUpdateInterval(): number;
|
||||
}
|
||||
|
@ -45,4 +45,8 @@ export class Floor extends Entity {
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public getNextUpdateInterval() {
|
||||
return Math.random() * 500;
|
||||
}
|
||||
}
|
||||
|
@ -102,4 +102,8 @@ export class Player extends Entity {
|
||||
new BoundingBox(center, boundingBox.dimension, boundingBox.rotation)
|
||||
].forEach((component) => this.addComponent(component));
|
||||
}
|
||||
|
||||
public getNextUpdateInterval() {
|
||||
return Math.random() * 30 + 50;
|
||||
}
|
||||
}
|
||||
|
@ -16,9 +16,10 @@ export class NetworkUpdate extends System {
|
||||
private queueProvider: MessageQueueProvider;
|
||||
private publisher: MessagePublisher;
|
||||
private messageProcessor: MessageProcessor;
|
||||
|
||||
private entityUpdateInfo: Map<string, EntityUpdateInfo>;
|
||||
|
||||
private nextPublishInterval: number;
|
||||
|
||||
constructor(
|
||||
queueProvider: MessageQueueProvider,
|
||||
publisher: MessagePublisher,
|
||||
@ -31,6 +32,7 @@ export class NetworkUpdate extends System {
|
||||
this.messageProcessor = messageProcessor;
|
||||
|
||||
this.entityUpdateInfo = new Map();
|
||||
this.nextPublishInterval = 0;
|
||||
}
|
||||
|
||||
public update(dt: number, game: Game) {
|
||||
@ -69,7 +71,7 @@ export class NetworkUpdate extends System {
|
||||
updateInfo.timer -= dt;
|
||||
this.entityUpdateInfo.set(entity.id, updateInfo);
|
||||
if (updateInfo.timer > 0) return;
|
||||
updateInfo.timer = this.getNextUpdateTimeMs();
|
||||
updateInfo.timer = entity.getNextUpdateInterval();
|
||||
this.entityUpdateInfo.set(entity.id, updateInfo);
|
||||
|
||||
// maybe update if hash is not consitent
|
||||
@ -92,11 +94,15 @@ export class NetworkUpdate extends System {
|
||||
body: updateMessages
|
||||
});
|
||||
|
||||
// 3. publish changes
|
||||
this.publisher.publish();
|
||||
// 3. maybe publish changes - we don't want to overload the socket
|
||||
this.nextPublishInterval -= dt;
|
||||
if (this.nextPublishInterval < 0) {
|
||||
this.publisher.publish();
|
||||
this.nextPublishInterval = this.getNextUpdateInterval();
|
||||
}
|
||||
}
|
||||
|
||||
private getNextUpdateTimeMs() {
|
||||
return Math.random() * 30 + 50;
|
||||
private getNextUpdateInterval(): number {
|
||||
return Math.random() * 30;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user