Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
NetLiquidModule.cs
Go to the documentation of this file.
2using System.IO;
4using Terraria.Net;
5
7
9{
10 private class ChunkChanges
11 {
13
14 public int ChunkX;
15
16 public int ChunkY;
17
18 public ChunkChanges(int x, int y)
19 {
20 ChunkX = x;
21 ChunkY = y;
23 }
24
26 {
27 return Netplay.Clients[clientIndex].TileSections[ChunkX, ChunkY];
28 }
29 }
30
32
34
36 {
37 NetPacket result = NetModule.CreatePacket<NetLiquidModule>(changes.Count * 6 + 2);
38 result.Writer.Write((ushort)changes.Count);
39 foreach (int change in changes)
40 {
41 int num = (change >> 16) & 0xFFFF;
42 int num2 = change & 0xFFFF;
43 result.Writer.Write(change);
44 result.Writer.Write(Main.tile[num, num2].liquid);
45 result.Writer.Write(Main.tile[num, num2].liquidType());
46 }
47 return result;
48 }
49
51 {
54 {
55 if (changesByChunkCoord.Value.BroadcastingCondition(playerIndex))
56 {
57 _changesForPlayerCache.AddRange(changesByChunkCoord.Value.DirtiedPackedTileCoords);
58 }
59 }
60 NetPacket result = NetModule.CreatePacket<NetLiquidModule>(_changesForPlayerCache.Count * 6 + 2);
61 result.Writer.Write((ushort)_changesForPlayerCache.Count);
62 foreach (int item in _changesForPlayerCache)
63 {
64 int num = (item >> 16) & 0xFFFF;
65 int num2 = item & 0xFFFF;
66 result.Writer.Write(item);
67 result.Writer.Write(Main.tile[num, num2].liquid);
68 result.Writer.Write(Main.tile[num, num2].liquidType());
69 }
70 return result;
71 }
72
73 public override bool Deserialize(BinaryReader reader, int userId)
74 {
75 int num = reader.ReadUInt16();
76 for (int i = 0; i < num; i++)
77 {
78 int num2 = reader.ReadInt32();
79 byte liquid = reader.ReadByte();
80 byte liquidType = reader.ReadByte();
81 int num3 = (num2 >> 16) & 0xFFFF;
82 int num4 = num2 & 0xFFFF;
83 Tile tile = Main.tile[num3, num4];
84 if (tile != null)
85 {
86 tile.liquid = liquid;
87 tile.liquidType(liquidType);
88 }
89 }
90 return true;
91 }
92
98
100 {
101 for (int i = 0; i < 256; i++)
102 {
103 if (Netplay.Clients[i].IsConnected())
104 {
105 NetManager.Instance.SendToClient(SerializeForPlayer(i), i);
106 }
107 }
108 }
109
110 private static void BroadcastEachChunkSeparately()
111 {
113 {
114 NetManager.Instance.Broadcast(Serialize(changesByChunkCoord.Value.DirtiedPackedTileCoords), changesByChunkCoord.Value.BroadcastingCondition);
115 }
116 }
117
126
131
133 {
134 Point key = default(Point);
136 {
137 int x = (dirtiedPackedTileCoord >> 16) & 0xFFFF;
138 int y = dirtiedPackedTileCoord & 0xFFFF;
139 key.X = Netplay.GetSectionX(x);
140 key.Y = Netplay.GetSectionY(y);
141 if (!_changesByChunkCoords.TryGetValue(key, out var value))
142 {
143 value = new ChunkChanges(key.X, key.Y);
144 _changesByChunkCoords[key] = value;
145 }
146 value.DirtiedPackedTileCoords.Add(dirtiedPackedTileCoord);
147 }
148 }
149}
virtual byte ReadByte()
virtual ushort ReadUInt16()
virtual int ReadInt32()
virtual void Write(bool value)
static void CreateAndBroadcastByChunk(HashSet< int > dirtiedPackedTileCoords)
static Dictionary< Point, ChunkChanges > _changesByChunkCoords
static void DistributeChangesIntoChunks(HashSet< int > dirtiedPackedTileCoords)
static NetPacket Serialize(HashSet< int > changes)
override bool Deserialize(BinaryReader reader, int userId)
static NetPacket SerializeForPlayer(int playerIndex)
static void BroadcastAllChanges(HashSet< int > dirtiedPackedTileCoords)
static void PrepareChunks(HashSet< int > dirtiedPackedTileCoords)
static Tile[,] tile
Definition Main.cs:1675
static readonly NetManager Instance
Definition NetManager.cs:18
static RemoteClient[] Clients
Definition Netplay.cs:37
static int GetSectionX(int x)
Definition Netplay.cs:774
static int GetSectionY(int y)
Definition Netplay.cs:779
void liquidType(int liquidType)
Definition Tile.cs:233
BinaryWriter Writer
Definition NetPacket.cs:16