From 49b9e0f05a73e56827080a62c1281f4a2e238bfd Mon Sep 17 00:00:00 2001 From: fgenesis Date: Thu, 7 Apr 2022 02:38:39 +0200 Subject: [PATCH] Rework & cleanup CMake project files - Building with CMake for development is now actually sane - Split deps into projects and extra files - Building against external deps should still work but needs testing - Can now build out of the box without further adjustments as long as SDL(2) is found properly - Build Lua in C++ mode (so it can use exceptions instead of setjmp/longjmp) - Unfortunately we need to enable exceptions for this :( - Remove these defines: * AQUARIA_BUILD_SCENEEDITOR (now always on) * AQUARIA_BUILD_CONSOLE (now always on) * BBGE_BUILD_ACHIEVEMENTS_INTERNAL (now always on unless BBGE_BUILD_STEAMWORKS is defined) * BBGE_BUILD_OPENGL_DYNAMIC (now always on, define BBGE_BUILD_OPENGL_STATIC if needed) * BBGE_BUILD_FMOD_OPENAL_BRIDGE (now always on) - BBGE_BUILD_STEAMWORKS is not actually implemented (any volunteers?) - Prepare later removal of SDL & the old vc90 project from the repo. See #74 for extra notes. --- Aquaria/AnimationEditor.cpp | 7 - Aquaria/AquariaCompileConfig.h | 16 - .../{AquariaWin32OSE.ico => AquariaOSE.ico} | Bin Aquaria/Beam.cpp | 18 +- Aquaria/CMakeLists.txt | 82 +++ Aquaria/DSQ.cpp | 34 +- Aquaria/DSQ.h | 8 - Aquaria/Element.cpp | 2 - Aquaria/Entity.cpp | 2 - Aquaria/Game.cpp | 21 +- Aquaria/Game.h | 15 - Aquaria/ParticleEditor.cpp | 6 - Aquaria/PathRender.cpp | 5 +- Aquaria/SceneEditor.cpp | 6 - Aquaria/SceneEditor.h | 4 - Aquaria/ScriptInterface.cpp | 19 +- Aquaria/Spore.cpp | 19 +- Aquaria/StatsAndAchievements.cpp | 18 +- Aquaria/StatsAndAchievements.h | 8 +- Aquaria/Web.cpp | 18 +- Aquaria/WorldMapRender.cpp | 2 - Aquaria/aquaria.rc | 8 +- BBGE/BBGECompileConfig.h | 13 - BBGE/Base.h | 2 - BBGE/CMakeLists.txt | 116 +++ BBGE/Core.cpp | 7 +- BBGE/GLLoad.cpp | 15 +- BBGE/GameKeys.h | 1 - BBGE/Shader.cpp | 2 +- BBGE/SoundManager.cpp | 16 +- BBGE/Strings.cpp | 173 ----- CMakeLists.txt | 672 ++---------------- ExternalLibs/AL/{include => }/al.h | 0 ExternalLibs/AL/{include => }/alc.h | 0 ExternalLibs/CMakeLists.txt | 69 ++ ExternalLibs/FTGL.cmake | 11 + ExternalLibs/FTGL/CMakeLists.txt | 63 ++ ExternalLibs/SDL2/lib/win32/SDL2.lib | Bin 179964 -> 180186 bytes ExternalLibs/SDL2/lib/win32/SDL2main.lib | Bin 4000 -> 4000 bytes ExternalLibs/freetype2.cmake | 79 ++ ExternalLibs/glfont2/glfont2.cpp | 16 +- ExternalLibs/lua-5.1.4/CMakeLists.txt | 64 ++ ExternalLibs/lua51.cmake | 8 + ExternalLibs/oggvorbis.cmake | 88 +++ ExternalLibs/tinyxml2.cmake | 8 + ExternalLibs/ttvfs/CMakeLists.txt | 5 - ExternalLibs/ttvfs_cfileapi/CMakeLists.txt | 5 - ExternalLibs/ttvfs_cfileapi/ttvfs_stdio.cpp | 2 +- ExternalLibs/ttvfs_zip/VFSZipArchiveRef.cpp | 2 +- aquaria.ico | Bin 3774 -> 0 bytes aquaria.rc | 1 - win/vc90/BBGE.vcproj | 16 +- 52 files changed, 719 insertions(+), 1053 deletions(-) rename Aquaria/{AquariaWin32OSE.ico => AquariaOSE.ico} (100%) create mode 100644 Aquaria/CMakeLists.txt delete mode 100644 BBGE/BBGECompileConfig.h create mode 100644 BBGE/CMakeLists.txt delete mode 100644 BBGE/Strings.cpp rename ExternalLibs/AL/{include => }/al.h (100%) rename ExternalLibs/AL/{include => }/alc.h (100%) create mode 100644 ExternalLibs/CMakeLists.txt create mode 100644 ExternalLibs/FTGL.cmake create mode 100644 ExternalLibs/FTGL/CMakeLists.txt create mode 100644 ExternalLibs/freetype2.cmake create mode 100644 ExternalLibs/lua-5.1.4/CMakeLists.txt create mode 100644 ExternalLibs/lua51.cmake create mode 100644 ExternalLibs/oggvorbis.cmake create mode 100644 ExternalLibs/tinyxml2.cmake delete mode 100644 aquaria.ico delete mode 100644 aquaria.rc diff --git a/Aquaria/AnimationEditor.cpp b/Aquaria/AnimationEditor.cpp index c3c8942..f7e9e99 100644 --- a/Aquaria/AnimationEditor.cpp +++ b/Aquaria/AnimationEditor.cpp @@ -28,9 +28,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Game.h" -#ifdef AQUARIA_BUILD_SCENEEDITOR // Through end of file - - int TIMELINE_GRIDSIZE = 10; float TIMELINE_UNIT = 0.1f; float TIMELINE_UNIT_STEP = 0.01f; @@ -1468,7 +1465,3 @@ void AnimationEditor::updateTimelineGrid() os << "Grid: " << TIMELINE_GRIDSIZE; gridsize->setText(os.str()); } - - - -#endif // AQUARIA_BUILD_SCENEEDITOR diff --git a/Aquaria/AquariaCompileConfig.h b/Aquaria/AquariaCompileConfig.h index 63cc3b9..a259d96 100644 --- a/Aquaria/AquariaCompileConfig.h +++ b/Aquaria/AquariaCompileConfig.h @@ -1,22 +1,6 @@ #ifndef AQUARIA_COMPILE_CONFIG_H #define AQUARIA_COMPILE_CONFIG_H -// The settings below are also configurable with CMake. -// Define BBGE_SKIP_CONFIG_HEADERS to use CMake-only configuration. -#ifndef BBGE_SKIP_CONFIG_HEADERS - - - #define AQUARIA_BUILD_CONSOLE 1 - #define AQUARIA_BUILD_SCENEEDITOR 1 - - #define AQUARIA_CUSTOM_BUILD_ID (" Build " __DATE__ " - " __TIME__) - - // If defined, this is shown instead of "Aquaria vx.x.x ..." on the title screen. - //#define AQUARIA_OVERRIDE_VERSION_STRING "Aquaria OSE v1.001" - -#endif - - // Not CMake-configurable defines, change at your own risk diff --git a/Aquaria/AquariaWin32OSE.ico b/Aquaria/AquariaOSE.ico similarity index 100% rename from Aquaria/AquariaWin32OSE.ico rename to Aquaria/AquariaOSE.ico diff --git a/Aquaria/Beam.cpp b/Aquaria/Beam.cpp index 4675fb1..ebca410 100644 --- a/Aquaria/Beam.cpp +++ b/Aquaria/Beam.cpp @@ -71,21 +71,11 @@ void Beam::onEndOfLife() void Beam::killAllBeams() { - std::queuebeamDeleteQueue; - for (Beams::iterator i = beams.begin(); i != beams.end(); i++) - { - beamDeleteQueue.push(*i); - } - Beam *s = 0; - while (!beamDeleteQueue.empty()) - { - s = beamDeleteQueue.front(); - if (s) - { + Beams beamsToDelete = beams; // copy + for (Beams::iterator it = beamsToDelete.begin(); it != beamsToDelete.end(); it++) + if(Beam *s = *it) s->safeKill(); - } - beamDeleteQueue.pop(); - } + beams.clear(); } diff --git a/Aquaria/CMakeLists.txt b/Aquaria/CMakeLists.txt new file mode 100644 index 0000000..9816058 --- /dev/null +++ b/Aquaria/CMakeLists.txt @@ -0,0 +1,82 @@ +# Main game source code for Aquaria, minus engine and other middleware... +SET(AQUARIA_SRCS + AnimationEditor.cpp + AquariaComboBox.cpp + AquariaMenuItem.cpp + AquariaSaveSlot.cpp + Avatar.cpp + Beam.cpp + BitBlotLogo.cpp + CollideEntity.cpp + Continuity.cpp + Credits.cpp + CurrentRender.cpp + Demo.cpp + DSQ.cpp + Element.cpp + Emote.cpp + Entity.cpp + FlockEntity.cpp + Game.cpp + GameStructs.cpp + GameplayVariables.cpp + GasCloud.cpp + GridRender.cpp + Hair.cpp + Ingredient.cpp + InGameMenu.cpp + Intro.cpp + Logo.cpp + Main.cpp + ManaBall.cpp + MiniMapRender.cpp + Mod.cpp + ModSelector.cpp + ModDownloader.cpp + Network.cpp + ParticleEditor.cpp + Path.cpp + PathFinding.cpp + PathRender.cpp + RecipeMenuEntry.cpp + SceneEditor.cpp + SchoolFish.cpp + Scriptable.cpp + ScriptedEntity.cpp + ScriptInterface.cpp + Segmented.cpp + SFXLoops.cpp + Shot.cpp + Spore.cpp + States.cpp + StatsAndAchievements.cpp + SteamRender.cpp + Strand.cpp + StringBank_gen.h + SubtitlePlayer.cpp + ToolTip.cpp + UserSettings.cpp + WaterSurfaceRender.cpp + Web.cpp + WorldMapRender.cpp + WorldMapTiles.cpp +) + +set(EXETYPE) + +IF(WIN32) + SET(EXETYPE WIN32) + SET(AQUARIA_SRCS ${AQUARIA_SRCS} aquaria.rc) +ENDIF() + +ADD_EXECUTABLE(aquaria ${EXETYPE} + ${AQUARIA_SRCS} +) + +target_link_libraries(aquaria BBGE lua51) + +IF(WIN32) + SET(RC_DEFINES "" FORCE) + SET(RC_INCLUDES "" FORCE) + SET(RC_FLAGS "" FORCE) +endif(WIN32) diff --git a/Aquaria/DSQ.cpp b/Aquaria/DSQ.cpp index 79c9b6f..e599bf7 100644 --- a/Aquaria/DSQ.cpp +++ b/Aquaria/DSQ.cpp @@ -133,9 +133,7 @@ static void Linux_CopyTree(const char *src, const char *dst) const size_t saveSlotPageSize = 4; size_t maxPages = 15; -#ifdef AQUARIA_BUILD_CONSOLE const int MAX_CONSOLELINES = 18; -#endif DSQ *dsq = 0; @@ -199,14 +197,10 @@ DSQ::DSQ(const std::string& fileSystem, const std::string& extraDataDir) recentSaveSlot = -1; arialFontData = 0; -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL achievement_text = 0; achievement_box = 0; -#endif -#ifdef AQUARIA_BUILD_CONSOLE console = 0; -#endif cmDebug = 0; saveSlotMode = SSM_NONE; afterEffectManagerLayer = LR_AFTER_EFFECTS; // LR_AFTER_EFFECTS @@ -870,14 +864,10 @@ This build is not yet final, and as such there are a couple things lacking. They addStateInstance(game = new Game); addStateInstance(new GameOver); -#ifdef AQUARIA_BUILD_SCENEEDITOR addStateInstance(new AnimationEditor); -#endif addStateInstance(new Intro2); addStateInstance(new BitBlotLogo); -#ifdef AQUARIA_BUILD_SCENEEDITOR addStateInstance(new ParticleEditor); -#endif addStateInstance(new Credits); addStateInstance(new Intro); addStateInstance(new Nag); @@ -1067,7 +1057,6 @@ This build is not yet final, and as such there are a couple things lacking. They debugLog("done"); -#ifdef AQUARIA_BUILD_CONSOLE debugLog("Creating console"); console = new DebugFont; { @@ -1076,9 +1065,6 @@ This build is not yet final, and as such there are a couple things lacking. They console->setFontSize(6); } addRenderObject(console, LR_DEBUG_TEXT); -#else - debugLog("NOT creating console (disabled in this build)"); -#endif debugLog("1"); @@ -1130,7 +1116,6 @@ This build is not yet final, and as such there are a couple things lacking. They addRenderObject(subtext, LR_SUBTITLES); -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL achievement_box = new Quad(); achievement_box->position = Vector(800,0); achievement_box->alpha = 0; @@ -1148,7 +1133,6 @@ This build is not yet final, and as such there are a couple things lacking. They achievement_text->setWidth(280); achievement_text->setAlign(ALIGN_LEFT); addRenderObject(achievement_text, LR_SUBTITLES); -#endif cutscene_bg = new Quad(); cutscene_bg->autoWidth = AUTO_VIRTUALWIDTH; @@ -1728,7 +1712,6 @@ void DSQ::reloadDevice() recreateBlackBars(); } -#ifdef AQUARIA_BUILD_CONSOLE void DSQ::toggleConsole() { if (console && isDeveloperKeys()) @@ -1773,7 +1756,6 @@ void DSQ::debugLog(const std::string &s) } Core::debugLog(s); } -#endif // AQUARIA_BUILD_CONSOLE int DSQ::getEntityTypeIndexByName(std::string s) { @@ -2055,10 +2037,8 @@ void DSQ::shutdown() UNREFTEX(texCursorSing); UNREFTEX(texCursorLook); -#ifdef AQUARIA_BUILD_CONSOLE removeRenderObject(console); console = 0; -#endif removeRenderObject(cmDebug); cmDebug = 0; removeRenderObject(subtext); @@ -2066,12 +2046,10 @@ void DSQ::shutdown() removeRenderObject(subbox); subbox = 0; -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL removeRenderObject(achievement_text); achievement_text = 0; removeRenderObject(achievement_box); achievement_box = 0; -#endif removeRenderObject(cursor); removeRenderObject(cursorGlow); // is this necessary? probably @@ -3605,11 +3583,7 @@ bool DSQ::isDeveloperKeys() bool DSQ::canOpenEditor() const { -#ifdef AQUARIA_BUILD_SCENEEDITOR return dsq->isDeveloperKeys() || (dsq->mod.isActive() && !dsq->mod.isEditorBlocked()); -#else - return false; -#endif } bool DSQ::isQuitFlag() @@ -3704,14 +3678,12 @@ void DSQ::bindInput() if (isDeveloperKeys()) { -#ifdef AQUARIA_BUILD_CONSOLE addAction(MakeFunctionEvent(DSQ, toggleConsole), KEY_TILDE, 0); -#endif addAction(MakeFunctionEvent(DSQ, toggleRenderCollisionShapes), KEY_RETURN, 0); } addAction(MakeFunctionEvent(DSQ, debugMenu), KEY_BACKSPACE, 0); //addAction(MakeFunctionEvent(DSQ, takeScreenshotKey ), KEY_P, 0); - + for(size_t i = 0; i < dsq->user.control.actionSets.size(); ++i) { ActionSet& as = dsq->user.control.actionSets[i]; @@ -3719,7 +3691,7 @@ void DSQ::bindInput() as.importAction(this, "Escape", ACTION_ESC, sourceID); as.importAction(this, "Screenshot", ACTION_SCREENSHOT, sourceID); - + if(ActionInput *a = as.getActionInputByName("PrimaryAction")) almb.push_back(a); if(ActionInput *a = as.getActionInputByName("SecondaryAction")) @@ -4009,10 +3981,8 @@ void DSQ::onUpdate(float dt) fpsText->setText(os.str()); } -#ifdef AQUARIA_BUILD_CONSOLE if(console && console->alpha == 1) console->position = Vector(10 - virtualOffX,400); -#endif if (shakeCameraTimer > 0) { diff --git a/Aquaria/DSQ.h b/Aquaria/DSQ.h index ac804d5..020e779 100644 --- a/Aquaria/DSQ.h +++ b/Aquaria/DSQ.h @@ -292,9 +292,7 @@ public: int getEntityTypeIndexByName(std::string s); void screenMessage(const std::string &msg); -#ifdef AQUARIA_BUILD_CONSOLE // No need to override it otherwise. void debugLog(const std::string &s); -#endif void toggleConsole(); void toggleEffects(); void debugMenu(); @@ -388,9 +386,7 @@ public: Demo demo; DebugFont *fpsText, *cmDebug; -#ifdef AQUARIA_BUILD_CONSOLE DebugFont *console; -#endif BitmapText *versionLabel; void setVersionLabelText(); @@ -414,10 +410,8 @@ public: void startSelectedMod(); ModEntry* getSelectedModEntry(); -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL BitmapText *achievement_text; Quad *achievement_box; -#endif BitmapText *subtext; Quad *subbox; @@ -515,9 +509,7 @@ protected: void onMouseInput(); std::vector voxQueue; -#ifdef AQUARIA_BUILD_CONSOLE std::vector consoleLines; -#endif std::vector saveSlots; diff --git a/Aquaria/Element.cpp b/Aquaria/Element.cpp index 48947ad..5764da4 100644 --- a/Aquaria/Element.cpp +++ b/Aquaria/Element.cpp @@ -292,7 +292,6 @@ void Element::setElementEffectByIndex(int eidx) void Element::render() { if (!elementActive) return; -#ifdef AQUARIA_BUILD_SCENEEDITOR if (dsq->game->isSceneEditorActive() && this->bgLayer == dsq->game->sceneEditor.bgLayer && dsq->game->sceneEditor.editType == ET_ELEMENTS) { @@ -313,7 +312,6 @@ void Element::render() renderBorder = true; } -#endif Quad::render(); diff --git a/Aquaria/Entity.cpp b/Aquaria/Entity.cpp index a390190..be47082 100644 --- a/Aquaria/Entity.cpp +++ b/Aquaria/Entity.cpp @@ -2491,7 +2491,6 @@ void Entity::render() color *= multColor; } -#ifdef AQUARIA_BUILD_SCENEEDITOR if (dsq->game->isSceneEditorActive() && dsq->game->sceneEditor.editType == ET_ENTITIES) { if (dsq->game->sceneEditor.editingEntity == this) @@ -2501,7 +2500,6 @@ void Entity::render() renderBorder = true; } -#endif // HACK: need to multiply base + etc skeletalSprite.setColorMult(this->color, this->alpha.x); diff --git a/Aquaria/Game.cpp b/Aquaria/Game.cpp index b25a6d5..ec6c306 100644 --- a/Aquaria/Game.cpp +++ b/Aquaria/Game.cpp @@ -846,7 +846,6 @@ void Game::loadEntityTypeList() } in.close(); -#ifdef AQUARIA_BUILD_SCENEEDITOR entityGroups.clear(); std::string fn = "scripts/entities/entitygroups.txt"; @@ -886,7 +885,6 @@ void Game::loadEntityTypeList() game->sceneEditor.entityPageNum = 0; //game->sceneEditor.page = entityGroups.begin(); -#endif } EntityClass *Game::getEntityClassForEntityType(const std::string &type) @@ -2548,9 +2546,7 @@ void Game::action(int id, int state, int source, InputDevice device) } } -#ifdef AQUARIA_BUILD_SCENEEDITOR if (id == ACTION_TOGGLESCENEEDITOR && !state) toggleSceneEditor(); -#endif if (dsq->isDeveloperKeys() || isSceneEditorActive()) { @@ -2834,13 +2830,10 @@ void Game::applyState() li = 0; - -#ifdef AQUARIA_BUILD_SCENEEDITOR if (dsq->canOpenEditor()) { sceneEditor.init(); } -#endif if (verbose) debugLog("Creating Avatar"); avatar = new Avatar(); @@ -3210,12 +3203,10 @@ void Game::bindInput() addAction(ACTION_ESC, KEY_ESCAPE, -1); -#ifdef AQUARIA_BUILD_SCENEEDITOR if (dsq->canOpenEditor()) { addAction(ACTION_TOGGLESCENEEDITOR, KEY_TAB, -1); } -#endif if (dsq->canOpenEditor()) { @@ -4134,7 +4125,6 @@ void Game::handleShotCollisionsHair(Entity *e, int num, float perc) } } -#ifdef AQUARIA_BUILD_SCENEEDITOR void Game::toggleSceneEditor() { if (!core->getAltState()) @@ -4143,7 +4133,6 @@ void Game::toggleSceneEditor() setElementLayerFlags(); } } -#endif void Game::toggleMiniMapRender() { @@ -4607,11 +4596,7 @@ void Game::update(float dt) } themenu->update(dt); -#ifdef AQUARIA_BUILD_SCENEEDITOR - { - sceneEditor.update(dt); - } -#endif + sceneEditor.update(dt); dsq->emote.update(dt); @@ -4990,11 +4975,9 @@ void Game::removeState() avatar->endOfGameState(); } -#ifdef AQUARIA_BUILD_SCENEEDITOR debugLog("toggle sceneEditor"); if (sceneEditor.isOn()) sceneEditor.toggle(false); -#endif debugLog("gameSpeed"); dsq->gameSpeed.interpolateTo(1, 0); @@ -5066,9 +5049,7 @@ void Game::removeState() dsq->clearElements(); dsq->clearEntities(); avatar = 0; -#ifdef AQUARIA_BUILD_SCENEEDITOR sceneEditor.shutdown(); -#endif cameraFollow = 0; core->cameraPos = Vector(0,0); diff --git a/Aquaria/Game.h b/Aquaria/Game.h index 645deb0..48371df 100644 --- a/Aquaria/Game.h +++ b/Aquaria/Game.h @@ -27,14 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "AquariaMenuItem.h" #include "ScriptedEntity.h" #include "TileVector.h" - -#ifdef AQUARIA_DEMO -#undef AQUARIA_BUILD_SCENEEDITOR -#endif - -#ifdef AQUARIA_BUILD_SCENEEDITOR #include "SceneEditor.h" -#endif #include using namespace tinyxml2; @@ -287,12 +280,8 @@ public: Path *getNearestPath(const Vector &pos, PathType pathType=PATH_NONE); Path *getNearestPath(Path *p, std::string name); -#ifdef AQUARIA_BUILD_SCENEEDITOR SceneEditor sceneEditor; bool isSceneEditorActive() {return sceneEditor.isOn();} -#else - bool isSceneEditorActive() const {return false;} -#endif bool isInGameMenu(); @@ -362,9 +351,7 @@ public: WaterSurfaceRender *waterSurfaceRender; -#ifdef AQUARIA_BUILD_SCENEEDITOR EntityGroups entityGroups; -#endif std::string getNoteName(int n, const std::string &pre=""); @@ -521,9 +508,7 @@ protected: Entity *cameraFollowEntity; bool loadSceneXML(std::string scene); -#ifdef AQUARIA_BUILD_SCENEEDITOR void toggleSceneEditor(); -#endif Quad *bg, *bg2; diff --git a/Aquaria/ParticleEditor.cpp b/Aquaria/ParticleEditor.cpp index a5692cd..f52b41e 100644 --- a/Aquaria/ParticleEditor.cpp +++ b/Aquaria/ParticleEditor.cpp @@ -26,9 +26,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Game.h" -#ifdef AQUARIA_BUILD_SCENEEDITOR // Through end of file - - ParticleEditor *pe = 0; @@ -156,6 +153,3 @@ void ParticleEditor::stop() { emitter->stop(); } - - -#endif // AQUARIA_BUILD_SCENEEDITOR diff --git a/Aquaria/PathRender.cpp b/Aquaria/PathRender.cpp index 6c4cc55..d24473d 100644 --- a/Aquaria/PathRender.cpp +++ b/Aquaria/PathRender.cpp @@ -39,11 +39,10 @@ void PathRender::onRender() for (size_t i = 0; i < pathcount; i++) { Path *p = dsq->game->getPath(i); -#ifdef AQUARIA_BUILD_SCENEEDITOR + if (dsq->game->sceneEditor.selectedIdx == i) glColor4f(1, 1, 1, 0.75); else -#endif glColor4f(1, 0.5, 0.5, 0.75); glBegin(GL_LINES); @@ -97,11 +96,9 @@ void PathRender::onRender() if (!p->active) a = 0.3f; -#ifdef AQUARIA_BUILD_SCENEEDITOR if (dsq->game->sceneEditor.selectedIdx == i) glColor4f(1, 1, 1, a); else -#endif glColor4f(1, 0.5, 0.5, a); glPushMatrix(); diff --git a/Aquaria/SceneEditor.cpp b/Aquaria/SceneEditor.cpp index 8169a39..0834fb4 100644 --- a/Aquaria/SceneEditor.cpp +++ b/Aquaria/SceneEditor.cpp @@ -32,9 +32,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Shot.h" -#ifdef AQUARIA_BUILD_SCENEEDITOR // Through end of file - - #ifdef BBGE_BUILD_WINDOWS #define WIN32_LEAN_AND_MEAN #include @@ -3155,6 +3152,3 @@ void SceneEditor::dumpObs() tgaSaveRGBA(outfn.c_str(), MAX_GRID, MAX_GRID, data); dsq->screenMessage("Saved grid image to " + outfn); } - - -#endif // AQUARIA_BUILD_SCENEEDITOR diff --git a/Aquaria/SceneEditor.h b/Aquaria/SceneEditor.h index 7b270c3..916fffb 100644 --- a/Aquaria/SceneEditor.h +++ b/Aquaria/SceneEditor.h @@ -7,8 +7,6 @@ #include "ActionMapper.h" #include "Quad.h" -#ifdef AQUARIA_BUILD_SCENEEDITOR - class Element; class Entity; class Path; @@ -241,6 +239,4 @@ protected: InterpolatedVector oldGlobalScale; }; -#endif // AQUARIA_BUILD_SCENEEDITOR - #endif // AQUARIA_SCENEEDITOR_H diff --git a/Aquaria/ScriptInterface.cpp b/Aquaria/ScriptInterface.cpp index 8d6c420..eceabf0 100644 --- a/Aquaria/ScriptInterface.cpp +++ b/Aquaria/ScriptInterface.cpp @@ -19,17 +19,24 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -extern "C" -{ +// Internal Lua is built as C++ code, so we need to include the headers properly +#ifndef AQUARIA_INTERNAL_LUA +extern "C" { +#endif + #include "lua.h" #include "lauxlib.h" #include "lualib.h" -} + +#ifndef AQUARIA_INTERNAL_LUA +} // end extern "C" +#endif + #include "luaalloc.h" #include "SDL.h" #include "ScriptInterface.h" -#include "../BBGE/ScriptObject.h" +#include "ScriptObject.h" #include "ReadXML.h" @@ -55,7 +62,7 @@ extern "C" #include "ActionMapper.h" -#include "../BBGE/MathFunctions.h" +#include "MathFunctions.h" #undef quad // avoid conflict with quad precision types @@ -8414,7 +8421,7 @@ static Joystick *_getJoystick(lua_State *L, int idx = 1) int source = lua_tointeger(L, idx) - 1; if(source < 0) return core->getJoystick(0); // HACK: FIXME: do something sensible instead - + return core->getJoystickForSourceID(source); } diff --git a/Aquaria/Spore.cpp b/Aquaria/Spore.cpp index a82780a..698e836 100644 --- a/Aquaria/Spore.cpp +++ b/Aquaria/Spore.cpp @@ -88,21 +88,12 @@ void Spore::onEnterState(int state) void Spore::killAllSpores() { - std::queuesporeDeleteQueue; - for (Spores::iterator i = spores.begin(); i != spores.end(); i++) - { - sporeDeleteQueue.push(*i); - } - Spore *s = 0; - while (!sporeDeleteQueue.empty()) - { - s = sporeDeleteQueue.front(); - if (s) - { + Spores sporesToDelete = spores; // copy + + for (Spores::iterator it = sporesToDelete.begin(); it != sporesToDelete.end(); it++) + if(Spore *s = *it) s->safeKill(); - } - sporeDeleteQueue.pop(); - } + spores.clear(); } diff --git a/Aquaria/StatsAndAchievements.cpp b/Aquaria/StatsAndAchievements.cpp index c2d9d3b..5b8c5cb 100644 --- a/Aquaria/StatsAndAchievements.cpp +++ b/Aquaria/StatsAndAchievements.cpp @@ -129,7 +129,7 @@ StatsAndAchievements::StatsAndAchievements() { -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL +#ifndef BBGE_BUILD_STEAMWORKS unlockedDisplayTimestamp = -1.0f; #endif @@ -148,7 +148,7 @@ StatsAndAchievements::StatsAndAchievements() //----------------------------------------------------------------------------- void StatsAndAchievements::RunFrame() { -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL +#ifndef BBGE_BUILD_STEAMWORKS if ( !requestedStats ) { requestedStats = true; @@ -731,7 +731,7 @@ void StatsAndAchievements::update(float dt) } } -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL +#ifndef BBGE_BUILD_STEAMWORKS // change no state if we're still fading in/out. if (!dsq->achievement_box->alpha.isInterpolating()) { @@ -755,7 +755,7 @@ void StatsAndAchievements::update(float dt) unlockedDisplayTimestamp = maxUnlockDisplayTime; std::string text("Achievement Unlocked:\n"); text += name; - unlockedToBeDisplayed.pop(); + unlockedToBeDisplayed.pop_front(); dsq->achievement_text->setText(text); dsq->achievement_text->alpha.interpolateTo(1, 1); dsq->achievement_box->alpha.interpolateTo(1, 0.1f); @@ -777,8 +777,8 @@ void StatsAndAchievements::UnlockAchievement( Achievement &achievement ) // the icon may change once it's unlocked achievement.iconImage = 0; -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL - unlockedToBeDisplayed.push( std::string(achievement.name) ); +#ifndef BBGE_BUILD_STEAMWORKS + unlockedToBeDisplayed.push_back(achievement.name); #endif // Store stats end of frame @@ -794,7 +794,7 @@ void StatsAndAchievements::StoreStatsIfNecessary() { // already set any achievements in UnlockAchievement -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL +#ifndef BBGE_BUILD_STEAMWORKS storeStats = false; // only ever try once. // FIXME: We should use a temporary file to ensure that data @@ -836,4 +836,6 @@ void StatsAndAchievements::StoreStatsIfNecessary() } } - +#ifdef BBGE_BUILD_STEAMWORKS +#error Someone with access to the Steamworks SDK actually has to implement this! +#endif diff --git a/Aquaria/StatsAndAchievements.h b/Aquaria/StatsAndAchievements.h index e01647c..d09179b 100644 --- a/Aquaria/StatsAndAchievements.h +++ b/Aquaria/StatsAndAchievements.h @@ -21,8 +21,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef STATS_ACH_H #define STATS_ACH_H -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL -#include +#ifndef BBGE_BUILD_STEAMWORKS +#include #endif enum Achievements @@ -143,9 +143,9 @@ private: // Store stats void StoreStatsIfNecessary(); -#ifdef BBGE_BUILD_ACHIEVEMENTS_INTERNAL +#ifndef BBGE_BUILD_STEAMWORKS float unlockedDisplayTimestamp; - std::queue unlockedToBeDisplayed; + std::list unlockedToBeDisplayed; #endif // Did we get the stats from Steam? diff --git a/Aquaria/Web.cpp b/Aquaria/Web.cpp index 8df1336..3de52fa 100644 --- a/Aquaria/Web.cpp +++ b/Aquaria/Web.cpp @@ -42,21 +42,11 @@ void Web::setParentEntity(Entity *e) void Web::killAllWebs() { - std::queueshotDeleteQueue; - for (Webs::iterator i = webs.begin(); i != webs.end(); i++) - { - shotDeleteQueue.push(*i); - } - Web *s = 0; - while (!shotDeleteQueue.empty()) - { - s = shotDeleteQueue.front(); - if (s) - { + Webs websToDelete = webs; // copy + for (Webs::iterator it = websToDelete.begin(); it != websToDelete.end(); it++) + if(Web *s = *it) s->safeKill(); - } - shotDeleteQueue.pop(); - } + webs.clear(); } diff --git a/Aquaria/WorldMapRender.cpp b/Aquaria/WorldMapRender.cpp index 979a517..fb5e7de 100644 --- a/Aquaria/WorldMapRender.cpp +++ b/Aquaria/WorldMapRender.cpp @@ -1166,9 +1166,7 @@ void WorldMapRender::onUpdate(float dt) else { if (!dsq->isInCutscene() && dsq->game->avatar && activeTile - #ifdef AQUARIA_BUILD_SCENEEDITOR && !dsq->game->sceneEditor.isOn() - #endif ) { const float screenWidth = core->getVirtualWidth() * core->invGlobalScale; diff --git a/Aquaria/aquaria.rc b/Aquaria/aquaria.rc index 12898dd..63a8cb6 100644 --- a/Aquaria/aquaria.rc +++ b/Aquaria/aquaria.rc @@ -32,14 +32,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #else # define AQUARIA_RC_COMMENTS "Open Source Build" #endif -#define AQUARIA_RC_FILEVERSION_STRING "1.1.3.fg" +#define AQUARIA_RC_FILEVERSION_STRING "1.1.3.OSE" // Version information 1 VERSIONINFO FILEVERSION AQUARIA_RC_FILEVERSION PRODUCTVERSION AQUARIA_RC_PRODUCTVERSION -FILEOS VOS__WINDOWS32 -FILETYPE VFT_APP +//FILEOS VOS__WINDOWS32 +//FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" @@ -65,5 +65,5 @@ END END // Icon -101 ICON "AquariaWin32OSE.ico" +101 ICON "AquariaOSE.ico" diff --git a/BBGE/BBGECompileConfig.h b/BBGE/BBGECompileConfig.h deleted file mode 100644 index 0b7f98d..0000000 --- a/BBGE/BBGECompileConfig.h +++ /dev/null @@ -1,13 +0,0 @@ -#ifndef BBGE_COMPILE_CONFIG_H -#define BBGE_COMPILE_CONFIG_H - -#ifndef BBGE_SKIP_CONFIG_HEADERS - -#define BBGE_BUILD_OPENGL_DYNAMIC 1 -#define BBGE_BUILD_FMOD_OPENAL_BRIDGE 1 -#define BBGE_BUILD_ACHIEVEMENTS_INTERNAL 1 -#define BBGE_BUILD_VFS 1 - -#endif - -#endif diff --git a/BBGE/Base.h b/BBGE/Base.h index 0ab9f4a..4bff87e 100644 --- a/BBGE/Base.h +++ b/BBGE/Base.h @@ -29,8 +29,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif #endif -#include "BBGECompileConfig.h" - #define compile_assert(pred) switch(0){case 0:case (pred):;} #ifdef _MSC_VER diff --git a/BBGE/CMakeLists.txt b/BBGE/CMakeLists.txt new file mode 100644 index 0000000..a45e45f --- /dev/null +++ b/BBGE/CMakeLists.txt @@ -0,0 +1,116 @@ +# Bit Blot Game Engine sources... +set(BBGE_SRCS + ActionInput.cpp + ActionInput.h + ActionMapper.cpp + ActionMapper.h + ActionSet.cpp + ActionSet.h + ActionStatus.cpp + ActionStatus.h + AfterEffect.cpp + AfterEffect.h + Base.cpp + Base.h + BaseText.h + bithacks.h + BitmapFont.cpp + BitmapFont.h + CMakeLists.txt + Core.cpp + Core.h + DarkLayer.cpp + DarkLayer.h + DebugFont.cpp + DebugFont.h + Effects.cpp + Effects.h + Emitter.cpp + Event.cpp + Event.h + FmodOpenALBridge.cpp + FmodOpenALBridge.h + FrameBuffer.cpp + FrameBuffer.h + GameKeyNames.cpp + GameKeyNames.h + GameKeys.h + GLLoad.cpp + GLLoad.h + Gradient.cpp + Gradient.h + Image.cpp + Image.h + Joystick.cpp + Joystick.h + LensFlare.cpp + LensFlare.h + Localization.cpp + Localization.h + MathFunctions.h + MT.cpp + MT.h + OpenGLStubs.h + OSFunctions.cpp + OSFunctions.h + ParticleEffect.cpp + ParticleManager.cpp + Particles.cpp + Particles.h + Precacher.cpp + Precacher.h + Quad.cpp + Quad.h + QuadTrail.cpp + QuadTrail.h + ReadXML.cpp + ReadXML.h + Rect.h + Refcounted.h + RenderBase.cpp + RenderBase.h + RenderObject.cpp + RenderObject.h + RenderObject_inline.h + RenderObjectLayer.cpp + RenderRect.cpp + RoundedRect.cpp + RoundedRect.h + ScreenTransition.cpp + ScreenTransition.h + ScriptObject.cpp + ScriptObject.h + Shader.cpp + Shader.h + SimpleIStringStream.h + SkeletalSprite.cpp + SkeletalSprite.h + Slider.cpp + Slider.h + SoundManager.cpp + SoundManager.h + SpawnParticleData.cpp + StateMachine.cpp + StateMachine.h + StateManager.cpp + StateManager.h + StringBank.cpp + StringBank.h + Texture.cpp + Texture.h + TTFFont.cpp + TTFFont.h + Vector.cpp + Vector.h + Window.cpp + Window.h + Window_SDL1.cpp + Window_SDL2.cpp +) + +if(APPLE AND NOT AQUARIA_USE_SDL2) + set(BBGE_SRCS ${BBGE_SRCS} Cocoa.mm) +endif() + +add_library(BBGE ${BBGE_SRCS}) +target_link_libraries(BBGE ExternalLibs ${SDL_LIBRARY}) diff --git a/BBGE/Core.cpp b/BBGE/Core.cpp index ce68297..50f09b0 100644 --- a/BBGE/Core.cpp +++ b/BBGE/Core.cpp @@ -51,6 +51,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifdef BBGE_BUILD_VFS #include "ttvfs.h" #endif +#include "ttvfs_stdio.h" Core *core = 0; @@ -709,7 +710,6 @@ void Core::initGraphicsLibrary(int width, int height, bool fullscreen, bool vsyn window->open(width, height, fullscreen, bpp, vsync, display, hz); window->setTitle(appName.c_str()); -#ifdef BBGE_BUILD_OPENGL_DYNAMIC // get GL symbols AFTER opening the window, otherwise we get a super old GL context on windows and nothing works if (!lookup_all_glsyms()) { @@ -718,7 +718,6 @@ void Core::initGraphicsLibrary(int width, int height, bool fullscreen, bool vsyn SDL_Quit(); exit_error(os.str()); } -#endif debugLog("GL vendor, renderer & version:"); debugLog((const char*)glGetString(GL_VENDOR)); @@ -833,9 +832,7 @@ void Core::shutdownGraphicsLibrary() delete window; window = NULL; SDL_QuitSubSystem(SDL_INIT_VIDEO); -#ifdef BBGE_BUILD_OPENGL_DYNAMIC unload_all_glsyms(); -#endif lib_graphics = false; @@ -2316,7 +2313,7 @@ void Core::initLocalization() while(in) { in >> low >> up; - + trans[(unsigned char)(low[0])] = (unsigned char)up[0]; } initCharTranslationTables(&trans); diff --git a/BBGE/GLLoad.cpp b/BBGE/GLLoad.cpp index 2a77c9b..9cb6a9f 100644 --- a/BBGE/GLLoad.cpp +++ b/BBGE/GLLoad.cpp @@ -1,7 +1,16 @@ +#include "GLLoad.h" + +#ifdef BBGE_BUILD_OPENGL_STATIC + +bool lookup_all_glsyms() { return true; } +bool void unload_all_glsyms() { return false; } + +#else + #include "Base.h" #include "RenderBase.h" -#include "GLLoad.h" + #include #ifdef GLAPIENTRY @@ -16,7 +25,6 @@ #include -#ifdef BBGE_BUILD_OPENGL_DYNAMIC PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT = NULL; @@ -89,6 +97,7 @@ static bool lookup_glsym(const char *funcname, void **func) bool lookup_all_glsyms() { bool retval = true; + #define GL_FUNC(ret,fn,params,call,rt) \ if (!lookup_glsym(#fn, (void **) &p##fn)) retval = false; #include "OpenGLStubs.h" @@ -210,4 +219,4 @@ void unload_all_glsyms() glUniform4ivARB = NULL; } -#endif // BBGE_BUILD_OPENGL_DYNAMIC +#endif // BBGE_BUILD_OPENGL_STATIC diff --git a/BBGE/GameKeys.h b/BBGE/GameKeys.h index edd01ba..0050be1 100644 --- a/BBGE/GameKeys.h +++ b/BBGE/GameKeys.h @@ -2,7 +2,6 @@ #define BBGE_GAME_KEYS_H #include -#include "BBGECompileConfig.h" #if SDL_VERSION_ATLEAST(2,0,0) diff --git a/BBGE/Shader.cpp b/BBGE/Shader.cpp index 95c72ed..8082ef8 100644 --- a/BBGE/Shader.cpp +++ b/BBGE/Shader.cpp @@ -37,7 +37,7 @@ void Shader::staticInit() bool use = true; -#ifdef BBGE_BUILD_OPENGL_DYNAMIC +#ifndef BBGE_BUILD_OPENGL_STATIC if( !glCreateProgramObjectARB || !glDeleteObjectARB || !glUseProgramObjectARB || !glCreateShaderObjectARB || !glCreateShaderObjectARB || !glCompileShaderARB || !glGetObjectParameterivARB || !glAttachObjectARB || !glGetInfoLogARB || diff --git a/BBGE/SoundManager.cpp b/BBGE/SoundManager.cpp index b90269c..1499ac4 100644 --- a/BBGE/SoundManager.cpp +++ b/BBGE/SoundManager.cpp @@ -24,15 +24,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "Base.h" #include "ttvfs_stdio.h" -#ifdef BBGE_BUILD_FMOD_OPENAL_BRIDGE - #include "FmodOpenALBridge.h" -#else - #include - #include - #ifdef BBGE_BUILD_WINDOWS - #pragma comment(lib, "fmodex_vc.lib") - #endif -#endif +#include "FmodOpenALBridge.h" + SoundManager *sound = 0; @@ -328,11 +321,6 @@ SoundManager::SoundManager(const std::string &defaultDevice) if (checkError()) goto get_out; } -#ifdef BBGE_BUILD_FMOD_OPENAL_BRIDGE - SoundCore::system->getNumChannels(&channels); -#endif - - debugLog("set file system"); result = SoundCore::system->setFileSystem(myopen, myclose, myread, myseek, 2048); diff --git a/BBGE/Strings.cpp b/BBGE/Strings.cpp deleted file mode 100644 index ca21f7b..0000000 --- a/BBGE/Strings.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* -Copyright (C) 2007, 2010 - Bit-Blot - -This file is part of Aquaria. - -Aquaria is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ -#include "Core.h" - -typedef std::map InputCodeMap; - -InputCodeMap inputCodeMap; - -void initInputCodeMap() -{ - inputCodeMap["0"] = 0; - - inputCodeMap["KEY_A"] = KEY_A; - inputCodeMap["KEY_B"] = KEY_B; - inputCodeMap["KEY_C"] = KEY_C; - inputCodeMap["KEY_D"] = KEY_D; - inputCodeMap["KEY_E"] = KEY_E; - inputCodeMap["KEY_F"] = KEY_F; - inputCodeMap["KEY_G"] = KEY_G; - inputCodeMap["KEY_H"] = KEY_H; - inputCodeMap["KEY_I"] = KEY_I; - inputCodeMap["KEY_J"] = KEY_J; - inputCodeMap["KEY_K"] = KEY_K; - inputCodeMap["KEY_L"] = KEY_L; - inputCodeMap["KEY_M"] = KEY_M; - inputCodeMap["KEY_N"] = KEY_N; - inputCodeMap["KEY_O"] = KEY_O; - inputCodeMap["KEY_P"] = KEY_P; - inputCodeMap["KEY_Q"] = KEY_Q; - inputCodeMap["KEY_R"] = KEY_R; - inputCodeMap["KEY_S"] = KEY_S; - inputCodeMap["KEY_T"] = KEY_T; - inputCodeMap["KEY_U"] = KEY_U; - inputCodeMap["KEY_V"] = KEY_V; - inputCodeMap["KEY_W"] = KEY_W; - inputCodeMap["KEY_X"] = KEY_X; - inputCodeMap["KEY_Y"] = KEY_Y; - inputCodeMap["KEY_Z"] = KEY_Z; - - inputCodeMap["KEY_1"] = KEY_1; - inputCodeMap["KEY_2"] = KEY_2; - inputCodeMap["KEY_3"] = KEY_3; - inputCodeMap["KEY_4"] = KEY_4; - inputCodeMap["KEY_5"] = KEY_5; - inputCodeMap["KEY_6"] = KEY_6; - inputCodeMap["KEY_7"] = KEY_7; - inputCodeMap["KEY_8"] = KEY_8; - inputCodeMap["KEY_9"] = KEY_9; - inputCodeMap["KEY_0"] = KEY_0; - - inputCodeMap["KEY_NUMPAD1"] = KEY_NUMPAD1; - inputCodeMap["KEY_NUMPAD2"] = KEY_NUMPAD2; - inputCodeMap["KEY_NUMPAD3"] = KEY_NUMPAD3; - inputCodeMap["KEY_NUMPAD4"] = KEY_NUMPAD4; - inputCodeMap["KEY_NUMPAD5"] = KEY_NUMPAD5; - inputCodeMap["KEY_NUMPAD6"] = KEY_NUMPAD6; - inputCodeMap["KEY_NUMPAD7"] = KEY_NUMPAD7; - inputCodeMap["KEY_NUMPAD8"] = KEY_NUMPAD8; - inputCodeMap["KEY_NUMPAD9"] = KEY_NUMPAD9; - inputCodeMap["KEY_NUMPAD0"] = KEY_NUMPAD0; - - inputCodeMap["KEY_F1"] = KEY_F1; - inputCodeMap["KEY_F2"] = KEY_F2; - inputCodeMap["KEY_F3"] = KEY_F3; - inputCodeMap["KEY_F4"] = KEY_F4; - inputCodeMap["KEY_F5"] = KEY_F5; - inputCodeMap["KEY_F6"] = KEY_F6; - inputCodeMap["KEY_F7"] = KEY_F7; - inputCodeMap["KEY_F8"] = KEY_F8; - inputCodeMap["KEY_F9"] = KEY_F9; - inputCodeMap["KEY_F10"] = KEY_F10; - inputCodeMap["KEY_F11"] = KEY_F11; - inputCodeMap["KEY_F12"] = KEY_F12; - - inputCodeMap["KEY_LEFT"] = KEY_LEFT; - inputCodeMap["KEY_RIGHT"] = KEY_RIGHT; - inputCodeMap["KEY_UP"] = KEY_UP; - inputCodeMap["KEY_DOWN"] = KEY_DOWN; - - inputCodeMap["KEY_SPACE"] = KEY_SPACE; - inputCodeMap["KEY_LCONTROL"] = KEY_LCONTROL; - inputCodeMap["KEY_RCONTROL"] = KEY_RCONTROL; - inputCodeMap["KEY_LSHIFT"] = KEY_LSHIFT; - inputCodeMap["KEY_RSHIFT"] = KEY_RSHIFT; - inputCodeMap["KEY_LMETA"] = KEY_LMETA; - inputCodeMap["KEY_RMETA"] = KEY_RMETA; - inputCodeMap["KEY_LALT"] = KEY_LALT; - inputCodeMap["KEY_RALT"] = KEY_RALT; - inputCodeMap["KEY_RETURN"] = KEY_RETURN; - inputCodeMap["KEY_TAB"] = KEY_TAB; - - inputCodeMap["KEY_ESCAPE"] = KEY_ESCAPE; - - inputCodeMap["MOUSE_BUTTON_LEFT"] = ActionMapper::MOUSE_BUTTON_LEFT; - inputCodeMap["MOUSE_BUTTON_RIGHT"] = ActionMapper::MOUSE_BUTTON_RIGHT; - inputCodeMap["MOUSE_BUTTON_MIDDLE"] = ActionMapper::MOUSE_BUTTON_MIDDLE; - - for (int i = 0; i < 17; i++) - { - std::ostringstream os; - os << "JOY_BUTTON_" << i; - inputCodeMap[os.str()] = ActionMapper::JOY1_BUTTON_0+i; - } -} - -void clearInputCodeMap() -{ - inputCodeMap.clear(); -} - -std::string getInputCodeToString(int key) -{ - for (InputCodeMap::iterator i = inputCodeMap.begin(); i != inputCodeMap.end(); i++) - { - if ((*i).second == key) - { - return (*i).first; - } - } - return ""; -} - -// FIXME: Move stringbank to BBGE and move these strings into it. -- fg - -std::string getInputCodeToUserString(int key) -{ - for (InputCodeMap::iterator i = inputCodeMap.begin(); i != inputCodeMap.end(); i++) - { - if ((*i).second == key) - { - std::string use = (*i).first; - size_t idx = 0; - idx = use.find("KEY_"); - if (idx != std::string::npos) - { - use = use.substr(4, use.size()); - } - if (use == "MOUSE_BUTTON_LEFT") - use = "Left Mouse Button"; - if (use == "MOUSE_BUTTON_RIGHT") - use = "Right Mouse Button"; - if (use == "MOUSE_BUTTON_MIDDLE") - use = "Middle Mouse Button"; - - return use; - - } - } - return ""; -} - -int getStringToInputCode(const std::string &string) -{ - return inputCodeMap[string]; -} diff --git a/CMakeLists.txt b/CMakeLists.txt index e613761..daf13d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,32 +1,21 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +CMAKE_MINIMUM_REQUIRED(VERSION 2.6...3.20) PROJECT(Aquaria) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") + INCLUDE(CheckCCompilerFlag) INCLUDE(CheckCXXCompilerFlag) INCLUDE(CheckFunctionExists) +# if no build type was provided, set a default one IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE Release CACHE STRING "None Debug Release RelWithDebInfo MinSizeRel" FORCE) + SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug, RelWithDebInfo, Release)" FORCE) ENDIF(NOT CMAKE_BUILD_TYPE) -IF(APPLE) - SET(MACOSX TRUE) -ENDIF(APPLE) - IF(CMAKE_SYSTEM_NAME STREQUAL "Haiku") SET(HAIKU TRUE) ENDIF() -IF(WIN32) - SET(WIN32_TRUE TRUE) -ELSE(WIN32) - SET(WIN32_TRUE FALSE) -ENDIF(WIN32) - -# if no build type was provided, set a default one -IF(NOT CMAKE_BUILD_TYPE) - SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug, RelWithDebInfo, Release)" FORCE) -ENDIF(NOT CMAKE_BUILD_TYPE) OPTION(AQUARIA_DEMO_BUILD "Demo Build?" FALSE) OPTION(AQUARIA_USE_VFS "Use Virtual File System? Required for some additional features." TRUE) @@ -34,223 +23,26 @@ OPTION(AQUARIA_USE_VFS "Use Virtual File System? Required for some additional fe OPTION(AQUARIA_USE_SDL2 "Use SDL2" TRUE) OPTION(AQUARIA_USE_GLM "Use GLM for matrix math" TRUE) -# No Steamworks SDK for Linux at the moment. Roll our own achievements. -ADD_DEFINITIONS(-DBBGE_BUILD_ACHIEVEMENTS_INTERNAL=1) - -SET(BBGEDIR ${CMAKE_CURRENT_SOURCE_DIR}/BBGE) -SET(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}/Aquaria) -SET(EXTLIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/ExternalLibs) - -SET(FTGLDIR ${EXTLIBDIR}/FTGL) -SET(FTGLSRCDIR ${FTGLDIR}/src) -SET(FREETYPE2DIR ${EXTLIBDIR}/freetype2) -SET(FREETYPE2SRCDIR ${FREETYPE2DIR}/src) -SET(LUADIR ${EXTLIBDIR}/lua-5.1.4) -SET(LUASRCDIR ${LUADIR}/src) -SET(LIBOGGDIR ${EXTLIBDIR}/libogg) -SET(LIBVORBISDIR ${EXTLIBDIR}/libvorbis) - ################ Look for external libraries -### FreeType - -OPTION(AQUARIA_INTERNAL_FREETYPE "Always use included FreeType library" TRUE) -if(NOT AQUARIA_INTERNAL_FREETYPE) - find_package(Freetype) -endif(NOT AQUARIA_INTERNAL_FREETYPE) -if(NOT FREETYPE_FOUND) - set(FREETYPE_INCLUDE_DIRS ${FREETYPE2DIR}/include) -endif(NOT FREETYPE_FOUND) - -### Lua - -OPTION(AQUARIA_INTERNAL_LUA "Always use included Lua library" TRUE) -if(NOT AQUARIA_INTERNAL_LUA) - find_package(Lua51) -endif(NOT AQUARIA_INTERNAL_LUA) -if(NOT LUA51_FOUND) - set(LUA_INCLUDE_DIR ${LUASRCDIR}) -endif(NOT LUA51_FOUND) - -### Ogg/Vorbis - -OPTION(AQUARIA_INTERNAL_OGGVORBIS "Always use included Ogg/Vorbis libraries" TRUE) -if(NOT AQUARIA_INTERNAL_OGGVORBIS) - # CMake doesn't seem to have a module for libogg or libvorbis yet, so - # we roll our own based on existing find_package modules. - - find_path(OGG_INCLUDE_DIR ogg.h - HINTS $ENV{OGG_DIR} - PATH_SUFFIXES include/ogg include - PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt - ) - find_library(OGG_LIBRARY - NAMES ogg - HINTS $ENV{OGG_DIR} - PATH_SUFFIXES lib64 lib - PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt - ) - - if(OGG_LIBRARY) - - find_path(VORBIS_INCLUDE_DIR vorbisfile.h - HINTS $ENV{VORBIS_DIR} - PATH_SUFFIXES include/vorbis include - PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt - ) - find_library(VORBIS_LIBRARY - NAMES vorbis - HINTS $ENV{VORBIS_DIR} - PATH_SUFFIXES lib64 lib - PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt - ) - find_library(VORBISFILE_LIBRARY - NAMES vorbisfile - HINTS $ENV{VORBIS_DIR} - PATH_SUFFIXES lib64 lib - PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt - ) - - if(VORBIS_LIBRARY AND VORBISFILE_LIBRARY) - set(OGGVORBIS_INCLUDE_DIRS "${OGG_INCLUDE_DIR};${VORBIS_INCLUDE_DIR}" CACHE STRING "Ogg/Vorbis include directories") - if(UNIX AND NOT APPLE) - find_library(VORBIS_MATH_LIBRARY m) - set(OGGVORBIS_LIBRARIES "${VORBISFILE_LIBRARY};${VORBIS_LIBRARY};${VORBIS_MATH_LIBRARY};${OGG_LIBRARY}" CACHE STRING "Ogg/Vorbis libraries") - else(UNIX AND NOT APPLE) - set(OGGVORBIS_LIBRARIES "${VORBISFILE_LIBRARY};${VORBIS_LIBRARY};${OGG_LIBRARY}" CACHE STRING "Ogg/Vorbis libraries") - endif(UNIX AND NOT APPLE) - endif(VORBIS_LIBRARY AND VORBISFILE_LIBRARY) - - endif(OGG_LIBRARY) - - find_package_handle_standard_args(OggVorbis DEFAULT_MSG OGGVORBIS_LIBRARIES OGGVORBIS_INCLUDE_DIRS) - - mark_as_advanced(OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGGVORBIS_INCLUDE_DIRS) - mark_as_advanced(OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY VORBIS_MATH_LIBRARY OGGVORBIS_LIBRARIES) - -endif(NOT AQUARIA_INTERNAL_OGGVORBIS) - -if(NOT OGGVORBIS_FOUND) - set(OGGVORBIS_INCLUDE_DIRS ${LIBOGGDIR}/include ${LIBVORBISDIR}/include) -endif(NOT OGGVORBIS_FOUND) - -### SDL - -OPTION(AQUARIA_INTERNAL_SDL "Always use included SDL library" ${WIN32_TRUE}) -if(NOT AQUARIA_INTERNAL_SDL) - if(AQUARIA_USE_SDL2) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") - find_package(SDL2) - if(SDL2_FOUND) - set(SDL_FOUND TRUE) - set(SDL_INCLUDE_DIR ${SDL2_INCLUDE_DIR}) - set(SDL_LIBRARY ${SDL2_LIBRARY}) - endif(SDL2_FOUND) - else(AQUARIA_USE_SDL2) - find_package(SDL) - endif(AQUARIA_USE_SDL2) -endif(NOT AQUARIA_INTERNAL_SDL) -if(NOT SDL_FOUND) - if(AQUARIA_USE_SDL2) - set(SDLDIR "${EXTLIBDIR}/SDL2") - else(AQUARIA_USE_SDL2) - set(SDLDIR "${EXTLIBDIR}/SDL12") - endif(AQUARIA_USE_SDL2) - - if(MACOSX) - set(SDL_INCLUDE_DIR "${SDLDIR}/include") - message(STATUS "Using internal copy of SDL") - if(AQUARIA_USE_SDL2) - set(SDL_LIBRARY "${SDLDIR}/lib/macosx/libSDL-2.0.0.dylib") - else(AQUARIA_USE_SDL2) - set(SDL_LIBRARY "${SDLDIR}/lib/macosx/libSDL-1.2.0.dylib;${SDLDIR}/lib/macosx/libSDLmain.a") - endif(AQUARIA_USE_SDL2) - elseif(WIN32) - set(SDL_INCLUDE_DIR "${SDLDIR}/include" CACHE PATH "SDL include directory" FORCE) - message(STATUS "Using internal copy of SDL") - if(AQUARIA_USE_SDL2) - set(SDLMAIN_LIBRARY "${SDLDIR}/lib/win32/SDL2main.lib" CACHE FILEPATH "Where the SDL2main library can be found" FORCE) - set(SDL_LIBRARY "${SDLDIR}/lib/win32/SDL2.lib" CACHE FILEPATH "Where the SDL2 library can be found" FORCE) - else(AQUARIA_USE_SDL2) - set(SDLMAIN_LIBRARY "${SDLDIR}/lib/win32/SDLmain.lib" CACHE FILEPATH "Where the SDLmain library can be found" FORCE) - set(SDL_LIBRARY "${SDLDIR}/lib/win32/SDL.lib" CACHE FILEPATH "Where the SDL library can be found" FORCE) - endif(AQUARIA_USE_SDL2) - set(SDL_LIBRARY ${SDLMAIN_LIBRARY} ${SDL_LIBRARY}) # not seen by user - else(MACOSX) - message(SEND_ERROR "We don't have a prebuilt SDL for this platform.") - endif(MACOSX) -endif(NOT SDL_FOUND) - -### OpenAL +### Pick one: SDL 1.2 or SDL2 if(AQUARIA_USE_SDL2) - OPTION(AQUARIA_USE_MOJOAL "Use mojoAL instead of OpenAL (requires SDL2)" TRUE) -endif() - -if(AQUARIA_USE_MOJOAL) - set(OPENALDIR "${EXTLIBDIR}/AL") - set(OPENAL_INCLUDE_DIR "${OPENALDIR}/include" CACHE PATH "OpenAL include directory" FORCE) + find_package(SDL2 REQUIRED) + if(SDL2_FOUND) + set(SDL_FOUND TRUE) + set(SDL_INCLUDE_DIR ${SDL2_INCLUDE_DIR}) + set(SDL_LIBRARY ${SDL2_LIBRARY}) + endif(SDL2_FOUND) else() - OPTION(AQUARIA_INTERNAL_OPENAL "Always use included OpenAL library" ${WIN32_TRUE}) - if(NOT AQUARIA_INTERNAL_OPENAL) - find_package(OpenAL) - endif(NOT AQUARIA_INTERNAL_OPENAL) - if (NOT OPENAL_FOUND) - if(WIN32) - set(OPENALDIR "${EXTLIBDIR}/AL") - set(OPENAL_INCLUDE_DIR "${OPENALDIR}/include" CACHE PATH "OpenAL include directory" FORCE) - message(STATUS "Using internal copy of OpenAL") - set(OPENAL_LIBRARY "${OPENALDIR}/lib/win32/OpenAL32.lib" CACHE FILEPATH "Where the OpenAL library can be found" FORCE) - else(WIN32) - message(SEND_ERROR "We don't have a prebuilt OpenAL for this platform.") - endif(WIN32) - endif (NOT OPENAL_FOUND) + find_package(SDL REQUIRED) endif() -### TinyXML2 - -OPTION(AQUARIA_INTERNAL_TINYXML2 "Always use included TinyXML2 library" ${WIN32_TRUE}) -if(NOT AQUARIA_INTERNAL_TINYXML2) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") - find_package(TinyXML2) -endif(NOT AQUARIA_INTERNAL_TINYXML2) -if(NOT TINYXML2_FOUND) - message(STATUS "Using internal copy of TinyXML2") - set(TINYXML2_INCLUDE_DIRS "${EXTLIBDIR}/tinyxml2") - set(TINYXML2_SRCS "${EXTLIBDIR}/tinyxml2/tinyxml2.cpp") -endif(NOT TINYXML2_FOUND) - -### FTGL - -OPTION(AQUARIA_INTERNAL_FTGL "Always use included FTGL library" TRUE) -if(NOT AQUARIA_INTERNAL_FTGL) - find_package(FTGL) -endif(NOT AQUARIA_INTERNAL_FTGL) -if(FTGL_FOUND) - # Nothing else uses freetype2 directly - set(FREETYPE_INCLUDE_DIRS) -else(FTGL_FOUND) - message(STATUS "Using internal copy of FTGL") - set(FTGL_INCLUDE_DIRS "${FTGLDIR}/include") - ADD_DEFINITIONS(-DAQUARIA_INTERNAL_FTGL=1) -endif(FTGL_FOUND) +SET(BBGEDIR ${CMAKE_CURRENT_SOURCE_DIR}/BBGE) +SET(EXTLIBDIR ${CMAKE_CURRENT_SOURCE_DIR}/ExternalLibs) ################ End of external libraries -INCLUDE_DIRECTORIES(${BBGEDIR}) -INCLUDE_DIRECTORIES(${BBGEDIR}/GL) -INCLUDE_DIRECTORIES(${SRCDIR}) -INCLUDE_DIRECTORIES(${FTGL_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR}) -INCLUDE_DIRECTORIES(${OGGVORBIS_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}) -INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR}) -INCLUDE_DIRECTORIES(${TINYXML2_INCLUDE_DIRS}) -INCLUDE_DIRECTORIES(${EXTLIBDIR}) - - - # Custom build ID: e.g. "-custom", " (my very own build)" SET(AQUARIA_CUSTOM_BUILD_ID "" CACHE STRING "Text to append to the Aquaria version ID on the title screen.") @@ -278,27 +70,28 @@ if(NOT(AQUARIA_EXTRA_DATA_DIR STREQUAL "")) ADD_DEFINITIONS("-DAQUARIA_EXTRA_DATA_DIR=\"${AQUARIA_EXTRA_DATA_DIR}\"") endif(NOT(AQUARIA_EXTRA_DATA_DIR STREQUAL "")) -# Aquaria/BBGE specific defines... - -ADD_DEFINITIONS(-DBBGE_SKIP_CONFIG_HEADERS=1) # if this is not defined, it will use .h files to set the necessary defines -ADD_DEFINITIONS(-DBBGE_BUILD_OPENGL_DYNAMIC=1) -ADD_DEFINITIONS(-DBBGE_BUILD_FMOD_OPENAL_BRIDGE=1) -IF(AQUARIA_USE_VFS) - ADD_DEFINITIONS(-DBBGE_BUILD_VFS=1) +# Without #define VFS_ENABLE_C_API this is just stubbed out +include_directories(ttvfs_cfileapi) +if(AQUARIA_USE_VFS) ADD_DEFINITIONS(-DVFS_ENABLE_C_API=1) + ADD_DEFINITIONS(-DBBGE_BUILD_VFS=1) INCLUDE_DIRECTORIES(${EXTLIBDIR}/ttvfs) INCLUDE_DIRECTORIES(${EXTLIBDIR}/ttvfs_zip) INCLUDE_DIRECTORIES(${EXTLIBDIR}/ttvfs_cfileapi) ENDIF(AQUARIA_USE_VFS) -IF(AQUARIA_USE_SDL2) - ADD_DEFINITIONS(-DBBGE_BUILD_SDL2=1) -ENDIF(AQUARIA_USE_SDL2) - IF(AQUARIA_USE_GLM) ADD_DEFINITIONS(-DBBGE_USE_GLM=1) ENDIF(AQUARIA_USE_GLM) +if(AQUARIA_INTERNAL_FTGL) + ADD_DEFINITIONS(-DAQUARIA_INTERNAL_FTGL=1) +endif() + +if(AQUARIA_INTERNAL_LUA) + ADD_DEFINITIONS(-DAQUARIA_INTERNAL_LUA=1) +endif() + IF(AQUARIA_DEMO_BUILD) message(STATUS "Demo build.") ADD_DEFINITIONS(-DAQUARIA_DEMO=1) @@ -316,26 +109,19 @@ IF(CMAKE_BUILD_TYPE STREQUAL "Debug") message(STATUS "This is a debug build.") ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug") +# FIXME: These should go IF(UNIX) ADD_DEFINITIONS(-DBBGE_BUILD_UNIX=1) ENDIF(UNIX) - IF(MACOSX) ADD_DEFINITIONS(-DBBGE_BUILD_MACOSX=1) ENDIF(MACOSX) - IF(WIN32) ADD_DEFINITIONS(-DBBGE_BUILD_WINDOWS=1) - SET(EXETYPE WIN32) - SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} aquaria.rc) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS) + ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE) ENDIF(WIN32) - -# Build Lua with Unix _setjmp/_longjmp support. -IF(UNIX AND NOT HAIKU) - ADD_DEFINITIONS(-DLUA_USE_ULONGJMP=1) -ENDIF() - IF(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic -pipe -fsigned-char") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic -pipe -fsigned-char -std=gnu99") @@ -348,11 +134,6 @@ IF(CMAKE_COMPILER_IS_GNUCC) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -fno-stack-protector") ENDIF(AQUARIA_GCC_HAS_STACKPROT) - # -O3 breaks on some GCC/MinGW versions, make sure CMake does not set this as default. - # Exceptions are not used, excluding support for release builds adds less bulk as well. - set(CMAKE_C_FLAGS_RELEASE "-O2" CACHE STRING "Flags used for release builds" FORCE) - set(CMAKE_CXX_FLAGS_RELEASE "-O2 -fno-exceptions" CACHE STRING "Flags used for release builds" FORCE) - # !!! FIXME: probably not safe long-term. # CMake mailing list had this hack for getting rid of -rdynamic: # http://public.kitware.com/pipermail/cmake/2006-July/010404.html @@ -362,387 +143,30 @@ IF(CMAKE_COMPILER_IS_GNUCC) ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux") ENDIF(CMAKE_COMPILER_IS_GNUCC) -CHECK_CXX_COMPILER_FLAG("-std=gnu++11" AQUARIA_CC_HAS_GNUXX11) -CHECK_CXX_COMPILER_FLAG("-std=gnu++1x" AQUARIA_CC_HAS_GNUXX1X) -CHECK_CXX_COMPILER_FLAG("-std=gnu++0x" AQUARIA_CC_HAS_GNUXX0X) -IF(AQUARIA_CC_HAS_GNUXX11) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") -ELSEIF(AQUARIA_CC_HAS_GNUXX1X) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++1x") -ELSEIF(AQUARIA_CC_HAS_GNUXX0X) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++0x") -ENDIF(AQUARIA_CC_HAS_GNUXX11) - CHECK_FUNCTION_EXISTS(strcasecmp HAVE_STRCASECMP) IF(HAVE_STRCASECMP) ADD_DEFINITIONS(-DHAVE_STRCASECMP) ENDIF(HAVE_STRCASECMP) -# Main game source code for Aquaria, minus engine and other middleware... -SET(AQUARIA_SRCS - ${SRCDIR}/AnimationEditor.cpp - ${SRCDIR}/AquariaComboBox.cpp - ${SRCDIR}/AquariaMenuItem.cpp - ${SRCDIR}/AquariaSaveSlot.cpp - ${SRCDIR}/Avatar.cpp - ${SRCDIR}/Beam.cpp - ${SRCDIR}/BitBlotLogo.cpp - ${SRCDIR}/CollideEntity.cpp - ${SRCDIR}/Continuity.cpp - ${SRCDIR}/Credits.cpp - ${SRCDIR}/CurrentRender.cpp - ${SRCDIR}/Demo.cpp - ${SRCDIR}/DSQ.cpp - ${SRCDIR}/Element.cpp - ${SRCDIR}/Emote.cpp - ${SRCDIR}/Entity.cpp - ${SRCDIR}/FlockEntity.cpp - ${SRCDIR}/Game.cpp - ${SRCDIR}/GameStructs.cpp - ${SRCDIR}/GameplayVariables.cpp - ${SRCDIR}/GasCloud.cpp - ${SRCDIR}/GridRender.cpp - ${SRCDIR}/Hair.cpp - ${SRCDIR}/Ingredient.cpp - ${SRCDIR}/InGameMenu.cpp - ${SRCDIR}/Intro.cpp - ${SRCDIR}/Logo.cpp - ${SRCDIR}/Main.cpp - ${SRCDIR}/ManaBall.cpp - ${SRCDIR}/MiniMapRender.cpp - ${SRCDIR}/Mod.cpp - ${SRCDIR}/ModSelector.cpp - ${SRCDIR}/ModDownloader.cpp - ${SRCDIR}/Network.cpp - ${SRCDIR}/ParticleEditor.cpp - ${SRCDIR}/Path.cpp - ${SRCDIR}/PathFinding.cpp - ${SRCDIR}/PathRender.cpp - ${SRCDIR}/RecipeMenuEntry.cpp - ${SRCDIR}/SceneEditor.cpp - ${SRCDIR}/SchoolFish.cpp - ${SRCDIR}/Scriptable.cpp - ${SRCDIR}/ScriptedEntity.cpp - ${SRCDIR}/ScriptInterface.cpp - ${SRCDIR}/Segmented.cpp - ${SRCDIR}/SFXLoops.cpp - ${SRCDIR}/Shot.cpp - ${SRCDIR}/Spore.cpp - ${SRCDIR}/States.cpp - ${SRCDIR}/StatsAndAchievements.cpp - ${SRCDIR}/SteamRender.cpp - ${SRCDIR}/Strand.cpp - ${SRCDIR}/StringBank_gen.h - ${SRCDIR}/SubtitlePlayer.cpp - ${SRCDIR}/ToolTip.cpp - ${SRCDIR}/UserSettings.cpp - ${SRCDIR}/WaterSurfaceRender.cpp - ${SRCDIR}/Web.cpp - ${SRCDIR}/WorldMapRender.cpp - ${SRCDIR}/WorldMapTiles.cpp -) -IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) -SET_SOURCE_FILES_PROPERTIES( - # We knowingly apply offsetof to non-POD types. - ${SRCDIR}/ScriptInterface.cpp - PROPERTIES COMPILE_FLAGS "-Wno-invalid-offsetof" -) -ENDIF() +add_subdirectory(ExternalLibs) -IF(MACOSX) - IF(NOT AQUARIA_USE_SDL2) - SET(COCOA_SRCS "${BBGEDIR}/Cocoa.mm") - ENDIF(NOT AQUARIA_USE_SDL2) -ENDIF(MACOSX) - -# Bit Blot Game Engine sources... -SET(BBGE_SRCS - ${BBGEDIR}/ActionInput.cpp - ${BBGEDIR}/ActionMapper.cpp - ${BBGEDIR}/ActionSet.cpp - ${BBGEDIR}/ActionStatus.cpp - ${BBGEDIR}/AfterEffect.cpp - ${BBGEDIR}/Base.cpp - ${BBGEDIR}/BitmapFont.cpp - ${BBGEDIR}/Core.cpp - ${BBGEDIR}/DarkLayer.cpp - ${BBGEDIR}/DebugFont.cpp - ${BBGEDIR}/Effects.cpp - ${BBGEDIR}/Emitter.cpp - ${BBGEDIR}/Event.cpp - ${BBGEDIR}/FrameBuffer.cpp - ${BBGEDIR}/GameKeyNames.cpp - ${BBGEDIR}/Gradient.cpp - ${BBGEDIR}/GLLoad.cpp - ${BBGEDIR}/Image.cpp - ${BBGEDIR}/Joystick.cpp - ${BBGEDIR}/LensFlare.cpp - ${BBGEDIR}/Localization.cpp - ${BBGEDIR}/MT.cpp - ${BBGEDIR}/OSFunctions.cpp - ${BBGEDIR}/ParticleEffect.cpp - ${BBGEDIR}/ParticleManager.cpp - ${BBGEDIR}/Particles.cpp - ${BBGEDIR}/Precacher.cpp - ${BBGEDIR}/Quad.cpp - ${BBGEDIR}/QuadTrail.cpp - ${BBGEDIR}/ReadXML.cpp - ${BBGEDIR}/RenderBase.cpp - ${BBGEDIR}/RenderObject.cpp - ${BBGEDIR}/RenderObjectLayer.cpp - ${BBGEDIR}/RenderRect.cpp - ${BBGEDIR}/RoundedRect.cpp - ${BBGEDIR}/ScreenTransition.cpp - ${BBGEDIR}/ScriptObject.cpp - ${BBGEDIR}/Shader.cpp - ${BBGEDIR}/SkeletalSprite.cpp - ${BBGEDIR}/Slider.cpp - ${BBGEDIR}/SoundManager.cpp - ${BBGEDIR}/SpawnParticleData.cpp - ${BBGEDIR}/StateMachine.cpp - ${BBGEDIR}/StateManager.cpp - ${BBGEDIR}/StringBank.cpp - ${BBGEDIR}/Texture.cpp - ${BBGEDIR}/TTFFont.cpp - ${BBGEDIR}/Vector.cpp - ${BBGEDIR}/Window.cpp - ${BBGEDIR}/Window_SDL1.cpp - ${BBGEDIR}/Window_SDL2.cpp - ${BBGEDIR}/FmodOpenALBridge.cpp - ${COCOA_SRCS} - ${EXTLIBDIR}/DeflateCompressor.cpp - ${EXTLIBDIR}/luaalloc.cpp - ${EXTLIBDIR}/glfont2/glfont2.cpp - ${EXTLIBDIR}/minihttp.cpp - ${EXTLIBDIR}/jps.hh - ${EXTLIBDIR}/miniz.cpp - ${EXTLIBDIR}/tinylibs.cpp -) - -if(AQUARIA_USE_MOJOAL) - set(BBGE_SRCS ${BBGE_SRCS} ${EXTLIBDIR}/mojoal.c) -endif() - -IF(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) -SET_SOURCE_FILES_PROPERTIES( - ${BBGEDIR}/MT.cpp - PROPERTIES COMPILE_FLAGS "-fpermissive" -) -ENDIF() - -SET(FTGL_SRCS - ${FTGLSRCDIR}/FTCharmap.cpp - ${FTGLSRCDIR}/FTContour.cpp - ${FTGLSRCDIR}/FTFace.cpp - ${FTGLSRCDIR}/FTFont.cpp - ${FTGLSRCDIR}/FTGLTextureFont.cpp - ${FTGLSRCDIR}/FTGlyph.cpp - ${FTGLSRCDIR}/FTGlyphContainer.cpp - ${FTGLSRCDIR}/FTLibrary.cpp - ${FTGLSRCDIR}/FTPoint.cpp - ${FTGLSRCDIR}/FTSize.cpp - ${FTGLSRCDIR}/FTTextureGlyph.cpp -) - -SET_SOURCE_FILES_PROPERTIES( - ${FTGL_SRCS} - PROPERTIES COMPILE_FLAGS "-DFTGL_LIBRARY_STATIC" -) - -SET(OGGVORBIS_SRCS - ${LIBOGGDIR}/src/bitwise.c - ${LIBOGGDIR}/src/framing.c - ${LIBVORBISDIR}/lib/analysis.c - ${LIBVORBISDIR}/lib/bitrate.c - ${LIBVORBISDIR}/lib/block.c - ${LIBVORBISDIR}/lib/codebook.c - ${LIBVORBISDIR}/lib/envelope.c - ${LIBVORBISDIR}/lib/floor0.c - ${LIBVORBISDIR}/lib/floor1.c - ${LIBVORBISDIR}/lib/info.c - ${LIBVORBISDIR}/lib/lpc.c - ${LIBVORBISDIR}/lib/lsp.c - ${LIBVORBISDIR}/lib/mapping0.c - ${LIBVORBISDIR}/lib/mdct.c - ${LIBVORBISDIR}/lib/psy.c - ${LIBVORBISDIR}/lib/registry.c - ${LIBVORBISDIR}/lib/res0.c - ${LIBVORBISDIR}/lib/sharedbook.c - ${LIBVORBISDIR}/lib/smallft.c - ${LIBVORBISDIR}/lib/synthesis.c - ${LIBVORBISDIR}/lib/vorbisfile.c - ${LIBVORBISDIR}/lib/window.c -) - -SET(FREETYPE2_SRCS - ${FREETYPE2SRCDIR}/base/ftsystem.c - ${FREETYPE2SRCDIR}/base/ftdebug.c - ${FREETYPE2SRCDIR}/base/ftinit.c - ${FREETYPE2SRCDIR}/base/ftbase.c - ${FREETYPE2SRCDIR}/base/ftbbox.c - ${FREETYPE2SRCDIR}/base/ftbdf.c - ${FREETYPE2SRCDIR}/base/ftbitmap.c - ${FREETYPE2SRCDIR}/base/ftcid.c - ${FREETYPE2SRCDIR}/base/ftfstype.c - ${FREETYPE2SRCDIR}/base/ftgasp.c - ${FREETYPE2SRCDIR}/base/ftglyph.c - ${FREETYPE2SRCDIR}/base/ftgxval.c - ${FREETYPE2SRCDIR}/base/ftlcdfil.c - ${FREETYPE2SRCDIR}/base/ftmm.c - ${FREETYPE2SRCDIR}/base/ftotval.c - ${FREETYPE2SRCDIR}/base/ftpatent.c - ${FREETYPE2SRCDIR}/base/ftpfr.c - ${FREETYPE2SRCDIR}/base/ftstroke.c - ${FREETYPE2SRCDIR}/base/ftsynth.c - ${FREETYPE2SRCDIR}/base/fttype1.c - ${FREETYPE2SRCDIR}/base/ftwinfnt.c - ${FREETYPE2SRCDIR}/truetype/truetype.c - ${FREETYPE2SRCDIR}/type1/type1.c - ${FREETYPE2SRCDIR}/cff/cff.c - ${FREETYPE2SRCDIR}/cid/type1cid.c - ${FREETYPE2SRCDIR}/pfr/pfr.c - ${FREETYPE2SRCDIR}/type42/type42.c - ${FREETYPE2SRCDIR}/winfonts/winfnt.c - ${FREETYPE2SRCDIR}/pcf/pcf.c - ${FREETYPE2SRCDIR}/bdf/bdf.c - ${FREETYPE2SRCDIR}/sfnt/sfnt.c - ${FREETYPE2SRCDIR}/autofit/autofit.c - ${FREETYPE2SRCDIR}/pshinter/pshinter.c - ${FREETYPE2SRCDIR}/raster/raster.c - ${FREETYPE2SRCDIR}/smooth/smooth.c - ${FREETYPE2SRCDIR}/cache/ftcache.c - ${FREETYPE2SRCDIR}/gzip/ftgzip.c - ${FREETYPE2SRCDIR}/lzw/ftlzw.c - ${FREETYPE2SRCDIR}/psaux/psaux.c - ${FREETYPE2SRCDIR}/psnames/psmodule.c -) - -IF(MSVC) - SET_SOURCE_FILES_PROPERTIES( - ${FREETYPE2_SRCS} - PROPERTIES COMPILE_FLAGS "-DFT_CONFIG_OPTION_SYSTEM_ZLIB -DFT2_BUILD_LIBRARY -I${FREETYPE2SRCDIR} -I${FREETYPE2DIR}/include/freetype/config -DHAVE_FCNTL_H" - ) -ELSE(MSVC) - # FT2 seems to not be strict-aliasing safe, so disable that in GCC. - CHECK_C_COMPILER_FLAG("-fno-strict-aliasing" COMPILER_HAS_NOSTRICTALIAS) - IF(COMPILER_HAS_NOSTRICTALIAS) - SET(NOSTRICTALIAS "-fno-strict-aliasing") - ELSE(COMPILER_HAS_NOSTRICTALIAS) - SET(NOSTRICTALIAS "") - ENDIF(COMPILER_HAS_NOSTRICTALIAS) - SET_SOURCE_FILES_PROPERTIES( - ${FREETYPE2_SRCS} - PROPERTIES COMPILE_FLAGS "-Wno-extended-offsetof -DFT_CONFIG_OPTION_SYSTEM_ZLIB -DFT_CONFIG_CONFIG_H='\"${FREETYPE2DIR}/include/freetype/config/ftconfig.h\"' -DFT2_BUILD_LIBRARY -DFT_CONFIG_MODULES_H='\"${FREETYPE2DIR}/include/freetype/config/ftmodule.h\"' -I${FREETYPE2SRCDIR} -I${FREETYPE2DIR}/include/freetype/config -DHAVE_FCNTL_H ${NOSTRICTALIAS}" - ) -ENDIF(MSVC) +# Set external libs as deps for BBGE & Aquaria... +INCLUDE_DIRECTORIES(${BBGEDIR}) +message(STATUS "FTGL_INCLUDE_DIRS: ${FTGL_INCLUDE_DIRS}") +INCLUDE_DIRECTORIES(${FTGL_INCLUDE_DIRS}) +message(STATUS "LUA_INCLUDE_DIR: ${LUA_INCLUDE_DIR}") +INCLUDE_DIRECTORIES(${LUA_INCLUDE_DIR}) +message(STATUS "OGGVORBIS_INCLUDE_DIRS: ${OGGVORBIS_INCLUDE_DIRS}") +INCLUDE_DIRECTORIES(${OGGVORBIS_INCLUDE_DIRS}) +message(STATUS "SDL_INCLUDE_DIR: ${SDL_INCLUDE_DIR}") +INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}) +message(STATUS "OPENAL_INCLUDE_DIR: ${OPENAL_INCLUDE_DIR}") +INCLUDE_DIRECTORIES(${OPENAL_INCLUDE_DIR}) +message(STATUS "TINYXML2_INCLUDE_DIRS: ${TINYXML2_INCLUDE_DIRS}") +INCLUDE_DIRECTORIES(${TINYXML2_INCLUDE_DIRS}) +INCLUDE_DIRECTORIES(${EXTLIBDIR}) -SET(LUA_SRCS - ${LUASRCDIR}/lapi.c - ${LUASRCDIR}/ldblib.c - ${LUASRCDIR}/ldebug.c - ${LUASRCDIR}/ldo.c - ${LUASRCDIR}/ldump.c - ${LUASRCDIR}/lfunc.c - ${LUASRCDIR}/lgc.c - ${LUASRCDIR}/linit.c - ${LUASRCDIR}/liolib.c - ${LUASRCDIR}/lmem.c - ${LUASRCDIR}/loadlib.c - ${LUASRCDIR}/lobject.c - ${LUASRCDIR}/lopcodes.c - ${LUASRCDIR}/loslib.c - ${LUASRCDIR}/lstate.c - ${LUASRCDIR}/lstring.c - ${LUASRCDIR}/ltable.c - ${LUASRCDIR}/ltm.c - ${LUASRCDIR}/lundump.c - ${LUASRCDIR}/lvm.c - ${LUASRCDIR}/lzio.c - ${LUASRCDIR}/lauxlib.c - ${LUASRCDIR}/lbaselib.c - ${LUASRCDIR}/lstrlib.c - ${LUASRCDIR}/ltablib.c - ${LUASRCDIR}/lparser.c - ${LUASRCDIR}/llex.c - ${LUASRCDIR}/lcode.c - ${LUASRCDIR}/lmathlib.c -) - -IF(AQUARIA_USE_VFS) - ADD_SUBDIRECTORY("${EXTLIBDIR}/ttvfs") - ADD_SUBDIRECTORY("${EXTLIBDIR}/ttvfs_zip") - ADD_SUBDIRECTORY("${EXTLIBDIR}/ttvfs_cfileapi") - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "ttvfs") - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "ttvfs_zip") - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "ttvfs_cfileapi") -ENDIF(AQUARIA_USE_VFS) - -IF(WIN32) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "ws2_32") -ENDIF(WIN32) - -IF(MACOSX) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Carbon") - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Cocoa") - #SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework OpenAL") -ENDIF(MACOSX) - -IF(HAIKU) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "network") -ENDIF() - -SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${SDL_LIBRARY}) - -if(NOT AQUARIA_USE_MOJOAL) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${OPENAL_LIBRARY}) -endif() - -IF(NOT FTGL_FOUND) -IF(FREETYPE_FOUND) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${FREETYPE_LIBRARIES}) -ELSE(FREETYPE_FOUND) - SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${FREETYPE2_SRCS}) -ENDIF(FREETYPE_FOUND) -ENDIF(NOT FTGL_FOUND) - -IF(LUA51_FOUND) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${LUA_LIBRARIES}) -ELSE(LUA51_FOUND) - SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_SRCS}) -ENDIF(LUA51_FOUND) - -IF(OGGVORBIS_FOUND) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${OGGVORBIS_LIBRARIES}) -ELSE(OGGVORBIS_FOUND) - SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${OGGVORBIS_SRCS}) -ENDIF(OGGVORBIS_FOUND) - -IF(TINYXML2_FOUND) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${TINYXML2_LIBRARIES}) -ELSE(TINYXML2_FOUND) - SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${TINYXML2_SRCS}) -ENDIF(TINYXML2_FOUND) - -IF(FTGL_FOUND) - SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${FTGL_LIBRARIES}) -ELSE(FTGL_FOUND) - SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${FTGL_SRCS}) -ENDIF(FTGL_FOUND) - -ADD_EXECUTABLE(aquaria ${EXETYPE} - ${AQUARIA_SRCS} - ${BBGE_SRCS} - ${OPTIONAL_SRCS} -) -TARGET_LINK_LIBRARIES(aquaria ${OPTIONAL_LIBS}) - -IF(WIN32) - SET(RC_DEFINES "" FORCE) - SET(RC_INCLUDES "" FORCE) - SET(RC_FLAGS "" FORCE) -endif(WIN32) - -# end of CMakeLists.txt ... - +add_subdirectory(Aquaria) +add_subdirectory(BBGE) diff --git a/ExternalLibs/AL/include/al.h b/ExternalLibs/AL/al.h similarity index 100% rename from ExternalLibs/AL/include/al.h rename to ExternalLibs/AL/al.h diff --git a/ExternalLibs/AL/include/alc.h b/ExternalLibs/AL/alc.h similarity index 100% rename from ExternalLibs/AL/include/alc.h rename to ExternalLibs/AL/alc.h diff --git a/ExternalLibs/CMakeLists.txt b/ExternalLibs/CMakeLists.txt new file mode 100644 index 0000000..745a82e --- /dev/null +++ b/ExternalLibs/CMakeLists.txt @@ -0,0 +1,69 @@ +include(tinyxml2.cmake) +include(FTGL.cmake) +include(oggvorbis.cmake) +include(lua51.cmake) + +INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/AL) +set(xdeps) + +if(AQUARIA_USE_VFS) + add_subdirectory(ttvfs) + add_subdirectory(ttvfs_zip) + add_subdirectory(ttvfs_cfileapi) + set(xdeps ${xdeps} ttvfs ttvfs_zip ttvfs_cfileapi) +endif() + +set(xsrc + algorithmx.h + ByteBuffer.h + DeflateCompressor.cpp + DeflateCompressor.h + jps.hh + luaalloc.cpp + luaalloc.h + minihttp.cpp + minihttp.h + minipstdint.h + miniz.cpp + miniz.h + stb_image.h + stb_image_resize.h + stb_image_write.h + tinylibs.cpp + # Modified version, can't use external lib + glfont2/glfont2.cpp + glfont2/glfont2.h +) + +if(AQUARIA_USE_SDL2 AND SDL2_FOUND) + OPTION(AQUARIA_USE_MOJOAL "Use mojoAL instead of OpenAL (requires SDL2)" TRUE) +endif() + +if(AQUARIA_USE_MOJOAL) + set(xsrc ${xsrc} mojoal.c) + set(OPENAL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/AL" CACHE PATH "OpenAL include directory" FORCE) +else() + find_package(OpenAL REQUIRED) + SET(xdeps ${xdeps} ${OPENAL_LIBRARY}) +endif() + + + +IF(WIN32) + SET(xdeps ${xdeps} "ws2_32") +ENDIF(WIN32) + +IF(HAIKU) + SET(xdeps ${xdeps} "network") +ENDIF() + +IF(APPLE) + SET(xdeps ${xdeps} "-framework Carbon") + SET(xdeps ${xdeps} "-framework Cocoa") + #SET(xdeps ${xdeps} "-framework OpenAL") +ENDIF() + +add_library(ExternalLibs ${xsrc}) +target_link_libraries(ExternalLibs FTGL libogg tinyxml2 libvorbis ${SDL_LIBRARY} ${xdeps}) diff --git a/ExternalLibs/FTGL.cmake b/ExternalLibs/FTGL.cmake new file mode 100644 index 0000000..ca339cc --- /dev/null +++ b/ExternalLibs/FTGL.cmake @@ -0,0 +1,11 @@ +OPTION(AQUARIA_INTERNAL_FTGL "Always use included FTGL library" TRUE) +if(AQUARIA_INTERNAL_FTGL) + message(STATUS "Using internal copy of FTGL") + SET(FTGLDIR ${CMAKE_CURRENT_SOURCE_DIR}/FTGL) + set(FTGL_INCLUDE_DIRS "${FTGLDIR}/include;${FREETYPE_INCLUDE_DIRS}" CACHE INTERNAL "") + include(freetype2.cmake) # Nothing else uses freetype2 directly + INCLUDE_DIRECTORIES(${FREETYPE_INCLUDE_DIRS}) + add_subdirectory(FTGL) +else() + find_package(FTGL REQUIRED) +endif() diff --git a/ExternalLibs/FTGL/CMakeLists.txt b/ExternalLibs/FTGL/CMakeLists.txt new file mode 100644 index 0000000..891aabc --- /dev/null +++ b/ExternalLibs/FTGL/CMakeLists.txt @@ -0,0 +1,63 @@ +# For building Aquaria + +include_directories(include) + +set(FTGL_SRCS + include/FTBBox.h + include/FTBitmapGlyph.h + include/FTCharmap.h + include/FTCharToGlyphIndexMap.h + include/FTContour.h + include/FTExtrdGlyph.h + include/FTFace.h + include/FTFont.h + include/FTGL.h + include/FTGLBitmapFont.h + include/FTGLExtrdFont.h + include/FTGLOutlineFont.h + include/FTGLPixmapFont.h + include/FTGLPolygonFont.h + include/FTGLTextureFont.h + include/FTGlyph.h + include/FTGlyphContainer.h + include/FTLibrary.h + include/FTList.h + include/FTOutlineGlyph.h + include/FTPixmapGlyph.h + include/FTPoint.h + include/FTPolyGlyph.h + include/FTSize.h + include/FTTextureGlyph.h + include/FTVector.h +# include/FTVectoriser.h + src/FTBitmapGlyph.cpp + src/FTCharmap.cpp + src/FTContour.cpp + src/FTExtrdGlyph.cpp + src/FTFace.cpp + src/FTFont.cpp + src/FTGLBitmapFont.cpp + src/FTGLExtrdFont.cpp + src/FTGLOutlineFont.cpp + src/FTGLPixmapFont.cpp + src/FTGLPolygonFont.cpp + src/FTGLTextureFont.cpp + src/FTGlyph.cpp + src/FTGlyphContainer.cpp + src/FTLibrary.cpp + src/FTOutlineGlyph.cpp + src/FTPixmapGlyph.cpp + src/FTPoint.cpp + src/FTPolyGlyph.cpp + src/FTSize.cpp + src/FTTextureGlyph.cpp +# src/FTVectoriser.cpp +) + +SET_SOURCE_FILES_PROPERTIES( + ${FTGL_SRCS} + PROPERTIES COMPILE_FLAGS "-DFTGL_LIBRARY_STATIC" +) + +add_library(FTGL ${FTGL_SRCS}) +target_link_libraries(FTGL freetype) diff --git a/ExternalLibs/SDL2/lib/win32/SDL2.lib b/ExternalLibs/SDL2/lib/win32/SDL2.lib index 28adf862fdba7182ad6251adbd874b63539b2050..2e828635a2651ecaa7d2cbd93fc0bf7fb9e8d369 100644 GIT binary patch delta 32448 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 delta 32381 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 e(tUO *size) unsigned int c; GLFontChar *glfont_char; float width; - + //debugLog("size->second"); //Height is the same for now...might change in future size->second = (int)(header.chars[header.start_char].dy * @@ -273,7 +273,7 @@ void GLFont::GetStringSize (const std::string &text, std::pair *size) { //Make sure character is in range c = (unsigned char)text[i]; - + if (c < header.start_char || c > header.end_char) continue; @@ -281,13 +281,13 @@ void GLFont::GetStringSize (const std::string &text, std::pair *size) glfont_char = &header.chars[c - header.start_char]; //Get width and height - width += glfont_char->dx * header.tex_width; + width += glfont_char->dx * header.tex_width; } //Save width //debugLog("size first"); size->first = (int)width; - + //debugLog("done"); } diff --git a/ExternalLibs/lua-5.1.4/CMakeLists.txt b/ExternalLibs/lua-5.1.4/CMakeLists.txt new file mode 100644 index 0000000..33940a2 --- /dev/null +++ b/ExternalLibs/lua-5.1.4/CMakeLists.txt @@ -0,0 +1,64 @@ +# For building in Aquaria + +set(lua51_src + src/lapi.c + src/lapi.h + src/lauxlib.c + src/lauxlib.h + src/lbaselib.c + src/lcode.c + src/lcode.h + src/ldblib.c + src/ldebug.c + src/ldebug.h + src/ldo.c + src/ldo.h + src/ldump.c + src/lfunc.c + src/lfunc.h + src/lgc.c + src/lgc.h + src/linit.c + src/liolib.c + src/llex.c + src/llex.h + src/llimits.h + src/lmathlib.c + src/lmem.c + src/lmem.h + src/loadlib.c + src/lobject.c + src/lobject.h + src/lopcodes.c + src/lopcodes.h + src/loslib.c + src/lparser.c + src/lparser.h + src/lstate.c + src/lstate.h + src/lstring.c + src/lstring.h + src/lstrlib.c + src/ltable.c + src/ltable.h + src/ltablib.c + src/ltm.c + src/ltm.h +# src/lua.c + src/lua.h +# src/luac.c + src/luaconf.h + src/lualib.h + src/lundump.c + src/lundump.h + src/lvm.c + src/lvm.h + src/lzio.c + src/lzio.h + src/print.c +) + +# Use C++ exceptions instead of setjmp() & longjmp() +set_source_files_properties(${lua51_src} PROPERTIES LANGUAGE CXX) + +add_library(lua51 ${lua51_src}) diff --git a/ExternalLibs/lua51.cmake b/ExternalLibs/lua51.cmake new file mode 100644 index 0000000..4038aeb --- /dev/null +++ b/ExternalLibs/lua51.cmake @@ -0,0 +1,8 @@ +OPTION(AQUARIA_INTERNAL_LUA "Always use included Lua library" TRUE) +if(AQUARIA_INTERNAL_LUA) + message(STATUS "Using internal copy of Lua 5.1") + set(LUA_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/lua-5.1.4/src" CACHE INTERNAL "") + add_subdirectory(lua-5.1.4) +else() + find_package(Lua51 REQUIRED) +endif() diff --git a/ExternalLibs/oggvorbis.cmake b/ExternalLibs/oggvorbis.cmake new file mode 100644 index 0000000..38d84a2 --- /dev/null +++ b/ExternalLibs/oggvorbis.cmake @@ -0,0 +1,88 @@ +OPTION(AQUARIA_INTERNAL_OGGVORBIS "Always use included Ogg/Vorbis libraries" TRUE) +if(AQUARIA_INTERNAL_OGGVORBIS) + message(STATUS "Using internal copy of ogg/vorbis") + SET(LIBOGGDIR ${CMAKE_CURRENT_SOURCE_DIR}/libogg) + SET(LIBVORBISDIR ${CMAKE_CURRENT_SOURCE_DIR}/libvorbis) + set(OGGVORBIS_INCLUDE_DIRS "${LIBOGGDIR}/include;${LIBVORBISDIR}/include" CACHE INTERNAL "") + include_directories(${OGGVORBIS_INCLUDE_DIRS}) + + add_library(libogg + ${LIBOGGDIR}/src/bitwise.c + ${LIBOGGDIR}/src/framing.c + ) + add_library(libvorbis + ${LIBVORBISDIR}/lib/analysis.c + ${LIBVORBISDIR}/lib/bitrate.c + ${LIBVORBISDIR}/lib/block.c + ${LIBVORBISDIR}/lib/codebook.c + ${LIBVORBISDIR}/lib/envelope.c + ${LIBVORBISDIR}/lib/floor0.c + ${LIBVORBISDIR}/lib/floor1.c + ${LIBVORBISDIR}/lib/info.c + ${LIBVORBISDIR}/lib/lpc.c + ${LIBVORBISDIR}/lib/lsp.c + ${LIBVORBISDIR}/lib/mapping0.c + ${LIBVORBISDIR}/lib/mdct.c + ${LIBVORBISDIR}/lib/psy.c + ${LIBVORBISDIR}/lib/registry.c + ${LIBVORBISDIR}/lib/res0.c + ${LIBVORBISDIR}/lib/sharedbook.c + ${LIBVORBISDIR}/lib/smallft.c + ${LIBVORBISDIR}/lib/synthesis.c + ${LIBVORBISDIR}/lib/vorbisfile.c + ${LIBVORBISDIR}/lib/window.c + ) +else() + # CMake doesn't seem to have a module for libogg or libvorbis yet, so + # we roll our own based on existing find_package modules. + + find_path(OGG_INCLUDE_DIR ogg.h + HINTS $ENV{OGG_DIR} + PATH_SUFFIXES include/ogg include + PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt + ) + find_library(OGG_LIBRARY + NAMES ogg + HINTS $ENV{OGG_DIR} + PATH_SUFFIXES lib64 lib + PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt + ) + + if(OGG_LIBRARY) + + find_path(VORBIS_INCLUDE_DIR vorbisfile.h + HINTS $ENV{VORBIS_DIR} + PATH_SUFFIXES include/vorbis include + PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt + ) + find_library(VORBIS_LIBRARY + NAMES vorbis + HINTS $ENV{VORBIS_DIR} + PATH_SUFFIXES lib64 lib + PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt + ) + find_library(VORBISFILE_LIBRARY + NAMES vorbisfile + HINTS $ENV{VORBIS_DIR} + PATH_SUFFIXES lib64 lib + PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /sw /opt/local /opt/csw /opt + ) + + if(VORBIS_LIBRARY AND VORBISFILE_LIBRARY) + set(OGGVORBIS_INCLUDE_DIRS "${OGG_INCLUDE_DIR};${VORBIS_INCLUDE_DIR}" CACHE STRING "Ogg/Vorbis include directories") + if(UNIX AND NOT APPLE) + find_library(VORBIS_MATH_LIBRARY m) + set(OGGVORBIS_LIBRARIES "${VORBISFILE_LIBRARY};${VORBIS_LIBRARY};${VORBIS_MATH_LIBRARY};${OGG_LIBRARY}" CACHE STRING "Ogg/Vorbis libraries") + else(UNIX AND NOT APPLE) + set(OGGVORBIS_LIBRARIES "${VORBISFILE_LIBRARY};${VORBIS_LIBRARY};${OGG_LIBRARY}" CACHE STRING "Ogg/Vorbis libraries") + endif(UNIX AND NOT APPLE) + endif(VORBIS_LIBRARY AND VORBISFILE_LIBRARY) + + endif(OGG_LIBRARY) + + find_package_handle_standard_args(OggVorbis DEFAULT_MSG OGGVORBIS_LIBRARIES OGGVORBIS_INCLUDE_DIRS) + + mark_as_advanced(OGG_INCLUDE_DIR VORBIS_INCLUDE_DIR OGGVORBIS_INCLUDE_DIRS) + mark_as_advanced(OGG_LIBRARY VORBIS_LIBRARY VORBISFILE_LIBRARY VORBIS_MATH_LIBRARY OGGVORBIS_LIBRARIES) + +endif() diff --git a/ExternalLibs/tinyxml2.cmake b/ExternalLibs/tinyxml2.cmake new file mode 100644 index 0000000..b74a257 --- /dev/null +++ b/ExternalLibs/tinyxml2.cmake @@ -0,0 +1,8 @@ +OPTION(AQUARIA_INTERNAL_TINYXML2 "Always use included TinyXML2 library" TRUE) +if(AQUARIA_INTERNAL_TINYXML2) + message(STATUS "Using internal copy of TinyXML2") + set(TINYXML2_INCLUDE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/tinyxml2" CACHE INTERNAL "") + add_library(tinyxml2 tinyxml2/tinyxml2.cpp tinyxml2/tinyxml2.h) +else() + find_package(TinyXML2 REQUIRED) +endif() diff --git a/ExternalLibs/ttvfs/CMakeLists.txt b/ExternalLibs/ttvfs/CMakeLists.txt index 1c7c5fc..90213a9 100644 --- a/ExternalLibs/ttvfs/CMakeLists.txt +++ b/ExternalLibs/ttvfs/CMakeLists.txt @@ -30,8 +30,3 @@ set(ttvfs_SRC ) add_library(ttvfs ${ttvfs_SRC}) - -install(TARGETS ttvfs DESTINATION lib) - -install(DIRECTORY ./ DESTINATION include/ttvfs - FILES_MATCHING PATTERN "*.h") diff --git a/ExternalLibs/ttvfs_cfileapi/CMakeLists.txt b/ExternalLibs/ttvfs_cfileapi/CMakeLists.txt index 9b25d8b..b6456fe 100644 --- a/ExternalLibs/ttvfs_cfileapi/CMakeLists.txt +++ b/ExternalLibs/ttvfs_cfileapi/CMakeLists.txt @@ -9,8 +9,3 @@ include_directories(${TTVFS_INCLUDE_DIRS}) add_library(ttvfs_cfileapi ${cfileapi_SRC}) target_link_libraries(ttvfs_cfileapi ttvfs) - -install(TARGETS ttvfs_cfileapi DESTINATION lib) - -install(DIRECTORY ./ DESTINATION include/ttvfs - FILES_MATCHING PATTERN "*.h") diff --git a/ExternalLibs/ttvfs_cfileapi/ttvfs_stdio.cpp b/ExternalLibs/ttvfs_cfileapi/ttvfs_stdio.cpp index b4dfc67..60ea35c 100644 --- a/ExternalLibs/ttvfs_cfileapi/ttvfs_stdio.cpp +++ b/ExternalLibs/ttvfs_cfileapi/ttvfs_stdio.cpp @@ -1,6 +1,6 @@ #define VFS_ENABLE_C_API 1 -#include "ttvfs.h" +#include #include "ttvfs_stdio.h" #include #include diff --git a/ExternalLibs/ttvfs_zip/VFSZipArchiveRef.cpp b/ExternalLibs/ttvfs_zip/VFSZipArchiveRef.cpp index c257a39..b79de5c 100644 --- a/ExternalLibs/ttvfs_zip/VFSZipArchiveRef.cpp +++ b/ExternalLibs/ttvfs_zip/VFSZipArchiveRef.cpp @@ -1,7 +1,7 @@ #include "VFSInternal.h" #include "VFSZipArchiveRef.h" #include -#include "miniz.h" +#include VFS_NAMESPACE_START diff --git a/aquaria.ico b/aquaria.ico deleted file mode 100644 index ba4566a35001cac51cddde3b5d6ce03f67089d29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3774 zcmeH}Yg|)Ty2c;cdMQ*3G-#Cs1u+VW61j+SC!(MYs9Z(~9uyS{F|1dbV2>*uE0$AWy5w`XIIIK9i-AS@^RU6%0)aanpm}i< zQDH2My(+?a?m@UZt|lIfVDiOcxDoHrKsUr3_s9HsAAzx+iq8xd!kEOd+s6jxW)wt* zc_VnYGurEuG2ESl@B`jZy=nq=xgid--Ed%^J1i}hVYB@jjP&NiZae`rEy&QJ7 zEAi%47IyA%0Phlquuc#r9>n$Jqu^Z(ftLpZ(GeSwmCAyny*W;u@PX=OG9H%3Vt=qb zN{f!7v+Zj&xJ7Ul7LQtS1SYO$r_VL$9>ZZF!*dlp zy(|%X-Us5e{qWz-z_sLH@CAGEwDCN+r+siHW+!@Ir=n4sfWu+ikaW!l{(IJAKieJ~ zHkzWU_9WN`oRD911o2<9@RzbEDEqG=CUzIZ=?8K27!&8>SY*9bc-Hj) zG?t6O@AJu6E_&bG!d6!c+`S)$$W!j9m7ap{SL=~{JqQ`MLt(OH5qbub(Dg=uoh(wj z+{0jQUkBSwE71K$h~A+TDEfuCoEV76liLv<;RPm;ZKuOW)$ zvTrzpv@8rxNHCzufxROg!;^P0`eO;Q?yzz8(sp#bz6@W#4Y+WHg`NHzVZO?Q_zQ3# z%mcl{*~B*(-;EdH4%qGe{8f)irBWyqCnu*4hQU`J zo+ch+44v2>Y)>2NX;X%&X@?V)YRdThKo;RI{`#N4{ogTyv-;WhLtxl46MZIC%g6q*^fxQF*pzo3^uMp)6(W5H=*yfvt#tf_r5Ap+@};M|duqJki!0XzJo@|a!r9sIOQXD`YZoaC?d*6@0_h$$ zCN_(-{>z+AR<69DuWzFNF_S757k!v0d{|joDSbctr09m;r`DfsKIH%MOP0x(23mh=2N7Ar#rLQY z^$D*zQ;?^Sa3z%*X+`s>hw1$J^WCiIMs`N@W&iMZa{8|hQ^uzzv_L0(KauoOdS{cl zxp{b!@{XX;!*t*LeQtCYBkQfUHah-Gq7Dk>OH=3HesY@VE084AMRWIXLoauwruG%# z)A@4VcQlUmXTD!;)W&0C;%SrOY-00t4zMn-D83o^u>RK^N?N?B-TrOQ8)B;fI5Mf#Svu`%6> z9-?BkC{GkGBWL5?-7&H9S6w48HKWBY(Z;{fXg-C~G_re^!>Lq^kJs1t^wty%7l;U6 zJKm!@CVyL)A)$jx|JwpBZ)-%Qtf&&rOiyR4#%l>bKCb#p;CpUoPi_5pt)gy5UZ~)U zKY9G%ly3jnQs+_med5X{W{hIIv9Y(eKIZKxCos0IhfJ*>?~dU$)hWey)_iWL;}^`E zN1u`2$Scs7bk;Y>2p<)fJDB@J7vUQk#ubuSQB%4wlTIEJZ9J#(lV&0_>B_K;s$Z>E z58ORdug+Buws6nfRjbR?y(;}CO`niobvaq*&#vjrn<wW^;ovuQ3d z3a{?wz+k)NEkkH;VG;9vMhic@udh##nWU?)usJicSw1Dzl3T^y-!ilMAxm-CERK^-}PWh|w_Dw&(AitXu`9#XQv2O!f z0;;CvcGFW6&3Zb1LjHbQUKEgcQzjWZH}h=frk8_*rGrD`p%?2i$9PY2|~2g`$Vvh=#@vnqOo%k>e9*BXm! zhNhgf{t87CkI|77)U+deSH6I`=HMfE!TIF;>XCQ}a&CS7utX zUlkSxr4{e!|I=jf^V<M==QhOi!%Qkc-Qbv>J6>YjHz+Y6m@Mk znyc?KJ@Ps<^4=mI=?rL#KdkO=y?_44oSdAEbar-YsBRZ#lvjixmUvL+Z)N zgtZ2RmX2DZ+(5s>kq-V zWOH~)XhPjk%oTyP9gAg7lII}&pVzU{h41+*6o@D%wR4P@Xs