]> git.jsancho.org Git - lugaru.git/blobdiff - Source/Objects/Person.hpp
New non-atacking player
[lugaru.git] / Source / Objects / Person.hpp
index 5339e03681b5347194e610c74f30abf07f01a559..22c76eb17c4e82fd9038352c5e35ad2b022067b4 100644 (file)
@@ -1,6 +1,6 @@
 /*
 Copyright (C) 2003, 2010 - Wolfire Games
-Copyright (C) 2010-2016 - Lugaru contributors (see AUTHORS file)
+Copyright (C) 2010-2017 - Lugaru contributors (see AUTHORS file)
 
 This file is part of Lugaru.
 
@@ -24,10 +24,11 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 #include "Animation/Animation.hpp"
 #include "Animation/Skeleton.hpp"
 #include "Environment/Terrain.hpp"
-#include "Graphic/gamegl.hpp"
 #include "Graphic/Models.hpp"
 #include "Graphic/Sprite.hpp"
-#include "Math/Quaternions.hpp"
+#include "Graphic/gamegl.hpp"
+#include "Math/XYZ.hpp"
+#include "Objects/PersonType.hpp"
 #include "Objects/Weapons.hpp"
 
 #include <cmath>
@@ -43,17 +44,19 @@ along with Lugaru.  If not, see <http://www.gnu.org/licenses/>.
 #define getweapontype 7
 #define pathfindtype 8
 
-#define rabbittype 0
-#define wolftype 1
-
-struct InvalidPersonException : public exception {
-   const char * what () const throw () {
-      return "Invalid weapon number";
-   }
+struct InvalidPersonException : public exception
+{
+    const char* what() const throw()
+    {
+        return "Invalid weapon number";
+    }
 };
 
 class Person : public enable_shared_from_this<Person>
 {
+private:
+    float proportions[4];
+
 public:
     static std::vector<std::shared_ptr<Person>> players;
 
@@ -95,11 +98,6 @@ public:
     XYZ coords;
     XYZ velocity;
 
-    XYZ proportionhead;
-    XYZ proportionlegs;
-    XYZ proportionarms;
-    XYZ proportionbody;
-
     float unconscioustime;
 
     bool immobile;
@@ -159,6 +157,7 @@ public:
 
     std::shared_ptr<Person> victim;
     bool hasvictim;
+    bool isplayerfriend;
 
     float updatedelay;
     float normalsupdatedelay;
@@ -187,7 +186,6 @@ public:
     float jumpkeydowntime;
     bool freefall;
 
-
     float turnspeed;
 
     int aitype;
@@ -321,7 +319,7 @@ public:
     Person();
     Person(FILE*, int, unsigned);
 
-    void skeletonLoad(bool clothes = false);
+    void skeletonLoad();
 
     // convenience functions
     inline Joint& joint(int bodypart) { return skeleton.joints[skeleton.jointlabels[bodypart]]; }
@@ -330,6 +328,11 @@ public:
     inline AnimationFrame& currentFrame() { return Animation::animations.at(animCurrent).frames.at(frameCurrent); }
     inline AnimationFrame& targetFrame() { return Animation::animations.at(animTarget).frames.at(frameTarget); }
 
+    void setProportions(float head, float body, float arms, float legs);
+    float getProportion(int part) const;
+    XYZ getProportionXYZ(int part) const;
+
+    void changeCreatureType(person_type type);
 
     void CheckKick();
     void CatchFire();
@@ -376,27 +379,34 @@ public:
     void Reverse();
     void DoDamage(float howmuch);
     void DoHead();
-    void DoMipmaps() {
+    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 SphereCheck(XYZ* p1, float radius, XYZ* p, XYZ* move, float* rotate, Model* model);
     int DrawSkeleton();
     void Puff(int whichlabel);
     void FootLand(bodypart whichfoot, float opacity);
     void DoStuff();
-    void setAnimation(int);
+    void setTargetAnimation(int);
     void DoAnimations();
     void RagDoll(bool checkcollision);
 
-    void takeWeapon (int weaponId);
+    void takeWeapon(int weaponId);
 
     bool addClothes(const int& clothesId);
     void addClothes();
 
     void doAI();
+
+    bool catchKnife();
+
+    bool hasWeapon() { return (weaponactive != -1); }
+    bool isPlayerControlled() { return (aitype == playercontrolled); }
+    bool isPlayerFriend() { return isplayerfriend; }
 };
 
 const int maxplayers = 10;