X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FObjects%2FPerson.cpp;h=52be70804463df572a6e7b2ed313da2febeefdc0;hb=032eb3ccf8e2ccc6a150ac2765eb56daef77942e;hp=c055e57b0f49a5a3e24fdb3af0461415d738e9f2;hpb=086b9fc6bc5e16d7f77839bfdadb64ab187cca61;p=lugaru.git diff --git a/Source/Objects/Person.cpp b/Source/Objects/Person.cpp index c055e57..52be708 100644 --- a/Source/Objects/Person.cpp +++ b/Source/Objects/Person.cpp @@ -73,96 +73,6 @@ extern float envsoundlife[30]; extern XYZ windvector; std::vector> Person::players(1, std::shared_ptr(new Person())); -std::vector PersonType::types; - -void PersonType::Load() -{ - types.resize(2); - - /* Wolf */ - types[wolftype].proportions[0] = 1.1; - types[wolftype].proportions[1] = 1.1; - types[wolftype].proportions[2] = 1.1; - types[wolftype].proportions[3] = 1.1; - - types[wolftype].animRun = wolfrunanim; - types[wolftype].animRunning = wolfrunninganim; - types[wolftype].animCrouch = wolfcrouchanim; - types[wolftype].animStop = wolfstopanim; - types[wolftype].animLanding = wolflandanim; - types[wolftype].animLandingHard = wolflandhardanim; - - types[wolftype].soundsAttack[0] = barksound; - types[wolftype].soundsAttack[1] = bark2sound; - types[wolftype].soundsAttack[2] = bark3sound; - types[wolftype].soundsAttack[3] = barkgrowlsound; - types[wolftype].soundsTalk[0] = growlsound; - types[wolftype].soundsTalk[1] = growl2sound; - - types[wolftype].figureFileName = "Skeleton/BasicFigureWolf"; - types[wolftype].lowFigureFileName = "Skeleton/BasicFigureWolfLow"; - types[wolftype].clothesFileName = "Skeleton/RabbitBelt"; - types[wolftype].modelFileNames[0] = "Models/Wolf.solid"; - types[wolftype].modelFileNames[1] = "Models/Wolf2.solid"; - types[wolftype].modelFileNames[2] = "Models/Wolf3.solid"; - types[wolftype].modelFileNames[3] = "Models/Wolf4.solid"; - types[wolftype].modelFileNames[4] = "Models/Wolf5.solid"; - types[wolftype].modelFileNames[5] = "Models/Wolf6.solid"; - types[wolftype].modelFileNames[6] = "Models/Wolf7.solid"; - types[wolftype].lowModelFileName = "Models/WolfLow.solid"; - types[wolftype].modelClothesFileName = "Models/Belt.solid"; - - types[wolftype].skins.resize(3); - types[wolftype].skins[0] = "Textures/Wolf.jpg"; - types[wolftype].skins[1] = "Textures/DarkWolf.jpg"; - types[wolftype].skins[2] = "Textures/SnowWolf.jpg"; - - /* Rabbit */ - types[rabbittype].proportions[0] = 1.2; - types[rabbittype].proportions[1] = 1.05; - types[rabbittype].proportions[2] = 1; - types[rabbittype].proportions[3] = 1.1; - types[rabbittype].proportions[3].y = 1.05; - - types[rabbittype].animRun = runanim; - types[rabbittype].animRunning = rabbitrunninganim; - types[rabbittype].animCrouch = crouchanim; - types[rabbittype].animStop = stopanim; - types[rabbittype].animLanding = landanim; - types[rabbittype].animLandingHard = landhardanim; - - types[rabbittype].soundsAttack[0] = rabbitattacksound; - types[rabbittype].soundsAttack[1] = rabbitattack2sound; - types[rabbittype].soundsAttack[2] = rabbitattack3sound; - types[rabbittype].soundsAttack[3] = rabbitattack4sound; - types[rabbittype].soundsTalk[0] = rabbitchitter; - types[rabbittype].soundsTalk[1] = rabbitchitter2; - - types[rabbittype].figureFileName = "Skeleton/BasicFigure"; - types[rabbittype].lowFigureFileName = "Skeleton/BasicFigureLow"; - types[rabbittype].clothesFileName = "Skeleton/RabbitBelt"; - types[rabbittype].modelFileNames[0] = "Models/Body.solid"; - types[rabbittype].modelFileNames[1] = "Models/Body2.solid"; - types[rabbittype].modelFileNames[2] = "Models/Body3.solid"; - types[rabbittype].modelFileNames[3] = "Models/Body4.solid"; - types[rabbittype].modelFileNames[4] = "Models/Body5.solid"; - types[rabbittype].modelFileNames[5] = "Models/Body6.solid"; - types[rabbittype].modelFileNames[6] = "Models/Body7.solid"; - types[rabbittype].lowModelFileName = "Models/BodyLow.solid"; - types[rabbittype].modelClothesFileName = "Models/Belt.solid"; - - types[rabbittype].skins.resize(10); - types[rabbittype].skins[0] = "Textures/Fur3.jpg"; - types[rabbittype].skins[1] = "Textures/Fur.jpg"; - types[rabbittype].skins[2] = "Textures/Fur2.jpg"; - types[rabbittype].skins[3] = "Textures/Lynx.jpg"; - types[rabbittype].skins[4] = "Textures/Otter.jpg"; - types[rabbittype].skins[5] = "Textures/Opal.jpg"; - types[rabbittype].skins[6] = "Textures/Sable.jpg"; - types[rabbittype].skins[7] = "Textures/Chocolate.jpg"; - types[rabbittype].skins[8] = "Textures/BW2.jpg"; - types[rabbittype].skins[9] = "Textures/WB2.jpg"; -} Person::Person() : whichpatchx(0) @@ -525,10 +435,13 @@ Person::Person(FILE* tfile, int mapvers, unsigned i) loaded = true; + if (creature == wolftype) { + damagetolerance = 300; + } + if (scale < 0) { if (creature == wolftype) { scale = .23; - damagetolerance = 300; } else { scale = .2; } @@ -567,7 +480,12 @@ void Person::setProportions(float head, float body, float arms, float legs) proportions[3] = legs; } -XYZ Person::getProportion(int part) const +float Person::getProportion(int part) const +{ + return proportions[part]; +} + +XYZ Person::getProportionXYZ(int part) const { XYZ prop = PersonType::types[creature].proportions[part] * proportions[part]; if (cellophane) { @@ -676,20 +594,15 @@ void Person::CatchFire() */ int Person::getIdle() { - if (Dialog::inDialog() && (howactive == typeactive) && (creature == rabbittype)) { - return talkidleanim; + if (Dialog::inDialog() && (howactive == typeactive) && PersonType::types[creature].hasAnimTalkIdle()) { + return PersonType::types[creature].animTalkIdle; } if (hasvictim && (victim != this->shared_from_this())) { if ((!victim->dead && victim->aitype != passivetype && victim->aitype != searchtype && aitype != passivetype && aitype != searchtype && victim->id < Person::players.size())) { if ((aitype == playercontrolled && stunned <= 0 && weaponactive == -1) || pause) { - if (creature == rabbittype) { - return fightidleanim; - } - if (creature == wolftype) { - return wolfidle; - } + return PersonType::types[creature].animFightIdle; } if (aitype == playercontrolled && stunned <= 0 && weaponactive != -1) { if (weapons[weaponids[weaponactive]].getType() == knife) { @@ -734,13 +647,7 @@ int Person::getIdle() if (howactive == typedead4) { return dead4anim; } - if (creature == rabbittype) { - return bounceidleanim; - } - if (creature == wolftype) { - return wolfidle; - } - return 0; + return PersonType::types[creature].animBounceIdle; } /* FUNCTION @@ -6608,24 +6515,24 @@ int Person::DrawSkeleton() glMatrixMode(GL_MODELVIEW); glPushMatrix(); if (p1 == abdomen || p2 == abdomen) { - glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportion(1).x, - (v0.y * (1 - morphness) + v1.y * morphness) * getProportion(1).y, - (v0.z * (1 - morphness) + v1.z * morphness) * getProportion(1).z); + glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportionXYZ(1).x, + (v0.y * (1 - morphness) + v1.y * morphness) * getProportionXYZ(1).y, + (v0.z * (1 - morphness) + v1.z * morphness) * getProportionXYZ(1).z); } if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) { - glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportion(2).x, - (v0.y * (1 - morphness) + v1.y * morphness) * getProportion(2).y, - (v0.z * (1 - morphness) + v1.z * morphness) * getProportion(2).z); + glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportionXYZ(2).x, + (v0.y * (1 - morphness) + v1.y * morphness) * getProportionXYZ(2).y, + (v0.z * (1 - morphness) + v1.z * morphness) * getProportionXYZ(2).z); } if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) { - glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportion(3).x, - (v0.y * (1 - morphness) + v1.y * morphness) * getProportion(3).y, - (v0.z * (1 - morphness) + v1.z * morphness) * getProportion(3).z); + glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportionXYZ(3).x, + (v0.y * (1 - morphness) + v1.y * morphness) * getProportionXYZ(3).y, + (v0.z * (1 - morphness) + v1.z * morphness) * getProportionXYZ(3).z); } if (p1 == head || p2 == head) { - glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportion(0).x, - (v0.y * (1 - morphness) + v1.y * morphness) * getProportion(0).y, - (v0.z * (1 - morphness) + v1.z * morphness) * getProportion(0).z); + glTranslatef((v0.x * (1 - morphness) + v1.x * morphness) * getProportionXYZ(0).x, + (v0.y * (1 - morphness) + v1.y * morphness) * getProportionXYZ(0).y, + (v0.z * (1 - morphness) + v1.z * morphness) * getProportionXYZ(0).z); } glGetFloatv(GL_MODELVIEW_MATRIX, M); skeleton.drawmodel.vertex[skeleton.muscles[i].vertices[j]].x = M[12] * scale; @@ -6640,24 +6547,24 @@ int Person::DrawSkeleton() glMatrixMode(GL_MODELVIEW); glPushMatrix(); if (p1 == abdomen || p2 == abdomen) { - glTranslatef(v0.x * getProportion(1).x, - v0.y * getProportion(1).y, - v0.z * getProportion(1).z); + glTranslatef(v0.x * getProportionXYZ(1).x, + v0.y * getProportionXYZ(1).y, + v0.z * getProportionXYZ(1).z); } if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) { - glTranslatef(v0.x * getProportion(2).x, - v0.y * getProportion(2).y, - v0.z * getProportion(2).z); + glTranslatef(v0.x * getProportionXYZ(2).x, + v0.y * getProportionXYZ(2).y, + v0.z * getProportionXYZ(2).z); } if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) { - glTranslatef(v0.x * getProportion(3).x, - v0.y * getProportion(3).y, - v0.z * getProportion(3).z); + glTranslatef(v0.x * getProportionXYZ(3).x, + v0.y * getProportionXYZ(3).y, + v0.z * getProportionXYZ(3).z); } if (p1 == head || p2 == head) { - glTranslatef(v0.x * getProportion(0).x, - v0.y * getProportion(0).y, - v0.z * getProportion(0).z); + glTranslatef(v0.x * getProportionXYZ(0).x, + v0.y * getProportionXYZ(0).y, + v0.z * getProportionXYZ(0).z); } glGetFloatv(GL_MODELVIEW_MATRIX, M); @@ -6696,24 +6603,24 @@ int Person::DrawSkeleton() glMatrixMode(GL_MODELVIEW); glPushMatrix(); if (p1 == abdomen || p2 == abdomen) { - glTranslatef(v0.x * getProportion(1).x, - v0.y * getProportion(1).y, - v0.z * getProportion(1).z); + glTranslatef(v0.x * getProportionXYZ(1).x, + v0.y * getProportionXYZ(1).y, + v0.z * getProportionXYZ(1).z); } if (p1 == lefthand || p1 == righthand || p1 == leftwrist || p1 == rightwrist || p1 == leftelbow || p1 == rightelbow || p2 == leftelbow || p2 == rightelbow) { - glTranslatef(v0.x * getProportion(2).x, - v0.y * getProportion(2).y, - v0.z * getProportion(2).z); + glTranslatef(v0.x * getProportionXYZ(2).x, + v0.y * getProportionXYZ(2).y, + v0.z * getProportionXYZ(2).z); } if (p1 == leftfoot || p1 == rightfoot || p1 == leftankle || p1 == rightankle || p1 == leftknee || p1 == rightknee || p2 == leftknee || p2 == rightknee) { - glTranslatef(v0.x * getProportion(3).x, - v0.y * getProportion(3).y, - v0.z * getProportion(3).z); + glTranslatef(v0.x * getProportionXYZ(3).x, + v0.y * getProportionXYZ(3).y, + v0.z * getProportionXYZ(3).z); } if (p1 == head || p2 == head) { - glTranslatef(v0.x * getProportion(0).x, - v0.y * getProportion(0).y, - v0.z * getProportion(0).z); + glTranslatef(v0.x * getProportionXYZ(0).x, + v0.y * getProportionXYZ(0).y, + v0.z * getProportionXYZ(0).z); } glGetFloatv(GL_MODELVIEW_MATRIX, M); skeleton.drawmodelclothes.vertex[skeleton.muscles[i].verticesclothes[j]].x = M[12] * scale;