Main Page | Alphabetical List | Compound List | File List | Compound Members | File Members

_bot.c

Go to the documentation of this file.
00001 /****************************************************************************/
00002 /*    FILE: _bot.c      - Misc bot utilities & support                                                  */
00003 /****************************************************************************/
00004 #include <Windows.h>
00005 #include <Assert.h>
00006 #include <Math.h>
00007 #include <Time.h>
00008 
00009 #include "Genesis.h"
00010 #include "Ram.h"
00011 
00012 #include "GMain.h"
00013 
00014 #include "_Bot.h"
00015 #include "Track.h"
00016 
00017 int32 randomseed=17;
00018 
00019 void StackInit(Stack *s)
00020         {
00021         s->TOS = -1;
00022         s->Data = GE_RAM_ALLOCATE_ARRAY(int32, MAX_TRACKS);
00023     assert(s->Data);
00024     s->Size = MAX_TRACKS;
00025         }
00026 
00027 void StackReset(Stack *s)
00028         {
00029         s->TOS = -1;
00030         }
00031 
00032 void StackPush(Stack *s, int32 data)
00033         {
00034         s->TOS++;
00035     assert(s->TOS < s->Size);
00036         s->Data[s->TOS] = data;
00037         }
00038 
00039 int32 StackPop(Stack *s)
00040         {
00041     int32 value;
00042 
00043         if (s->TOS <= -1)
00044                 return (s->TOS = -1);
00045 
00046         value = s->Data[s->TOS];
00047         s->TOS--;
00048 
00049         return (value);
00050         }
00051 
00052 int32 StackTop(Stack *s)
00053         {
00054         if (s->TOS <= -1)
00055                 return (-1);
00056 
00057         return (s->Data[s->TOS]);
00058         }
00059 
00060 geBoolean StackIsEmpty(Stack *s)
00061         {
00062         return (s->TOS <= -1);
00063         }
00064 
00065 int32 krand()
00066     {
00067     randomseed = ((randomseed * 21 + 1) & 65535);
00068     return (randomseed);
00069     }
00070 
00071 void ksrand(int32 seed)
00072     {
00073         
00074     randomseed = (unsigned)time( NULL );
00075     }
00076 
00077 int32 RandomRange(int32 range)
00078     {
00079     int32 rand_num;
00080     int32 value;
00081     
00082     if (range <= 0)
00083         return(0);
00084     
00085     rand_num = krand();
00086     
00087     if (rand_num == 65535U)
00088         rand_num--;
00089     
00090     // shift values to give more precision
00091     value = (rand_num << 14) / ((65535UL << 14) / range);
00092     
00093     if (value >= range)
00094         value = range - 1;
00095         
00096     return(value);
00097     }
00098 
00099 float DistWeightedY(const geVec3d *Pos1, const geVec3d *Pos2, const float Scale)
00100 {
00101         geVec3d LPos1, LPos2;
00102 
00103         LPos1 = *Pos1;
00104         LPos2 = *Pos2;
00105 
00106         LPos1.Y *= Scale;
00107         LPos2.Y *= Scale;
00108 
00109         return(geVec3d_DistanceBetween(&LPos1, &LPos2));
00110 }
00111 
00112 void Ang2Vec(float ang, geVec3d *vec)
00113 {
00114 vec->X = (float)cos(ang);
00115 vec->Z = (float)sin(ang);
00116 vec->Y = 0.0f;
00117 SqueezeVector(vec, 0.0001f);
00118 
00119 geVec3d_Normalize(vec);
00120 }
00121 
00122 void VectorRotateY(geVec3d *vec, float delta_ang, geVec3d *result)
00123     {
00124     geXForm3d XForm;
00125 
00126     geXForm3d_SetIdentity(&XForm);
00127     geXForm3d_RotateY(&XForm, delta_ang);
00128     geXForm3d_Rotate(&XForm, vec, result);
00129     }
00130 
00131 #if 0 // never ended up needing these
00132 float NormAng(float ang)
00133 {
00134 if (ang > (PI_2))
00135         ang = (ang - PI_2);
00136 
00137 if (ang < 0.0f)
00138         ang = PI_2 + ang;
00139 
00140 return(ang);
00141 }
00142 
00143 float Vec2Ang(geVec3d *vec)
00144 {
00145         float ang;
00146 
00147         if (geVec3d_Length(vec) == 0.0f)
00148                 return(0.0f);
00149 
00150         ang = (float)atan2(vec->Z,vec->X);
00151         if (ang < 0)
00152                 ang += M_PI2;
00153 
00154         return ang;
00155 }
00156 
00157 
00158 #endif

Generated on Tue Sep 30 12:35:13 2003 for GTestAndEngine by doxygen 1.3.2