mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 04:32:50 -04:00
0.001% less code duplication
This commit is contained in:
parent
f2e1747573
commit
0f0b494d88
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user