#include "Objects/Weapons.hpp"
#include "Animation/Animation.hpp"
-#include "Audio/openal_wrapper.hpp"
#include "Audio/Sounds.hpp"
+#include "Audio/openal_wrapper.hpp"
#include "Game.hpp"
#include "Level/Awards.hpp"
+#include "Tutorial.hpp"
extern float multiplier;
extern Terrain terrain;
extern float texdetail;
extern GLubyte bloodText[512 * 512 * 3];
extern int bloodtoggle;
-extern Objects objects;
extern bool autoslomo;
extern float camerashake;
extern float woozy;
extern float viewdistance;
extern float blackout;
extern bool freeze;
-extern int tutoriallevel;
extern int numthrowkill;
Model Weapon::throwingknifemodel;
Model Weapon::staffmodel;
Texture Weapon::stafftextureptr;
-Weapon::Weapon(int t, int o) : owner(o)
+Weapon::Weapon(int t, int o)
+ : owner(o)
{
setType(t);
bloody = 0;
}
}
-void Weapon::DoStuff(int i)
+/* Load weapons models and textures */
+void Weapon::Load()
+{
+ LOG("Loading weapon data...");
+
+ knifetextureptr.load("Textures/Knife.png", 0);
+ bloodknifetextureptr.load("Textures/BloodKnife.png", 0);
+ lightbloodknifetextureptr.load("Textures/BloodKnifeLight.png", 0);
+ swordtextureptr.load("Textures/Sword.jpg", 1);
+ bloodswordtextureptr.load("Textures/SwordBlood.jpg", 1);
+ lightbloodswordtextureptr.load("Textures/SwordBloodLight.jpg", 1);
+ stafftextureptr.load("Textures/Staff.jpg", 1);
+
+ throwingknifemodel.load("Models/ThrowingKnife.solid");
+ throwingknifemodel.Scale(.001, .001, .001);
+ throwingknifemodel.Rotate(90, 0, 0);
+ throwingknifemodel.Rotate(0, 90, 0);
+ throwingknifemodel.flat = 0;
+ throwingknifemodel.CalculateNormals(1);
+
+ swordmodel.load("Models/Sword.solid");
+ swordmodel.Scale(.001, .001, .001);
+ swordmodel.Rotate(90, 0, 0);
+ swordmodel.Rotate(0, 90, 0);
+ swordmodel.Rotate(0, 0, 90);
+ swordmodel.flat = 1;
+ swordmodel.CalculateNormals(1);
+
+ staffmodel.load("Models/Staff.solid");
+ staffmodel.Scale(.005, .005, .005);
+ staffmodel.Rotate(90, 0, 0);
+ staffmodel.Rotate(0, 90, 0);
+ staffmodel.Rotate(0, 0, 90);
+ staffmodel.flat = 1;
+ staffmodel.CalculateNormals(1);
+}
+
+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;
static XYZ closestswordpoint;
static float tempmult;
+ if (multiplier <= 0) {
+ return;
+ }
+
if (owner != -1) {
oldowner = owner;
}
Person::players[owner]->num_weapons--;
if (Person::players[owner]->num_weapons) {
Person::players[owner]->weaponids[0] = Person::players[owner]->weaponids[Person::players[owner]->num_weapons];
- if (Person::players[owner]->weaponstuck == Person::players[owner]->num_weapons)
+ if (Person::players[owner]->weaponstuck == Person::players[owner]->num_weapons) {
Person::players[owner]->weaponstuck = 0;
+ }
}
}
owner = -1;
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
- 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]);
- 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);
- velocity = 0;
- if (type == knife)
- position = colpoint - normalrot * .1;
- else if (type == sword)
- position = colpoint - normalrot * .2;
- else if (type == staff)
- position = colpoint - normalrot * .2;
- XYZ temppoint1, temppoint2;
- float distance;
-
- temppoint1 = 0;
- temppoint2 = normalrot;
- distance = findDistance(&temppoint1, &temppoint2);
- rotation2 = asin((temppoint1.y - temppoint2.y) / distance);
- rotation2 *= 360 / 6.28;
- temppoint1.y = 0;
- temppoint2.y = 0;
- rotation1 = acos((temppoint1.z - temppoint2.z) / findDistance(&temppoint1, &temppoint2));
- rotation1 *= 360 / 6.28;
- if (temppoint1.x > temppoint2.x)
- rotation1 = 360 - rotation1;
-
- rotation3 = 0;
- smallrotation = 90;
- smallrotation2 = 0;
- bigtilt = 0;
- bigtilt2 = 0;
- bigrotation = 0;
-
- emit_sound_at(knifesheathesound, position, 128.);
-
- bloody = 0;
-
- Sprite::MakeSprite(cloudimpactsprite, position, velocity, 1, 1, 1, .8, .3);
- } else {
- physics = 1;
- firstfree = 1;
- position -= velocity * multiplier;
- tippoint -= velocity * multiplier;
- tipvelocity = velocity;
+ for (unsigned int j = 0; j < terrain.patchobjects[whichpatchx][whichpatchz].size(); j++) { // check for collision
+ unsigned int k = terrain.patchobjects[whichpatchx][whichpatchz][j];
+ start = oldtippoint;
+ end = tippoint;
+ whichhit = Object::objects[k]->model.LineCheck(&start, &end, &colpoint, &Object::objects[k]->position, &Object::objects[k]->yaw);
+ if (whichhit != -1) {
+ 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.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0);
+ velocity = 0;
+ if (type == knife) {
+ position = colpoint - normalrot * .1;
+ } else if (type == sword) {
+ position = colpoint - normalrot * .2;
+ } else if (type == staff) {
+ position = colpoint - normalrot * .2;
}
+ XYZ temppoint1, temppoint2;
+ float distance;
+
+ temppoint1 = 0;
+ temppoint2 = normalrot;
+ distance = findDistance(&temppoint1, &temppoint2);
+ rotation2 = asin((temppoint1.y - temppoint2.y) / distance);
+ rotation2 *= 360 / 6.28;
+ temppoint1.y = 0;
+ temppoint2.y = 0;
+ rotation1 = acos((temppoint1.z - temppoint2.z) / findDistance(&temppoint1, &temppoint2));
+ rotation1 *= 360 / 6.28;
+ if (temppoint1.x > temppoint2.x) {
+ rotation1 = 360 - rotation1;
+ }
+
+ rotation3 = 0;
+ smallrotation = 90;
+ smallrotation2 = 0;
+ bigtilt = 0;
+ bigtilt2 = 0;
+ bigrotation = 0;
+
+ emit_sound_at(knifesheathesound, position, 128.);
+
+ bloody = 0;
+
+ Sprite::MakeSprite(cloudimpactsprite, position, velocity, 1, 1, 1, .8, .3);
+ } else {
+ physics = 1;
+ firstfree = 1;
+ position -= velocity * multiplier;
+ tippoint -= velocity * multiplier;
+ tipvelocity = velocity;
}
}
}
footvel = 0;
footpoint = DoRotation((Person::players[j]->jointPos(abdomen) + Person::players[j]->jointPos(neck)) / 2, 0, Person::players[j]->yaw, 0) * Person::players[j]->scale + Person::players[j]->coords;
if (owner == -1 && distsqflat(&position, &Person::players[j]->coords) < 1.5 &&
- distsq(&position, &Person::players[j]->coords) < 4 && Person::players[j]->weaponstuck == -1 &&
- !Person::players[j]->skeleton.free && (int(j) != oldowner)) {
+ distsq(&position, &Person::players[j]->coords) < 4 && Person::players[j]->weaponstuck == -1 &&
+ !Person::players[j]->skeleton.free && (int(j) != oldowner)) {
if ((Person::players[j]->aitype != attacktypecutoff || abs(Random() % 6) == 0 || (Person::players[j]->animTarget != backhandspringanim && Person::players[j]->animTarget != rollanim && Person::players[j]->animTarget != flipanim && Random() % 2 == 0)) && !missed) {
- if ( (Person::players[j]->creature == wolftype && Random() % 3 != 0 && Person::players[j]->weaponactive == -1 && (Person::players[j]->isIdle() || Person::players[j]->isRun() || Person::players[j]->animTarget == walkanim)) ||
- (Person::players[j]->creature == rabbittype && Random() % 2 == 0 && Person::players[j]->aitype == attacktypecutoff && Person::players[j]->weaponactive == -1)) {
+ if ((Person::players[j]->creature == wolftype && Random() % 3 != 0 && Person::players[j]->weaponactive == -1 && (Person::players[j]->isIdle() || Person::players[j]->isRun() || Person::players[j]->animTarget == walkanim)) ||
+ (Person::players[j]->creature == rabbittype && Random() % 2 == 0 && Person::players[j]->aitype == attacktypecutoff && Person::players[j]->weaponactive == -1)) {
emit_sound_at(knifedrawsound, Person::players[j]->coords, 128.);
Person::players[j]->animTarget = removeknifeanim;
Person::players[j]->aitype = attacktypecutoff;
} else {
- if (j != 0)
+ if (j != 0) {
numthrowkill++;
+ }
Person::players[j]->num_weapons++;
Person::players[j]->weaponstuck = Person::players[j]->num_weapons - 1;
- if (normaldotproduct(Person::players[j]->facing, velocity) > 0)
+ if (normaldotproduct(Person::players[j]->facing, velocity) > 0) {
Person::players[j]->weaponstuckwhere = 1;
- else
+ } else {
Person::players[j]->weaponstuckwhere = 0;
+ }
Person::players[j]->weaponids[Person::players[j]->num_weapons - 1] = i;
Person::players[j]->jointVel(neck) += velocity * 2;
Person::players[j]->jointVel(rightshoulder) += velocity * 2;
Person::players[j]->jointVel(leftshoulder) += velocity * 2;
- if (bloodtoggle && tutoriallevel != 1)
+ if (bloodtoggle && !Tutorial::active) {
Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 0, 0, .8, .3);
- if (tutoriallevel == 1)
+ }
+ if (Tutorial::active) {
Sprite::MakeSprite(cloudimpactsprite, footpoint, footvel, 1, 1, 1, .8, .3);
+ }
footvel = tippoint - position;
Normalise(&footvel);
- if (bloodtoggle && tutoriallevel != 1)
+ if (bloodtoggle && !Tutorial::active) {
Sprite::MakeSprite(bloodflamesprite, footpoint, footvel * -1, 1, 0, 0, .6, 1);
+ }
- if (tutoriallevel != 1) {
- if (Person::players[j]->weaponstuckwhere == 0)
+ if (!Tutorial::active) {
+ if (Person::players[j]->weaponstuckwhere == 0) {
Person::players[j]->DoBloodBig(2, 205);
- if (Person::players[j]->weaponstuckwhere == 1)
+ }
+ if (Person::players[j]->weaponstuckwhere == 1) {
Person::players[j]->DoBloodBig(2, 200);
+ }
Person::players[j]->damage += 200 / Person::players[j]->armorhigh;
Person::players[j]->deathbleeding = 1;
Person::players[j]->bloodloss += (200 + abs((float)(Random() % 40)) - 20) / Person::players[j]->armorhigh;
emit_sound_at(fleshstabsound, position, 128.);
- if (Animation::animations[Person::players[0]->animTarget].height == highheight)
+ if (Animation::animations[Person::players[0]->animTarget].height == highheight) {
award_bonus(0, ninja);
- else
+ } else {
award_bonus(0, Bullseyebonus);
+ }
}
} else {
missed = 1;
XYZ terrainlight;
terrainlight = terrain.getLighting(position.x, position.z);
if (environment == snowyenvironment) {
- if (distsq(&position, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&position, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, position, velocity, terrainlight.x, terrainlight.y, terrainlight.z, .5, .7);
+ }
} else if (environment == grassyenvironment) {
- if (distsq(&position, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&position, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, position, velocity, terrainlight.x * 90 / 255, terrainlight.y * 70 / 255, terrainlight.z * 8 / 255, .5, .5);
+ }
} else if (environment == desertenvironment) {
- if (distsq(&position, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&position, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, position, velocity, terrainlight.x * 190 / 255, terrainlight.y * 170 / 255, terrainlight.z * 108 / 255, .5, .7);
+ }
}
bloody = 0;
bigtilt = 0;
bigtilt2 = 0;
bigrotation = 0;
- if (temppoint1.x > temppoint2.x)
+ if (temppoint1.x > temppoint2.x) {
rotation1 = 360 - rotation1;
+ }
}
-
}
//Sword physics
position = newpoint1;
tippoint = newpoint2;
-
//Object collisions
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]) {
- for (int j = 0; j < terrain.patchobjectnum[whichpatchx][whichpatchz]; j++) {
- int k = terrain.patchobjects[whichpatchx][whichpatchz][j];
+ if (whichpatchx > 0 && whichpatchz > 0 && whichpatchx < subdivision && whichpatchz < subdivision) {
+ for (unsigned int j = 0; j < terrain.patchobjects[whichpatchx][whichpatchz].size(); j++) {
+ unsigned int k = terrain.patchobjects[whichpatchx][whichpatchz][j];
+
+ if (firstfree) {
+ if (type == staff) {
+ start = tippoint - (position - tippoint) / 5;
+ end = position + (position - tippoint) / 30;
+ 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);
+ Normalise(&diff);
+ hitsomething = 1;
- if (firstfree) {
- 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]);
- if (whichhit != -1) {
- XYZ diff;
- diff = (colpoint - position);
- Normalise(&diff);
- hitsomething = 1;
-
- tippoint += (colpoint - position) + diff * .05;
- position = colpoint + diff * .05;
- oldtippoint = tippoint;
- oldposition = tippoint;
- }
- } 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]);
- if (whichhit != -1) {
- XYZ diff;
- diff = (colpoint - tippoint);
- Normalise(&diff);
- hitsomething = 1;
-
- position += (colpoint - tippoint) + diff * .05;
- tippoint = colpoint + diff * .05;
- oldposition = position;
- oldtippoint = tippoint;
- }
+ tippoint += (colpoint - position) + diff * .05;
+ position = colpoint + diff * .05;
+ oldtippoint = tippoint;
+ oldposition = tippoint;
+ }
+ } else {
+ start = position - (tippoint - position) / 5;
+ end = tippoint + (tippoint - position) / 30;
+ 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);
+ Normalise(&diff);
+ hitsomething = 1;
+
+ position += (colpoint - tippoint) + diff * .05;
+ tippoint = colpoint + diff * .05;
+ oldposition = position;
+ oldtippoint = tippoint;
}
}
+ }
- start = oldposition;
- end = position;
- whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]);
- if (whichhit != -1) {
- hitsomething = 1;
- position = colpoint;
- terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1;
- ReflectVector(&velocity, &terrainnormal);
- position += terrainnormal * .002;
-
- bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal)));
- if (findLengthfast(&velocity) < findLengthfast(&bounceness))
- bounceness = 0;
- frictionness = abs(normaldotproduct(velocity, terrainnormal));
- velocity -= bounceness;
- if (1 - friction * frictionness > 0)
- velocity *= 1 - friction * frictionness;
- else
- velocity = 0;
- velocity += bounceness * elasticity;
-
- if (findLengthfast(&bounceness) > 1) {
- int whichsound;
- if (type == staff)
- whichsound = footstepsound3 + abs(Random() % 2);
- else
- whichsound = clank1sound + abs(Random() % 4);
- emit_sound_at(whichsound, position, 128 * findLengthfast(&bounceness));
+ start = oldposition;
+ end = position;
+ 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(Object::objects[k]->model.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0) * -1;
+ ReflectVector(&velocity, &terrainnormal);
+ position += terrainnormal * .002;
+
+ bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal)));
+ if (findLengthfast(&velocity) < findLengthfast(&bounceness)) {
+ bounceness = 0;
+ }
+ frictionness = abs(normaldotproduct(velocity, terrainnormal));
+ velocity -= bounceness;
+ if (1 - friction * frictionness > 0) {
+ velocity *= 1 - friction * frictionness;
+ } else {
+ velocity = 0;
+ }
+ velocity += bounceness * elasticity;
+
+ if (findLengthfast(&bounceness) > 1) {
+ int whichsound;
+ if (type == staff) {
+ whichsound = footstepsound3 + abs(Random() % 2);
+ } else {
+ whichsound = clank1sound + abs(Random() % 4);
}
+ emit_sound_at(whichsound, position, 128 * findLengthfast(&bounceness));
}
- start = oldtippoint;
- end = tippoint;
- whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]);
- if (whichhit != -1) {
- hitsomething = 1;
- tippoint = colpoint;
- terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1;
- ReflectVector(&tipvelocity, &terrainnormal);
- tippoint += terrainnormal * .002;
-
- bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal)));
- if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness))
- bounceness = 0;
- frictionness = abs(normaldotproduct(tipvelocity, terrainnormal));
- tipvelocity -= bounceness;
- if (1 - friction * frictionness > 0)
- tipvelocity *= 1 - friction * frictionness;
- else
- tipvelocity = 0;
- tipvelocity += bounceness * elasticity;
-
- if (findLengthfast(&bounceness) > 1) {
- int whichsound;
- if (type == staff)
- whichsound = footstepsound3 + abs(Random() % 2);
- else
- whichsound = clank1sound + abs(Random() % 4);
- emit_sound_at(whichsound, position, 128 * findLengthfast(&bounceness));
+ }
+ start = oldtippoint;
+ end = tippoint;
+ 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(Object::objects[k]->model.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0) * -1;
+ ReflectVector(&tipvelocity, &terrainnormal);
+ tippoint += terrainnormal * .002;
+
+ bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal)));
+ if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness)) {
+ bounceness = 0;
+ }
+ frictionness = abs(normaldotproduct(tipvelocity, terrainnormal));
+ tipvelocity -= bounceness;
+ if (1 - friction * frictionness > 0) {
+ tipvelocity *= 1 - friction * frictionness;
+ } else {
+ tipvelocity = 0;
+ }
+ tipvelocity += bounceness * elasticity;
+
+ if (findLengthfast(&bounceness) > 1) {
+ int whichsound;
+ if (type == staff) {
+ whichsound = footstepsound3 + abs(Random() % 2);
+ } else {
+ whichsound = clank1sound + abs(Random() % 4);
}
+ emit_sound_at(whichsound, position, 128 * findLengthfast(&bounceness));
}
+ }
- if ((objects.type[k] != boxtype && objects.type[k] != platformtype && objects.type[k] != walltype && objects.type[k] != weirdtype) || objects.pitch[k] != 0)
- for (int m = 0; m < 2; m++) {
- mid = (position * (21 + (float)m * 10) + tippoint * (19 - (float)m * 10)) / 40;
- oldmid2 = mid;
- oldmid = (oldposition * (21 + (float)m * 10) + oldtippoint * (19 - (float)m * 10)) / 40;
-
- start = oldmid;
- end = mid;
- whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]);
- if (whichhit != -1) {
- hitsomething = 1;
- mid = colpoint;
- terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1;
- ReflectVector(&velocity, &terrainnormal);
-
- bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal)));
- if (findLengthfast(&velocity) < findLengthfast(&bounceness))
- bounceness = 0;
- frictionness = abs(normaldotproduct(velocity, terrainnormal));
- velocity -= bounceness;
- if (1 - friction * frictionness > 0)
- velocity *= 1 - friction * frictionness;
- else
- velocity = 0;
- velocity += bounceness * elasticity;
-
- if (findLengthfast(&bounceness) > 1) {
- int whichsound;
- if (type == staff)
- whichsound = footstepsound3 + abs(Random() % 2);
- else
- whichsound = clank1sound + abs(Random() % 4);
- emit_sound_at(whichsound, mid, 128 * findLengthfast(&bounceness));
- }
- position += (mid - oldmid2) * (20 / (1 + (float)m * 10));
- }
+ 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;
+ oldmid = (oldposition * (21 + (float)m * 10) + oldtippoint * (19 - (float)m * 10)) / 40;
+
+ start = oldmid;
+ end = mid;
+ 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(Object::objects[k]->model.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0) * -1;
+ ReflectVector(&velocity, &terrainnormal);
- mid = (position * (19 - (float)m * 10) + tippoint * (21 + (float)m * 10)) / 40;
- oldmid2 = mid;
- oldmid = (oldposition * (19 - (float)m * 10) + oldtippoint * (21 + (float)m * 10)) / 40;
-
- start = oldmid;
- end = mid;
- whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]);
- if (whichhit != -1) {
- hitsomething = 1;
- mid = colpoint;
- terrainnormal = DoRotation(objects.model[k].facenormals[whichhit], 0, objects.yaw[k], 0) * -1;
- ReflectVector(&tipvelocity, &terrainnormal);
-
- bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal)));
- if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness))
- bounceness = 0;
- frictionness = abs(normaldotproduct(tipvelocity, terrainnormal));
- tipvelocity -= bounceness;
- if (1 - friction * frictionness > 0)
- tipvelocity *= 1 - friction * frictionness;
- else
- tipvelocity = 0;
- tipvelocity += bounceness * elasticity;
-
- if (findLengthfast(&bounceness) > 1) {
- int whichsound;
- if (type == staff)
- whichsound = footstepsound3 + abs(Random() % 2);
- else
- whichsound = clank1sound + abs(Random() % 4);
- emit_sound_at(whichsound, mid, 128 * findLengthfast(&bounceness));
+ bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal)));
+ if (findLengthfast(&velocity) < findLengthfast(&bounceness)) {
+ bounceness = 0;
+ }
+ frictionness = abs(normaldotproduct(velocity, terrainnormal));
+ velocity -= bounceness;
+ if (1 - friction * frictionness > 0) {
+ velocity *= 1 - friction * frictionness;
+ } else {
+ velocity = 0;
+ }
+ velocity += bounceness * elasticity;
+
+ if (findLengthfast(&bounceness) > 1) {
+ int whichsound;
+ if (type == staff) {
+ whichsound = footstepsound3 + abs(Random() % 2);
+ } else {
+ whichsound = clank1sound + abs(Random() % 4);
}
- tippoint += (mid - oldmid2) * (20 / (1 + (float)m * 10));
+ emit_sound_at(whichsound, mid, 128 * findLengthfast(&bounceness));
}
+ position += (mid - oldmid2) * (20 / (1 + (float)m * 10));
}
- else {
- start = position;
- end = tippoint;
- whichhit = objects.model[k].LineCheck(&start, &end, &colpoint, &objects.position[k], &objects.yaw[k]);
+
+ mid = (position * (19 - (float)m * 10) + tippoint * (21 + (float)m * 10)) / 40;
+ oldmid2 = mid;
+ oldmid = (oldposition * (19 - (float)m * 10) + oldtippoint * (21 + (float)m * 10)) / 40;
+
+ start = oldmid;
+ end = mid;
+ 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];
- if (DistancePointLine(&closestswordpoint, &point[0], &point[1], &distance, &colpoint )) {
- if (distance < closestdistance || closestdistance == -1) {
- closestpoint = colpoint;
- closestdistance = distance;
- }
+ mid = colpoint;
+ terrainnormal = DoRotation(Object::objects[k]->model.Triangles[whichhit].facenormal, 0, Object::objects[k]->yaw, 0) * -1;
+ ReflectVector(&tipvelocity, &terrainnormal);
+
+ bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal)));
+ if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness)) {
+ bounceness = 0;
}
- if (DistancePointLine(&closestswordpoint, &point[1], &point[2], &distance, &colpoint )) {
- if (distance < closestdistance || closestdistance == -1) {
- closestpoint = colpoint;
- closestdistance = distance;
- }
+ frictionness = abs(normaldotproduct(tipvelocity, terrainnormal));
+ tipvelocity -= bounceness;
+ if (1 - friction * frictionness > 0) {
+ tipvelocity *= 1 - friction * frictionness;
+ } else {
+ tipvelocity = 0;
}
- if (DistancePointLine(&closestswordpoint, &point[2], &point[0], &distance, &colpoint )) {
- if (distance < closestdistance || closestdistance == -1) {
- closestpoint = colpoint;
- closestdistance = distance;
+ tipvelocity += bounceness * elasticity;
+
+ if (findLengthfast(&bounceness) > 1) {
+ int whichsound;
+ if (type == staff) {
+ whichsound = footstepsound3 + abs(Random() % 2);
+ } else {
+ whichsound = clank1sound + abs(Random() % 4);
}
+ emit_sound_at(whichsound, mid, 128 * findLengthfast(&bounceness));
}
- if (closestdistance != -1 && isnormal(closestdistance)) {
- if (DistancePointLine(&closestpoint, &position, &tippoint, &distance, &colpoint )) {
- closestswordpoint = colpoint;
- velocity += (closestpoint - closestswordpoint);
- tipvelocity += (closestpoint - closestswordpoint);
- position += (closestpoint - closestswordpoint);
- tippoint += (closestpoint - closestswordpoint);
- }
+ tippoint += (mid - oldmid2) * (20 / (1 + (float)m * 10));
+ }
+ }
+ } else {
+ start = position;
+ end = tippoint;
+ 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;
+ point[0] = DoRotation(Object::objects[k]->model.getTriangleVertex(whichhit, 0), 0, Object::objects[k]->yaw, 0) + Object::objects[k]->position;
+ point[1] = DoRotation(Object::objects[k]->model.getTriangleVertex(whichhit, 1), 0, Object::objects[k]->yaw, 0) + Object::objects[k]->position;
+ point[2] = DoRotation(Object::objects[k]->model.getTriangleVertex(whichhit, 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;
+ closestdistance = distance;
+ }
+ }
+ if (DistancePointLine(&closestswordpoint, &point[1], &point[2], &distance, &colpoint)) {
+ if (distance < closestdistance || closestdistance == -1) {
+ closestpoint = colpoint;
+ closestdistance = distance;
+ }
+ }
+ if (DistancePointLine(&closestswordpoint, &point[2], &point[0], &distance, &colpoint)) {
+ if (distance < closestdistance || closestdistance == -1) {
+ closestpoint = colpoint;
+ closestdistance = distance;
+ }
+ }
+ if (closestdistance != -1 && isnormal(closestdistance)) {
+ if (DistancePointLine(&closestpoint, &position, &tippoint, &distance, &colpoint)) {
+ closestswordpoint = colpoint;
+ velocity += (closestpoint - closestswordpoint);
+ tipvelocity += (closestpoint - closestswordpoint);
+ position += (closestpoint - closestswordpoint);
+ tippoint += (closestpoint - closestswordpoint);
}
}
}
}
}
+ }
//Terrain collisions
whichhit = terrain.lineTerrain(oldposition, position, &colpoint);
if (whichhit != -1 || position.y < terrain.getHeight(position.x, position.z)) {
hitsomething = 1;
- if (whichhit != -1)
+ if (whichhit != -1) {
position = colpoint * terrain.scale;
- else
+ } else {
position.y = terrain.getHeight(position.x, position.z);
+ }
terrainnormal = terrain.getNormal(position.x, position.z);
ReflectVector(&velocity, &terrainnormal);
position += terrainnormal * .002;
bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal)));
- if (findLengthfast(&velocity) < findLengthfast(&bounceness))
+ if (findLengthfast(&velocity) < findLengthfast(&bounceness)) {
bounceness = 0;
+ }
frictionness = abs(normaldotproduct(velocity, terrainnormal));
velocity -= bounceness;
- if (1 - friction * frictionness > 0)
+ if (1 - friction * frictionness > 0) {
velocity *= 1 - friction * frictionness;
- else
+ } else {
velocity = 0;
- if (terrain.getOpacity(position.x, position.z) < .2)
+ }
+ if (terrain.getOpacity(position.x, position.z) < .2) {
velocity += bounceness * elasticity * .3;
- else
+ } else {
velocity += bounceness * elasticity;
+ }
if (findLengthfast(&bounceness) > 1) {
int whichsound;
if (terrain.getOpacity(position.x, position.z) > .2) {
- if (type == staff)
+ if (type == staff) {
whichsound = footstepsound3 + abs(Random() % 2);
- else
+ } else {
whichsound = clank1sound + abs(Random() % 4);
+ }
} else {
whichsound = footstepsound + abs(Random() % 2);
}
emit_sound_at(whichsound, position,
- findLengthfast(&bounceness)
- * (terrain.getOpacity(position.x, position.z) > .2 ? 128. : 32.));
+ findLengthfast(&bounceness) * (terrain.getOpacity(position.x, position.z) > .2 ? 128. : 32.));
if (terrain.getOpacity(position.x, position.z) < .2) {
XYZ terrainlight;
terrainlight = terrain.getLighting(position.x, position.z);
if (environment == snowyenvironment) {
- if (distsq(&position, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&position, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, position, velocity, terrainlight.x, terrainlight.y, terrainlight.z, .5, .7);
+ }
} else if (environment == grassyenvironment) {
- if (distsq(&position, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&position, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, position, velocity, terrainlight.x * 90 / 255, terrainlight.y * 70 / 255, terrainlight.z * 8 / 255, .5, .5);
+ }
} else if (environment == desertenvironment) {
- if (distsq(&position, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&position, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, position, velocity, terrainlight.x * 190 / 255, terrainlight.y * 170 / 255, terrainlight.z * 108 / 255, .5, .7);
+ }
}
}
}
}
whichhit = terrain.lineTerrain(oldtippoint, tippoint, &colpoint);
if (whichhit != -1 || tippoint.y < terrain.getHeight(tippoint.x, tippoint.z)) {
- if (whichhit != -1)
+ if (whichhit != -1) {
tippoint = colpoint * terrain.scale;
- else
+ } else {
tippoint.y = terrain.getHeight(tippoint.x, tippoint.z);
+ }
terrainnormal = terrain.getNormal(tippoint.x, tippoint.z);
ReflectVector(&tipvelocity, &terrainnormal);
tippoint += terrainnormal * .002;
bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal)));
- if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness))
+ if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness)) {
bounceness = 0;
+ }
frictionness = abs(normaldotproduct(tipvelocity, terrainnormal));
tipvelocity -= bounceness;
- if (1 - friction * frictionness > 0)
+ if (1 - friction * frictionness > 0) {
tipvelocity *= 1 - friction * frictionness;
- else
+ } else {
tipvelocity = 0;
- if (terrain.getOpacity(tippoint.x, tippoint.z) < .2)
+ }
+ if (terrain.getOpacity(tippoint.x, tippoint.z) < .2) {
tipvelocity += bounceness * elasticity * .3;
- else
+ } else {
tipvelocity += bounceness * elasticity;
+ }
if (findLengthfast(&bounceness) > 1) {
int whichsound;
if (terrain.getOpacity(tippoint.x, tippoint.z) > .2) {
- if (type == staff)
+ if (type == staff) {
whichsound = footstepsound3 + abs(Random() % 2);
- else
+ } else {
whichsound = clank1sound + abs(Random() % 4);
+ }
} else {
whichsound = footstepsound + abs(Random() % 2);
}
emit_sound_at(whichsound, tippoint,
- findLengthfast(&bounceness)
- * (terrain.getOpacity(tippoint.x, tippoint.z) > .2 ? 128. : 32.));
+ findLengthfast(&bounceness) * (terrain.getOpacity(tippoint.x, tippoint.z) > .2 ? 128. : 32.));
if (terrain.getOpacity(tippoint.x, tippoint.z) < .2) {
XYZ terrainlight;
terrainlight = terrain.getLighting(tippoint.x, tippoint.z);
if (environment == snowyenvironment) {
- if (distsq(&tippoint, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&tippoint, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, tippoint, tipvelocity, terrainlight.x, terrainlight.y, terrainlight.z, .5, .7);
+ }
} else if (environment == grassyenvironment) {
- if (distsq(&tippoint, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&tippoint, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, tippoint, tipvelocity, terrainlight.x * 90 / 255, terrainlight.y * 70 / 255, terrainlight.z * 8 / 255, .5, .5);
+ }
} else if (environment == desertenvironment) {
- if (distsq(&tippoint, &viewer) < viewdistance * viewdistance / 4)
+ if (distsq(&tippoint, &viewer) < viewdistance * viewdistance / 4) {
Sprite::MakeSprite(cloudsprite, tippoint, tipvelocity, terrainlight.x * 190 / 255, terrainlight.y * 170 / 255, terrainlight.z * 108 / 255, .5, .7);
+ }
}
}
}
ReflectVector(&velocity, &terrainnormal);
//mid+=terrainnormal*.002;
bounceness = terrainnormal * findLength(&velocity) * (abs(normaldotproduct(velocity, terrainnormal)));
- if (findLengthfast(&velocity) < findLengthfast(&bounceness))
+ if (findLengthfast(&velocity) < findLengthfast(&bounceness)) {
bounceness = 0;
+ }
frictionness = abs(normaldotproduct(velocity, terrainnormal));
velocity -= bounceness;
- if (1 - friction * frictionness > 0)
+ if (1 - friction * frictionness > 0) {
velocity *= 1 - friction * frictionness;
- else
+ } else {
velocity = 0;
- if (terrain.getOpacity(mid.x, mid.z) < .2)
+ }
+ if (terrain.getOpacity(mid.x, mid.z) < .2) {
velocity += bounceness * elasticity * .3;
- else
+ } else {
velocity += bounceness * elasticity;
+ }
if (findLengthfast(&bounceness) > 1) {
int whichsound;
if (terrain.getOpacity(mid.x, mid.z) > .2) {
- if (type == staff)
+ if (type == staff) {
whichsound = footstepsound3 + abs(Random() % 2);
- if (type != staff)
+ }
+ if (type != staff) {
whichsound = clank1sound + abs(Random() % 4);
+ }
} else {
whichsound = footstepsound + abs(Random() % 2);
}
emit_sound_at(whichsound, mid,
- findLengthfast(&bounceness)
- * (terrain.getOpacity(position.x, position.z) > .2
- ? 128.
- : 32.));
+ findLengthfast(&bounceness) * (terrain.getOpacity(position.x, position.z) > .2
+ ? 128.
+ : 32.));
}
position += (mid - oldmid) * 20;
}
ReflectVector(&tipvelocity, &terrainnormal);
//mid+=terrainnormal*.002;
bounceness = terrainnormal * findLength(&tipvelocity) * (abs(normaldotproduct(tipvelocity, terrainnormal)));
- if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness))
+ if (findLengthfast(&tipvelocity) < findLengthfast(&bounceness)) {
bounceness = 0;
+ }
frictionness = abs(normaldotproduct(tipvelocity, terrainnormal));
tipvelocity -= bounceness;
- if (1 - friction * frictionness > 0)
+ if (1 - friction * frictionness > 0) {
tipvelocity *= 1 - friction * frictionness;
- else
+ } else {
tipvelocity = 0;
- if (terrain.getOpacity(mid.x, mid.z) < .2)
+ }
+ if (terrain.getOpacity(mid.x, mid.z) < .2) {
tipvelocity += bounceness * elasticity * .3;
- else
+ } else {
tipvelocity += bounceness * elasticity;
+ }
if (findLengthfast(&bounceness) > 1) {
int whichsound;
if (terrain.getOpacity(mid.x, mid.z) > .2) {
- if (type == staff)
+ if (type == staff) {
whichsound = footstepsound3 + abs(Random() % 2);
- if (type != staff)
+ }
+ if (type != staff) {
whichsound = clank1sound + abs(Random() % 4);
+ }
} else {
whichsound = footstepsound + abs(Random() % 2);
}
emit_sound_at(whichsound, mid,
- findLengthfast(&bounceness)
- * (terrain.getOpacity(position.x, position.z) > .2
- ? 128.
- : 32.));
+ findLengthfast(&bounceness) * (terrain.getOpacity(position.x, position.z) > .2
+ ? 128.
+ : 32.));
}
tippoint += (mid - oldmid) * 20;
}
bigtilt = 0;
bigtilt2 = 0;
bigrotation = 0;
- if (temppoint1.x > temppoint2.x)
+ if (temppoint1.x > temppoint2.x) {
rotation1 = 360 - rotation1;
+ }
//Stop moving
if (findLengthfast(&velocity) < .3 && findLengthfast(&tipvelocity) < .3 && hitsomething) {
if (blooddrip && bloody) {
blooddripdelay -= blooddrip * multiplier / 2;
blooddrip -= multiplier;
- if (blooddrip < 0)
+ if (blooddrip < 0) {
blooddrip = 0;
- if (blooddrip > 5)
+ }
+ if (blooddrip > 5) {
blooddrip = 5;
+ }
if (blooddripdelay < 0 && bloodtoggle) {
blooddripdelay = 1;
XYZ bloodvel;
//Move
int i = 0;
for (std::vector<Weapon>::iterator weapon = begin(); weapon != end(); ++weapon) {
- weapon->DoStuff(i++);
+ weapon->doStuff(i++);
}
}
-void Weapon::Draw()
+void Weapon::draw()
{
static XYZ terrainlight;
static GLfloat M[16];
if ((frustum.SphereInFrustum(position.x, position.y, position.z, 1) &&
- distsq(&viewer, &position) < viewdistance * viewdistance)) {
+ distsq(&viewer, &position) < viewdistance * viewdistance)) {
bool draw = false;
if (owner == -1) {
draw = true;
- if (velocity.x && !physics)
+ if (velocity.x && !physics) {
drawhowmany = 10;
- else
+ } else {
drawhowmany = 1;
+ }
} else {
- if (Person::players[owner]->occluded < 25)
- if ((frustum.SphereInFrustum(Person::players[owner]->coords.x, Person::players[owner]->coords.y + Person::players[owner]->scale * 3, Person::players[owner]->coords.z, Person::players[owner]->scale * 8) && distsq(&viewer, &Person::players[owner]->coords) < viewdistance * viewdistance) || Person::players[owner]->skeleton.free == 3)
+ if (Person::players[owner]->occluded < 25) {
+ if ((frustum.SphereInFrustum(Person::players[owner]->coords.x, Person::players[owner]->coords.y + Person::players[owner]->scale * 3, Person::players[owner]->coords.z, Person::players[owner]->scale * 8) && distsq(&viewer, &Person::players[owner]->coords) < viewdistance * viewdistance) || Person::players[owner]->skeleton.free == 3) {
draw = true;
+ }
+ }
if (
(Person::players[owner]->animTarget == knifeslashstartanim ||
Person::players[owner]->animTarget == swordsneakattackanim ||
Person::players[owner]->animTarget == swordgroundstabanim ||
Person::players[owner]->animTarget == knifethrowanim) &&
Person::players[owner]->animTarget == lastdrawnanim &&
- !Person::players[owner]->skeleton.free
- ) {
+ !Person::players[owner]->skeleton.free) {
drawhowmany = 10;
} else {
drawhowmany = 1;
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glColor4f(terrainlight.x, terrainlight.y, terrainlight.z, j / drawhowmany);
- if (owner == -1)
+ if (owner == -1) {
glTranslatef(position.x * (((float)(j)) / drawhowmany) + lastdrawnposition.x * (1 - ((float)(j)) / drawhowmany), position.y * (((float)(j)) / drawhowmany) + lastdrawnposition.y * (1 - ((float)(j)) / drawhowmany), position.z * (((float)(j)) / drawhowmany) + lastdrawnposition.z * (1 - ((float)(j)) / drawhowmany));
- else
+ } else {
glTranslatef(position.x * (((float)(j)) / drawhowmany) + lastdrawnposition.x * (1 - ((float)(j)) / drawhowmany), position.y * (((float)(j)) / drawhowmany) - .02 + lastdrawnposition.y * (1 - ((float)(j)) / drawhowmany), position.z * (((float)(j)) / drawhowmany) + lastdrawnposition.z * (1 - ((float)(j)) / drawhowmany));
+ }
glRotatef(bigrotation * (((float)(j)) / drawhowmany) + lastdrawnbigrotation * (1 - ((float)(j)) / drawhowmany), 0, 1, 0);
glRotatef(bigtilt2 * (((float)(j)) / drawhowmany) + lastdrawnbigtilt2 * (1 - ((float)(j)) / drawhowmany), 1, 0, 0);
glRotatef(bigtilt * (((float)(j)) / drawhowmany) + lastdrawnbigtilt * (1 - ((float)(j)) / drawhowmany), 0, 0, 1);
glEnable(GL_LIGHTING);
switch (type) {
- case knife:
- if (!bloody || !bloodtoggle)
- throwingknifemodel.drawdifftex(knifetextureptr);
- if (bloodtoggle) {
- if (bloody == 1)
- throwingknifemodel.drawdifftex(lightbloodknifetextureptr);
- if (bloody == 2)
- throwingknifemodel.drawdifftex(bloodknifetextureptr);
- }
- break;
- case sword:
- if (!bloody || !bloodtoggle)
- swordmodel.drawdifftex(swordtextureptr);
- if (bloodtoggle) {
- if (bloody == 1)
- swordmodel.drawdifftex(lightbloodswordtextureptr);
- if (bloody == 2)
- swordmodel.drawdifftex(bloodswordtextureptr);
- }
- break;
- case staff:
- staffmodel.drawdifftex(stafftextureptr);
- break;
+ case knife:
+ if (!bloody || !bloodtoggle) {
+ throwingknifemodel.drawdifftex(knifetextureptr);
+ }
+ if (bloodtoggle) {
+ if (bloody == 1) {
+ throwingknifemodel.drawdifftex(lightbloodknifetextureptr);
+ }
+ if (bloody == 2) {
+ throwingknifemodel.drawdifftex(bloodknifetextureptr);
+ }
+ }
+ break;
+ case sword:
+ if (!bloody || !bloodtoggle) {
+ swordmodel.drawdifftex(swordtextureptr);
+ }
+ if (bloodtoggle) {
+ if (bloody == 1) {
+ swordmodel.drawdifftex(lightbloodswordtextureptr);
+ }
+ if (bloody == 2) {
+ swordmodel.drawdifftex(bloodswordtextureptr);
+ }
+ }
+ break;
+ case staff:
+ staffmodel.drawdifftex(stafftextureptr);
+ break;
}
glPopMatrix();
lastdrawnbigtilt2 = bigtilt2;
lastdrawnsmallrotation = smallrotation;
lastdrawnsmallrotation2 = smallrotation2;
- if (owner != -1)
+ if (owner != -1) {
lastdrawnanim = Person::players[owner]->animCurrent;
+ }
}
if (owner != -1) {
glMatrixMode(GL_MODELVIEW);
glDepthMask(1);
for (std::vector<Weapon>::iterator weapon = begin(); weapon != end(); ++weapon) {
- weapon->Draw();
+ weapon->draw();
}
return 0;
}
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();
-}
-