X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FPerson.h;h=dcf3b21f377a263cb341fb08c8baacb3b68c0238;hb=b17ec650f79ea8efbfda00ae93bd82434fcea686;hp=27666e4bf904fe99cd04b1d1c0b1d3e50710a665;hpb=4e2058b0ad83f1320008f980fac2234e579d3d99;p=lugaru.git diff --git a/Source/Person.h b/Source/Person.h index 27666e4..dcf3b21 100644 --- a/Source/Person.h +++ b/Source/Person.h @@ -28,11 +28,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Quaternions.h" #include "Skeleton.h" #include "Models.h" -#include "Constants.h" #include "Terrain.h" #include "Sprite.h" #include #include "Weapons.h" +#include "Animation.h" #define passivetype 0 #define guardtype 1 @@ -50,20 +50,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 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 slowly). + // animations advance at various speeds. + int frameCurrent; + int frameTarget; + + int oldanimCurrent; + int oldanimTarget; + int oldframeCurrent; + int oldframeTarget; int howactive; @@ -88,23 +94,20 @@ class Person XYZ proportionarms; XYZ proportionbody; - float heightleft; - float heightright; - float unconscioustime; 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; @@ -121,7 +124,8 @@ class Person float damagetolerance; float damage; float permanentdamage; - float superpermanentdamage; float lastcollide; + float superpermanentdamage; + float lastcollide; int dead; float jumppower; @@ -141,8 +145,8 @@ class Person int direction; float texupdatedelay; - float headrotation,headrotation2; - float targetheadrotation,targetheadrotation2; + float headyaw,headpitch; + float targetheadyaw,targetheadpitch; bool onterrain; bool pause; @@ -183,7 +187,6 @@ class Person float turnspeed; int aitype; - int aitarget; float aiupdatedelay; float losupdatedelay; int ally; @@ -194,7 +197,8 @@ class Person bool loaded; bool whichdirection; float whichdirectiondelay; - bool avoidsomething; XYZ avoidwhere; + bool avoidsomething; + XYZ avoidwhere; float blooddimamount; float staggerdelay; @@ -254,7 +258,8 @@ class Person bool bled; bool spurt; bool onfire; - float onfiredelay; float burnt; + float onfiredelay; + float burnt; float fireduration; float flamedelay; @@ -297,7 +302,8 @@ class Person float lastchecktime; float stunned; float surprised; - float runninghowlong; int lastoccluded; + float runninghowlong; + int lastoccluded; int laststanding; int escapednum; @@ -316,61 +322,77 @@ class Person float occluded; + bool jumpclimb; + + + + // convenience + Joint& joint(int); + XYZ& jointPos(int); + XYZ& jointVel(int); + 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(); - bool isIdle(); + bool wasIdle() { return animation_bits[animCurrent] & ab_idle; } + bool isIdle() { return animation_bits[animTarget] & ab_idle; } int getIdle(); - bool isSitting(); - bool isSleeping(); - - - bool wasCrouch(); - bool isCrouch(); + bool isSitting() { return animation_bits[animTarget] & ab_sit; } + + bool isSleeping() { return animation_bits[animTarget] & ab_sleep; } + + bool wasCrouch() { return animation_bits[animCurrent] & ab_crouch; } + bool isCrouch() { return animation_bits[animTarget] & ab_crouch; } int getCrouch(); - bool wasStop(); - bool isStop(); + 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(); - bool isRun(); + bool wasRun() { return animation_bits[animCurrent] & ab_run; } + bool isRun() { return animation_bits[animTarget] & ab_run; } int getRun(); - - bool wasLanding(); - bool isLanding(); + + bool wasLanding() { return animation_bits[animCurrent] & ab_land; } + bool isLanding() { return animation_bits[animTarget] & ab_land; } int getLanding(); - - bool wasLandhard(); - bool isLandhard(); + + bool wasLandhard() { return animation_bits[animCurrent] & ab_landhard; } + bool isLandhard() { return animation_bits[animTarget] & ab_landhard; } int getLandhard(); - - bool isFlip(); - bool wasFlip(); - - bool jumpclimb; - - bool isWallJump(); + + bool wasFlip() { return animation_bits[animCurrent] & ab_flip; } + bool isFlip() { return animation_bits[animTarget] & ab_flip; } + + 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(); + void setAnimation(int); void DoAnimations(); void RagDoll(bool checkcollision); }; +const int maxplayers = 10; +extern Person player[maxplayers]; #endif