1.3 update, cleaning up and GZDoom 4.11 features.
This commit is contained in:
parent
66e5a1c74c
commit
ac4c53b3ef
21 changed files with 279 additions and 351 deletions
|
|
@ -71,4 +71,81 @@ Class dt_Utility
|
|||
Quat r = Quat.FromAngles(angle,pitch,roll);
|
||||
return r*x, r*y, r*z;
|
||||
}
|
||||
|
||||
// included here until Gutamatics updates to use native quaternions
|
||||
static double, double, double ToAngles( Quat q )
|
||||
{
|
||||
double angle = 0., pitch = 0., roll = 0.;
|
||||
double stest = q.z*q.x-q.w*q.y;
|
||||
double angY = 2.*(q.w*q.z+q.x*q.y);
|
||||
double angX = 1.-2.*(q.y*q.y+q.z*q.z);
|
||||
if ( stest < -.4999995 )
|
||||
{
|
||||
angle = atan2(angY,angX);
|
||||
pitch = 90.;
|
||||
roll = dt_GM_GlobalMaths.Normalize180(angle+(2.*atan2(q.x,q.w)));
|
||||
}
|
||||
else if ( stest > .4999995 )
|
||||
{
|
||||
angle = atan2(angY,angX);
|
||||
pitch = -90.;
|
||||
roll = dt_GM_GlobalMaths.Normalize180(angle+(2.*atan2(q.x,q.w)));
|
||||
}
|
||||
else
|
||||
{
|
||||
angle = atan2(angY,angX);
|
||||
pitch = -asin(2.*stest);
|
||||
roll = atan2(2.*(q.w*q.x+q.y*q.z),1.-2.*(q.x*q.x+q.y*q.y));
|
||||
}
|
||||
return angle, pitch, roll;
|
||||
}
|
||||
|
||||
// for aiming and shooting
|
||||
static Vector3 GetPlayerViewDir( Actor player )
|
||||
{
|
||||
Quat r = Quat.FromAngles(player.angle,player.pitch,player.roll);
|
||||
return r*(1,0,0);
|
||||
}
|
||||
static play Vector3 GetPlayerAimDir( Actor player )
|
||||
{
|
||||
FTranslatedLineTarget t;
|
||||
double pitch = player.BulletSlope(t);
|
||||
Quat r;
|
||||
if ( !t.linetarget ) r = Quat.FromAngles(player.angle,player.pitch,player.roll);
|
||||
else r = Quat.FromAngles(player.angle,pitch,player.roll);
|
||||
return r*(1,0,0);
|
||||
}
|
||||
static Vector3, Vector3, Vector3 GetPlayerAxes( Actor player )
|
||||
{
|
||||
Quat r = Quat.FromAngles(player.angle,player.pitch,player.roll);
|
||||
return r*(1,0,0), r*(0,-1,0), r*(0,0,1);
|
||||
}
|
||||
static play Vector3, Vector3, Vector3 GetPlayerAxesAutoAimed( Actor player )
|
||||
{
|
||||
FTranslatedLineTarget t;
|
||||
double pitch = player.BulletSlope(t);
|
||||
Quat r;
|
||||
if ( !t.linetarget ) r = Quat.FromAngles(player.angle,player.pitch,player.roll);
|
||||
else r = Quat.FromAngles(player.angle,pitch,player.roll);
|
||||
return r*(1,0,0), r*(0,-1,0), r*(0,0,1);
|
||||
}
|
||||
static Vector3 GetPlayerEye( Actor player )
|
||||
{
|
||||
if ( !player.viewpos )
|
||||
return player.Vec2OffsetZ(0,0,player.player.viewz);
|
||||
if ( player.viewpos.flags&VPSF_ABSOLUTEPOS )
|
||||
return player.viewpos.offset;
|
||||
Vector3 origin = player.Vec2OffsetZ(0,0,player.player.viewz);
|
||||
if ( player.viewpos.flags&VPSF_ABSOLUTEOFFSET )
|
||||
return level.Vec3Offset(origin,player.viewpos.offset);
|
||||
Quat r = Quat.FromAngles(player.angle,player.pitch,player.roll);
|
||||
return level.Vec3Offset(origin,r*player.viewpos.offset);
|
||||
}
|
||||
static Vector3 GetFireOffset( Actor player, double x, double y, double z )
|
||||
{
|
||||
Vector3 origin = GetPlayerEye(player);
|
||||
Quat r = Quat.FromAngles(player.angle,player.pitch,player.roll);
|
||||
return level.Vec3Offset(origin,r*(x,-y,z));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue