- Migrated screen projection code to libeye. - Some pickups emit light, like in Doomreal. - Backported map revealer item from Doomreal. - Brand new Invulnerability and Night Vision powerups. - Add option to allow Shield Belt and armors simultaneously. - Backported armor bonus model from Doomreal. - Added Dual Enforcers icon for HUD. - Changed player class names to their character names, like in Doomreal. - Terrain splashes. - Translocator doesn't telefrag other players in coop. - Reduced view shake from Impact Hammer. - Various other updates and bug fixes.
73 lines
2.1 KiB
Text
73 lines
2.1 KiB
Text
/*
|
|
Coordinate Utility helper class.
|
|
(C)2018 Marisa Kirisame, UnSX Team.
|
|
Released under the GNU Lesser General Public License version 3 (or later).
|
|
See https://www.gnu.org/licenses/lgpl-3.0.txt for its terms.
|
|
*/
|
|
|
|
Class dt_CoordUtil
|
|
{
|
|
// In Tim Sweeney's own words: "transform by a pitch-yaw-roll rotation"
|
|
static Vector3, Vector3, Vector3 GetUnAxes( double pitch, double yaw, double roll )
|
|
{
|
|
Vector3 x = (1,0,0), y = (0,-1,0), z = (0,0,1); // y inverted for left-handed result
|
|
Vector3 a, b, c;
|
|
// pitch and roll in gzdoom work in reverse compared to UE
|
|
pitch = -pitch;
|
|
roll = -roll;
|
|
// yaw
|
|
a = (cos(yaw),sin(yaw),0);
|
|
b = (-sin(yaw),cos(yaw),0);
|
|
c = (0,0,1);
|
|
x = (x dot a, x dot b, x dot c);
|
|
y = (y dot a, y dot b, y dot c);
|
|
z = (z dot a, z dot b, z dot c);
|
|
// pitch
|
|
a = (cos(pitch),0,sin(pitch));
|
|
b = (0,1,0);
|
|
c = (-sin(pitch),0,cos(pitch));
|
|
x = (x dot a, x dot b, x dot c);
|
|
y = (y dot a, y dot b, y dot c);
|
|
z = (z dot a, z dot b, z dot c);
|
|
// roll
|
|
a = (1,0,0);
|
|
b = (0,cos(roll),-sin(roll));
|
|
c = (0,sin(roll),cos(roll));
|
|
x = (x dot a, x dot b, x dot c);
|
|
y = (y dot a, y dot b, y dot c);
|
|
z = (z dot a, z dot b, z dot c);
|
|
return x, y, z;
|
|
}
|
|
|
|
// In Tim Sweeney's own words: "detransform by a pitch-yaw-roll rotation"
|
|
static Vector3, Vector3, Vector3 GetAxes( double pitch, double yaw, double roll )
|
|
{
|
|
Vector3 x = (1,0,0), y = (0,-1,0), z = (0,0,1); // y inverted for left-handed result
|
|
Vector3 a, b, c;
|
|
// pitch and roll in gzdoom work in reverse compared to UE
|
|
pitch = -pitch;
|
|
roll = -roll;
|
|
// inverse roll
|
|
a = (1,0,0);
|
|
b = (0,cos(roll),sin(roll));
|
|
c = (0,-sin(roll),cos(roll));
|
|
x = (x dot a, x dot b, x dot c);
|
|
y = (y dot a, y dot b, y dot c);
|
|
z = (z dot a, z dot b, z dot c);
|
|
// inverse pitch
|
|
a = (cos(pitch),0,-sin(pitch));
|
|
b = (0,1,0);
|
|
c = (sin(pitch),0,cos(pitch));
|
|
x = (x dot a, x dot b, x dot c);
|
|
y = (y dot a, y dot b, y dot c);
|
|
z = (z dot a, z dot b, z dot c);
|
|
// inverse yaw
|
|
a = (cos(yaw),-sin(yaw),0);
|
|
b = (sin(yaw),cos(yaw),0);
|
|
c = (0,0,1);
|
|
x = (x dot a, x dot b, x dot c);
|
|
y = (y dot a, y dot b, y dot c);
|
|
z = (z dot a, z dot b, z dot c);
|
|
return x, y, z;
|
|
}
|
|
}
|