diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/coordsize.h | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'public/coordsize.h')
| -rw-r--r-- | public/coordsize.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/public/coordsize.h b/public/coordsize.h new file mode 100644 index 0000000..7875219 --- /dev/null +++ b/public/coordsize.h @@ -0,0 +1,98 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +#ifndef COORDSIZE_H +#define COORDSIZE_H +#pragma once + +#include "worldsize.h" + +// OVERALL Coordinate Size Limits used in COMMON.C MSG_*BitCoord() Routines (and someday the HUD) +#define COORD_INTEGER_BITS 14 +#define COORD_FRACTIONAL_BITS 5 +#define COORD_DENOMINATOR (1<<(COORD_FRACTIONAL_BITS)) +#define COORD_RESOLUTION (1.0/(COORD_DENOMINATOR)) + +// Special threshold for networking multiplayer origins +#define COORD_INTEGER_BITS_MP 11 +#define COORD_FRACTIONAL_BITS_MP_LOWPRECISION 3 +#define COORD_DENOMINATOR_LOWPRECISION (1<<(COORD_FRACTIONAL_BITS_MP_LOWPRECISION)) +#define COORD_RESOLUTION_LOWPRECISION (1.0/(COORD_DENOMINATOR_LOWPRECISION)) + +#define NORMAL_FRACTIONAL_BITS 11 +#define NORMAL_DENOMINATOR ( (1<<(NORMAL_FRACTIONAL_BITS)) - 1 ) +#define NORMAL_RESOLUTION (1.0/(NORMAL_DENOMINATOR)) + +// this is limited by the network fractional bits used for coords +// because net coords will be only be accurate to 5 bits fractional +// Standard collision test epsilon +// 1/32nd inch collision epsilon +#define DIST_EPSILON (0.03125) + +// Verify that coordsize.h and worldsize.h are consistently defined +#if (MAX_COORD_INTEGER != (1<<COORD_INTEGER_BITS) ) +#error MAX_COORD_INTEGER does not match COORD_INTEGER_BITS +#endif + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// The following are Bit Packing Diagrams for client/server Coordinate BitField Messages +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// "Coordinates" = +/-16384.9375 (21 Bits Max) +// +// | IntegerFlagBit:1 | FractionFlagBit:1 | SignBit:1 | IntegerField:14 | FractionPart:4 | Total +// -------------------------------------------------------------------------------------------------- +// 0 0 - - - 2 +// 0 1 x - xxxx 7 +// 1 0 x xxxxxxxxxxxxx - 17 +// 1 1 x xxxxxxxxxxxxx xxxx 21 +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// "Vec3Coordinate" = Up to 3 Coordinates (66 Bits Max) +// +// | NonZeroX:1 | NonZeroY:1 | NonZeroZ:1 | 0..3 "Coordinates" | BitField Total +// ------------------------------------------------------------------------------- +// 0 0 0 - 3 +// 0 0 1 7..21 Bits 10..24 +// 0 1 0 7..21 Bits 10..24 +// 1 0 0 7..21 Bits 10..24 +// 0 1 1 14..42 Bits 17..45 +// 1 1 0 14..42 Bits 17..45 +// 1 0 1 14..42 Bits 17..45 +// 1 1 1 21..63 Bits 24..66 +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// The following are Bit Packing Diagrams for client/server Normal BitField Messages +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// "Normals" = +/-1.0 (12 Bits Total) +// +// The only gotcha here is that normalization occurs so that +// 011111111111 = +1.0 and 1111111111111 = -1.0 +// +// | SignBit:1 | FractionPart:11 | Total +// -------------------------------------------------------------------------------------------------- +// 1 xxxxxxxxxxx 12 +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// "Vec3Normal" = Up to 3 Coordinates (27 Bits Max) +// +// | NonZeroX:1 | NonZeroY:1 | 0..2 "Coordinates" | Z Sign Bit | BitField Total +// ------------------------------------------------------------------------------- +// 0 0 - x 3 +// 0 1 12 Bits x 14 +// 1 0 12 Bits x 14 +// 1 1 24 Bits x 27 +// +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +#endif // COORDSIZE_H |