X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FPerson.h;h=345259a2e916484d180f0317110b5403dbf948ad;hb=3d9b1d366f1b3607c40eb5bcbbe631794ed899de;hp=5be74b22b3bcc24b89c92335891bc0890e6f3229;hpb=8562aa5bebc97ea8a61d056aec3847030c6985b7;p=lugaru.git diff --git a/Source/Person.h b/Source/Person.h index 5be74b2..345259a 100644 --- a/Source/Person.h +++ b/Source/Person.h @@ -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_ @@ -5,14 +26,13 @@ #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 #include "Weapons.h" +#include "Animation.h" #define passivetype 0 #define guardtype 1 @@ -27,32 +47,29 @@ #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