]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Person.h
oops should've used tabs in Person.h
[lugaru.git] / Source / Person.h
index 5be74b22b3bcc24b89c92335891bc0890e6f3229..345259a2e916484d180f0317110b5403dbf948ad 100644 (file)
@@ -1,3 +1,24 @@
+/*
+Copyright (C) 2003, 2010 - Wolfire Games
+
+This file is part of Lugaru.
+
+Lugaru is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+
 #ifndef _PERSON_H_
 #define _PERSON_H_
 
 
 #include "gamegl.h"
 #include "Quaternions.h"
-#include "fmod.h"
 #include "Skeleton.h"
 #include "Models.h"
-#include "Constants.h"
 #include "Terrain.h"
-#include "Sprites.h"
+#include "Sprite.h"
 #include <cmath>
 #include "Weapons.h"
+#include "Animation.h"
 
 #define passivetype 0
 #define guardtype 1
 #define rabbittype 0
 #define wolftype 1
 
-class HitStruct
-{
-       public:
-               Joint *joint1;
-               Joint *joint2;
-               XYZ hitlocation;
-               bool collision;
-};
-
 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;
                
@@ -85,15 +102,15 @@ class Person
                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;
@@ -110,7 +127,8 @@ class Person
                float damagetolerance;
                float damage;
                float permanentdamage;
-               float superpermanentdamage;             float lastcollide;
+               float superpermanentdamage;
+               float lastcollide;
                int dead;
                
                float jumppower;
@@ -130,8 +148,8 @@ class Person
                int direction;
                float texupdatedelay;
                
-               float headrotation,headrotation2;
-               float targetheadrotation,targetheadrotation2;
+               float headyaw,headpitch;
+               float targetheadyaw,targetheadpitch;
                
                bool onterrain;
                bool pause;
@@ -172,7 +190,6 @@ class Person
                float turnspeed;
                
                int aitype;
-               int aitarget;
                float aiupdatedelay;
                float losupdatedelay;
                int ally;
@@ -183,7 +200,8 @@ class Person
                bool loaded;
                bool whichdirection;
                float whichdirectiondelay;
-               bool avoidsomething;            XYZ avoidwhere;         
+               bool avoidsomething;
+               XYZ avoidwhere;         
                float blooddimamount;
                
                float staggerdelay;
@@ -243,7 +261,8 @@ class Person
                bool bled;
                bool spurt;
                bool onfire;
-               float onfiredelay;              float burnt;
+               float onfiredelay;
+               float burnt;
                float fireduration;
                
                float flamedelay;
@@ -286,7 +305,8 @@ class Person
                float lastchecktime;
                float stunned;
                float surprised;
-               float runninghowlong;           int lastoccluded;
+               float runninghowlong;
+               int lastoccluded;
                int laststanding;
                int escapednum;
                
@@ -305,62 +325,73 @@ class Person
                
                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();
-               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();
+               Joint& getJointFor(int);
+               void setAnimation(int);
                void DoAnimations();
                void RagDoll(bool checkcollision);
-               HitStruct BulletCollideWithPlayer(XYZ start, XYZ end);
 };
 
-#endif
\ No newline at end of file
+const int maxplayers = 10;
+extern Person player[maxplayers];
+#endif