TModLoader v1.4.4.9
TModLoader source code documentation
Loading...
Searching...
No Matches

◆ CompressTileBlock_Inner()

static void Terraria.NetMessage.CompressTileBlock_Inner ( BinaryWriter writer,
int xStart,
int yStart,
int width,
int height )
inlinestatic

Definition at line 2066 of file NetMessage.cs.

2067 {
2068 short num = 0;
2069 short num12 = 0;
2070 short num14 = 0;
2071 short num15 = 0;
2072 int num16 = 0;
2073 int num17 = 0;
2074 byte b = 0;
2075 byte[] array = new byte[16];
2076 Tile? tile = null;
2077 for (int i = yStart; i < yStart + height; i++)
2078 {
2079 for (int j = xStart; j < xStart + width; j++)
2080 {
2081 Tile tile2 = Main.tile[j, i];
2082 if (tile.HasValue && tile2.isTheSameAs(tile.Value) && TileID.Sets.AllowsSaveCompressionBatching[tile2.type])
2083 {
2084 num15++;
2085 continue;
2086 }
2087 if (tile.HasValue)
2088 {
2089 if (num15 > 0)
2090 {
2091 array[num16] = (byte)((uint)num15 & 0xFFu);
2092 num16++;
2093 if (num15 > 255)
2094 {
2095 b = (byte)(b | 0x80u);
2096 array[num16] = (byte)((num15 & 0xFF00) >> 8);
2097 num16++;
2098 }
2099 else
2100 {
2101 b = (byte)(b | 0x40u);
2102 }
2103 }
2104 array[num17] = b;
2105 writer.Write(array, num17, num16 - num17);
2106 num15 = 0;
2107 }
2108 num16 = 4;
2109 byte b3;
2110 byte b2;
2111 byte b4;
2112 b = (b4 = (b3 = (b2 = 0)));
2113 if (tile2.active())
2114 {
2115 b = (byte)(b | 2u);
2116 array[num16] = (byte)tile2.type;
2117 num16++;
2118 if (tile2.type > 255)
2119 {
2120 array[num16] = (byte)(tile2.type >> 8);
2121 num16++;
2122 b = (byte)(b | 0x20u);
2123 }
2124 if (TileID.Sets.BasicChest[tile2.type] && tile2.frameX % 36 == 0 && tile2.frameY % 36 == 0)
2125 {
2126 short num18 = (short)Chest.FindChest(j, i);
2127 if (num18 != -1)
2128 {
2130 num++;
2131 }
2132 }
2133 if (TileID.Sets.BasicDresser[tile2.type] && tile2.frameX % 54 == 0 && tile2.frameY % 36 == 0)
2134 {
2135 short num19 = (short)Chest.FindChest(j, i);
2136 if (num19 != -1)
2137 {
2139 num++;
2140 }
2141 }
2142 if (tile2.type == 85 && tile2.frameX % 36 == 0 && tile2.frameY % 36 == 0)
2143 {
2144 short num20 = (short)Sign.ReadSign(j, i);
2145 if (num20 != -1)
2146 {
2148 }
2149 }
2150 if (tile2.type == 55 && tile2.frameX % 36 == 0 && tile2.frameY % 36 == 0)
2151 {
2152 short num2 = (short)Sign.ReadSign(j, i);
2153 if (num2 != -1)
2154 {
2156 }
2157 }
2158 if ((tile2.type == 425 || (tile2.type >= TileID.Count && Main.tileSign[tile2.type])) && tile2.frameX % 36 == 0 && tile2.frameY % 36 == 0)
2159 {
2160 short num3 = (short)Sign.ReadSign(j, i);
2161 if (num3 != -1)
2162 {
2164 }
2165 }
2166 if (tile2.type == 573 && tile2.frameX % 36 == 0 && tile2.frameY % 36 == 0)
2167 {
2168 short num4 = (short)Sign.ReadSign(j, i);
2169 if (num4 != -1)
2170 {
2172 }
2173 }
2174 if (tile2.type == 378 && tile2.frameX % 36 == 0 && tile2.frameY == 0)
2175 {
2176 int num5 = TETrainingDummy.Find(j, i);
2177 if (num5 != -1)
2178 {
2179 _compressEntities[num14++] = (short)num5;
2180 }
2181 }
2182 if (tile2.type == 395 && tile2.frameX % 36 == 0 && tile2.frameY == 0)
2183 {
2184 int num6 = TEItemFrame.Find(j, i);
2185 if (num6 != -1)
2186 {
2187 _compressEntities[num14++] = (short)num6;
2188 }
2189 }
2190 if (tile2.type == 520 && tile2.frameX % 18 == 0 && tile2.frameY == 0)
2191 {
2192 int num7 = TEFoodPlatter.Find(j, i);
2193 if (num7 != -1)
2194 {
2195 _compressEntities[num14++] = (short)num7;
2196 }
2197 }
2198 if (tile2.type == 471 && tile2.frameX % 54 == 0 && tile2.frameY == 0)
2199 {
2200 int num8 = TEWeaponsRack.Find(j, i);
2201 if (num8 != -1)
2202 {
2203 _compressEntities[num14++] = (short)num8;
2204 }
2205 }
2206 if (tile2.type == 470 && tile2.frameX % 36 == 0 && tile2.frameY == 0)
2207 {
2208 int num9 = TEDisplayDoll.Find(j, i);
2209 if (num9 != -1)
2210 {
2211 _compressEntities[num14++] = (short)num9;
2212 }
2213 }
2214 if (tile2.type == 475 && tile2.frameX % 54 == 0 && tile2.frameY == 0)
2215 {
2216 int num10 = TEHatRack.Find(j, i);
2217 if (num10 != -1)
2218 {
2219 _compressEntities[num14++] = (short)num10;
2220 }
2221 }
2222 if (tile2.type == 597 && tile2.frameX % 54 == 0 && tile2.frameY % 72 == 0)
2223 {
2224 int num11 = TETeleportationPylon.Find(j, i);
2225 if (num11 != -1)
2226 {
2227 _compressEntities[num14++] = (short)num11;
2228 }
2229 }
2230 if (Main.tileFrameImportant[tile2.type])
2231 {
2232 array[num16] = (byte)((uint)tile2.frameX & 0xFFu);
2233 num16++;
2234 array[num16] = (byte)((tile2.frameX & 0xFF00) >> 8);
2235 num16++;
2236 array[num16] = (byte)((uint)tile2.frameY & 0xFFu);
2237 num16++;
2238 array[num16] = (byte)((tile2.frameY & 0xFF00) >> 8);
2239 num16++;
2240 }
2241 if (tile2.color() != 0)
2242 {
2243 b3 = (byte)(b3 | 8u);
2244 array[num16] = tile2.color();
2245 num16++;
2246 }
2247 }
2248 if (tile2.wall != 0)
2249 {
2250 b = (byte)(b | 4u);
2251 array[num16] = (byte)tile2.wall;
2252 num16++;
2253 if (tile2.wallColor() != 0)
2254 {
2255 b3 = (byte)(b3 | 0x10u);
2256 array[num16] = tile2.wallColor();
2257 num16++;
2258 }
2259 }
2260 if (tile2.liquid != 0)
2261 {
2262 if (!tile2.shimmer())
2263 {
2264 b = (tile2.lava() ? ((byte)(b | 0x10u)) : ((!tile2.honey()) ? ((byte)(b | 8u)) : ((byte)(b | 0x18u))));
2265 }
2266 else
2267 {
2268 b3 = (byte)(b3 | 0x80u);
2269 b = (byte)(b | 8u);
2270 }
2271 array[num16] = tile2.liquid;
2272 num16++;
2273 }
2274 if (tile2.wire())
2275 {
2276 b4 = (byte)(b4 | 2u);
2277 }
2278 if (tile2.wire2())
2279 {
2280 b4 = (byte)(b4 | 4u);
2281 }
2282 if (tile2.wire3())
2283 {
2284 b4 = (byte)(b4 | 8u);
2285 }
2286 int num13 = (tile2.halfBrick() ? 16 : ((tile2.slope() != 0) ? (tile2.slope() + 1 << 4) : 0));
2287 b4 |= (byte)num13;
2288 if (tile2.actuator())
2289 {
2290 b3 = (byte)(b3 | 2u);
2291 }
2292 if (tile2.inActive())
2293 {
2294 b3 = (byte)(b3 | 4u);
2295 }
2296 if (tile2.wire4())
2297 {
2298 b3 = (byte)(b3 | 0x20u);
2299 }
2300 if (tile2.wall > 255)
2301 {
2302 array[num16] = (byte)(tile2.wall >> 8);
2303 num16++;
2304 b3 = (byte)(b3 | 0x40u);
2305 }
2306 if (tile2.invisibleBlock())
2307 {
2308 b2 = (byte)(b2 | 2u);
2309 }
2310 if (tile2.invisibleWall())
2311 {
2312 b2 = (byte)(b2 | 4u);
2313 }
2314 if (tile2.fullbrightBlock())
2315 {
2316 b2 = (byte)(b2 | 8u);
2317 }
2318 if (tile2.fullbrightWall())
2319 {
2320 b2 = (byte)(b2 | 0x10u);
2321 }
2322 num17 = 3;
2323 if (b2 != 0)
2324 {
2325 b3 = (byte)(b3 | 1u);
2326 array[num17] = b2;
2327 num17--;
2328 }
2329 if (b3 != 0)
2330 {
2331 b4 = (byte)(b4 | 1u);
2332 array[num17] = b3;
2333 num17--;
2334 }
2335 if (b4 != 0)
2336 {
2337 b = (byte)(b | 1u);
2338 array[num17] = b4;
2339 num17--;
2340 }
2341 tile = tile2;
2342 }
2343 }
2344 if (num15 > 0)
2345 {
2346 array[num16] = (byte)((uint)num15 & 0xFFu);
2347 num16++;
2348 if (num15 > 255)
2349 {
2350 b = (byte)(b | 0x80u);
2351 array[num16] = (byte)((num15 & 0xFF00) >> 8);
2352 num16++;
2353 }
2354 else
2355 {
2356 b = (byte)(b | 0x40u);
2357 }
2358 }
2359 array[num17] = b;
2360 writer.Write(array, num17, num16 - num17);
2361 writer.Write(num);
2362 for (int k = 0; k < num; k++)
2363 {
2364 Chest chest = Main.chest[_compressChestList[k]];
2365 writer.Write(_compressChestList[k]);
2366 writer.Write((short)chest.x);
2367 writer.Write((short)chest.y);
2368 writer.Write(chest.name);
2369 }
2370 writer.Write(num12);
2371 for (int l = 0; l < num12; l++)
2372 {
2373 Sign sign = Main.sign[_compressSignList[l]];
2374 writer.Write(_compressSignList[l]);
2375 writer.Write((short)sign.x);
2376 writer.Write((short)sign.y);
2377 writer.Write(sign.text);
2378 }
2380 {
2381 Point16 pos = item.Key;
2382 if (pos.X >= xStart && pos.X < xStart + width && pos.Y >= yStart && pos.Y < yStart + height && item.Value.type >= TileEntitiesManager.VanillaTypeCount)
2383 {
2384 _compressEntities[num14++] = (short)item.Value.ID;
2385 }
2386 }
2387 writer.Write(num14);
2388 for (int m = 0; m < num14; m++)
2389 {
2391 }
2392 }
static Dictionary< int, TileEntity > ByID
Definition TileEntity.cs:20
static Dictionary< Point16, TileEntity > ByPosition
Definition TileEntity.cs:22
static void Write(BinaryWriter writer, TileEntity ent, bool networkSend=false, bool lightSend=false)
Definition TileEntity.cs:87
static bool[] BasicDresser
Definition TileID.cs:294
static bool[] AllowsSaveCompressionBatching
If true for a given tile type (P:Terraria.Tile.TileType), then that tile can be compressed when synci...
Definition TileID.cs:100
static bool[] BasicChest
Definition TileID.cs:290
static readonly ushort Count
Definition TileID.cs:1928
static short[] _compressSignList
Definition NetMessage.cs:72
static short[] _compressChestList
Definition NetMessage.cs:70
static short[] _compressEntities
Definition NetMessage.cs:74

