X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FGameInitDispose.cpp;h=a8d3ce82c93ceda305dbce7d70100694c00b1a6d;hb=88891f52b571983a2f7407a39bed6eb6269af708;hp=935b69d0541af59df7623f0606b74620a451f611;hpb=ff29f47f799d99cec7c2a6aa2cf818da2b931fc5;p=lugaru.git diff --git a/Source/GameInitDispose.cpp b/Source/GameInitDispose.cpp index 935b69d..a8d3ce8 100644 --- a/Source/GameInitDispose.cpp +++ b/Source/GameInitDispose.cpp @@ -18,21 +18,21 @@ You should have received a copy of the GNU General Public License along with Lugaru. If not, see . */ -#include "Game.h" -#include "openal_wrapper.h" -#include "Animation.h" -#include "Texture.h" +#include "Game.hpp" + +#include "Animation/Animation.hpp" +#include "Audio/openal_wrapper.hpp" +#include "Graphic/Texture.hpp" +#include "Menu/Menu.hpp" +#include "Utils/Folders.hpp" extern float screenwidth, screenheight; extern float viewdistance; extern XYZ viewer; -extern XYZ lightlocation; extern float fadestart; extern float texscale; extern float gravity; extern Light light; -extern Skeleton testskeleton; -extern int numsounds; extern Terrain terrain; extern int kTextureSize; extern float texdetail; @@ -52,33 +52,15 @@ extern float multiplier; extern int netdatanew; extern float mapinfo; extern bool stillloading; -extern short vRefNum; -extern long dirID; extern int mainmenu; extern bool visibleloading; extern float flashamount, flashr, flashg, flashb; extern int flashdelay; extern int whichjointstartarray[26]; extern int whichjointendarray[26]; -extern int difficulty; extern float slomospeed; extern bool gamestarted; -extern int numdialogues; -extern int numdialogueboxes[20]; -extern int dialoguetype[20]; -extern int dialogueboxlocation[20][20]; -extern float dialogueboxcolor[20][20][3]; -extern int dialogueboxsound[20][20]; -extern char dialoguetext[20][20][128]; -extern char dialoguename[20][20][64]; -extern XYZ dialoguecamera[20][20]; -extern float dialoguecamerayaw[20][20]; -extern float dialoguecamerapitch[20][20]; -extern int indialogue; -extern int whichdialogue; -extern float dialoguetime; - extern float accountcampaignhighscore[10]; extern float accountcampaignfasttime[10]; extern float accountcampaignscore[10]; @@ -97,11 +79,11 @@ void Dispose() LOGFUNC; if (Game::endgame == 2) { - Game::accountactive->endGame(); + Account::active().endGame(); Game::endgame = 0; } - Account::saveFile(":Data:Users", Game::accountactive); + Account::saveFile(Folders::getUserSavePath()); //textures.clear(); @@ -153,7 +135,7 @@ void Game::deleteGame() -void LoadSave(const char *fileName, GLuint *textureid, bool mipmap, GLubyte *array, int *skinsize) +void LoadSave(const std::string& fileName, GLuint *textureid, bool mipmap, GLubyte *array, int *skinsize) { LOGFUNC; @@ -165,7 +147,10 @@ void LoadSave(const char *fileName, GLuint *textureid, bool mipmap, GLubyte *arr //Load Image ImageRec texture; - load_image(ConvertFileName(fileName), texture); + if (!load_image(Folders::getResourcePath(fileName).c_str(), texture)) { + texdetail = temptexdetail; + return; + } texdetail = temptexdetail; int bytesPerPixel = texture.bpp / 8; @@ -473,7 +458,7 @@ void Game::InitGame() numchallengelevels = 14; - accountactive = Account::loadFile(":Data:Users"); + Account::loadFile(Folders::getUserSavePath()); whichjointstartarray[0] = righthip; whichjointendarray[0] = rightfoot; @@ -559,7 +544,7 @@ void Game::InitGame() int temptexdetail = texdetail; texdetail = 1; - text->LoadFontTexture(":Data:Textures:Font.png"); + text->LoadFontTexture("Textures/Font.png"); text->BuildFont(); texdetail = temptexdetail; @@ -611,25 +596,23 @@ void Game::InitGame() if (musictoggle) emit_stream_np(stream_menutheme); - cursortexture.load(":Data:Textures:Cursor.png", 0, 1); + cursortexture.load("Textures/Cursor.png", 0); - Mapcircletexture.load(":Data:Textures:MapCircle.png", 0, 1); - Mapboxtexture.load(":Data:Textures:MapBox.png", 0, 1); - Maparrowtexture.load(":Data:Textures:MapArrow.png", 0, 1); + Mapcircletexture.load("Textures/MapCircle.png", 0); + Mapboxtexture.load("Textures/MapBox.png", 0); + Maparrowtexture.load("Textures/MapArrow.png", 0); temptexdetail = texdetail; if (texdetail > 2) texdetail = 2; - Mainmenuitems[0].load(":Data:Textures:Lugaru.png", 0, 0); - Mainmenuitems[1].load(":Data:Textures:Newgame.png", 0, 0); - Mainmenuitems[2].load(":Data:Textures:Options.png", 0, 0); - Mainmenuitems[3].load(":Data:Textures:Quit.png", 0, 0); - Mainmenuitems[4].load(":Data:Textures:Eyelid.png", 0, 1); - Mainmenuitems[5].load(":Data:Textures:Resume.png", 0, 0); - Mainmenuitems[6].load(":Data:Textures:Endgame.png", 0, 0); - - //LoadTexture(":Data:Textures:Eye.jpg",&Mainmenuitems[5],0,1); - //~ LoadTexture(":Data:Textures:World.png",&Mainmenuitems[7],0,0); // LoadCampaign will take care of that + Mainmenuitems[0].load("Textures/Lugaru.png", 0); + Mainmenuitems[1].load("Textures/NewGame.png", 0); + Mainmenuitems[2].load("Textures/Options.png", 0); + Mainmenuitems[3].load("Textures/Quit.png", 0); + Mainmenuitems[4].load("Textures/Eyelid.png", 0); + Mainmenuitems[5].load("Textures/Resume.png", 0); + Mainmenuitems[6].load("Textures/EndGame.png", 0); + texdetail = temptexdetail; FadeLoadingScreen(95); @@ -645,7 +628,9 @@ void Game::InitGame() newscreenwidth = screenwidth; newscreenheight = screenheight; - LoadMenu(); + Menu::Load(); + + Animation::loadAll(); } @@ -666,12 +651,11 @@ void Game::LoadScreenTexture() glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, 0, kTextureSize, kTextureSize, 0); } -//TODO: move LoadStuff() closer to GameTick.cpp to get rid of various vars shared in Game.h +//TODO: move LoadStuff() closer to GameTick.cpp to get rid of various vars shared in Game.hpp void Game::LoadStuff() { static float temptexdetail; static float viewdistdetail; - static int i, j; float megascale = 1; LOGFUNC; @@ -684,52 +668,50 @@ void Game::LoadStuff() p->skeleton.drawmodel.textureptr.destroy(); } - i = abs(Random() % 4); visibleloading = 0; //don't use loadscreentexture yet - loadscreentexture.load(":Data:Textures:fire.jpg", 1, 0); + loadscreentexture.load("Textures/Fire.jpg", 1); visibleloading = 1; temptexdetail = texdetail; texdetail = 1; - text->LoadFontTexture(":Data:Textures:Font.png"); + text->LoadFontTexture("Textures/Font.png"); text->BuildFont(); texdetail = temptexdetail; - numsounds = 71; - viewdistdetail = 2; viewdistance = 50 * megascale * viewdistdetail; if (detail == 2) { texdetail = 1; - } - if (detail == 1) { + kTextureSize = 1024; + } else if (detail == 1) { texdetail = 2; - } - if (detail == 0) { + kTextureSize = 512; + } else { texdetail = 4; + kTextureSize = 256; } realtexdetail = texdetail; LOG("Loading weapon data..."); - Weapon::knifetextureptr.load(":Data:Textures:knife.png", 0, 1); - Weapon::bloodknifetextureptr.load(":Data:Textures:bloodknife.png", 0, 1); - Weapon::lightbloodknifetextureptr.load(":Data:Textures:lightbloodknife.png", 0, 1); - Weapon::swordtextureptr.load(":Data:Textures:sword.jpg", 1, 0); - Weapon::bloodswordtextureptr.load(":Data:Textures:Swordblood.jpg", 1, 0); - Weapon::lightbloodswordtextureptr.load(":Data:Textures:Swordbloodlight.jpg", 1, 0); - Weapon::stafftextureptr.load(":Data:Textures:Staff.jpg", 1, 0); + Weapon::knifetextureptr.load("Textures/Knife.png", 0); + Weapon::bloodknifetextureptr.load("Textures/BloodKnife.png", 0); + Weapon::lightbloodknifetextureptr.load("Textures/BloodKnifeLight.png", 0); + Weapon::swordtextureptr.load("Textures/Sword.jpg", 1); + Weapon::bloodswordtextureptr.load("Textures/SwordBlood.jpg", 1); + Weapon::lightbloodswordtextureptr.load("Textures/SwordBloodLight.jpg", 1); + Weapon::stafftextureptr.load("Textures/Staff.jpg", 1); - Weapon::throwingknifemodel.load((char *)":Data:Models:throwingknife.solid", 1); + Weapon::throwingknifemodel.load("Models/ThrowingKnife.solid", 1); Weapon::throwingknifemodel.Scale(.001, .001, .001); Weapon::throwingknifemodel.Rotate(90, 0, 0); Weapon::throwingknifemodel.Rotate(0, 90, 0); Weapon::throwingknifemodel.flat = 0; Weapon::throwingknifemodel.CalculateNormals(1); - Weapon::swordmodel.load((char *)":Data:Models:sword.solid", 1); + Weapon::swordmodel.load("Models/Sword.solid", 1); Weapon::swordmodel.Scale(.001, .001, .001); Weapon::swordmodel.Rotate(90, 0, 0); Weapon::swordmodel.Rotate(0, 90, 0); @@ -737,7 +719,7 @@ void Game::LoadStuff() Weapon::swordmodel.flat = 1; Weapon::swordmodel.CalculateNormals(1); - Weapon::staffmodel.load((char *)":Data:Models:staff.solid", 1); + Weapon::staffmodel.load("Models/Staff.solid", 1); Weapon::staffmodel.Scale(.005, .005, .005); Weapon::staffmodel.Rotate(90, 0, 0); Weapon::staffmodel.Rotate(0, 90, 0); @@ -745,28 +727,28 @@ void Game::LoadStuff() Weapon::staffmodel.flat = 1; Weapon::staffmodel.CalculateNormals(1); - terrain.shadowtexture.load(":Data:Textures:shadow.png", 0, 1); - terrain.bloodtexture.load(":Data:Textures:blood.png", 0, 1); - terrain.breaktexture.load(":Data:Textures:break.png", 0, 1); - terrain.bloodtexture2.load(":Data:Textures:blood.png", 0, 1); + terrain.shadowtexture.load("Textures/Shadow.png", 0); + terrain.bloodtexture.load("Textures/Blood.png", 0); + terrain.breaktexture.load("Textures/Break.png", 0); + terrain.bloodtexture2.load("Textures/Blood.png", 0); - terrain.footprinttexture.load(":Data:Textures:footprint.png", 0, 1); - terrain.bodyprinttexture.load(":Data:Textures:bodyprint.png", 0, 1); - hawktexture.load(":Data:Textures:hawk.png", 0, 1); + terrain.footprinttexture.load("Textures/Footprint.png", 0); + terrain.bodyprinttexture.load("Textures/Bodyprint.png", 0); + hawktexture.load("Textures/Hawk.png", 0); - Sprite::cloudtexture.load(":Data:Textures:cloud.png", 1, 1); - Sprite::cloudimpacttexture.load(":Data:Textures:cloudimpact.png", 1, 1); - Sprite::bloodtexture.load(":Data:Textures:bloodparticle.png", 1, 1); - Sprite::snowflaketexture.load(":Data:Textures:snowflake.png", 1, 1); - Sprite::flametexture.load(":Data:Textures:flame.png", 1, 1); - Sprite::bloodflametexture.load(":Data:Textures:bloodflame.png", 1, 1); - Sprite::smoketexture.load(":Data:Textures:smoke.png", 1, 1); - Sprite::shinetexture.load(":Data:Textures:shine.png", 1, 0); - Sprite::splintertexture.load(":Data:Textures:splinter.png", 1, 1); - Sprite::leaftexture.load(":Data:Textures:leaf.png", 1, 1); - Sprite::toothtexture.load(":Data:Textures:tooth.png", 1, 1); + Sprite::cloudtexture.load("Textures/Cloud.png", 1); + Sprite::cloudimpacttexture.load("Textures/CloudImpact.png", 1); + Sprite::bloodtexture.load("Textures/BloodParticle.png", 1); + Sprite::snowflaketexture.load("Textures/SnowFlake.png", 1); + Sprite::flametexture.load("Textures/Flame.png", 1); + Sprite::bloodflametexture.load("Textures/BloodFlame.png", 1); + Sprite::smoketexture.load("Textures/Smoke.png", 1); + Sprite::shinetexture.load("Textures/Shine.png", 1); + Sprite::splintertexture.load("Textures/Splinter.png", 1); + Sprite::leaftexture.load("Textures/Leaf.png", 1); + Sprite::toothtexture.load("Textures/Tooth.png", 1); yaw = 0; pitch = 0; @@ -774,14 +756,6 @@ void Game::LoadStuff() viewer = 0; - - if (detail) - kTextureSize = 1024; - if (detail == 1) - kTextureSize = 512; - if (detail == 0) - kTextureSize = 256; - //Set up distant light light.color[0] = .95; light.color[1] = .95; @@ -808,7 +782,7 @@ void Game::LoadStuff() viewer.x = terrain.size / 2 * terrain.scale; viewer.z = terrain.size / 2 * terrain.scale; - hawk.load((char *)":Data:Models:hawk.solid", 1); + hawk.load("Models/Hawk.solid", 1); hawk.Scale(.03, .03, .03); hawk.Rotate(90, 1, 1); hawk.CalculateNormals(0); @@ -817,20 +791,20 @@ void Game::LoadStuff() hawkcoords.z = terrain.size / 2 * terrain.scale - 5 - 7; hawkcoords.y = terrain.getHeight(hawkcoords.x, hawkcoords.z) + 25; - eye.load((char *)":Data:Models:eye.solid", 1); + eye.load("Models/Eye.solid", 1); eye.Scale(.03, .03, .03); eye.CalculateNormals(0); - cornea.load((char *)":Data:Models:cornea.solid", 1); + cornea.load("Models/Cornea.solid", 1); cornea.Scale(.03, .03, .03); cornea.CalculateNormals(0); - iris.load((char *)":Data:Models:iris.solid", 1); + iris.load("Models/Iris.solid", 1); iris.Scale(.03, .03, .03); iris.CalculateNormals(0); - LoadSave(":Data:Textures:Bloodfur.png", 0, 1, &bloodText[0], 0); - LoadSave(":Data:Textures:Wolfbloodfur.png", 0, 1, &wolfbloodText[0], 0); + LoadSave("Textures/BloodFur.png", 0, 1, &bloodText[0], 0); + LoadSave("Textures/WolfBloodFur.png", 0, 1, &wolfbloodText[0], 0); oldenvironment = -4; @@ -839,58 +813,59 @@ void Game::LoadStuff() firstload = 0; - loadAllAnimations(); //Fix knife stab, too lazy to do it manually XYZ moveamount; moveamount = 0; moveamount.z = 2; - for (i = 0; i < Person::players[0]->skeleton.num_joints; i++) { - for (j = 0; j < animation[knifesneakattackanim].numframes; j++) { - animation[knifesneakattackanim].position[i][j] += moveamount; + // FIXME - Why this uses skeleton.joints.size() and not Animation::numjoints? (are they equal?) + // It seems skeleton.joints.size() is 0 at this point, so this is useless. + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[knifesneakattackanim].frames.size(); j++) { + Animation::animations[knifesneakattackanim].frames[j].joints[i].position += moveamount; } } LoadingScreen(); - for (i = 0; i < Person::players[0]->skeleton.num_joints; i++) { - for (j = 0; j < animation[knifesneakattackedanim].numframes; j++) { - animation[knifesneakattackedanim].position[i][j] += moveamount; + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[knifesneakattackedanim].frames.size(); j++) { + Animation::animations[knifesneakattackedanim].frames[j].joints[i].position += moveamount; } } LoadingScreen(); - for (i = 0; i < Person::players[0]->skeleton.num_joints; i++) { - animation[dead1anim].position[i][1] = animation[dead1anim].position[i][0]; - animation[dead2anim].position[i][1] = animation[dead2anim].position[i][0]; - animation[dead3anim].position[i][1] = animation[dead3anim].position[i][0]; - animation[dead4anim].position[i][1] = animation[dead4anim].position[i][0]; + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + Animation::animations[dead1anim].frames[1].joints[i].position = Animation::animations[dead1anim].frames[0].joints[i].position; + Animation::animations[dead2anim].frames[1].joints[i].position = Animation::animations[dead2anim].frames[0].joints[i].position; + Animation::animations[dead3anim].frames[1].joints[i].position = Animation::animations[dead3anim].frames[0].joints[i].position; + Animation::animations[dead4anim].frames[1].joints[i].position = Animation::animations[dead4anim].frames[0].joints[i].position; } - animation[dead1anim].speed[0] = 0.001; - animation[dead2anim].speed[0] = 0.001; - animation[dead3anim].speed[0] = 0.001; - animation[dead4anim].speed[0] = 0.001; - - animation[dead1anim].speed[1] = 0.001; - animation[dead2anim].speed[1] = 0.001; - animation[dead3anim].speed[1] = 0.001; - animation[dead4anim].speed[1] = 0.001; - - for (i = 0; i < Person::players[0]->skeleton.num_joints; i++) { - for (j = 0; j < animation[swordsneakattackanim].numframes; j++) { - animation[swordsneakattackanim].position[i][j] += moveamount; + Animation::animations[dead1anim].frames[0].speed = 0.001; + Animation::animations[dead2anim].frames[0].speed = 0.001; + Animation::animations[dead3anim].frames[0].speed = 0.001; + Animation::animations[dead4anim].frames[0].speed = 0.001; + + Animation::animations[dead1anim].frames[1].speed = 0.001; + Animation::animations[dead2anim].frames[1].speed = 0.001; + Animation::animations[dead3anim].frames[1].speed = 0.001; + Animation::animations[dead4anim].frames[1].speed = 0.001; + + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[swordsneakattackanim].frames.size(); j++) { + Animation::animations[swordsneakattackanim].frames[j].joints[i].position += moveamount; } } LoadingScreen(); - for (j = 0; j < animation[swordsneakattackanim].numframes; j++) { - animation[swordsneakattackanim].weapontarget[j] += moveamount; + for (unsigned j = 0; j < Animation::animations[swordsneakattackanim].frames.size(); j++) { + Animation::animations[swordsneakattackanim].frames[j].weapontarget += moveamount; } LoadingScreen(); - for (i = 0; i < Person::players[0]->skeleton.num_joints; i++) { - for (j = 0; j < animation[swordsneakattackedanim].numframes; j++) { - animation[swordsneakattackedanim].position[i][j] += moveamount; + for (unsigned i = 0; i < Person::players[0]->skeleton.joints.size(); i++) { + for (unsigned j = 0; j < Animation::animations[swordsneakattackedanim].frames.size(); j++) { + Animation::animations[swordsneakattackedanim].frames[j].joints[i].position += moveamount; } }