0.001% less code duplication

This commit is contained in:
UnknownShadow200 2017-04-30 15:55:34 +10:00
parent f2e1747573
commit 0f0b494d88
4 changed files with 49 additions and 59 deletions

View File

@ -85,6 +85,7 @@ namespace MCGalaxy.Blocks.Physics {
}
}
internal static PhysicsArgs GetDoorArgs(byte raw, bool isExt, out byte physForm) {
PhysicsArgs args = default(PhysicsArgs);
args.Type1 = PhysicsArgs.Wait; args.Value1 = 16 - 1;
@ -112,5 +113,46 @@ namespace MCGalaxy.Blocks.Physics {
args.ExtBlock = isExt;
return args;
}
internal static void CheckNeighbours(Level lvl, ushort x, ushort y, ushort z) {
CheckAt(lvl, lvl.PosToInt((ushort)(x + 1), y, z));
CheckAt(lvl, lvl.PosToInt((ushort)(x - 1), y, z));
CheckAt(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)));
CheckAt(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)));
CheckAt(lvl, lvl.PosToInt(x, (ushort)(y + 1), z));
// ommision of y-1 to match original behaviour
}
internal static void CheckAt(Level lvl, int index) {
if (index == -1) return;
byte block = lvl.blocks[index];
byte convBlock = Block.Convert(block);
if (convBlock == Block.water || convBlock == Block.lava ||
(block >= Block.red && block <= Block.white)) {
lvl.AddCheck(index); return;
}
switch (block) {
//case Block.water:
//case Block.lava:
case Block.shrub:
case Block.sand:
case Block.gravel:
case Block.leaf:
case Block.wood_float:
/*case Block.lava_fast:
case Block.WaterDown:
case Block.LavaDown:
case Block.deathlava:
case Block.deathwater:
case Block.geyser:
case Block.magma:*/
lvl.AddCheck(index);
break;
default:
break;
}
}
}
}

View File

@ -26,12 +26,8 @@ namespace MCGalaxy.Blocks.Physics {
ushort x, y, z;
lvl.IntToPos(C.b, out x, out y, out z);
PhysAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z));
PhysAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z));
PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)));
PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)));
PhysAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z));
PhysAir(lvl, lvl.PosToInt(x, (ushort)(y - 1), z));
ActivateablePhysics.CheckNeighbours(lvl, x, y, z);
ActivateablePhysics.CheckAt(lvl, lvl.PosToInt(x, (ushort)(y - 1), z));
//Edge of map water
if (lvl.edgeWater && (y < lvl.Height / 2 && y >= (lvl.Height / 2) - 2)) {
@ -77,36 +73,5 @@ namespace MCGalaxy.Blocks.Physics {
if (curBlock == Block.water || curBlock == Block.lava)
lvl.AddUpdate(index, block);
}
internal static void PhysAir(Level lvl, int index) {
if (index == -1) return;
byte block = lvl.blocks[index];
byte convBlock = Block.Convert(block);
if (convBlock == Block.water || convBlock == Block.lava ||
(block >= Block.red && block <= Block.white)) {
lvl.AddCheck(index); return;
}
switch (block) {
//case Block.water:
//case Block.lava:
case Block.shrub:
case Block.sand:
case Block.gravel:
case Block.leaf:
case Block.wood_float:
/*case Block.lava_fast:
case Block.WaterDown:
case Block.LavaDown:
case Block.deathlava:
case Block.deathwater:
case Block.geyser:
case Block.magma:*/
lvl.AddCheck(index);
break;
default:
break;
}
}
}
}

View File

@ -24,13 +24,8 @@ namespace MCGalaxy.Blocks.Physics {
public static void DoLeaf(Level lvl, ref Check C) {
if (lvl.physics > 1) { //Adv physics kills flowers and mushroos in water/lava
ushort x, y, z;
lvl.IntToPos(C.b, out x, out y, out z);
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z));
lvl.IntToPos(C.b, out x, out y, out z);
ActivateablePhysics.CheckNeighbours(lvl, x, y, z);
}
// Just immediately remove from physics list

View File

@ -62,11 +62,7 @@ namespace MCGalaxy.Blocks.Physics {
else
lvl.AddUpdate(lvl.IntOffset(index, 0, 1, 0), block);
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z));
ActivateablePhysics.CheckNeighbours(lvl, x, y, z);
}
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
@ -107,11 +103,7 @@ namespace MCGalaxy.Blocks.Physics {
ushort x, y, z;
lvl.IntToPos(C.b, out x, out y, out z);
if (lvl.physics > 1) { //Adv physics kills flowers and mushroos in water/lava
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z));
ActivateablePhysics.CheckNeighbours(lvl, x, y, z);
}
if (!lvl.growTrees) { C.data.Data = PhysicsArgs.RemoveFromChecks; return; }
@ -190,11 +182,7 @@ namespace MCGalaxy.Blocks.Physics {
lvl.IntToPos(C.b, out x, out y, out z);
//Adv physics kills flowers and mushroos in water/lava
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x + 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt((ushort)(x - 1), y, z));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z + 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, y, (ushort)(z - 1)));
AirPhysics.PhysAir(lvl, lvl.PosToInt(x, (ushort)(y + 1), z));
ActivateablePhysics.CheckNeighbours(lvl, x, y, z);
C.data.Data = PhysicsArgs.RemoveFromChecks;
}
}