1 /** 2 Copyright: Copyright (c) 2015-2016 Andrey Penechko. 3 License: $(WEB boost.org/LICENSE_1_0.txt, Boost License 1.0). 4 Authors: Andrey Penechko. 5 */ 6 module voxelman.core.packets; 7 8 import netlib.connection; 9 import voxelman.math; 10 11 void registerPackets(Connection c) 12 { 13 // Common 14 c.registerPacket!ClientPositionPacket; 15 c.registerPacket!FillBlockBoxPacket; 16 c.registerPacket!PlaceBlockEntityPacket; 17 c.registerPacket!RemoveBlockEntityPacket; 18 19 // Server -> Client 20 c.registerPacket!ChunkDataPacket; 21 c.registerPacket!SpawnPacket; 22 c.registerPacket!MultiblockChangePacket; 23 24 // Client -> Server 25 c.registerPacket!ViewRadiusPacket; 26 c.registerPacket!CommandPacket; 27 } 28 29 // sent by client when position/heading changes. 30 struct ClientPositionPacket 31 { 32 import voxelman.core.config : DimentionId; 33 float[3] pos = [0, 0, 0]; 34 float[2] heading = [0, 0]; 35 DimentionId dimention; 36 ubyte positionKey; 37 } 38 39 // sent by client after receiving SessionInfoPacket 40 struct ViewRadiusPacket 41 { 42 int viewRadius; 43 } 44 45 struct ChunkDataPacket 46 { 47 import voxelman.world.storage.chunk : BlockData; 48 int[4] chunkPos; 49 BlockData[] layers; 50 } 51 52 struct MultiblockChangePacket 53 { 54 import voxelman.world.storage.chunk : BlockChange; 55 int[4] chunkPos; 56 BlockChange[] blockChanges; 57 } 58 59 struct FillBlockBoxPacket 60 { 61 import voxelman.world.storage.worldbox : WorldBox; 62 import voxelman.core.config : BlockId; 63 WorldBox box; 64 BlockId blockId; 65 } 66 67 struct PlaceBlockEntityPacket 68 { 69 import voxelman.world.storage.worldbox : WorldBox; 70 WorldBox box; 71 ulong data; 72 } 73 74 struct RemoveBlockEntityPacket 75 { 76 import voxelman.world.storage.worldbox : WorldBox; 77 int[4] blockPos; 78 } 79 80 struct SpawnPacket 81 { 82 } 83 84 struct CommandPacket 85 { 86 string command; 87 }