diff --git a/MCGalaxy/Blocks/Physics/AIPhysics.cs b/MCGalaxy/Blocks/Physics/AIPhysics.cs
deleted file mode 100644
index c6358753f..000000000
--- a/MCGalaxy/Blocks/Physics/AIPhysics.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy)
-
- Dual-licensed under the Educational Community License, Version 2.0 and
- the GNU General Public License, Version 3 (the "Licenses"); you may
- not use this file except in compliance with the Licenses. You may
- obtain a copy of the Licenses at
-
- http://www.opensource.org/licenses/ecl2.php
- http://www.gnu.org/licenses/gpl-3.0.html
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the Licenses are distributed on an "AS IS"
- BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- or implied. See the Licenses for the specific language governing
- permissions and limitations under the Licenses.
-*/
-using System;
-
-namespace MCGalaxy.Blocks.Physics {
-
- public static class AIPhysics {
-
- public static Player ClosestPlayer(Level lvl, ushort x, ushort y, ushort z) {
- if (!lvl.Config.AnimalHuntAI) return null;
- int closestDist = 75;
- Player closetPlayer = null;
- Player[] players = PlayerInfo.Online.Items;
-
- foreach (Player p in players) {
- if (p.level == lvl && !p.invincible) {
- int curDist = Math.Abs(p.Pos.BlockX - x) +
- Math.Abs(p.Pos.BlockY - y) +
- Math.Abs(p.Pos.BlockZ - z);
-
- if (curDist < closestDist) {
- closestDist = curDist;
- closetPlayer = p;
- }
- }
- }
- return closetPlayer;
- }
- }
-}
diff --git a/MCGalaxy/Blocks/Physics/ActivateablePhysics.cs b/MCGalaxy/Blocks/Physics/ActivateablePhysics.cs
index 4c4479432..8723e151e 100644
--- a/MCGalaxy/Blocks/Physics/ActivateablePhysics.cs
+++ b/MCGalaxy/Blocks/Physics/ActivateablePhysics.cs
@@ -38,8 +38,8 @@ namespace MCGalaxy.Blocks.Physics {
!lvl.listUpdateExists.Get(x + dx * 2, y + dy * 2, z + dz * 2);
if (isFree) {
- lvl.AddUpdate(bHead, Block.RocketHead);
- lvl.AddUpdate(bTail, Block.LavaFire);
+ lvl.AddUpdate(bHead, Block.RocketHead, default(PhysicsArgs));
+ lvl.AddUpdate(bTail, Block.LavaFire, default(PhysicsArgs));
}
} else if (block == Block.Fireworks) {
bool isFree =
@@ -49,7 +49,7 @@ namespace MCGalaxy.Blocks.Physics {
!lvl.listUpdateExists.Get(x + dx, y + dy + 2, z + dz);
if (isFree) {
- lvl.AddUpdate(bHead, Block.Fireworks);
+ lvl.AddUpdate(bHead, Block.Fireworks, default(PhysicsArgs));
PhysicsArgs args = default(PhysicsArgs);
args.Type1 = PhysicsArgs.Dissipate; args.Value1 = 100;
lvl.AddUpdate(bTail, Block.StillLava, args);
@@ -123,8 +123,7 @@ namespace MCGalaxy.Blocks.Physics {
if (index == -1) return;
byte block = lvl.blocks[index];
BlockID convBlock = Block.Convert(block);
- if (convBlock == Block.Water || convBlock == Block.Lava ||
- (block >= Block.Red && block <= Block.White)) {
+ if (convBlock == Block.Water || convBlock == Block.Lava || (block >= Block.Red && block <= Block.White)) {
lvl.AddCheck(index); return;
}
diff --git a/MCGalaxy/Blocks/Physics/AirPhysics.cs b/MCGalaxy/Blocks/Physics/AirPhysics.cs
index 9192d9766..730cddd6c 100644
--- a/MCGalaxy/Blocks/Physics/AirPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/AirPhysics.cs
@@ -42,7 +42,7 @@ namespace MCGalaxy.Blocks.Physics {
public static void DoFlood(Level lvl, ref Check C, AirFlood mode, byte block) {
if (C.data.Data >= 1) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.Data = PhysicsArgs.RemoveFromChecks; return;
}
ushort x, y, z;
diff --git a/MCGalaxy/Blocks/Physics/BirdPhysics.cs b/MCGalaxy/Blocks/Physics/BirdPhysics.cs
index 577e1ec5b..7474b124f 100644
--- a/MCGalaxy/Blocks/Physics/BirdPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/BirdPhysics.cs
@@ -60,7 +60,7 @@ namespace MCGalaxy.Blocks.Physics {
FlyTo(lvl, ref C, x, y, (ushort)(z + 1), block);
break;
}
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
diff --git a/MCGalaxy/Blocks/Physics/ExtLiquidPhysics.cs b/MCGalaxy/Blocks/Physics/ExtLiquidPhysics.cs
index 479983275..cd3348fbe 100644
--- a/MCGalaxy/Blocks/Physics/ExtLiquidPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/ExtLiquidPhysics.cs
@@ -30,7 +30,7 @@ namespace MCGalaxy.Blocks.Physics {
BlockID below = lvl.GetBlock(x, (ushort)(y - 1), z);
if (below == Block.Air) {
- lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.Magma);
+ lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.Magma, default(PhysicsArgs));
} else if (below != Block.Magma) {
byte block = lvl.blocks[C.b];
LiquidPhysics.PhysLava(lvl, (ushort)(x + 1), y, z, block);
@@ -57,7 +57,7 @@ namespace MCGalaxy.Blocks.Physics {
BlockID block = lvl.GetBlock((ushort)x, (ushort)y, (ushort)z, out index);
if (index >= 0 && lvl.Props[block].LavaKills) {
- lvl.AddUpdate(index, Block.Magma);
+ lvl.AddUpdate(index, Block.Magma, default(PhysicsArgs));
flowUp = true;
}
}
@@ -69,7 +69,7 @@ namespace MCGalaxy.Blocks.Physics {
BlockID below = lvl.GetBlock(x, (ushort)(y - 1), z);
if (below == Block.Air) {
- lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.Geyser);
+ lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.Geyser, default(PhysicsArgs));
} else if (below != Block.Geyser) {
byte block = lvl.blocks[C.b];
LiquidPhysics.PhysWater(lvl, (ushort)(x + 1), y, z, block);
@@ -96,7 +96,7 @@ namespace MCGalaxy.Blocks.Physics {
BlockID block = lvl.GetBlock((ushort)x, (ushort)y, (ushort)z, out index);
if (index >= 0 && lvl.Props[block].WaterKills) {
- lvl.AddUpdate(index, Block.Geyser);
+ lvl.AddUpdate(index, Block.Geyser, default(PhysicsArgs));
flowUp = true;
}
}
@@ -108,7 +108,7 @@ namespace MCGalaxy.Blocks.Physics {
switch (below) {
case Block.Air:
- lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.WaterDown);
+ lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.WaterDown, default(PhysicsArgs));
if (!C.data.HasWait) C.data.Data = PhysicsArgs.RemoveFromChecks;
break;
case Block.Air_FloodDown:
@@ -136,7 +136,7 @@ namespace MCGalaxy.Blocks.Physics {
switch (below)
{
case Block.Air:
- lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.LavaDown);
+ lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), Block.LavaDown, default(PhysicsArgs));
if (!C.data.HasWait) C.data.Data = PhysicsArgs.RemoveFromChecks;
break;
case Block.Air_FloodDown:
@@ -169,7 +169,7 @@ namespace MCGalaxy.Blocks.Physics {
byte block = lvl.blocks[index];
if (block == Block.Air || block == target) {
if (rand.Next(1, 10) > 7)
- lvl.AddUpdate(index, Block.Air_FloodDown);
+ lvl.AddUpdate(index, Block.Air_FloodDown, default(PhysicsArgs));
} else if (block == Block.Air_FloodDown) {
if (rand.Next(1, 10) > 4)
lvl.AddUpdate(index, target);
diff --git a/MCGalaxy/Blocks/Physics/ExtraInfoPhysics.cs b/MCGalaxy/Blocks/Physics/ExtraInfoPhysics.cs
index e613e1495..ad7718fcf 100644
--- a/MCGalaxy/Blocks/Physics/ExtraInfoPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/ExtraInfoPhysics.cs
@@ -69,7 +69,7 @@ namespace MCGalaxy.Blocks.Physics {
if (args.Wait) {
if (C.data.Door && C.data.Data == 0) {
- BlockID block = (BlockID)(C.data.Value2 | (C.data.ExtBlock ? Block.Extended : 0));
+ BlockID block = (BlockID)(C.data.Value2 | (C.data.ExtBlock ? Block.Extended : 0));
bool tdoor = lvl.Props[block].IsTDoor;
if (tdoor) DoorPhysics.tDoor(lvl, ref C);
@@ -125,7 +125,7 @@ namespace MCGalaxy.Blocks.Physics {
// drop can generate another block with no dissipate/explode information.
if (args.Dissipate && rand.Next(1, 100) <= args.DissipateNum) {
if (!lvl.listUpdateExists.Get(x, y, z)) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.ResetTypes();
args.Drop = false;
} else {
@@ -150,10 +150,10 @@ namespace MCGalaxy.Blocks.Physics {
lvl.AddUpdate(C.b, Block.Red, C.data);
} else {
BlockID next = block == Block.Pink ? Block.Red : (BlockID)(block + 1);
- lvl.AddUpdate(C.b, next);
+ lvl.AddUpdate(C.b, next, default(PhysicsArgs));
}
} else {
- lvl.AddUpdate(C.b, (BlockID)rand.Next(Block.Red, Block.Pink + 1));
+ lvl.AddUpdate(C.b, (BlockID)rand.Next(Block.Red, Block.Pink + 1), default(PhysicsArgs));
}
}
@@ -166,7 +166,7 @@ namespace MCGalaxy.Blocks.Physics {
return;
if (rand.Next(1, 100) < dropnum && lvl.AddUpdate(index, lvl.blocks[C.b], C.data)) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.ResetTypes();
}
}
diff --git a/MCGalaxy/Blocks/Physics/FinitePhysics.cs b/MCGalaxy/Blocks/Physics/FinitePhysics.cs
index 50424a478..7e25c3cbc 100644
--- a/MCGalaxy/Blocks/Physics/FinitePhysics.cs
+++ b/MCGalaxy/Blocks/Physics/FinitePhysics.cs
@@ -31,10 +31,10 @@ namespace MCGalaxy.Blocks.Physics {
BlockID below = lvl.GetBlock(x, (ushort)(y - 1), z);
if (below == Block.Air) {
lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y - 1), z), lvl.blocks[C.b], C.data);
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.ResetTypes();
} else if (below == Block.StillWater || below == Block.StillLava) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.ResetTypes();
} else {
const int count = 25;
@@ -69,7 +69,7 @@ namespace MCGalaxy.Blocks.Physics {
int index;
if (lvl.IsAirAt(posX, y, posZ, out index) && lvl.AddUpdate(index, lvl.blocks[C.b], C.data)) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.ResetTypes();
return;
}
@@ -81,7 +81,7 @@ namespace MCGalaxy.Blocks.Physics {
static bool Expand(Level lvl, int x, int y, int z) {
int index = lvl.PosToInt((ushort)x, (ushort)y, (ushort)z);
if (index >= 0 && lvl.blocks[index] == Block.Air &&
- lvl.AddUpdate(index, Block.FiniteWater)) {
+ lvl.AddUpdate(index, Block.FiniteWater, default(PhysicsArgs))) {
return true;
}
return false;
diff --git a/MCGalaxy/Blocks/Physics/FirePhysics.cs b/MCGalaxy/Blocks/Physics/FirePhysics.cs
index d611d0f95..1cf62011d 100644
--- a/MCGalaxy/Blocks/Physics/FirePhysics.cs
+++ b/MCGalaxy/Blocks/Physics/FirePhysics.cs
@@ -25,7 +25,7 @@ namespace MCGalaxy.Blocks.Physics {
static bool ExpandSimple(Level lvl, int x, int y, int z) {
int index;
if (lvl.IsAirAt((ushort)x, (ushort)y, (ushort)z, out index)) {
- lvl.AddUpdate(index, Block.Fire);
+ lvl.AddUpdate(index, Block.Fire, default(PhysicsArgs));
return true;
}
return false;
@@ -38,11 +38,11 @@ namespace MCGalaxy.Blocks.Physics {
if (!lvl.Props[block].LavaKills) return;
if (dx != 0)
- lvl.AddUpdate(lvl.PosToInt((ushort)(x + dx), y, z), Block.Fire);
+ lvl.AddUpdate(lvl.PosToInt((ushort)(x + dx), y, z), Block.Fire, default(PhysicsArgs));
if (dy != 0)
- lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y + dy), z), Block.Fire);
+ lvl.AddUpdate(lvl.PosToInt(x, (ushort)(y + dy), z), Block.Fire, default(PhysicsArgs));
if (dz != 0)
- lvl.AddUpdate(lvl.PosToInt(x, y, (ushort)(z + dz)), Block.Fire);
+ lvl.AddUpdate(lvl.PosToInt(x, y, (ushort)(z + dz)), Block.Fire, default(PhysicsArgs));
}
static void ExpandAvanced(Level lvl, int x, int y, int z) {
@@ -53,7 +53,7 @@ namespace MCGalaxy.Blocks.Physics {
if (block == Block.TNT) {
lvl.MakeExplosion((ushort)x, (ushort)y, (ushort)z, -1);
} else if (lvl.Props[block].LavaKills) {
- lvl.AddUpdate(index, Block.Fire);
+ lvl.AddUpdate(index, Block.Fire, default(PhysicsArgs));
}
}
@@ -102,15 +102,15 @@ namespace MCGalaxy.Blocks.Physics {
if (C.data.Data > 5) {
int dropType = rand.Next(1, 10);
if (dropType <= 2) {
- lvl.AddUpdate(C.b, Block.CoalOre);
+ lvl.AddUpdate(C.b, Block.CoalOre, default(PhysicsArgs));
C.data.Type1 = PhysicsArgs.Drop; C.data.Value1 = 63;
C.data.Type2 = PhysicsArgs.Dissipate; C.data.Value2 = 10;
} else if (dropType <= 4) {
- lvl.AddUpdate(C.b, Block.Obsidian);
+ lvl.AddUpdate(C.b, Block.Obsidian, default(PhysicsArgs));
C.data.Type1 = PhysicsArgs.Drop; C.data.Value1 = 63;
C.data.Type2 = PhysicsArgs.Dissipate; C.data.Value2 = 10;
} else if (dropType <= 8) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
} else {
C.data.Data = 3;
}
diff --git a/MCGalaxy/Blocks/Physics/FireworkPhysics.cs b/MCGalaxy/Blocks/Physics/FireworkPhysics.cs
index 4e8b89519..363158c2f 100644
--- a/MCGalaxy/Blocks/Physics/FireworkPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/FireworkPhysics.cs
@@ -42,7 +42,7 @@ namespace MCGalaxy.Blocks.Physics {
args.Type1 = PhysicsArgs.Wait; args.Value1 = 1;
args.Type2 = PhysicsArgs.Dissipate; args.Value2 = 100;
- lvl.AddUpdate(bAbove, Block.Fireworks);
+ lvl.AddUpdate(bAbove, Block.Fireworks, default(PhysicsArgs));
lvl.AddUpdate(C.b, Block.StillLava, args);
args.Data = C.data.Data;
C.data = args;
@@ -60,7 +60,7 @@ namespace MCGalaxy.Blocks.Physics {
int min = Math.Min(rand1, rand2), max = Math.Max(rand1, rand2);
// Not using override, since override = true makes it more likely that a colored block will be
// generated with no extraInfo, because it sets a Check for that position with no extraInfo.
- lvl.AddUpdate(lvl.PosToInt(x, y, z), Block.Air);
+ lvl.AddUpdate(lvl.PosToInt(x, y, z), Block.Air, default(PhysicsArgs));
int index;
for (int yy = y - (size + 1); yy <= y + (size + 1); ++yy)
diff --git a/MCGalaxy/Blocks/Physics/HunterPhysics.cs b/MCGalaxy/Blocks/Physics/HunterPhysics.cs
index 93eebc367..d1812f9f0 100644
--- a/MCGalaxy/Blocks/Physics/HunterPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/HunterPhysics.cs
@@ -22,13 +22,13 @@ namespace MCGalaxy.Blocks.Physics {
public static class HunterPhysics {
- // dir is 1 for hunting birds (they go towards the closest player)
- // dir is -1 for fleeing birds (they go away from the closest player)
+ // dir is 1 for hunting animals (they go towards the closest player)
+ // dir is -1 for fleeing animals (they go away from the closest player)
public static void Do(Level lvl, ref Check C, BlockID target, int dir) {
Random rand = lvl.physRandom;
ushort x, y, z;
lvl.IntToPos(C.b, out x, out y, out z);
- Player closest = AIPhysics.ClosestPlayer(lvl, x, y, z);
+ Player closest = ClosestPlayer(lvl, x, y, z);
if (closest != null && rand.Next(1, 20) < 19) {
int dirsVisited = 0;
@@ -103,5 +103,23 @@ namespace MCGalaxy.Blocks.Physics {
}
return false;
}
+
+ public static Player ClosestPlayer(Level lvl, ushort x, ushort y, ushort z) {
+ if (!lvl.Config.AnimalHuntAI) return null;
+ int closestDist = 75;
+ Player closetPlayer = null;
+ Player[] players = PlayerInfo.Online.Items;
+
+ foreach (Player p in players) {
+ if (p.level != lvl || p.invincible) continue;
+ Position pos = p.Pos;
+ int curDist = Math.Abs(pos.BlockX - x) + Math.Abs(pos.BlockY - y) + Math.Abs(pos.BlockZ - z);
+ if (curDist < closestDist) {
+ closestDist = curDist;
+ closetPlayer = p;
+ }
+ }
+ return closetPlayer;
+ }
}
}
\ No newline at end of file
diff --git a/MCGalaxy/Blocks/Physics/LeafPhysics.cs b/MCGalaxy/Blocks/Physics/LeafPhysics.cs
index bef4fd1f4..8cde93d14 100644
--- a/MCGalaxy/Blocks/Physics/LeafPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/LeafPhysics.cs
@@ -42,7 +42,7 @@ namespace MCGalaxy.Blocks.Physics {
}
// Perform actual leaf decay, then remove from physics list
- if (DoLeafDecay(lvl, ref C)) lvl.AddUpdate(C.b, Block.Air);
+ if (DoLeafDecay(lvl, ref C)) lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
diff --git a/MCGalaxy/Blocks/Physics/LiquidPhysics.cs b/MCGalaxy/Blocks/Physics/LiquidPhysics.cs
index 7ea554cdf..23953bede 100644
--- a/MCGalaxy/Blocks/Physics/LiquidPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/LiquidPhysics.cs
@@ -31,13 +31,17 @@ namespace MCGalaxy.Blocks.Physics {
switch (block) {
case Block.Air:
- if (!lvl.CheckSpongeWater(x, y, z)) lvl.AddUpdate(b, type);
+ if (!lvl.CheckSpongeWater(x, y, z)) {
+ lvl.AddUpdate(b, type);
+ }
break;
case Block.Lava:
case Block.FastLava:
case Block.Deadly_ActiveLava:
- if (!lvl.CheckSpongeWater(x, y, z)) lvl.AddUpdate(b, Block.Stone);
+ if (!lvl.CheckSpongeWater(x, y, z)) {
+ lvl.AddUpdate(b, Block.Stone, default(PhysicsArgs));
+ }
break;
case Block.Sand:
@@ -49,8 +53,9 @@ namespace MCGalaxy.Blocks.Physics {
// Adv physics kills flowers and mushrooms in water
if (!lvl.Props[block].WaterKills) break;
- if (lvl.physics > 1 && !lvl.CheckSpongeWater(x, y, z))
- lvl.AddUpdate(b, Block.Air);
+ if (lvl.physics > 1 && !lvl.CheckSpongeWater(x, y, z)) {
+ lvl.AddUpdate(b, Block.Air, default(PhysicsArgs));
+ }
break;
}
}
@@ -64,17 +69,23 @@ namespace MCGalaxy.Blocks.Physics {
switch (block) {
case Block.Air:
- if (!lvl.CheckSpongeLava(x, y, z)) lvl.AddUpdate(b, type);
+ if (!lvl.CheckSpongeLava(x, y, z)) {
+ lvl.AddUpdate(b, type);
+ }
break;
case Block.Water:
case Block.Deadly_ActiveWater:
- if (!lvl.CheckSpongeLava(x, y, z)) lvl.AddUpdate(b, Block.Stone);
+ if (!lvl.CheckSpongeLava(x, y, z)) {
+ lvl.AddUpdate(b, Block.Stone, default(PhysicsArgs));
+ }
break;
case Block.Sand:
if (lvl.physics > 1) { //Adv physics changes sand to glass next to lava
- if (lvl.physics != 5) lvl.AddUpdate(b, Block.Glass);
+ if (lvl.physics != 5) {
+ lvl.AddUpdate(b, Block.Glass, default(PhysicsArgs));
+ }
} else {
lvl.AddCheck(b);
} break;
@@ -86,8 +97,9 @@ namespace MCGalaxy.Blocks.Physics {
//Adv physics kills flowers, wool, mushrooms, and wood type blocks in lava
if (!lvl.Props[block].LavaKills) break;
- if (lvl.physics > 1 && !lvl.CheckSpongeLava(x, y, z))
- lvl.AddUpdate(b, Block.Air);
+ if (lvl.physics > 1 && !lvl.CheckSpongeLava(x, y, z)) {
+ lvl.AddUpdate(b, Block.Air, default(PhysicsArgs));
+ }
break;
}
}
diff --git a/MCGalaxy/Blocks/Physics/OtherPhysics.cs b/MCGalaxy/Blocks/Physics/OtherPhysics.cs
index b20b57425..7a426b293 100644
--- a/MCGalaxy/Blocks/Physics/OtherPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/OtherPhysics.cs
@@ -59,7 +59,7 @@ namespace MCGalaxy.Blocks.Physics {
} while (true);
if (movedDown) {
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
if (lvl.physics > 1)
lvl.AddUpdate(index, block);
else
@@ -76,13 +76,13 @@ namespace MCGalaxy.Blocks.Physics {
int index;
if (lvl.GetBlock(x, (ushort)(y - 1), z, out index) == Block.Air) {
- lvl.AddUpdate(C.b, Block.Air);
- lvl.AddUpdate(index, Block.FloatWood);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
+ lvl.AddUpdate(index, Block.FloatWood, default(PhysicsArgs));
} else {
BlockID above = lvl.GetBlock(x, (ushort)(y + 1), z, out index);
if (above == Block.StillWater || Block.Convert(above) == Block.Water) {
lvl.AddUpdate(C.b, lvl.blocks[index]);
- lvl.AddUpdate(index, Block.FloatWood);
+ lvl.AddUpdate(index, Block.FloatWood, default(PhysicsArgs));
}
}
C.data.Data = PhysicsArgs.RemoveFromChecks;
@@ -168,7 +168,7 @@ namespace MCGalaxy.Blocks.Physics {
if (block == Block.Invalid) continue;
if (Block.Convert(block) == target || Block.Convert(block) == alt) {
- lvl.AddUpdate(index, Block.Air);
+ lvl.AddUpdate(index, Block.Air, default(PhysicsArgs));
}
}
C.data.Data = PhysicsArgs.RemoveFromChecks;
@@ -184,7 +184,7 @@ namespace MCGalaxy.Blocks.Physics {
for (int zz = -3; zz <= +3; ++zz)
for (int xx = -3; xx <= +3; ++xx)
{
- if (Math.Abs(xx) == 3 || Math.Abs(yy) == 3 || Math.Abs(zz) == 3) { // Calc only edge
+ if (Math.Abs(xx) == 3 || Math.Abs(yy) == 3 || Math.Abs(zz) == 3) { // Calc only edge
int index;
BlockID block = lvl.GetBlock((ushort)(x + xx), (ushort)(y + yy), (ushort)(z + zz), out index);
if (block == Block.Invalid) continue;
diff --git a/MCGalaxy/Blocks/Physics/RocketPhysics.cs b/MCGalaxy/Blocks/Physics/RocketPhysics.cs
index 0ab8cf850..6720a2565 100644
--- a/MCGalaxy/Blocks/Physics/RocketPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/RocketPhysics.cs
@@ -42,14 +42,14 @@ namespace MCGalaxy.Blocks.Physics {
bool unblocked = !lvl.listUpdateExists.Get(x, y, z) && (headIndex < 0 || !lvl.listUpdateExists.Get(x - cx, y - cy, z - cz));
if (unblocked && (rocketHead == Block.Air || rocketHead == Block.RocketStart)) {
- lvl.AddUpdate(headIndex, Block.RocketHead);
- lvl.AddUpdate(C.b, Block.LavaFire);
+ lvl.AddUpdate(headIndex, Block.RocketHead, default(PhysicsArgs));
+ lvl.AddUpdate(C.b, Block.LavaFire, default(PhysicsArgs));
} else if (rocketHead == Block.LavaFire) {
} else {
if (lvl.physics > 2)
lvl.MakeExplosion(x, y, z, 2);
else
- lvl.AddUpdate(C.b, Block.LavaFire);
+ lvl.AddUpdate(C.b, Block.LavaFire, default(PhysicsArgs));
}
}
}
diff --git a/MCGalaxy/Blocks/Physics/SimpleLiquidPhysics.cs b/MCGalaxy/Blocks/Physics/SimpleLiquidPhysics.cs
index 2cf29a21a..bfbd258af 100644
--- a/MCGalaxy/Blocks/Physics/SimpleLiquidPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/SimpleLiquidPhysics.cs
@@ -120,7 +120,7 @@ namespace MCGalaxy.Blocks.Physics {
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
} else { //was placed near sponge
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
if (!C.data.HasWait) {
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
@@ -141,7 +141,7 @@ namespace MCGalaxy.Blocks.Physics {
LiquidPhysics.PhysWater(lvl, x, y, (ushort)(z - 1), block);
LiquidPhysics.PhysWater(lvl, x, (ushort)(y - 1), z, block);
} else { //was placed near sponge
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
}
if (!C.data.HasWait) C.data.Data = PhysicsArgs.RemoveFromChecks;
}
@@ -232,7 +232,7 @@ namespace MCGalaxy.Blocks.Physics {
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
} else { //was placed near sponge
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
if (!checkWait || !C.data.HasWait) {
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
@@ -251,7 +251,7 @@ namespace MCGalaxy.Blocks.Physics {
LiquidPhysics.PhysLava(lvl, x, y, (ushort)(z - 1), block);
LiquidPhysics.PhysLava(lvl, x, (ushort)(y - 1), z, block);
} else { //was placed near sponge
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
}
if (!checkWait || !C.data.HasWait) {
diff --git a/MCGalaxy/Blocks/Physics/SnakePhysics.cs b/MCGalaxy/Blocks/Physics/SnakePhysics.cs
index ad914e053..3dd8ef7ad 100644
--- a/MCGalaxy/Blocks/Physics/SnakePhysics.cs
+++ b/MCGalaxy/Blocks/Physics/SnakePhysics.cs
@@ -27,7 +27,7 @@ namespace MCGalaxy.Blocks.Physics {
ushort x, y, z;
lvl.IntToPos(C.b, out x, out y, out z);
int dirsVisited = 0;
- Player closest = AIPhysics.ClosestPlayer(lvl, x, y, z);
+ Player closest = HunterPhysics.ClosestPlayer(lvl, x, y, z);
if (closest != null && rand.Next(1, 20) < 19) {
switch (rand.Next(1, 10)) {
diff --git a/MCGalaxy/Blocks/Physics/TntPhysics.cs b/MCGalaxy/Blocks/Physics/TntPhysics.cs
index 141e07706..f277380e0 100644
--- a/MCGalaxy/Blocks/Physics/TntPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/TntPhysics.cs
@@ -35,7 +35,7 @@ namespace MCGalaxy.Blocks.Physics {
public static void DoTntExplosion(Level lvl, ref Check C) {
Random rand = lvl.physRandom;
if (rand.Next(1, 11) <= 7)
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
}
public static void DoLargeTnt(Level lvl, ref Check C, int power) {
@@ -125,8 +125,9 @@ namespace MCGalaxy.Blocks.Physics {
int index;
BlockID block = lvl.GetBlock(x, y, z, out index);
- if (index >= 0 && !lvl.Props[block].OPBlock)
- lvl.AddUpdate(index, Block.TNT_Explosion, true);
+ if (index >= 0 && !lvl.Props[block].OPBlock) {
+ lvl.AddUpdate(index, Block.TNT_Explosion, default(PhysicsArgs), true);
+ }
Explode(lvl, x, y, z, size + 1, rand, -1, game);
Explode(lvl, x, y, z, size + 2, rand, 7, game);
@@ -152,9 +153,9 @@ namespace MCGalaxy.Blocks.Physics {
int mode = rand.Next(1, 11);
if (mode <= 4) {
- lvl.AddUpdate(index, Block.TNT_Explosion);
+ lvl.AddUpdate(index, Block.TNT_Explosion, default(PhysicsArgs));
} else if (mode <= 8) {
- lvl.AddUpdate(index, Block.Air);
+ lvl.AddUpdate(index, Block.Air, default(PhysicsArgs));
} else {
PhysicsArgs args = default(PhysicsArgs);
args.Type1 = PhysicsArgs.Drop; args.Value1 = 50;
@@ -162,7 +163,7 @@ namespace MCGalaxy.Blocks.Physics {
lvl.AddCheck(index, false, args);
}
} else if (block == Block.TNT) {
- lvl.AddUpdate(index, Block.TNT_Small);
+ lvl.AddUpdate(index, Block.TNT_Small, default(PhysicsArgs));
} else if (block == Block.TNT_Small || block == Block.TNT_Big || block == Block.TNT_Nuke) {
lvl.AddCheck(index);
}
diff --git a/MCGalaxy/Blocks/Physics/TrainPhysics.cs b/MCGalaxy/Blocks/Physics/TrainPhysics.cs
index 36e9b0dab..0e1f6edf7 100644
--- a/MCGalaxy/Blocks/Physics/TrainPhysics.cs
+++ b/MCGalaxy/Blocks/Physics/TrainPhysics.cs
@@ -41,8 +41,8 @@ namespace MCGalaxy.Blocks.Physics {
bool isRails = lvl.Props[below].IsRails;
if (isRails && (block == Block.Air || block == Block.Water) && !lvl.listUpdateExists.Get(x + dx, y + dy, z + dz)) {
- lvl.AddUpdate(index, Block.Train);
- lvl.AddUpdate(C.b, Block.Air);
+ lvl.AddUpdate(index, Block.Train, default(PhysicsArgs));
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
BlockID newBlock = below == Block.Op_Air ? Block.Glass : Block.Obsidian;
int belowIndex;
diff --git a/MCGalaxy/Blocks/Physics/ZombiePhysics.cs b/MCGalaxy/Blocks/Physics/ZombiePhysics.cs
index ac950660c..3d2abb015 100644
--- a/MCGalaxy/Blocks/Physics/ZombiePhysics.cs
+++ b/MCGalaxy/Blocks/Physics/ZombiePhysics.cs
@@ -35,7 +35,7 @@ namespace MCGalaxy.Blocks.Physics {
return;
}
bool checkTime = true;
- Player closest = AIPhysics.ClosestPlayer(lvl, x, y, z);
+ Player closest = HunterPhysics.ClosestPlayer(lvl, x, y, z);
if (closest != null && rand.Next(1, 20) < 18) {
ushort xx, zz;
@@ -98,8 +98,8 @@ namespace MCGalaxy.Blocks.Physics {
if (dirsVisited >= 4) return;
goto case 1;
}
- lvl.AddUpdate(C.b, Block.Air);
- lvl.AddUpdate(lvl.IntOffset(C.b, 0, 1, 0), Block.Air);
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
+ lvl.AddUpdate(lvl.IntOffset(C.b, 0, 1, 0), Block.Air, default(PhysicsArgs));
}
public static void DoHead(Level lvl, ref Check C) {
@@ -124,9 +124,9 @@ namespace MCGalaxy.Blocks.Physics {
}
if (lvl.AddUpdate(index, lvl.blocks[C.b])) {
- lvl.AddUpdate(lvl.IntOffset(index, 0, 1, 0), Block.ZombieHead);
- lvl.AddUpdate(C.b, Block.Air);
- lvl.AddUpdate(lvl.IntOffset(C.b, 0, 1, 0), Block.Air);
+ lvl.AddUpdate(lvl.IntOffset(index, 0, 1, 0), Block.ZombieHead, default(PhysicsArgs));
+ lvl.AddUpdate(C.b, Block.Air, default(PhysicsArgs));
+ lvl.AddUpdate(lvl.IntOffset(C.b, 0, 1, 0), Block.Air, default(PhysicsArgs));
return true;
}
return false;
diff --git a/MCGalaxy/Levels/Level.Physics.cs b/MCGalaxy/Levels/Level.Physics.cs
index c8abfab0b..3b6b295f1 100644
--- a/MCGalaxy/Levels/Level.Physics.cs
+++ b/MCGalaxy/Levels/Level.Physics.cs
@@ -210,7 +210,8 @@ namespace MCGalaxy {
if (x >= Width || y >= Height || z >= Length) return;
if (!listCheckExists.Get(x, y, z)) {
- ListCheck.Add(new Check(index, data)); //Adds block to list to be updated
+ Check check; check.b = index; check.data = data;
+ ListCheck.Add(check); // Adds block to list to be updated
listCheckExists.Set(x, y, z, true);
} else if (overRide) {
Check[] items = ListCheck.Items;
@@ -260,7 +261,10 @@ namespace MCGalaxy {
} else {
return false;
}
- ListUpdate.Add(new Update(index, (byte)block, data));
+
+ data.Data = (byte)block;
+ Update update; update.b = index; update.data = data;
+ ListUpdate.Add(update);
if (!physThreadStarted && physics > 0)
StartPhysics();
@@ -383,24 +387,20 @@ namespace MCGalaxy {
}
}
+ public struct PhysInfo {
+ public ushort X, Y, Z;
+ public BlockID Block;
+ public int Index;
+ public PhysicsArgs Data;
+ }
+
public struct Check {
public int b;
public PhysicsArgs data;
-
- public Check(int b, PhysicsArgs data) {
- this.b = b;
- this.data = data;
- }
}
public struct Update {
public int b;
public PhysicsArgs data;
-
- public Update(int b, byte type, PhysicsArgs data) {
- this.b = b;
- this.data = data;
- this.data.Data = type;
- }
}
}
\ No newline at end of file
diff --git a/MCGalaxy/MCGalaxy_.csproj b/MCGalaxy/MCGalaxy_.csproj
index 295db90e4..33f33b916 100644
--- a/MCGalaxy/MCGalaxy_.csproj
+++ b/MCGalaxy/MCGalaxy_.csproj
@@ -552,7 +552,6 @@
-