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 setFrom(args: Record<string, any>): void;
|
||||||
|
|
||||||
public abstract serialize(): Record<string, any>;
|
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)
|
new BoundingBox(center, boundingBox.dimension, boundingBox.rotation)
|
||||||
].forEach((component) => this.addComponent(component));
|
].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 queueProvider: MessageQueueProvider;
|
||||||
private publisher: MessagePublisher;
|
private publisher: MessagePublisher;
|
||||||
private messageProcessor: MessageProcessor;
|
private messageProcessor: MessageProcessor;
|
||||||
|
|
||||||
private entityUpdateInfo: Map<string, EntityUpdateInfo>;
|
private entityUpdateInfo: Map<string, EntityUpdateInfo>;
|
||||||
|
|
||||||
|
private nextPublishInterval: number;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
queueProvider: MessageQueueProvider,
|
queueProvider: MessageQueueProvider,
|
||||||
publisher: MessagePublisher,
|
publisher: MessagePublisher,
|
||||||
@ -31,6 +32,7 @@ export class NetworkUpdate extends System {
|
|||||||
this.messageProcessor = messageProcessor;
|
this.messageProcessor = messageProcessor;
|
||||||
|
|
||||||
this.entityUpdateInfo = new Map();
|
this.entityUpdateInfo = new Map();
|
||||||
|
this.nextPublishInterval = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public update(dt: number, game: Game) {
|
public update(dt: number, game: Game) {
|
||||||
@ -69,7 +71,7 @@ export class NetworkUpdate extends System {
|
|||||||
updateInfo.timer -= dt;
|
updateInfo.timer -= dt;
|
||||||
this.entityUpdateInfo.set(entity.id, updateInfo);
|
this.entityUpdateInfo.set(entity.id, updateInfo);
|
||||||
if (updateInfo.timer > 0) return;
|
if (updateInfo.timer > 0) return;
|
||||||
updateInfo.timer = this.getNextUpdateTimeMs();
|
updateInfo.timer = entity.getNextUpdateInterval();
|
||||||
this.entityUpdateInfo.set(entity.id, updateInfo);
|
this.entityUpdateInfo.set(entity.id, updateInfo);
|
||||||
|
|
||||||
// maybe update if hash is not consitent
|
// maybe update if hash is not consitent
|
||||||
@ -92,11 +94,15 @@ export class NetworkUpdate extends System {
|
|||||||
body: updateMessages
|
body: updateMessages
|
||||||
});
|
});
|
||||||
|
|
||||||
// 3. publish changes
|
// 3. maybe publish changes - we don't want to overload the socket
|
||||||
this.publisher.publish();
|
this.nextPublishInterval -= dt;
|
||||||
|
if (this.nextPublishInterval < 0) {
|
||||||
|
this.publisher.publish();
|
||||||
|
this.nextPublishInterval = this.getNextUpdateInterval();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private getNextUpdateTimeMs() {
|
private getNextUpdateInterval(): number {
|
||||||
return Math.random() * 30 + 50;
|
return Math.random() * 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user