Initial commit.
This commit is contained in:
124
codemp/game/bg_g2_utils.c
Normal file
124
codemp/game/bg_g2_utils.c
Normal file
@@ -0,0 +1,124 @@
|
||||
// Copyright (C) 1999-2000 Id Software, Inc.
|
||||
//
|
||||
// bg_g2_utils.c -- both games misc functions, all completely stateless
|
||||
|
||||
#include "q_shared.h"
|
||||
#include "bg_public.h"
|
||||
#include "bg_strap.h"
|
||||
|
||||
#ifdef QAGAME
|
||||
#include "g_local.h"
|
||||
#endif
|
||||
|
||||
#ifdef UI_EXPORTS
|
||||
#include "../ui/ui_local.h"
|
||||
#endif
|
||||
|
||||
#ifndef UI_EXPORTS
|
||||
#ifndef QAGAME
|
||||
#include "../cgame/cg_local.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "../namespace_begin.h"
|
||||
|
||||
void BG_AttachToRancor( void *ghoul2,
|
||||
float rancYaw,
|
||||
vec3_t rancOrigin,
|
||||
int time,
|
||||
qhandle_t *modelList,
|
||||
vec3_t modelScale,
|
||||
qboolean inMouth,
|
||||
vec3_t out_origin,
|
||||
vec3_t out_angles,
|
||||
vec3_t out_axis[3] )
|
||||
{
|
||||
mdxaBone_t boltMatrix;
|
||||
int boltIndex;
|
||||
vec3_t rancAngles;
|
||||
vec3_t temp_angles;
|
||||
// Getting the bolt here
|
||||
if ( inMouth )
|
||||
{//in mouth
|
||||
boltIndex = trap_G2API_AddBolt(ghoul2, 0, "jaw_bone");
|
||||
}
|
||||
else
|
||||
{//in right hand
|
||||
boltIndex = trap_G2API_AddBolt(ghoul2, 0, "*r_hand");
|
||||
}
|
||||
VectorSet( rancAngles, 0, rancYaw, 0 );
|
||||
trap_G2API_GetBoltMatrix( ghoul2, 0, boltIndex,
|
||||
&boltMatrix, rancAngles, rancOrigin, time,
|
||||
modelList, modelScale );
|
||||
// Storing ent position, bolt position, and bolt axis
|
||||
if ( out_origin )
|
||||
{
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, ORIGIN, out_origin );
|
||||
}
|
||||
if ( out_axis )
|
||||
{
|
||||
if ( inMouth )
|
||||
{//in mouth
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, POSITIVE_Z, out_axis[0] );
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_Y, out_axis[1] );
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_X, out_axis[2] );
|
||||
}
|
||||
else
|
||||
{//in hand
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_Y, out_axis[0] );
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, POSITIVE_X, out_axis[1] );
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, POSITIVE_Z, out_axis[2] );
|
||||
}
|
||||
//FIXME: this is messing up our axis and turning us inside-out?
|
||||
if ( out_angles )
|
||||
{
|
||||
vectoangles( out_axis[0], out_angles );
|
||||
vectoangles( out_axis[2], temp_angles );
|
||||
out_angles[ROLL] = -temp_angles[PITCH];
|
||||
}
|
||||
}
|
||||
else if ( out_angles )
|
||||
{
|
||||
vec3_t temp_axis[3];
|
||||
if ( inMouth )
|
||||
{//in mouth
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, POSITIVE_Z, temp_axis[0] );
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_X, temp_axis[2] );
|
||||
}
|
||||
else
|
||||
{//in hand
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, NEGATIVE_Y, temp_axis[0] );
|
||||
BG_GiveMeVectorFromMatrix( &boltMatrix, POSITIVE_Z, temp_axis[2] );
|
||||
}
|
||||
//FIXME: this is messing up our axis and turning us inside-out?
|
||||
vectoangles( temp_axis[0], out_angles );
|
||||
vectoangles( temp_axis[2], temp_angles );
|
||||
out_angles[ROLL] = -temp_angles[PITCH];
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_VARIANTS 8
|
||||
qboolean BG_GetRootSurfNameWithVariant( void *ghoul2, const char *rootSurfName, char *returnSurfName, int returnSize )
|
||||
{
|
||||
if ( !ghoul2 || !trap_G2API_GetSurfaceRenderStatus( ghoul2, 0, rootSurfName ) )
|
||||
{//see if the basic name without variants is on
|
||||
Q_strncpyz( returnSurfName, rootSurfName, returnSize );
|
||||
return qtrue;
|
||||
}
|
||||
else
|
||||
{//check variants
|
||||
int i;
|
||||
for ( i = 0; i < MAX_VARIANTS; i++ )
|
||||
{
|
||||
Com_sprintf( returnSurfName, returnSize, "%s%c", rootSurfName, 'a'+i );
|
||||
if ( !trap_G2API_GetSurfaceRenderStatus( ghoul2, 0, returnSurfName ) )
|
||||
{
|
||||
return qtrue;
|
||||
}
|
||||
}
|
||||
}
|
||||
Q_strncpyz( returnSurfName, rootSurfName, returnSize );
|
||||
return qfalse;
|
||||
}
|
||||
|
||||
#include "../namespace_end.h"
|
||||
Reference in New Issue
Block a user