~starkingdoms/starkingdoms

ref: 992891fbb02a84f34814269ce200d14fcefeffcc starkingdoms/starkingdoms-client/src/protocol.ts -rw-r--r-- 2.4 KiB
992891fb — ghostlyzsh Merge branch 'bevy_rewrite' of https://gitlab.com/starkingdoms.tk/starkingdoms.tk into bevy_rewrite 2 years ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
export interface ProtoTransform {
    x: number,
    y: number,
    rot: number
}
export enum PlanetType {
    Earth = "Earth"
}
export enum PartType {
    Hearty = "Hearty"
}
export interface Planet {
    planet_type: PlanetType,
    transform: ProtoTransform,
    radius: number
}
export interface Part {
    part_type: PartType,
    transform: ProtoTransform
}
export interface ClientLoginPacket {
    username: string,
    jwt: string | null,
}
export interface SpawnPlayerPacket {
    id: number,
    username: string
}
export interface PlanetPositionsPacket {
    planets: [number, Planet][]
}
export interface PartPositionsPacket {
    parts: [number, Part][]
}
export interface PlayerInputPacket {
    up: boolean,
    down: boolean,
    left: boolean,
    right: boolean,
}
export interface PlayerListPacket {
    players: [number, string][]
}
export interface PlayerLeavePacket {
    id: number
}
export interface SendMessagePacket {
    target: string | null,
    content: string
}
export enum MessageType {
    Server = "Server",
    Error = "Error",
    Chat = "Chat",
    Direct = "Direct"
}
export interface MessagePacket {
    message_type: MessageType,
    actor: string,
    content: string
}

export enum PacketType {
    // serverbound
    ClientLogin = "ClientLogin",
    SendMessage = "SendMessage",
    PlayerInput = "PlayerInput",
    // clientbound
    SpawnPlayer = "SpawnPlayer",
    PlayerList = "PlayerList",
    PlanetPositions = "PlanetPositions",
    PartPositions = "PartPositions",
    PlayerLeave = "PlayerLeave",
    Message = "Message"
}

export interface Packet {
    t: PacketType,
    c: ClientLoginPacket | SpawnPlayerPacket | PlayerListPacket | PlanetPositionsPacket | PartPositionsPacket | PlayerLeavePacket | SendMessagePacket | MessagePacket | PlayerInputPacket
}

export const SERVERBOUND = [PacketType.ClientLogin, PacketType.SendMessage, PacketType.PlayerInput];
export const CLIENTBOUND = [PacketType.SpawnPlayer, PacketType.PlayerList, PacketType.PlanetPositions, PacketType.PartPositions, PacketType.PlayerLeave, PacketType.Message];

export enum Direction {
    Serverbound = "Serverbound",
    Clientbound = "Clientbound",
    InvalidType = "InvalidType"
}

export function type_direction(type: PacketType): Direction {
    if (SERVERBOUND.includes(type)) {
        return Direction.Serverbound;
    } else if (CLIENTBOUND.includes(type)) {
        return Direction.Clientbound;
    } else {
        return Direction.InvalidType;
    }
}