Add some ASCII drawings explaining yaw/pitch, move some direction calculation into a common utils class.

This commit is contained in:
UnknownShadow200 2016-08-27 13:13:32 +10:00
parent b238bb1432
commit dddf8fd5b9
5 changed files with 75 additions and 16 deletions

View File

@ -27,22 +27,15 @@ namespace MCGalaxy.BlockBehaviour {
int dx = 0, dy = 0, dz = 0; int dx = 0, dy = 0, dz = 0;
p.RevertBlock(x, y, z); p.RevertBlock(x, y, z);
if ( p.rot[0] < 48 || p.rot[0] > ( 256 - 48 ) ) DirUtils.EightYaw(p.rot[0], out dx, out dz);
dz = -1;
else if ( p.rot[0] > ( 128 - 48 ) && p.rot[0] < ( 128 + 48 ) )
dz = 1;
if ( p.rot[0] > ( 64 - 48 ) && p.rot[0] < ( 64 + 48 ) )
dx = 1;
else if ( p.rot[0] > ( 192 - 48 ) && p.rot[0] < ( 192 + 48 ) )
dx = -1;
if ( p.rot[1] >= 192 && p.rot[1] <= ( 192 + 32 ) ) if ( p.rot[1] >= 192 && p.rot[1] <= ( 192 + 32 ) )
dy = 1; dy = 1;
else if ( p.rot[1] <= 64 && p.rot[1] >= 32 ) else if ( p.rot[1] <= 64 && p.rot[1] >= 32 )
dy = -1; dy = -1;
if ( 192 <= p.rot[1] && p.rot[1] <= 196 || 60 <= p.rot[1] && p.rot[1] <= 64 ) { dx = 0; dz = 0; } // Looking straight up or down
if (p.rot[1] >= 192 && p.rot[1] <= 196 || p.rot[1] >= 60 && p.rot[1] <= 64) { dx = 0; dz = 0; }
byte b1 = p.level.GetTile((ushort)( x + dx * 2 ), (ushort)( y + dy * 2 ), (ushort)( z + dz * 2 )); byte b1 = p.level.GetTile((ushort)( x + dx * 2 ), (ushort)( y + dy * 2 ), (ushort)( z + dz * 2 ));
byte b2 = p.level.GetTile((ushort)( x + dx ), (ushort)( y + dy ), (ushort)( z + dz )); byte b2 = p.level.GetTile((ushort)( x + dx ), (ushort)( y + dy ), (ushort)( z + dz ));

View File

@ -40,10 +40,7 @@ namespace MCGalaxy.Commands.Building {
int dist = (int)state; int dist = (int)state;
int dx = 0, dz = 0; int dx = 0, dz = 0;
if (p.rot[0] <= 32 || p.rot[0] >= 224) { dz = -1; } DirUtils.FourYaw(p.rot[0], out dx, out dz);
else if (p.rot[0] <= 96) { dx = 1; }
else if (p.rot[0] <= 160) { dz = 1; }
else dx = -1;
List<int> buffer = new List<int>(); List<int> buffer = new List<int>();
int depth = 0; int depth = 0;

View File

@ -607,10 +607,11 @@
<Compile Include="util\FastList.cs" /> <Compile Include="util\FastList.cs" />
<Compile Include="util\App.cs" /> <Compile Include="util\App.cs" />
<Compile Include="util\Formatter.cs" /> <Compile Include="util\Formatter.cs" />
<Compile Include="util\Math\DirUtils.cs" />
<Compile Include="util\Math\Vectors.cs" />
<Compile Include="util\SparseBitSet.cs" /> <Compile Include="util\SparseBitSet.cs" />
<Compile Include="util\TimeUtils.cs" /> <Compile Include="util\TimeUtils.cs" />
<Compile Include="util\Utils.cs" /> <Compile Include="util\Utils.cs" />
<Compile Include="util\Vectors.cs" />
<Compile Include="util\VolatileArray.cs" /> <Compile Include="util\VolatileArray.cs" />
<Compile Include="sharkbite.thresher\ChannelModeInfo.cs" /> <Compile Include="sharkbite.thresher\ChannelModeInfo.cs" />
<Compile Include="sharkbite.thresher\CommandBuilder.cs" /> <Compile Include="sharkbite.thresher\CommandBuilder.cs" />
@ -720,6 +721,7 @@
<Folder Include="Bots" /> <Folder Include="Bots" />
<Folder Include="Events" /> <Folder Include="Events" />
<Folder Include="Chat" /> <Folder Include="Chat" />
<Folder Include="util\Math" />
<Folder Include="Player\Group" /> <Folder Include="Player\Group" />
<Folder Include="Player\List" /> <Folder Include="Player\List" />
<Folder Include="Player\Undo" /> <Folder Include="Player\Undo" />

67
util/Math/DirUtils.cs Normal file
View File

@ -0,0 +1,67 @@
/*
Copyright 2015 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 {
public static class DirUtils {
/* How yaw works: * How pitch works:
* 64 | +X * 192 | +Y
* ___|___ * |
* / | \ * flipped |
* / | \ * heads |
* 128 | | | 0 * 128 | 0
*------------+----------- * ------------+------------
* +Z | | | -Z * Y=0 | Y=0
* \ | / * flipped |
* \___|___/ * heads |
* | * |
* 192 | -X * 64 | -Y
* */
public static void EightYaw(byte yaw, out int dirX, out int dirZ) {
dirX = 0; dirZ = 0;
const byte extent = 48;
if (yaw < (0 + extent) || yaw > (256 - extent))
dirZ = -1;
else if (yaw > (128 - extent) && yaw < (128 + extent))
dirZ = 1;
if (yaw > (64 - extent) && yaw < (64 + extent))
dirX = 1;
else if (yaw > (192 - extent) && yaw < (192 + extent))
dirX = -1;
}
public static void FourYaw(byte yaw, out int dirX, out int dirZ) {
dirX = 0; dirZ = 0;
const byte quadrant = 32;
if (yaw <= (0 + quadrant) || yaw >= (256 - quadrant))
dirZ = -1;
else if (yaw <= (128 - quadrant))
dirX = 1;
else if (yaw <= (128 + quadrant))
dirZ = 1;
else
dirX = -1;
}
}
}