Create a PlayerId typedef, don't overload -1 for unassigned.
This commit is contained in:
parent
764e4d85cf
commit
750cfe1630
3 changed files with 9 additions and 7 deletions
|
@ -42,7 +42,7 @@ export type ClientMessage<LocalInput, State> =
|
|||
|
||||
export type ServerMessage<GlobalInput, State> =
|
||||
| Packet<MessageTypes.META, Meta>
|
||||
| Packet<MessageTypes.SET_STATE, { u: number, s: Partial<State> }>
|
||||
| Packet<MessageTypes.SET_STATE, { u: number | null, s: Partial<State> }>
|
||||
| Packet<MessageTypes.INPUT, { i: GlobalInput }>
|
||||
| Packet<MessageTypes.GET_STATE, { c: number }>
|
||||
;
|
||||
|
@ -51,7 +51,7 @@ export type Server<LocalInput, GlobalInput, State> = Callbag<ClientMessage<Local
|
|||
|
||||
export abstract class LockstepClient<LocalInput, GlobalInput, State> {
|
||||
|
||||
private playerNumber = -1;
|
||||
private playerNumber: number | null = null;
|
||||
private state: LockstepState<LocalInput, GlobalInput, State>;
|
||||
private serverTalkback: Server<LocalInput, GlobalInput, State> | null = null;
|
||||
|
||||
|
@ -100,7 +100,7 @@ export abstract class LockstepClient<LocalInput, GlobalInput, State> {
|
|||
private sampleInput = () => {
|
||||
if (this.serverTalkback) {
|
||||
const input = this.gatherInput();
|
||||
if(this.playerNumber >= 0) {
|
||||
if(this.playerNumber !== null) {
|
||||
this.state.addLocalInput(this.playerNumber, input);
|
||||
this.serverTalkback(1, { t: MessageTypes.INPUT, i: input });
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@ use serde_json::Value;
|
|||
|
||||
pub mod server;
|
||||
|
||||
pub type PlayerId = usize;
|
||||
|
||||
#[derive(Deserialize, Debug)]
|
||||
#[serde(tag = "t")]
|
||||
pub enum ClientMessage<I = Value, S = Value> {
|
||||
|
@ -14,13 +16,13 @@ pub enum ClientMessage<I = Value, S = Value> {
|
|||
GetState { c: usize, s: S },
|
||||
}
|
||||
|
||||
#[derive(Serialize, Debug)]
|
||||
#[derive(Serialize, Debug, Clone)]
|
||||
pub struct Meta {
|
||||
pub helo: Option<String>,
|
||||
pub version: &'static str,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Debug)]
|
||||
#[derive(Serialize, Debug, Clone)]
|
||||
#[serde(tag = "t")]
|
||||
pub enum ServerMessage<I = Vec<Value>, S = Value> {
|
||||
#[serde(rename = "m")]
|
||||
|
@ -29,7 +31,7 @@ pub enum ServerMessage<I = Vec<Value>, S = Value> {
|
|||
m: Meta,
|
||||
},
|
||||
#[serde(rename = "s")]
|
||||
SetState { u: i8, s: S },
|
||||
SetState { u: Option<PlayerId>, s: S },
|
||||
#[serde(rename = "i")]
|
||||
Input { i: I },
|
||||
#[serde(rename = "g")]
|
||||
|
|
|
@ -16,7 +16,7 @@ where
|
|||
helo: Some("Dedicated base2020 server".into()),
|
||||
},
|
||||
},
|
||||
ServerMessage::SetState { u: 0, s: json!({}) },
|
||||
ServerMessage::SetState { u: Some(0), s: json!({}) },
|
||||
])
|
||||
.map(Ok);
|
||||
|
||||
|
|
Loading…
Reference in a new issue