References Terraria.NetMessage._compressChestList, Terraria.NetMessage._compressEntities, Terraria.NetMessage._compressSignList, Terraria.ID.TileID.Sets.AllowsSaveCompressionBatching, Terraria.ID.TileID.Sets.BasicChest, Terraria.ID.TileID.Sets.BasicDresser, Terraria.DataStructures.TileEntity.ByID, Terraria.DataStructures.TileEntity.ByPosition, Terraria.Main.chest, Terraria.ID.TileID.Count, Terraria.GameContent.Tile_Entities.TEDisplayDoll.Find(), Terraria.GameContent.Tile_Entities.TEFoodPlatter.Find(), Terraria.GameContent.Tile_Entities.TEHatRack.Find(), Terraria.GameContent.Tile_Entities.TEItemFrame.Find(), Terraria.GameContent.Tile_Entities.TETeleportationPylon.Find(), Terraria.GameContent.Tile_Entities.TETrainingDummy.Find(), Terraria.GameContent.Tile_Entities.TEWeaponsRack.Find(), Terraria.Chest.FindChest(), Terraria.Chest.name, Terraria.Sign.ReadSign(), Terraria.Main.sign, Terraria.Sign.text, Terraria.Main.tile, Terraria.Main.tileFrameImportant, Terraria.Main.tileSign, Terraria.DataStructures.TileEntitiesManager.VanillaTypeCount, Terraria.DataStructures.TileEntity.Write(), Terraria.DataStructures.Point16.X, Terraria.Chest.x, Terraria.Sign.x, Terraria.DataStructures.Point16.Y, Terraria.Chest.y, and Terraria.Sign.y.

Referenced by Terraria.NetMessage.CompressTileBlock().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: