#include "Quaternions.h"
#include "Skeleton.h"
#include "Models.h"
-#include "Constants.h"
#include "Terrain.h"
#include "Sprite.h"
#include <cmath>
class Person
{
public:
- Person();
- ~Person();
-
int whichpatchx;
int whichpatchz;
- int currentframe;
- int targetframe;
- int currentanimation;
- int targetanimation;
- int oldcurrentframe;
- int oldtargetframe;
- int oldcurrentanimation;
- int oldtargetanimation;
+ // animCurrent and animTarget are used to interpolate between different animations
+ // (and for a bunch of other things).
+ // animations interpolate with one another at various speeds.
+ // animTarget seems to determine the combat state?
+ int animCurrent;
+ int animTarget;
+
+ // frameCurrent and frameTarget are used to interpolate between the frames of an animation
+ // (e.g. the crouched animation has only two frames, lerped back and forth).
+ // animations advance at various speeds.
+ int frameCurrent;
+ int frameTarget;
+
+ int oldanimCurrent;
+ int oldanimTarget;
+ int oldframeCurrent;
+ int oldframeTarget;
int howactive;
bool immobile;
float velspeed;
- float targetrotation;
+ float targetyaw;
float targetrot;
float rot;
float oldrot;
- float lookrotation;
- float lookrotation2;
- float rotation;
- float rotation2;
- float lowrotation;
+ float lookyaw;
+ float lookpitch;
+ float yaw;
+ float pitch;
+ float lowyaw;
float tilt;
float targettilt;
float tilt2;
float damagetolerance;
float damage;
float permanentdamage;
- float superpermanentdamage; float lastcollide;
+ float superpermanentdamage;
+ float lastcollide;
int dead;
float jumppower;
int direction;
float texupdatedelay;
- float headrotation,headrotation2;
- float targetheadrotation,targetheadrotation2;
+ float headyaw,headpitch;
+ float targetheadyaw,targetheadpitch;
bool onterrain;
bool pause;
float turnspeed;
int aitype;
- int aitarget;
float aiupdatedelay;
float losupdatedelay;
int ally;
bool loaded;
bool whichdirection;
float whichdirectiondelay;
- bool avoidsomething; XYZ avoidwhere;
+ bool avoidsomething;
+ XYZ avoidwhere;
float blooddimamount;
float staggerdelay;
bool bled;
bool spurt;
bool onfire;
- float onfiredelay; float burnt;
+ float onfiredelay;
+ float burnt;
float fireduration;
float flamedelay;
float lastchecktime;
float stunned;
float surprised;
- float runninghowlong; int lastoccluded;
+ float runninghowlong;
+ int lastoccluded;
int laststanding;
int escapednum;
float occluded;
+ bool jumpclimb;
+
+
+
void CheckKick();
void CatchFire();
void DoBlood(float howmuch, int which);
void DoBloodBig(float howmuch, int which);
bool DoBloodBigWhere(float howmuch, int which, XYZ where);
- bool wasIdle()
- {
- return animation_bits[currentanimation] & ab_idle;
- }
- bool isIdle()
- {
- return animation_bits[targetanimation] & ab_idle;
- }
+ bool wasIdle() { return animation_bits[animCurrent] & ab_idle; }
+ bool isIdle() { return animation_bits[animTarget] & ab_idle; }
int getIdle();
- bool isSitting()
- {
- return animation_bits[targetanimation] & ab_sit;
- }
+ bool isSitting() { return animation_bits[animTarget] & ab_sit; }
- bool isSleeping()
- {
- return animation_bits[targetanimation] & ab_sleep;
- }
+ bool isSleeping() { return animation_bits[animTarget] & ab_sleep; }
- bool wasCrouch()
- {
- return animation_bits[currentanimation] & ab_crouch;
- }
- bool isCrouch()
- {
- return animation_bits[targetanimation] & ab_crouch;
- }
+ bool wasCrouch() { return animation_bits[animCurrent] & ab_crouch; }
+ bool isCrouch() { return animation_bits[animTarget] & ab_crouch; }
int getCrouch();
- bool wasStop()
- {
- return animation_bits[currentanimation] & ab_stop;
- }
- bool isStop()
- {
- return animation_bits[targetanimation] & ab_stop;
- }
+ bool wasStop() { return animation_bits[animCurrent] & ab_stop; }
+ bool isStop() { return animation_bits[animTarget] & ab_stop; }
int getStop();
bool wasSneak();
bool isSneak();
int getSneak();
- bool wasRun()
- {
- return animation_bits[currentanimation] & ab_run;
- }
- bool isRun()
- {
- return animation_bits[targetanimation] & ab_run;
- }
+ bool wasRun() { return animation_bits[animCurrent] & ab_run; }
+ bool isRun() { return animation_bits[animTarget] & ab_run; }
int getRun();
- bool wasLanding()
- {
- return animation_bits[currentanimation] & ab_land;
- }
- bool isLanding()
- {
- return animation_bits[targetanimation] & ab_land;
- }
+ bool wasLanding() { return animation_bits[animCurrent] & ab_land; }
+ bool isLanding() { return animation_bits[animTarget] & ab_land; }
int getLanding();
- bool wasLandhard()
- {
- return animation_bits[currentanimation] & ab_landhard;
- }
- bool isLandhard()
- {
- return animation_bits[targetanimation] & ab_landhard;
- }
+ bool wasLandhard() { return animation_bits[animCurrent] & ab_landhard; }
+ bool isLandhard() { return animation_bits[animTarget] & ab_landhard; }
int getLandhard();
- bool wasFlip()
- {
- return animation_bits[currentanimation] & ab_flip;
- }
- bool isFlip()
- {
- return animation_bits[targetanimation] & ab_flip;;
- }
+ bool wasFlip() { return animation_bits[animCurrent] & ab_flip; }
+ bool isFlip() { return animation_bits[animTarget] & ab_flip; }
- bool jumpclimb;
-
- bool isWallJump();
+ bool isWallJump() { return animation_bits[animTarget] & ab_walljump; }
void Reverse();
void DoDamage(float howmuch);
void DoHead();
- void DoMipmaps(int howmanylevels, float startx, float endx, float starty, float endy);
+ void DoMipmaps()
+ {
+ skeleton.drawmodel.textureptr.bind();
+ glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, skeleton.skinsize, skeleton.skinsize, 0, GL_RGB, GL_UNSIGNED_BYTE, &skeleton.skinText[0]);
+ }
+
int SphereCheck(XYZ *p1,float radius, XYZ *p, XYZ *move, float *rotate, Model *model);
int DrawSkeleton();
void Puff(int whichlabel);
void FootLand(int which, float opacity);
void DoStuff();
+ Joint& getJointFor(int);
+ void setAnimation(int);
void DoAnimations();
void RagDoll(bool checkcollision);
};
+const int maxplayers = 10;
extern Person player[maxplayers];
#endif