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; } }