diff --git a/src/ecs/Lockstep.ts b/src/ecs/Lockstep.ts index ae0f950..e976d5c 100644 --- a/src/ecs/Lockstep.ts +++ b/src/ecs/Lockstep.ts @@ -1,5 +1,5 @@ -export const INPUT_FREQUENCY = 33; // roughly 30fps +export const TICK_LENGTH = 33; // roughly 30fps export interface LockstepProcessor { compareInput(a: GlobalInput, b: GlobalInput): boolean; diff --git a/src/game/GameComponents.ts b/src/game/GameComponents.ts index 64a1091..74ce06a 100644 --- a/src/game/GameComponents.ts +++ b/src/game/GameComponents.ts @@ -3,7 +3,7 @@ import { DrawSet, Layer } from "../applet/Render"; import { ComponentSchema, Data as EcsData } from "../ecs/Components"; import { Component, copySparse, Join, StateForSchema, Store } from "../ecs/Data"; import { DumbMotion } from "../ecs/Location"; -import { INPUT_FREQUENCY, LockstepProcessor } from "../ecs/Lockstep"; +import { LockstepProcessor, TICK_LENGTH } from "../ecs/Lockstep"; import { Buttons } from "./Input"; export enum GamePhase { @@ -208,7 +208,7 @@ export class Engine implements LockstepProcessor { } advanceState(state: Data, input: KeyName[][]) { - DumbMotion(state, INPUT_FREQUENCY); + DumbMotion(state, TICK_LENGTH); Join(state, "playerControl", "location").forEach(([player, location]) => { const playerInput = input[player.playerNumber]; if(playerInput) { diff --git a/src/net/LockstepClient.ts b/src/net/LockstepClient.ts index 16655c4..2aee7d1 100644 --- a/src/net/LockstepClient.ts +++ b/src/net/LockstepClient.ts @@ -4,7 +4,7 @@ import animationFrames from "callbag-animation-frames"; import map from "callbag-map"; import pipe from "callbag-pipe"; -import { INPUT_FREQUENCY, LockstepProcessor, LockstepState } from "../ecs/Lockstep"; +import { LockstepProcessor, LockstepState, TICK_LENGTH } from "../ecs/Lockstep"; export const enum MessageTypes { /** @@ -78,7 +78,7 @@ export abstract class LockstepClient { this.serverTalkback = data as Server; // kickoff input sender - setTimeout(this.sampleInput, INPUT_FREQUENCY); + setTimeout(this.sampleInput, TICK_LENGTH); } else if (mode == 1) { // server message const message = data as ServerMessage; @@ -104,7 +104,7 @@ export abstract class LockstepClient { this.state.addLocalInput(this.playerNumber, input); this.serverTalkback(1, { t: MessageTypes.INPUT, i: input }); } - setTimeout(this.sampleInput, INPUT_FREQUENCY); + setTimeout(this.sampleInput, TICK_LENGTH); } }; diff --git a/src/net/LoopbackServer.ts b/src/net/LoopbackServer.ts index 4439982..d2ac861 100644 --- a/src/net/LoopbackServer.ts +++ b/src/net/LoopbackServer.ts @@ -2,7 +2,7 @@ import { Callbag } from "callbag"; import pipe from "callbag-pipe"; import share from "callbag-share"; -import { INPUT_FREQUENCY } from "../ecs/Lockstep"; +import { TICK_LENGTH } from "../ecs/Lockstep"; import { catchTalkback, defer, @@ -23,7 +23,7 @@ export class LoopbackServer { private inputBuffer: LocalInput[] = []; private heartbeat = pipe( - interval(INPUT_FREQUENCY), + interval(TICK_LENGTH), map(() => ({ t: MessageTypes.INPUT, i: this.inputBuffer.slice() diff --git a/src/net/mod.rs b/src/net/mod.rs index d49f487..5722896 100644 --- a/src/net/mod.rs +++ b/src/net/mod.rs @@ -1,8 +1,12 @@ use serde::{Deserialize, Serialize}; use serde_json::Value; +use std::time::Duration; pub mod server; +/// Roughly 30 fps +pub static TICK_LENGTH: Duration = Duration::from_millis(33); + pub type PlayerId = usize; pub type PlayerInput = Value; pub type GameState = Value;