X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FObjects%2FWeapons.cpp;h=d762ddcfa0ad17f973171459a46b0dc7c667853f;hb=a3775aa01cd00672b37785365675f6842b9db2dc;hp=c56779dec9e2b64b96a1bd8a9bae46e1eea4611d;hpb=b84825978803615f45a9f128232e62431042aec0;p=lugaru.git diff --git a/Source/Objects/Weapons.cpp b/Source/Objects/Weapons.cpp index c56779d..d762ddc 100644 --- a/Source/Objects/Weapons.cpp +++ b/Source/Objects/Weapons.cpp @@ -20,14 +20,13 @@ You should have received a copy of the GNU General Public License along with Lugaru. If not, see . */ -/**> HEADER FILES <**/ -#include "Animation/Animation.h" -#include "Audio/openal_wrapper.h" -#include "Audio/Sounds.h" -#include "Level/Awards.h" -#include "Objects/Weapons.h" +#include "Objects/Weapons.hpp" -#include "Game.h" +#include "Animation/Animation.hpp" +#include "Audio/openal_wrapper.hpp" +#include "Audio/Sounds.hpp" +#include "Game.hpp" +#include "Level/Awards.hpp" extern float multiplier; extern Terrain terrain; @@ -43,7 +42,6 @@ extern bool cellophane; extern float texdetail; extern GLubyte bloodText[512 * 512 * 3]; extern int bloodtoggle; -extern Objects objects; extern bool autoslomo; extern float camerashake; extern float woozy; @@ -101,7 +99,6 @@ void Weapon::setType(int t) void Weapon::DoStuff(int i) { - //~ cout << position.x << "," << position.y << "," << position.z << "|" << tippoint.x << "," << tippoint.y << "," << tippoint.z << endl; static int whichpatchx, whichpatchz, whichhit; static XYZ start, end, colpoint, normalrot, footvel, footpoint; static XYZ terrainnormal; @@ -119,6 +116,10 @@ void Weapon::DoStuff(int i) static XYZ closestswordpoint; static float tempmult; + if (multiplier <= 0) { + return; + } + if (owner != -1) { oldowner = owner; } @@ -156,16 +157,16 @@ void Weapon::DoStuff(int i) whichpatchx = position.x / (terrain.size / subdivision * terrain.scale); whichpatchz = position.z / (terrain.size / subdivision * terrain.scale); if (whichpatchx > 0 && whichpatchz > 0 && whichpatchx < subdivision && whichpatchz < subdivision) { - if (terrain.patchobjectnum[whichpatchx][whichpatchz]) { // if there are objects where the weapon is + if (terrain.patchobjectnum[whichpatchx][whichpatchz]) { // if there are Object::objects where the weapon is for (int j = 0; j < terrain.patchobjectnum[whichpatchx][whichpatchz]; j++) { // check for collision int k = terrain.patchobjects[whichpatchx][whichpatchz][j]; start = oldtippoint; end = tippoint; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { - if (objects.type[k] == treetrunktype) { - objects.model[k].MakeDecal(breakdecal, DoRotation(colpoint - objects.position[k], 0, -objects.yaw[k], 0), .1, 1, Random() % 360); - normalrot = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0); + if (Object::objects[k]->type == treetrunktype) { + Object::objects[k]->model.MakeDecal(breakdecal, DoRotation(colpoint - Object::objects[k]->position, 0, -Object::objects[k]->yaw, 0), .1, 1, Random() % 360); + normalrot = DoRotation(Object::objects[k]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0); velocity = 0; if (type == knife) position = colpoint - normalrot * .1; @@ -414,7 +415,7 @@ void Weapon::DoStuff(int i) if (type == staff) { start = tippoint - (position - tippoint) / 5; end = position + (position - tippoint) / 30; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { XYZ diff; diff = (colpoint - position); @@ -429,7 +430,7 @@ void Weapon::DoStuff(int i) } else { start = position - (tippoint - position) / 5; end = tippoint + (tippoint - position) / 30; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { XYZ diff; diff = (colpoint - tippoint); @@ -446,11 +447,11 @@ void Weapon::DoStuff(int i) start = oldposition; end = position; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { hitsomething = 1; position = colpoint; - terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1; + terrainnormal = DoRotation(Object::objects[k]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0) * -1; ReflectVector(&velocity, &terrainnormal); position += terrainnormal * .002; @@ -476,11 +477,11 @@ void Weapon::DoStuff(int i) } start = oldtippoint; end = tippoint; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { hitsomething = 1; tippoint = colpoint; - terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1; + terrainnormal = DoRotation(Object::objects[k]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0) * -1; ReflectVector(&tipvelocity, &terrainnormal); tippoint += terrainnormal * .002; @@ -505,7 +506,7 @@ void Weapon::DoStuff(int i) } } - if ((objects.type[k] != boxtype && objects.type[k] != platformtype && objects.type[k] != walltype && objects.type[k] != weirdtype) || objects.pitch[k] != 0) + if ((Object::objects[k]->type != boxtype && Object::objects[k]->type != platformtype && Object::objects[k]->type != walltype && Object::objects[k]->type != weirdtype) || Object::objects[k]->pitch != 0) for (int m = 0; m < 2; m++) { mid = (position * (21 + (float)m * 10) + tippoint * (19 - (float)m * 10)) / 40; oldmid2 = mid; @@ -513,11 +514,11 @@ void Weapon::DoStuff(int i) start = oldmid; end = mid; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { hitsomething = 1; mid = colpoint; - terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1; + terrainnormal = DoRotation(Object::objects[k]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0) * -1; ReflectVector(&velocity, &terrainnormal); bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal))); @@ -548,11 +549,11 @@ void Weapon::DoStuff(int i) start = oldmid; end = mid; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { hitsomething = 1; mid = colpoint; - terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1; + terrainnormal = DoRotation(Object::objects[k]->model.facenormals[whichhit], 0, Object::objects[k]->yaw, 0) * -1; ReflectVector(&tipvelocity, &terrainnormal); bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal))); @@ -580,14 +581,14 @@ void Weapon::DoStuff(int i) else { start = position; end = tippoint; - whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]); + whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw); if (whichhit != -1) { hitsomething = 1; closestdistance = -1; closestswordpoint = colpoint; //(position+tippoint)/2; - point[0] = DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[0]], 0, objects.yaw[k], 0) + objects.position[k]; - point[1] = DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[1]], 0, objects.yaw[k], 0) + objects.position[k]; - point[2] = DoRotation(objects.model[k].vertex[objects.model[k].Triangles[whichhit].vertex[2]], 0, objects.yaw[k], 0) + objects.position[k]; + point[0] = DoRotation(Object::objects[k]->model.vertex[Object::objects[k]->model.Triangles[whichhit].vertex[0]], 0, Object::objects[k]->yaw, 0) + Object::objects[k]->position; + point[1] = DoRotation(Object::objects[k]->model.vertex[Object::objects[k]->model.Triangles[whichhit].vertex[1]], 0, Object::objects[k]->yaw, 0) + Object::objects[k]->position; + point[2] = DoRotation(Object::objects[k]->model.vertex[Object::objects[k]->model.Triangles[whichhit].vertex[2]], 0, Object::objects[k]->yaw, 0) + Object::objects[k]->position; if (DistancePointLine(&closestswordpoint, &point[0], &point[1], &distance, &colpoint )) { if (distance < closestdistance || closestdistance == -1) { closestpoint = colpoint; @@ -1110,15 +1111,3 @@ int Weapons::Draw() Weapons::Weapons() { } - -Weapons::~Weapons() -{ - Weapon::stafftextureptr.destroy(); - Weapon::knifetextureptr.destroy(); - Weapon::lightbloodknifetextureptr.destroy(); - Weapon::bloodknifetextureptr.destroy(); - Weapon::swordtextureptr.destroy(); - Weapon::lightbloodswordtextureptr.destroy(); - Weapon::bloodswordtextureptr.destroy(); -} -