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 }