From 68d7af692cb7855fe7b23dc50faa42a58bc2375f Mon Sep 17 00:00:00 2001 From: ghostlyzsh Date: Tue, 20 Jun 2023 20:16:00 -0500 Subject: [PATCH] basic module protocol finished? --- client/src/gateway.ts | 4 +- client/src/protocol/message_c2s.ts | 246 +++++++++++++++++++++++ client/src/protocol/message_s2c.ts | 289 +++++++++++++++++++++++++++- client/src/protocol/module.ts | 225 +++++++++++++++++++++- protocol/src/lib.rs | 61 +++++- protocol/src/pbuf/message_s2c.proto | 16 +- protocol/src/pbuf/module.proto | 3 +- 7 files changed, 835 insertions(+), 9 deletions(-) diff --git a/client/src/gateway.ts b/client/src/gateway.ts index 39fb1c64d6fda73436ab2a87832cd9fae0ea9c99..1b042be1620a55d09e8e1664c94896c8ef7e54fc 100644 --- a/client/src/gateway.ts +++ b/client/src/gateway.ts @@ -74,7 +74,7 @@ export async function gateway_connect(gateway_url: string, username: string): Pr let handshake_start_msg; if (global.can_beam_out) { handshake_start_msg = MessageC2SHello.encode({ - version: 4, + version: 5, requestedUsername: username, nextState: State.Play, user: window.localStorage.getItem("user")!, @@ -82,7 +82,7 @@ export async function gateway_connect(gateway_url: string, username: string): Pr }).finish(); } else { handshake_start_msg = MessageC2SHello.encode({ - version: 4, + version: 5, requestedUsername: username, nextState: State.Play, // @ts-ignore diff --git a/client/src/protocol/message_c2s.ts b/client/src/protocol/message_c2s.ts index 4f28c5b2f2bba8d69b50bd592a3bf442e502ace0..aa027818b0aff1545b261f61f72727a0af6074e0 100644 --- a/client/src/protocol/message_c2s.ts +++ b/client/src/protocol/message_c2s.ts @@ -286,6 +286,84 @@ export function messageC2SMouseInput_packetInfoToJSON(object: MessageC2SMouseInp } } +export interface MessageC2SModuleGrabBegin { + moduleId: number; + worldposX: number; + worldposY: number; +} + +export enum MessageC2SModuleGrabBegin_packetInfo { + unknown = 0, + type = 14, + UNRECOGNIZED = -1, +} + +export function messageC2SModuleGrabBegin_packetInfoFromJSON(object: any): MessageC2SModuleGrabBegin_packetInfo { + switch (object) { + case 0: + case "unknown": + return MessageC2SModuleGrabBegin_packetInfo.unknown; + case 14: + case "type": + return MessageC2SModuleGrabBegin_packetInfo.type; + case -1: + case "UNRECOGNIZED": + default: + return MessageC2SModuleGrabBegin_packetInfo.UNRECOGNIZED; + } +} + +export function messageC2SModuleGrabBegin_packetInfoToJSON(object: MessageC2SModuleGrabBegin_packetInfo): string { + switch (object) { + case MessageC2SModuleGrabBegin_packetInfo.unknown: + return "unknown"; + case MessageC2SModuleGrabBegin_packetInfo.type: + return "type"; + case MessageC2SModuleGrabBegin_packetInfo.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} + +export interface MessageC2SModuleGrabEnd { + moduleId: number; + parentId: number; + slot: number; +} + +export enum MessageC2SModuleGrabEnd_packetInfo { + unknown = 0, + type = 16, + UNRECOGNIZED = -1, +} + +export function messageC2SModuleGrabEnd_packetInfoFromJSON(object: any): MessageC2SModuleGrabEnd_packetInfo { + switch (object) { + case 0: + case "unknown": + return MessageC2SModuleGrabEnd_packetInfo.unknown; + case 16: + case "type": + return MessageC2SModuleGrabEnd_packetInfo.type; + case -1: + case "UNRECOGNIZED": + default: + return MessageC2SModuleGrabEnd_packetInfo.UNRECOGNIZED; + } +} + +export function messageC2SModuleGrabEnd_packetInfoToJSON(object: MessageC2SModuleGrabEnd_packetInfo): string { + switch (object) { + case MessageC2SModuleGrabEnd_packetInfo.unknown: + return "unknown"; + case MessageC2SModuleGrabEnd_packetInfo.type: + return "type"; + case MessageC2SModuleGrabEnd_packetInfo.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} + function createBaseMessageC2SHello(): MessageC2SHello { return { version: 0, requestedUsername: "", nextState: 0, token: "", user: "" }; } @@ -821,6 +899,174 @@ export const MessageC2SMouseInput = { }, }; +function createBaseMessageC2SModuleGrabBegin(): MessageC2SModuleGrabBegin { + return { moduleId: 0, worldposX: 0, worldposY: 0 }; +} + +export const MessageC2SModuleGrabBegin = { + encode(message: MessageC2SModuleGrabBegin, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.moduleId !== 0) { + writer.uint32(8).uint32(message.moduleId); + } + if (message.worldposX !== 0) { + writer.uint32(17).double(message.worldposX); + } + if (message.worldposY !== 0) { + writer.uint32(25).double(message.worldposY); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MessageC2SModuleGrabBegin { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMessageC2SModuleGrabBegin(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 8) { + break; + } + + message.moduleId = reader.uint32(); + continue; + case 2: + if (tag != 17) { + break; + } + + message.worldposX = reader.double(); + continue; + case 3: + if (tag != 25) { + break; + } + + message.worldposY = reader.double(); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MessageC2SModuleGrabBegin { + return { + moduleId: isSet(object.moduleId) ? Number(object.moduleId) : 0, + worldposX: isSet(object.worldposX) ? Number(object.worldposX) : 0, + worldposY: isSet(object.worldposY) ? Number(object.worldposY) : 0, + }; + }, + + toJSON(message: MessageC2SModuleGrabBegin): unknown { + const obj: any = {}; + message.moduleId !== undefined && (obj.moduleId = Math.round(message.moduleId)); + message.worldposX !== undefined && (obj.worldposX = message.worldposX); + message.worldposY !== undefined && (obj.worldposY = message.worldposY); + return obj; + }, + + create, I>>(base?: I): MessageC2SModuleGrabBegin { + return MessageC2SModuleGrabBegin.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): MessageC2SModuleGrabBegin { + const message = createBaseMessageC2SModuleGrabBegin(); + message.moduleId = object.moduleId ?? 0; + message.worldposX = object.worldposX ?? 0; + message.worldposY = object.worldposY ?? 0; + return message; + }, +}; + +function createBaseMessageC2SModuleGrabEnd(): MessageC2SModuleGrabEnd { + return { moduleId: 0, parentId: 0, slot: 0 }; +} + +export const MessageC2SModuleGrabEnd = { + encode(message: MessageC2SModuleGrabEnd, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.moduleId !== 0) { + writer.uint32(8).uint32(message.moduleId); + } + if (message.parentId !== 0) { + writer.uint32(16).uint32(message.parentId); + } + if (message.slot !== 0) { + writer.uint32(24).uint32(message.slot); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MessageC2SModuleGrabEnd { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMessageC2SModuleGrabEnd(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 8) { + break; + } + + message.moduleId = reader.uint32(); + continue; + case 2: + if (tag != 16) { + break; + } + + message.parentId = reader.uint32(); + continue; + case 3: + if (tag != 24) { + break; + } + + message.slot = reader.uint32(); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MessageC2SModuleGrabEnd { + return { + moduleId: isSet(object.moduleId) ? Number(object.moduleId) : 0, + parentId: isSet(object.parentId) ? Number(object.parentId) : 0, + slot: isSet(object.slot) ? Number(object.slot) : 0, + }; + }, + + toJSON(message: MessageC2SModuleGrabEnd): unknown { + const obj: any = {}; + message.moduleId !== undefined && (obj.moduleId = Math.round(message.moduleId)); + message.parentId !== undefined && (obj.parentId = Math.round(message.parentId)); + message.slot !== undefined && (obj.slot = Math.round(message.slot)); + return obj; + }, + + create, I>>(base?: I): MessageC2SModuleGrabEnd { + return MessageC2SModuleGrabEnd.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): MessageC2SModuleGrabEnd { + const message = createBaseMessageC2SModuleGrabEnd(); + message.moduleId = object.moduleId ?? 0; + message.parentId = object.parentId ?? 0; + message.slot = object.slot ?? 0; + return message; + }, +}; + type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T diff --git a/client/src/protocol/message_s2c.ts b/client/src/protocol/message_s2c.ts index 45c766faea909543e144e5fb2e912a1e97c52f23..2ef655b65aea80cc507b0e58e94a3623a5eef5a8 100644 --- a/client/src/protocol/message_s2c.ts +++ b/client/src/protocol/message_s2c.ts @@ -1,7 +1,7 @@ //@ts-nocheck import * as _m0 from "protobufjs/minimal"; import { GoodbyeReason, goodbyeReasonFromJSON, goodbyeReasonToJSON } from "./goodbye_reason"; -import { Module } from "./module"; +import { AttachedModule, Module } from "./module"; import { Planet } from "./planet"; import { Player } from "./player"; import { State, stateFromJSON, stateToJSON } from "./state"; @@ -277,6 +277,117 @@ export function messageS2CModulesUpdate_packetInfoToJSON(object: MessageS2CModul } } +export interface MessageS2CModuleTreeUpdate { + tree: AttachedModule[]; +} + +export enum MessageS2CModuleTreeUpdate_packetInfo { + unknown = 0, + type = 12, + UNRECOGNIZED = -1, +} + +export function messageS2CModuleTreeUpdate_packetInfoFromJSON(object: any): MessageS2CModuleTreeUpdate_packetInfo { + switch (object) { + case 0: + case "unknown": + return MessageS2CModuleTreeUpdate_packetInfo.unknown; + case 12: + case "type": + return MessageS2CModuleTreeUpdate_packetInfo.type; + case -1: + case "UNRECOGNIZED": + default: + return MessageS2CModuleTreeUpdate_packetInfo.UNRECOGNIZED; + } +} + +export function messageS2CModuleTreeUpdate_packetInfoToJSON(object: MessageS2CModuleTreeUpdate_packetInfo): string { + switch (object) { + case MessageS2CModuleTreeUpdate_packetInfo.unknown: + return "unknown"; + case MessageS2CModuleTreeUpdate_packetInfo.type: + return "type"; + case MessageS2CModuleTreeUpdate_packetInfo.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} + +export interface MessageS2CModuleAdd { + module: AttachedModule | undefined; +} + +export enum MessageS2CModuleAdd_packetInfo { + unknown = 0, + type = 13, + UNRECOGNIZED = -1, +} + +export function messageS2CModuleAdd_packetInfoFromJSON(object: any): MessageS2CModuleAdd_packetInfo { + switch (object) { + case 0: + case "unknown": + return MessageS2CModuleAdd_packetInfo.unknown; + case 13: + case "type": + return MessageS2CModuleAdd_packetInfo.type; + case -1: + case "UNRECOGNIZED": + default: + return MessageS2CModuleAdd_packetInfo.UNRECOGNIZED; + } +} + +export function messageS2CModuleAdd_packetInfoToJSON(object: MessageS2CModuleAdd_packetInfo): string { + switch (object) { + case MessageS2CModuleAdd_packetInfo.unknown: + return "unknown"; + case MessageS2CModuleAdd_packetInfo.type: + return "type"; + case MessageS2CModuleAdd_packetInfo.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} + +export interface MessageS2CModuleRemove { + module: AttachedModule | undefined; +} + +export enum MessageS2CModuleRemove_packetInfo { + unknown = 0, + type = 14, + UNRECOGNIZED = -1, +} + +export function messageS2CModuleRemove_packetInfoFromJSON(object: any): MessageS2CModuleRemove_packetInfo { + switch (object) { + case 0: + case "unknown": + return MessageS2CModuleRemove_packetInfo.unknown; + case 14: + case "type": + return MessageS2CModuleRemove_packetInfo.type; + case -1: + case "UNRECOGNIZED": + default: + return MessageS2CModuleRemove_packetInfo.UNRECOGNIZED; + } +} + +export function messageS2CModuleRemove_packetInfoToJSON(object: MessageS2CModuleRemove_packetInfo): string { + switch (object) { + case MessageS2CModuleRemove_packetInfo.unknown: + return "unknown"; + case MessageS2CModuleRemove_packetInfo.type: + return "type"; + case MessageS2CModuleRemove_packetInfo.UNRECOGNIZED: + default: + return "UNRECOGNIZED"; + } +} + function createBaseMessageS2CHello(): MessageS2CHello { return { version: 0, givenUsername: "", nextState: 0 }; } @@ -712,6 +823,182 @@ export const MessageS2CModulesUpdate = { }, }; +function createBaseMessageS2CModuleTreeUpdate(): MessageS2CModuleTreeUpdate { + return { tree: [] }; +} + +export const MessageS2CModuleTreeUpdate = { + encode(message: MessageS2CModuleTreeUpdate, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + for (const v of message.tree) { + AttachedModule.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MessageS2CModuleTreeUpdate { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMessageS2CModuleTreeUpdate(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.tree.push(AttachedModule.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MessageS2CModuleTreeUpdate { + return { tree: Array.isArray(object?.tree) ? object.tree.map((e: any) => AttachedModule.fromJSON(e)) : [] }; + }, + + toJSON(message: MessageS2CModuleTreeUpdate): unknown { + const obj: any = {}; + if (message.tree) { + obj.tree = message.tree.map((e) => e ? AttachedModule.toJSON(e) : undefined); + } else { + obj.tree = []; + } + return obj; + }, + + create, I>>(base?: I): MessageS2CModuleTreeUpdate { + return MessageS2CModuleTreeUpdate.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): MessageS2CModuleTreeUpdate { + const message = createBaseMessageS2CModuleTreeUpdate(); + message.tree = object.tree?.map((e) => AttachedModule.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseMessageS2CModuleAdd(): MessageS2CModuleAdd { + return { module: undefined }; +} + +export const MessageS2CModuleAdd = { + encode(message: MessageS2CModuleAdd, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.module !== undefined) { + AttachedModule.encode(message.module, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MessageS2CModuleAdd { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMessageS2CModuleAdd(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.module = AttachedModule.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MessageS2CModuleAdd { + return { module: isSet(object.module) ? AttachedModule.fromJSON(object.module) : undefined }; + }, + + toJSON(message: MessageS2CModuleAdd): unknown { + const obj: any = {}; + message.module !== undefined && (obj.module = message.module ? AttachedModule.toJSON(message.module) : undefined); + return obj; + }, + + create, I>>(base?: I): MessageS2CModuleAdd { + return MessageS2CModuleAdd.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): MessageS2CModuleAdd { + const message = createBaseMessageS2CModuleAdd(); + message.module = (object.module !== undefined && object.module !== null) + ? AttachedModule.fromPartial(object.module) + : undefined; + return message; + }, +}; + +function createBaseMessageS2CModuleRemove(): MessageS2CModuleRemove { + return { module: undefined }; +} + +export const MessageS2CModuleRemove = { + encode(message: MessageS2CModuleRemove, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.module !== undefined) { + AttachedModule.encode(message.module, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MessageS2CModuleRemove { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMessageS2CModuleRemove(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 10) { + break; + } + + message.module = AttachedModule.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MessageS2CModuleRemove { + return { module: isSet(object.module) ? AttachedModule.fromJSON(object.module) : undefined }; + }, + + toJSON(message: MessageS2CModuleRemove): unknown { + const obj: any = {}; + message.module !== undefined && (obj.module = message.module ? AttachedModule.toJSON(message.module) : undefined); + return obj; + }, + + create, I>>(base?: I): MessageS2CModuleRemove { + return MessageS2CModuleRemove.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): MessageS2CModuleRemove { + const message = createBaseMessageS2CModuleRemove(); + message.module = (object.module !== undefined && object.module !== null) + ? AttachedModule.fromPartial(object.module) + : undefined; + return message; + }, +}; + type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; export type DeepPartial = T extends Builtin ? T diff --git a/client/src/protocol/module.ts b/client/src/protocol/module.ts index b2ff55acdfefc4a55ab885c9bb9bd9a36f47acf2..04a85bb4a35e1148be3cd2662c3dca6034410d0e 100644 --- a/client/src/protocol/module.ts +++ b/client/src/protocol/module.ts @@ -53,10 +53,25 @@ export interface Module { rotation: number; x: number; y: number; + isOn: boolean; +} + +export interface AttachedModule { + moduleType: ModuleType; + rotation: number; + x: number; + y: number; + id: number; + children: Attachment[]; +} + +export interface Attachment { + id: number; + slot: number; } function createBaseModule(): Module { - return { moduleType: 0, rotation: 0, x: 0, y: 0 }; + return { moduleType: 0, rotation: 0, x: 0, y: 0, isOn: false }; } export const Module = { @@ -73,6 +88,9 @@ export const Module = { if (message.y !== 0) { writer.uint32(33).double(message.y); } + if (message.isOn === true) { + writer.uint32(40).bool(message.isOn); + } return writer; }, @@ -111,6 +129,13 @@ export const Module = { message.y = reader.double(); continue; + case 5: + if (tag != 40) { + break; + } + + message.isOn = reader.bool(); + continue; } if ((tag & 7) == 4 || tag == 0) { break; @@ -126,6 +151,7 @@ export const Module = { rotation: isSet(object.rotation) ? Number(object.rotation) : 0, x: isSet(object.x) ? Number(object.x) : 0, y: isSet(object.y) ? Number(object.y) : 0, + isOn: isSet(object.isOn) ? Boolean(object.isOn) : false, }; }, @@ -135,6 +161,7 @@ export const Module = { message.rotation !== undefined && (obj.rotation = message.rotation); message.x !== undefined && (obj.x = message.x); message.y !== undefined && (obj.y = message.y); + message.isOn !== undefined && (obj.isOn = message.isOn); return obj; }, @@ -148,6 +175,202 @@ export const Module = { message.rotation = object.rotation ?? 0; message.x = object.x ?? 0; message.y = object.y ?? 0; + message.isOn = object.isOn ?? false; + return message; + }, +}; + +function createBaseAttachedModule(): AttachedModule { + return { moduleType: 0, rotation: 0, x: 0, y: 0, id: 0, children: [] }; +} + +export const AttachedModule = { + encode(message: AttachedModule, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.moduleType !== 0) { + writer.uint32(8).int32(message.moduleType); + } + if (message.rotation !== 0) { + writer.uint32(17).double(message.rotation); + } + if (message.x !== 0) { + writer.uint32(25).double(message.x); + } + if (message.y !== 0) { + writer.uint32(33).double(message.y); + } + if (message.id !== 0) { + writer.uint32(40).uint32(message.id); + } + for (const v of message.children) { + Attachment.encode(v!, writer.uint32(50).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AttachedModule { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAttachedModule(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 8) { + break; + } + + message.moduleType = reader.int32() as any; + continue; + case 2: + if (tag != 17) { + break; + } + + message.rotation = reader.double(); + continue; + case 3: + if (tag != 25) { + break; + } + + message.x = reader.double(); + continue; + case 4: + if (tag != 33) { + break; + } + + message.y = reader.double(); + continue; + case 5: + if (tag != 40) { + break; + } + + message.id = reader.uint32(); + continue; + case 6: + if (tag != 50) { + break; + } + + message.children.push(Attachment.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AttachedModule { + return { + moduleType: isSet(object.moduleType) ? moduleTypeFromJSON(object.moduleType) : 0, + rotation: isSet(object.rotation) ? Number(object.rotation) : 0, + x: isSet(object.x) ? Number(object.x) : 0, + y: isSet(object.y) ? Number(object.y) : 0, + id: isSet(object.id) ? Number(object.id) : 0, + children: Array.isArray(object?.children) ? object.children.map((e: any) => Attachment.fromJSON(e)) : [], + }; + }, + + toJSON(message: AttachedModule): unknown { + const obj: any = {}; + message.moduleType !== undefined && (obj.moduleType = moduleTypeToJSON(message.moduleType)); + message.rotation !== undefined && (obj.rotation = message.rotation); + message.x !== undefined && (obj.x = message.x); + message.y !== undefined && (obj.y = message.y); + message.id !== undefined && (obj.id = Math.round(message.id)); + if (message.children) { + obj.children = message.children.map((e) => e ? Attachment.toJSON(e) : undefined); + } else { + obj.children = []; + } + return obj; + }, + + create, I>>(base?: I): AttachedModule { + return AttachedModule.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): AttachedModule { + const message = createBaseAttachedModule(); + message.moduleType = object.moduleType ?? 0; + message.rotation = object.rotation ?? 0; + message.x = object.x ?? 0; + message.y = object.y ?? 0; + message.id = object.id ?? 0; + message.children = object.children?.map((e) => Attachment.fromPartial(e)) || []; + return message; + }, +}; + +function createBaseAttachment(): Attachment { + return { id: 0, slot: 0 }; +} + +export const Attachment = { + encode(message: Attachment, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.id !== 0) { + writer.uint32(8).uint32(message.id); + } + if (message.slot !== 0) { + writer.uint32(16).uint32(message.slot); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Attachment { + const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAttachment(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag != 8) { + break; + } + + message.id = reader.uint32(); + continue; + case 2: + if (tag != 16) { + break; + } + + message.slot = reader.uint32(); + continue; + } + if ((tag & 7) == 4 || tag == 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Attachment { + return { id: isSet(object.id) ? Number(object.id) : 0, slot: isSet(object.slot) ? Number(object.slot) : 0 }; + }, + + toJSON(message: Attachment): unknown { + const obj: any = {}; + message.id !== undefined && (obj.id = Math.round(message.id)); + message.slot !== undefined && (obj.slot = Math.round(message.slot)); + return obj; + }, + + create, I>>(base?: I): Attachment { + return Attachment.fromPartial(base ?? {}); + }, + + fromPartial, I>>(object: I): Attachment { + const message = createBaseAttachment(); + message.id = object.id ?? 0; + message.slot = object.slot ?? 0; return message; }, }; diff --git a/protocol/src/lib.rs b/protocol/src/lib.rs index d89f614570dc57046e0dc76182514c001e7817a7..9064b9303e2e4c338924e4b770ba12c8f19d220e 100644 --- a/protocol/src/lib.rs +++ b/protocol/src/lib.rs @@ -1,9 +1,10 @@ use crate::message_c2s::{ MessageC2SAuthenticateAndBeamOut, MessageC2SChat, MessageC2SGoodbye, MessageC2SHello, - MessageC2SInput, MessageC2SMouseInput, MessageC2SPing, + MessageC2SInput, MessageC2SModuleGrabBegin, MessageC2SModuleGrabEnd, MessageC2SMouseInput, MessageC2SPing, }; use crate::message_s2c::{ MessageS2CChat, MessageS2CGoodbye, MessageS2CHello, MessageS2CModulesUpdate, + MessageS2CModuleAdd, MessageS2CModuleRemove, MessageS2CModuleTreeUpdate, MessageS2CPlanetData, MessageS2CPlayersUpdate, MessageS2CPong, }; use crate::planet::PlanetType; @@ -12,7 +13,7 @@ use protobuf::{Enum, Message}; use std::error::Error; include!(concat!(env!("OUT_DIR"), "/protos/mod.rs")); -pub const PROTOCOL_VERSION: u32 = 4; +pub const PROTOCOL_VERSION: u32 = 5; pub mod api; @@ -25,6 +26,8 @@ pub enum MessageC2S { Input(MessageC2SInput), AuthenticateAndBeamOut(MessageC2SAuthenticateAndBeamOut), MouseInput(MessageC2SMouseInput), + ModuleGrabBegin(MessageC2SModuleGrabBegin), + ModuleGrabEnd(MessageC2SModuleGrabEnd), } #[derive(Debug)] @@ -36,6 +39,9 @@ pub enum MessageS2C { PlayersUpdate(MessageS2CPlayersUpdate), PlanetData(MessageS2CPlanetData), ModulesUpdate(MessageS2CModulesUpdate), + ModuleTreeUpdate(MessageS2CModuleTreeUpdate), + ModuleAdd(MessageS2CModuleAdd), + ModuleRemove(MessageS2CModuleRemove), } impl TryFrom<&[u8]> for MessageC2S { @@ -73,6 +79,16 @@ impl TryFrom<&[u8]> for MessageC2S { { MessageC2S::MouseInput(MessageC2SMouseInput::parse_from_bytes(&pkt.packet_data)?) } + _id if _id + == message_c2s::message_c2smodule_grab_begin::Packet_info::type_.value() as i64 => + { + MessageC2S::ModuleGrabBegin(MessageC2SModuleGrabBegin::parse_from_bytes(&pkt.packet_data)?) + } + _id if _id + == message_c2s::message_c2smodule_grab_end::Packet_info::type_.value() as i64 => + { + MessageC2S::ModuleGrabEnd(MessageC2SModuleGrabEnd::parse_from_bytes(&pkt.packet_data)?) + } _id => { return Err(format!("Unrecognized C2S packet {}", _id).into()); } @@ -115,6 +131,14 @@ impl TryInto> for MessageC2S { message_c2s::message_c2smouse_input::Packet_info::type_.value(), p.write_to_bytes()?, ), + MessageC2S::ModuleGrabBegin(p) => ( + message_c2s::message_c2smodule_grab_begin::Packet_info::type_.value(), + p.write_to_bytes()?, + ), + MessageC2S::ModuleGrabEnd(p) => ( + message_c2s::message_c2smodule_grab_end::Packet_info::type_.value(), + p.write_to_bytes()?, + ), }; let pkt = PacketWrapper { @@ -165,6 +189,27 @@ impl TryFrom<&[u8]> for MessageS2C { &pkt.packet_data, )?) } + _id if _id + == message_s2c::message_s2cmodule_tree_update::Packet_info::type_.value() as i64 => + { + MessageS2C::ModuleTreeUpdate(MessageS2CModuleTreeUpdate::parse_from_bytes( + &pkt.packet_data, + )?) + } + _id if _id + == message_s2c::message_s2cmodule_add::Packet_info::type_.value() as i64 => + { + MessageS2C::ModuleAdd(MessageS2CModuleAdd::parse_from_bytes( + &pkt.packet_data, + )?) + } + _id if _id + == message_s2c::message_s2cmodule_remove::Packet_info::type_.value() as i64 => + { + MessageS2C::ModuleRemove(MessageS2CModuleRemove::parse_from_bytes( + &pkt.packet_data, + )?) + } _ => { return Err("Not a S2C packet".into()); } @@ -207,6 +252,18 @@ impl TryInto> for MessageS2C { message_s2c::message_s2cmodules_update::Packet_info::type_.value(), p.write_to_bytes()?, ), + MessageS2C::ModuleTreeUpdate(p) => ( + message_s2c::message_s2cmodule_tree_update::Packet_info::type_.value(), + p.write_to_bytes()?, + ), + MessageS2C::ModuleAdd(p) => ( + message_s2c::message_s2cmodule_add::Packet_info::type_.value(), + p.write_to_bytes()?, + ), + MessageS2C::ModuleRemove(p) => ( + message_s2c::message_s2cmodule_remove::Packet_info::type_.value(), + p.write_to_bytes()?, + ), }; let pkt = PacketWrapper { diff --git a/protocol/src/pbuf/message_s2c.proto b/protocol/src/pbuf/message_s2c.proto index 225df36d67615a6f49d7f673541fb486b2fb8f33..0db942baae7f030393d8fac8a1a04200e3eb1cac 100644 --- a/protocol/src/pbuf/message_s2c.proto +++ b/protocol/src/pbuf/message_s2c.proto @@ -50,8 +50,20 @@ message MessageS2CModulesUpdate { repeated protocol.module.Module modules = 1; } -message MessageS2CUpdateModuleTree { +message MessageS2CModuleTreeUpdate { enum packet_info { unknown = 0; type = 0x0c; } - // tree + repeated protocol.module.AttachedModule tree = 1; +} + +message MessageS2CModuleAdd { + enum packet_info { unknown = 0; type = 0x0d; } + + protocol.module.AttachedModule module = 1; +} + +message MessageS2CModuleRemove { + enum packet_info { unknown = 0; type = 0x0e; } + + protocol.module.AttachedModule module = 1; } diff --git a/protocol/src/pbuf/module.proto b/protocol/src/pbuf/module.proto index 1d1918cb35412dfa639da620f1218a830bf99f56..c5da5a8c6baa18bea6ca1d210cacd09c2e95f99d 100644 --- a/protocol/src/pbuf/module.proto +++ b/protocol/src/pbuf/module.proto @@ -6,6 +6,7 @@ message Module { double rotation = 2; double x = 3; double y = 4; + bool is_on = 5; } message AttachedModule { ModuleType module_type = 1; @@ -13,7 +14,7 @@ message AttachedModule { double x = 3; double y = 4; uint32 id = 5; - repeated Attachment children + repeated Attachment children = 6; } message Attachment { uint32 id = 1;