export interface ProtoTransform {
x: number;
y: number;
rot: number;
}
export enum PlanetType {
Earth = "Earth",
Moon = "Moon",
}
export enum PartType {
Hearty = "Hearty",
Cargo = "Cargo",
}
export enum ButtonType {
Left = "Left",
Middle = "Middle",
Right = "Right",
}
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 PlayerMouseInputPacket {
x: number,
y: number,
released: boolean,
button: ButtonType,
}
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",
PlayerMouseInput = "PlayerMouseInput",
// 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
| PlayerMouseInputPacket;
}
export const SERVERBOUND = [
PacketType.ClientLogin,
PacketType.SendMessage,
PacketType.PlayerInput,
PacketType.PlayerMouseInput,
];
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;
}
}