- Person::players[k]->targetyaw = roughDirectionTo(Person::players[k]->coords, Person::players[i]->coords);
- Person::players[k]->targettilt2 = pitchTo(Person::players[k]->coords, Person::players[i]->coords);
- Person::players[k]->lastattack3 = Person::players[k]->lastattack2;
- Person::players[k]->lastattack2 = Person::players[k]->lastattack;
- Person::players[k]->lastattack = Person::players[k]->animTarget;
- }
- if (Person::players[k]->animTarget == knifefollowanim &&
- Person::players[k]->victim == Person::players[i]) {
- oldattackkey = 1;
- Person::players[k]->targetyaw = roughDirectionTo(Person::players[k]->coords, Person::players[i]->coords);
- Person::players[k]->targettilt2 = pitchTo(Person::players[k]->coords, Person::players[i]->coords);
- Person::players[k]->victim = Person::players[i];
- Person::players[k]->hasvictim = 1;
- Person::players[i]->animTarget = knifefollowedanim;
- Person::players[i]->animCurrent = knifefollowedanim;
- Person::players[i]->targettilt2 = 0;
- Person::players[i]->targettilt2 = Person::players[k]->targettilt2;
- Person::players[i]->frameTarget = 1;
- Person::players[i]->frameCurrent = 0;
- Person::players[i]->target = 0;
- Person::players[i]->velocity = 0;
- Person::players[k]->animCurrent = knifefollowanim;
- Person::players[k]->animTarget = knifefollowanim;
- Person::players[k]->targettilt2 = Person::players[i]->targettilt2;
- Person::players[k]->frameCurrent = Person::players[i]->frameCurrent;
- Person::players[k]->frameTarget = Person::players[i]->frameTarget;
- Person::players[k]->target = Person::players[i]->target;
- Person::players[k]->velocity = 0;
- Person::players[k]->oldcoords = Person::players[k]->coords;
- Person::players[i]->coords = Person::players[k]->coords;
- Person::players[i]->targetyaw = Person::players[k]->targetyaw;
- Person::players[i]->yaw = Person::players[k]->targetyaw;
- Person::players[k]->yaw = Person::players[k]->targetyaw;
- Person::players[i]->yaw = Person::players[k]->targetyaw;
- }
- }
- }
- const bool hasstaff = attackweapon == staff;
- if (k == 0 && Person::players.size() > 1)
- for (unsigned i = 0; i < Person::players.size(); i++) {
- if (i == k)
- continue;
- if ((playerrealattackkeydown || Person::players[i]->dead || !hasstaff) &&
- animation[Person::players[k]->animTarget].attack == neutral) {
- const float distance = distsq(&Person::players[k]->coords, &Person::players[i]->coords);
- if (!Person::players[i]->dead || !realthreat || (!attackweapon && Person::players[k]->crouchkeydown))
- if (Person::players[i]->skeleton.free)
- if (distance < 3.5 * sq(Person::players[k]->scale * 5) &&
- (Person::players[i]->dead ||
- Person::players[i]->skeleton.longdead > 1000 ||
- Person::players[k]->isRun() ||
- hasstaff ||
- (attackweapon &&
- (Person::players[i]->skeleton.longdead > 2000 ||
- Person::players[i]->damage > Person::players[i]->damagetolerance / 8 ||
- Person::players[i]->bloodloss > Person::players[i]->damagetolerance / 2) &&
- distance < 1.5 * sq(Person::players[k]->scale * 5)))) {
- Person::players[k]->victim = Person::players[i];
- Person::players[k]->hasvictim = 1;
- if (attackweapon && tutoriallevel != 1) {
- //crouchstab
- if (Person::players[k]->crouchkeydown && attackweapon == knife && distance < 1.5 * sq(Person::players[k]->scale * 5))
- Person::players[k]->animTarget = crouchstabanim;
- //swordgroundstab
- if (Person::players[k]->crouchkeydown && distance < 1.5 * sq(Person::players[k]->scale * 5) && attackweapon == sword)
- Person::players[k]->animTarget = swordgroundstabanim;
- //staffgroundsmash
- if (distance < 3.5 * sq(Person::players[k]->scale * 5) && attackweapon == staff)
- Person::players[k]->animTarget = staffgroundsmashanim;
- }
- if (distance < 2.5 &&
- Person::players[k]->crouchkeydown &&
- Person::players[k]->animTarget != crouchstabanim &&
- !attackweapon &&
- Person::players[i]->dead &&
- Person::players[i]->skeleton.free &&
- Person::players[i]->skeleton.longdead > 1000) {
- Person::players[k]->animTarget = killanim;
- //TODO: refactor this out, what does it do?
- for (int j = 0; j < terrain.numdecals; j++) {
- if ((terrain.decaltype[j] == blooddecal || terrain.decaltype[j] == blooddecalslow) &&
- terrain.decalalivetime[j] < 2)
- terrain.DeleteDecal(j);
- }
- for (int l = 0; l < objects.numobjects; l++) {
- if (objects.model[l].type == decalstype)
- for (int j = 0; j < objects.model[l].numdecals; j++) {
- if ((objects.model[l].decaltype[j] == blooddecal ||
- objects.model[l].decaltype[j] == blooddecalslow) &&
- objects.model[l].decalalivetime[j] < 2)
- objects.model[l].DeleteDecal(j);
- }
- }
- }
- if (!Person::players[i]->dead || musictype != 2)
- if (distance < 3.5 &&
- (Person::players[k]->isRun() || Person::players[k]->isIdle() && Person::players[k]->attackkeydown) &&
- Person::players[k]->staggerdelay <= 0 &&
- (Person::players[i]->dead ||
- Person::players[i]->skeleton.longdead < 300 &&
- Person::players[k]->lastattack != spinkickanim &&
- Person::players[i]->skeleton.free) &&
- (!Person::players[i]->dead || musictype != stream_fighttheme)) {
- Person::players[k]->animTarget = dropkickanim;
- for (int j = 0; j < terrain.numdecals; j++) {
- if ((terrain.decaltype[j] == blooddecal || terrain.decaltype[j] == blooddecalslow) &&
- terrain.decalalivetime[j] < 2) {
- terrain.DeleteDecal(j);
- }
- }
- for (int l = 0; l < objects.numobjects; l++) {
- if (objects.model[l].type == decalstype)
- for (int j = 0; j < objects.model[l].numdecals; j++) {
- if ((objects.model[l].decaltype[j] == blooddecal ||
- objects.model[l].decaltype[j] == blooddecalslow) &&
- objects.model[l].decalalivetime[j] < 2) {
- objects.model[l].DeleteDecal(j);
- }
- }
- }
- }
- }
- if (animation[Person::players[k]->animTarget].attack == normalattack &&
- Person::players[k]->victim == Person::players[i] &&
- (!Person::players[i]->skeleton.free ||
- Person::players[k]->animTarget == killanim ||
- Person::players[k]->animTarget == crouchstabanim ||
- Person::players[k]->animTarget == swordgroundstabanim ||
- Person::players[k]->animTarget == staffgroundsmashanim ||
- Person::players[k]->animTarget == dropkickanim)) {
- oldattackkey = 1;
- Person::players[k]->frameTarget = 0;
- Person::players[k]->target = 0;
-
- XYZ targetpoint = Person::players[i]->coords;
- if (Person::players[k]->animTarget == crouchstabanim ||
- Person::players[k]->animTarget == swordgroundstabanim ||
- Person::players[k]->animTarget == staffgroundsmashanim) {
- targetpoint += (Person::players[i]->jointPos(abdomen) +
- Person::players[i]->jointPos(neck)) / 2 *
- Person::players[i]->scale;
- }
- Person::players[k]->targetyaw = roughDirectionTo(Person::players[k]->coords, targetpoint);
- Person::players[k]->targettilt2 = pitchTo(Person::players[k]->coords, targetpoint);
-
- if (Person::players[k]->animTarget == crouchstabanim || Person::players[k]->animTarget == swordgroundstabanim) {
- Person::players[k]->targetyaw += (float)(abs(Random() % 100) - 50) / 4;
- }
-
- if (Person::players[k]->animTarget == staffgroundsmashanim)
- Person::players[k]->targettilt2 += 10;
-
- Person::players[k]->lastattack3 = Person::players[k]->lastattack2;
- Person::players[k]->lastattack2 = Person::players[k]->lastattack;
- Person::players[k]->lastattack = Person::players[k]->animTarget;
-
- if (Person::players[k]->animTarget == swordgroundstabanim) {
- Person::players[k]->targetyaw += 30;
- }
- }
- }
- }
- if (!Person::players[k]->hasvictim) {
- //find victim
- for (unsigned i = 0; i < Person::players.size(); i++) {
- if (i == k || !(i == 0 || k == 0))
- continue;
- if (!Person::players[i]->skeleton.free) {
- if (Person::players[k]->hasvictim) {
- if (distsq(&Person::players[k]->coords, &Person::players[i]->coords) <
- distsq(&Person::players[k]->coords, &Person::players[k]->victim->coords))
- Person::players[k]->victim = Person::players[i];
- } else {
- Person::players[k]->victim = Person::players[i];
- Person::players[k]->hasvictim = 1;
- }
- }
- }
- }
- if (Person::players[k]->aitype == playercontrolled)
- //rabbit kick
- if (Person::players[k]->attackkeydown &&
- Person::players[k]->isRun() &&
- Person::players[k]->wasRun() &&
- ((Person::players[k]->hasvictim &&
- distsq(&Person::players[k]->coords, &Person::players[k]->victim->coords) < 12 * sq(Person::players[k]->scale * 5) &&
- distsq(&Person::players[k]->coords, &Person::players[k]->victim->coords) > 7 * sq(Person::players[k]->scale * 5) &&
- !Person::players[k]->victim->skeleton.free &&
- Person::players[k]->victim->animTarget != getupfrombackanim &&
- Person::players[k]->victim->animTarget != getupfromfrontanim &&
- animation[Person::players[k]->victim->animTarget].height != lowheight &&
- Person::players[k]->aitype != playercontrolled && //wat???
- normaldotproduct(Person::players[k]->facing, Person::players[k]->victim->coords - Person::players[k]->coords) > 0 &&
- Person::players[k]->rabbitkickenabled) ||
- Person::players[k]->jumpkeydown)) {
- oldattackkey = 1;
- Person::players[k]->setAnimation(rabbitkickanim);
- }
- //update counts
- if (animation[Person::players[k]->animTarget].attack && k == 0) {
- numattacks++;
- switch (attackweapon) {
- case 0:
- numunarmedattack++;
- break;
- case knife:
- numknifeattack++;
- break;
- case sword:
- numswordattack++;
- break;
- case staff:
- numstaffattack++;
- break;
- }
- }
- }
- }
- }
- }
-}
-
-void doPlayerCollisions()
-{
- static XYZ rotatetarget;
- static float collisionradius;
- if (Person::players.size() > 1)
- for (unsigned k = 0; k < Person::players.size(); k++)
- for (unsigned i = k + 1; i < Person::players.size(); i++) {
- //neither player is part of a reversal
- if ((animation[Person::players[i]->animTarget].attack != reversed &&
- animation[Person::players[i]->animTarget].attack != reversal &&
- animation[Person::players[k]->animTarget].attack != reversed &&
- animation[Person::players[k]->animTarget].attack != reversal) || (i != 0 && k != 0))
- if ((animation[Person::players[i]->animCurrent].attack != reversed &&
- animation[Person::players[i]->animCurrent].attack != reversal &&
- animation[Person::players[k]->animCurrent].attack != reversed &&
- animation[Person::players[k]->animCurrent].attack != reversal) || (i != 0 && k != 0))
- //neither is sleeping
- if (Person::players[i]->howactive <= typesleeping && Person::players[k]->howactive <= typesleeping)
- if (Person::players[i]->howactive != typesittingwall && Person::players[k]->howactive != typesittingwall)
- //in same patch, neither is climbing
- if (Person::players[i]->whichpatchx == Person::players[k]->whichpatchx &&
- Person::players[i]->whichpatchz == Person::players[k]->whichpatchz &&
- Person::players[k]->skeleton.oldfree == Person::players[k]->skeleton.free &&
- Person::players[i]->skeleton.oldfree == Person::players[i]->skeleton.free &&
- Person::players[i]->animTarget != climbanim &&
- Person::players[i]->animTarget != hanganim &&
- Person::players[k]->animTarget != climbanim &&
- Person::players[k]->animTarget != hanganim)
- //players are close (bounding box test)
- if (Person::players[i]->coords.y > Person::players[k]->coords.y - 3)
- if (Person::players[i]->coords.y < Person::players[k]->coords.y + 3)
- if (Person::players[i]->coords.x > Person::players[k]->coords.x - 3)
- if (Person::players[i]->coords.x < Person::players[k]->coords.x + 3)
- if (Person::players[i]->coords.z > Person::players[k]->coords.z - 3)
- if (Person::players[i]->coords.z < Person::players[k]->coords.z + 3) {
- //spread fire from player to player
- if (distsq(&Person::players[i]->coords, &Person::players[k]->coords)
- < 3 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5)) {
- if (Person::players[i]->onfire || Person::players[k]->onfire) {
- if (!Person::players[i]->onfire)
- Person::players[i]->CatchFire();
- if (!Person::players[k]->onfire)
- Person::players[k]->CatchFire();
- }
- }
-
- XYZ tempcoords1 = Person::players[i]->coords;
- XYZ tempcoords2 = Person::players[k]->coords;
- if (!Person::players[i]->skeleton.oldfree)
- tempcoords1.y += Person::players[i]->jointPos(abdomen).y * Person::players[i]->scale;
- if (!Person::players[k]->skeleton.oldfree)
- tempcoords2.y += Person::players[k]->jointPos(abdomen).y * Person::players[k]->scale;
- collisionradius = 1.2 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5);
- if (Person::players[0]->hasvictim)
- if (Person::players[0]->animTarget == rabbitkickanim && (k == 0 || i == 0) && !Person::players[0]->victim->skeleton.free)
- collisionradius = 3;
- if ((!Person::players[i]->skeleton.oldfree || !Person::players[k]->skeleton.oldfree) &&
- (distsq(&tempcoords1, &tempcoords2) < collisionradius ||
- distsq(&Person::players[i]->coords, &Person::players[k]->coords) < collisionradius)) {
- //jump down on a dead body
- if (k == 0 || i == 0) {
- int l = i ? i : k;
- if (Person::players[0]->animTarget == jumpdownanim &&
- !Person::players[0]->skeleton.oldfree &&
- !Person::players[0]->skeleton.free &&
- Person::players[l]->skeleton.oldfree &&
- Person::players[l]->skeleton.free &&
- Person::players[l]->dead &&
- Person::players[0]->lastcollide <= 0 &&
- fabs(Person::players[l]->coords.y - Person::players[0]->coords.y) < .2 &&
- distsq(&Person::players[0]->coords, &Person::players[l]->coords) < .7 * sq((Person::players[l]->scale + Person::players[0]->scale) * 2.5)) {
- Person::players[0]->coords.y = Person::players[l]->coords.y;
- Person::players[l]->velocity = Person::players[0]->velocity;
- Person::players[l]->skeleton.free = 0;
- Person::players[l]->yaw = 0;
- Person::players[l]->RagDoll(0);
- Person::players[l]->DoDamage(20);
- camerashake += .3;
- Person::players[l]->skeleton.longdead = 0;
- Person::players[0]->lastcollide = 1;
- }
- }
-
- if ( (Person::players[i]->skeleton.oldfree == 1 && findLengthfast(&Person::players[i]->velocity) > 1) ||
- (Person::players[k]->skeleton.oldfree == 1 && findLengthfast(&Person::players[k]->velocity) > 1) ||
- (Person::players[i]->skeleton.oldfree == 0 && Person::players[k]->skeleton.oldfree == 0)) {
- rotatetarget = Person::players[k]->velocity - Person::players[i]->velocity;
- if ((Person::players[i]->animTarget != getupfrombackanim && Person::players[i]->animTarget != getupfromfrontanim ||
- Person::players[i]->skeleton.free) &&
- (Person::players[k]->animTarget != getupfrombackanim && Person::players[k]->animTarget != getupfromfrontanim ||
- Person::players[k]->skeleton.free))
- if ((((k != 0 && findLengthfast(&rotatetarget) > 150 ||
- k == 0 && findLengthfast(&rotatetarget) > 50 && Person::players[0]->rabbitkickragdoll) &&
- normaldotproduct(rotatetarget, Person::players[k]->coords - Person::players[i]->coords) > 0) &&
- (k == 0 ||
- k != 0 && Person::players[i]->skeleton.oldfree == 1 && animation[Person::players[k]->animCurrent].attack == neutral ||
- /*i!=0&&*/Person::players[k]->skeleton.oldfree == 1 && animation[Person::players[i]->animCurrent].attack == neutral)) ||
- (Person::players[i]->animTarget == jumpupanim || Person::players[i]->animTarget == jumpdownanim || Person::players[i]->isFlip()) &&
- (Person::players[k]->animTarget == jumpupanim || Person::players[k]->animTarget == jumpdownanim || Person::players[k]->isFlip()) &&
- k == 0 && !Person::players[i]->skeleton.oldfree && !Person::players[k]->skeleton.oldfree) {
- //If hit by body
- if ( (i != 0 || Person::players[i]->skeleton.free) &&
- (k != 0 || Person::players[k]->skeleton.free) ||
- (animation[Person::players[i]->animTarget].height == highheight &&
- animation[Person::players[k]->animTarget].height == highheight)) {
- if (tutoriallevel != 1) {
- emit_sound_at(heavyimpactsound, Person::players[i]->coords);
- }
-
- Person::players[i]->RagDoll(0);
- if (Person::players[i]->damage > Person::players[i]->damagetolerance - findLengthfast(&rotatetarget) / 4 && !Person::players[i]->dead) {
- award_bonus(0, aimbonus);
- }
- Person::players[i]->DoDamage(findLengthfast(&rotatetarget) / 4);
- Person::players[k]->RagDoll(0);
- if (Person::players[k]->damage > Person::players[k]->damagetolerance - findLengthfast(&rotatetarget) / 4 && !Person::players[k]->dead) {
- award_bonus(0, aimbonus); // Huh, again?
- }
- Person::players[k]->DoDamage(findLengthfast(&rotatetarget) / 4);
-
- for (int j = 0; j < Person::players[i]->skeleton.num_joints; j++) {
- Person::players[i]->skeleton.joints[j].velocity = Person::players[i]->skeleton.joints[j].velocity / 5 + Person::players[k]->velocity;
- }
- for (int j = 0; j < Person::players[k]->skeleton.num_joints; j++) {
- Person::players[k]->skeleton.joints[j].velocity = Person::players[k]->skeleton.joints[j].velocity / 5 + Person::players[i]->velocity;
- }
-
- }
- }
- if ( (animation[Person::players[i]->animTarget].attack == neutral ||
- animation[Person::players[i]->animTarget].attack == normalattack) &&
- (animation[Person::players[k]->animTarget].attack == neutral ||
- animation[Person::players[k]->animTarget].attack == normalattack)) {
- //If bumped
- if (Person::players[i]->skeleton.oldfree == 0 && Person::players[k]->skeleton.oldfree == 0) {
- if (distsq(&Person::players[k]->coords, &Person::players[i]->coords) < .5 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5)) {
- rotatetarget = Person::players[k]->coords - Person::players[i]->coords;
- Normalise(&rotatetarget);
- Person::players[k]->coords = (Person::players[k]->coords + Person::players[i]->coords) / 2;
- Person::players[i]->coords = Person::players[k]->coords - rotatetarget * fast_sqrt(.6) / 2
- * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5);
- Person::players[k]->coords += rotatetarget * fast_sqrt(.6) / 2 * sq((Person::players[i]->scale + Person::players[k]->scale) * 2.5);
- if (Person::players[k]->howactive == typeactive || hostile)
- if (Person::players[k]->isIdle()) {
- if (Person::players[k]->howactive < typesleeping)
- Person::players[k]->setAnimation(Person::players[k]->getStop());
- else if (Person::players[k]->howactive == typesleeping)
- Person::players[k]->setAnimation(getupfromfrontanim);
- if (!editorenabled)
- Person::players[k]->howactive = typeactive;
- }
- if (Person::players[i]->howactive == typeactive || hostile)
- if (Person::players[i]->isIdle()) {
- if (Person::players[i]->howactive < typesleeping)
- Person::players[i]->setAnimation(Person::players[k]->getStop());
- else
- Person::players[i]->setAnimation(getupfromfrontanim);
- if (!editorenabled)
- Person::players[i]->howactive = typeactive;
- }
- }
- //jump down on player
- if (hostile) {
- if (k == 0 && i != 0 && Person::players[k]->animTarget == jumpdownanim &&
- !Person::players[i]->isCrouch() &&
- Person::players[i]->animTarget != rollanim &&
- !Person::players[k]->skeleton.oldfree && !
- Person::players[k]->skeleton.free &&
- Person::players[k]->lastcollide <= 0 &&
- Person::players[k]->velocity.y < -10) {
- Person::players[i]->velocity = Person::players[k]->velocity;
- Person::players[k]->velocity = Person::players[k]->velocity * -.5;
- Person::players[k]->velocity.y = Person::players[i]->velocity.y;
- Person::players[i]->DoDamage(20);
- Person::players[i]->RagDoll(0);
- Person::players[k]->lastcollide = 1;
- award_bonus(k, AboveBonus);
- }
- if (i == 0 && k != 0 && Person::players[i]->animTarget == jumpdownanim &&
- !Person::players[k]->isCrouch() &&
- Person::players[k]->animTarget != rollanim &&
- !Person::players[i]->skeleton.oldfree &&
- !Person::players[i]->skeleton.free &&
- Person::players[i]->lastcollide <= 0 &&
- Person::players[i]->velocity.y < -10) {
- Person::players[k]->velocity = Person::players[i]->velocity;
- Person::players[i]->velocity = Person::players[i]->velocity * -.3;
- Person::players[i]->velocity.y = Person::players[k]->velocity.y;
- Person::players[k]->DoDamage(20);
- Person::players[k]->RagDoll(0);
- Person::players[i]->lastcollide = 1;
- award_bonus(i, AboveBonus);
- }
- }
- }
- }
- }
- Person::players[i]->CheckKick();
- Person::players[k]->CheckKick();
- }
- }
- }
-}
-
-void doAI(unsigned i)
-{
- static bool connected;
- if (Person::players[i]->aitype != playercontrolled && indialogue == -1) {
- Person::players[i]->jumpclimb = 0;
- //disable movement in editor
- if (editorenabled)
- Person::players[i]->stunned = 1;
-
- Person::players[i]->pause = 0;
- if (distsqflat(&Person::players[0]->coords, &Person::players[i]->coords) < 30 &&
- Person::players[0]->coords.y > Person::players[i]->coords.y + 2 &&
- !Person::players[0]->onterrain)
- Person::players[i]->pause = 1;
-
- //pathfinding
- if (Person::players[i]->aitype == pathfindtype) {
- if (Person::players[i]->finalpathfindpoint == -1) {
- float closestdistance;
- float tempdist;
- int closest;
- XYZ colpoint;
- closest = -1;
- closestdistance = -1;
- for (int j = 0; j < numpathpoints; j++)
- if (closest == -1 || distsq(&Person::players[i]->finalfinaltarget, &pathpoint[j]) < closestdistance) {
- closestdistance = distsq(&Person::players[i]->finalfinaltarget, &pathpoint[j]);
- closest = j;
- Person::players[i]->finaltarget = pathpoint[j];
- }
- Person::players[i]->finalpathfindpoint = closest;
- for (int j = 0; j < numpathpoints; j++)
- for (int k = 0; k < numpathpointconnect[j]; k++) {
- DistancePointLine(&Person::players[i]->finalfinaltarget, &pathpoint[j], &pathpoint[pathpointconnect[j][k]], &tempdist, &colpoint );
- if (sq(tempdist) < closestdistance)
- if (findDistance(&colpoint, &pathpoint[j]) + findDistance(&colpoint, &pathpoint[pathpointconnect[j][k]]) <
- findDistance(&pathpoint[j], &pathpoint[pathpointconnect[j][k]]) + .1) {
- closestdistance = sq(tempdist);
- closest = j;
- Person::players[i]->finaltarget = colpoint;
- }
- }
- Person::players[i]->finalpathfindpoint = closest;
-
- }
- if (Person::players[i]->targetpathfindpoint == -1) {
- float closestdistance;
- float tempdist;
- int closest;
- XYZ colpoint;
- closest = -1;
- closestdistance = -1;
- if (Person::players[i]->lastpathfindpoint == -1) {
- for (int j = 0; j < numpathpoints; j++) {
- if (j != Person::players[i]->lastpathfindpoint)
- if (closest == -1 || (distsq(&Person::players[i]->coords, &pathpoint[j]) < closestdistance)) {
- closestdistance = distsq(&Person::players[i]->coords, &pathpoint[j]);
- closest = j;
- }
- }
- Person::players[i]->targetpathfindpoint = closest;
- for (int j = 0; j < numpathpoints; j++)
- if (j != Person::players[i]->lastpathfindpoint)
- for (int k = 0; k < numpathpointconnect[j]; k++) {
- DistancePointLine(&Person::players[i]->coords, &pathpoint[j], &pathpoint[pathpointconnect[j][k]], &tempdist, &colpoint );
- if (sq(tempdist) < closestdistance) {
- if (findDistance(&colpoint, &pathpoint[j]) + findDistance(&colpoint, &pathpoint[pathpointconnect[j][k]]) <
- findDistance(&pathpoint[j], &pathpoint[pathpointconnect[j][k]]) + .1) {
- closestdistance = sq(tempdist);
- closest = j;