test
This commit is contained in:
parent
16cffd0b25
commit
195eab1e7d
@ -11,10 +11,12 @@ import {
|
|||||||
import { GameEvents } from '../types/events';
|
import { GameEvents } from '../types/events';
|
||||||
import { GameplayComponent } from './gameplay';
|
import { GameplayComponent } from './gameplay';
|
||||||
|
|
||||||
const INVERSE_MAX_FPS = 0.016;
|
const INVERSE_MAX_FPS = 1000 / 60;
|
||||||
|
const INVERSE_MAX_FPS_S = 1 / 60;
|
||||||
|
|
||||||
export class Game extends Engine {
|
export class Game extends Engine {
|
||||||
public events = new EventEmitter<GameEvents>();
|
public events = new EventEmitter<GameEvents>();
|
||||||
|
private delta = 0;
|
||||||
|
|
||||||
mount(element: HTMLElement): void {
|
mount(element: HTMLElement): void {
|
||||||
super.mount(element);
|
super.mount(element);
|
||||||
@ -31,14 +33,20 @@ export class Game extends Engine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loop(now: number): void {
|
loop(now: number): void {
|
||||||
let delta = this.getDelta(now);
|
this.getDelta(now);
|
||||||
this.running && requestAnimationFrame((ts) => this.loop(ts));
|
this.running && requestAnimationFrame((ts) => this.loop(ts));
|
||||||
this.render.render();
|
|
||||||
|
|
||||||
while (delta >= INVERSE_MAX_FPS) {
|
while (this.delta >= INVERSE_MAX_FPS) {
|
||||||
this.update(0.016);
|
this.update(INVERSE_MAX_FPS_S);
|
||||||
delta -= INVERSE_MAX_FPS;
|
this.delta -= INVERSE_MAX_FPS;
|
||||||
}
|
}
|
||||||
|
this.render.render();
|
||||||
|
}
|
||||||
|
|
||||||
|
getDelta(now: number): number {
|
||||||
|
this.delta += now - this.lastTick;
|
||||||
|
this.lastTick = now;
|
||||||
|
return this.delta;
|
||||||
}
|
}
|
||||||
|
|
||||||
async loadLevel(path: string) {
|
async loadLevel(path: string) {
|
||||||
|
@ -25,6 +25,7 @@ export class PhysicsWorldComponent extends EngineComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update(delta: number): void {
|
update(delta: number): void {
|
||||||
|
if (!this.physicsWorld) return;
|
||||||
// FIXME: physics is tied to the FPS
|
// FIXME: physics is tied to the FPS
|
||||||
this.physicsWorld?.step();
|
this.physicsWorld?.step();
|
||||||
for (const object of this.trackedObjects) object.tick(delta);
|
for (const object of this.trackedObjects) object.tick(delta);
|
||||||
|
@ -36,6 +36,7 @@ export class Humanoid extends GameObject implements PhysicsTicking {
|
|||||||
private _maxHealth = 100;
|
private _maxHealth = 100;
|
||||||
private _velocity = new Vector3(0, 0, 0);
|
private _velocity = new Vector3(0, 0, 0);
|
||||||
private _appliedGravity = new Vector3(0, 0, 0);
|
private _appliedGravity = new Vector3(0, 0, 0);
|
||||||
|
private _adjustedPosition = new Vector3(0, 0, 0);
|
||||||
private _grounded = true;
|
private _grounded = true;
|
||||||
private _lookAt = new Vector3(0, 0, 1);
|
private _lookAt = new Vector3(0, 0, 1);
|
||||||
private _currentLookAt = new Vector3(0, 0, 1);
|
private _currentLookAt = new Vector3(0, 0, 1);
|
||||||
@ -292,7 +293,6 @@ export class Humanoid extends GameObject implements PhysicsTicking {
|
|||||||
this.parent!.quaternion.copy(this.rigidBody.rotation() as any);
|
this.parent!.quaternion.copy(this.rigidBody.rotation() as any);
|
||||||
this.rigidBody?.setTranslation(event.position, false);
|
this.rigidBody?.setTranslation(event.position, false);
|
||||||
this.rigidBody?.setRotation(event.quaternion, false);
|
this.rigidBody?.setRotation(event.quaternion, false);
|
||||||
this.rigidBody?.setNextKinematicTranslation(event.velocity);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private createNameTag() {
|
private createNameTag() {
|
||||||
|
@ -15,5 +15,6 @@ export enum PacketType {
|
|||||||
PLAYER_CHARACTER,
|
PLAYER_CHARACTER,
|
||||||
PLAYER_MOVEMENT,
|
PLAYER_MOVEMENT,
|
||||||
PLAYER_CHAT,
|
PLAYER_CHAT,
|
||||||
|
PLAYER_EVENT,
|
||||||
ERROR,
|
ERROR,
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user