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 PlayerListPacket { players: [number, string][] } export interface PlayerLeavePacket { id: number } export enum PacketType { // serverbound ClientLogin = "ClientLogin", // clientbound SpawnPlayer = "SpawnPlayer", PlayerList = "PlayerList", PlanetPositions = "PlanetPositions", PartPositions = "PartPositions", PlayerLeave = "PlayerLeave" } export interface Packet { t: PacketType, c: ClientLoginPacket | SpawnPlayerPacket | PlayerListPacket | PlanetPositionsPacket | PartPositionsPacket | PlayerLeavePacket } export const SERVERBOUND = [PacketType.ClientLogin]; export const CLIENTBOUND = [PacketType.SpawnPlayer, PacketType.PlayerList, PacketType.PlanetPositions, PacketType.PartPositions, PacketType.PlayerLeave]; 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; } }