]> git.jsancho.org Git - lugaru.git/commitdiff
Cleaned up a bit clothes adding
authorCôme Chilliet <come@chilliet.eu>
Sat, 26 Nov 2016 09:13:06 +0000 (17:13 +0800)
committerCôme Chilliet <come@chilliet.eu>
Sat, 26 Nov 2016 09:13:06 +0000 (17:13 +0800)
It would be even better to put the loop in Person class but the editor
code is a bit special and need to be adapted a tiny bit first

Source/ConsoleCmds.cpp
Source/Game.h
Source/GameTick.cpp
Source/Person.cpp
Source/Person.h

index 698c73bf2cc553ab052a636c8e810f75e38b5579..c31eed784b3ed3fe03e56a5dca669574979d46d5 100644 (file)
@@ -141,7 +141,7 @@ static void set_clothes(int pnum, const char *args)
     char buf[64];
     snprintf(buf, 63, ":Data:Textures:%s.png", args);
 
-    if (!AddClothes(buf, &Person::players[pnum]->skeleton.skinText[0]))
+    if (!Person::players[pnum]->addClothes(buf))
         return;
 
     Person::players[pnum]->DoMipmaps();
index 2765367b09ad231d679e46a094d366b77c60af3c..ce7c69f3f7dff01a59224f3ce96ffee55f81a5be 100644 (file)
@@ -149,7 +149,6 @@ int DrawGLScene(StereoSide side);
 void LoadMenu();
 void playdialogueboxsound();
 int findClosestPlayer();
-bool AddClothes(const char *fileName, GLubyte *array);
 void Loadlevel(int which);
 void Loadlevel(const char *name);
 void Tick();
index 3d492fdaeae50c54b6d6e4c59421b24017106132..c66767df4012221c9b61621ad4b245160bb8cda5 100644 (file)
@@ -383,50 +383,6 @@ void Game::playdialogueboxsound()
 
 // ================================================================
 
-bool Game::AddClothes(const char *fileName, GLubyte *array)
-{
-    LOGFUNC;
-    //Load Image
-    ImageRec texture;
-    bool opened = load_image(fileName, texture);
-
-    float alphanum;
-    //Is it valid?
-    if (opened) {
-        if (tintr > 1) tintr = 1;
-        if (tintg > 1) tintg = 1;
-        if (tintb > 1) tintb = 1;
-
-        if (tintr < 0) tintr = 0;
-        if (tintg < 0) tintg = 0;
-        if (tintb < 0) tintb = 0;
-
-        int bytesPerPixel = texture.bpp / 8;
-
-        int tempnum = 0;
-        alphanum = 255;
-        for (int i = 0; i < (int)(texture.sizeY * texture.sizeX * bytesPerPixel); i++) {
-            if (bytesPerPixel == 3)
-                alphanum = 255;
-            else if ((i + 1) % 4 == 0)
-                alphanum = texture.data[i];
-            if ((i + 1) % 4 || bytesPerPixel == 3) {
-                if ((i % 4) == 0)
-                    texture.data[i] *= tintr;
-                if ((i % 4) == 1)
-                    texture.data[i] *= tintg;
-                if ((i % 4) == 2)
-                    texture.data[i] *= tintb;
-                array[tempnum] = (float)array[tempnum] * (1 - alphanum / 255) + (float)texture.data[i] * (alphanum / 255);
-                tempnum++;
-            }
-        }
-        return 1;
-    } else {
-        return 0;
-    }
-}
-
 int Game::findClosestPlayer()
 {
     int closest = -1;
@@ -1350,7 +1306,7 @@ void Game::Loadlevel(const char *name)
                     tintr = Person::players[i]->clothestintr[j];
                     tintg = Person::players[i]->clothestintg[j];
                     tintb = Person::players[i]->clothestintb[j];
-                    AddClothes((char *)Person::players[i]->clothes[j], &Person::players[i]->skeleton.skinText[0]);
+                    Person::players[i]->addClothes(j);
                 }
                 Person::players[i]->DoMipmaps();
             }
@@ -2106,7 +2062,7 @@ void doDebugKeys()
                     tintr = Person::players[closest]->clothestintr[i];
                     tintg = Person::players[closest]->clothestintg[i];
                     tintb = Person::players[closest]->clothestintb[i];
-                    AddClothes((char *)Person::players[closest]->clothes[i], &Person::players[closest]->skeleton.skinText[0]);
+                    Person::players[closest]->addClothes(i);
                 }
                 Person::players[closest]->DoMipmaps();
             }
@@ -2544,7 +2500,7 @@ void doDebugKeys()
                         tintr = Person::players.back()->clothestintr[i];
                         tintg = Person::players.back()->clothestintg[i];
                         tintb = Person::players.back()->clothestintb[i];
-                        AddClothes((char *)Person::players.back()->clothes[i], &Person::players.back()->skeleton.skinText[0]);
+                        Person::players.back()->addClothes(i);
                     }
                 if (Person::players.back()->numclothes) {
                     Person::players.back()->DoMipmaps();
index 2f92f88e93a61f389e1c5fee71bccd412fc94c72..64876000e106b9879a446549b3a038b7490dc8b4 100644 (file)
@@ -6533,3 +6533,54 @@ void Person::takeWeapon(int weaponId)
     weaponids[0] = weaponId;
 }
 
+bool Person::addClothes(const int& clothesId)
+{
+    return addClothes(clothes[clothesId]);
+}
+
+bool Person::addClothes(const char* fileName)
+{
+    LOGFUNC;
+
+    GLubyte* array = &skeleton.skinText[0];
+
+    //Load Image
+    ImageRec texture;
+    bool opened = load_image(fileName, texture);
+
+    float alphanum;
+    //Is it valid?
+    if (opened) {
+        if (tintr > 1) tintr = 1;
+        if (tintg > 1) tintg = 1;
+        if (tintb > 1) tintb = 1;
+
+        if (tintr < 0) tintr = 0;
+        if (tintg < 0) tintg = 0;
+        if (tintb < 0) tintb = 0;
+
+        int bytesPerPixel = texture.bpp / 8;
+
+        int tempnum = 0;
+        alphanum = 255;
+        for (int i = 0; i < (int)(texture.sizeY * texture.sizeX * bytesPerPixel); i++) {
+            if (bytesPerPixel == 3)
+                alphanum = 255;
+            else if ((i + 1) % 4 == 0)
+                alphanum = texture.data[i];
+            if ((i + 1) % 4 || bytesPerPixel == 3) {
+                if ((i % 4) == 0)
+                    texture.data[i] *= tintr;
+                if ((i % 4) == 1)
+                    texture.data[i] *= tintg;
+                if ((i % 4) == 2)
+                    texture.data[i] *= tintb;
+                array[tempnum] = (float)array[tempnum] * (1 - alphanum / 255) + (float)texture.data[i] * (alphanum / 255);
+                tempnum++;
+            }
+        }
+        return 1;
+    } else {
+        return 0;
+    }
+}
index f98f494d7278d018b91ee5d97965d2f74f7b548a..801553a394e363e83515e7ab37da14df5e0a3f38 100644 (file)
@@ -398,6 +398,9 @@ public:
     void RagDoll(bool checkcollision);
 
     void takeWeapon (int weaponId);
+
+    bool addClothes(const int& clothesId);
+    bool addClothes(const char* fileName);
 };
 
 const int maxplayers = 10;