diff --git a/CMakeLists.txt b/CMakeLists.txt index 0cbb94b2c..16380bc26 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,35 +10,45 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/) set(BSA bsa/bsa_archive.cpp bsa/bsa_file.cpp) set(BSA_HEADER bsa/bsa_archive.hpp bsa/bsa_file.hpp) +source_group(bsa FILES ${BSA} ${BSA_HEADER}) set(NIF nif/nif_file.cpp) set(NIF_HEADER nif/controlled.hpp nif/effect.hpp nif/nif_types.hpp nif/record.hpp nif/controller.hpp nif/extra.hpp nif/node.hpp nif/record_ptr.hpp nif/data.hpp nif/nif_file.hpp nif/property.hpp) +source_group(nif FILES ${NIF} ${NIF_HEADER}) set(NIFOGRE nifogre/ogre_nif_loader.cpp) set(NIFOGRE_HEADER nifogre/ogre_nif_loader.hpp) +source_group(nifogre FILES ${NIFOGRE} ${NIFOGRE_HEADER}) set(TOOLS tools/stringops.cpp tools/fileops.cpp) set(TOOLS_HEADER tools/fileops.hpp tools/slice_array.hpp tools/stringops.hpp) +source_group(tools FILES ${TOOLS} ${TOOLS_HEADER}) set(MANGLE_VFS mangle/vfs/servers/ogre_vfs.cpp) +source_group(mangle_vfs FILES ${MANGLE_VFS}) set(OGRE ogre/renderer.cpp) set(OGRE_HEADER ogre/renderer.hpp) +source_group(ogre FILES ${OGRE} ${OGRE_HEADER}) set(INPUT input/oismanager.cpp) set(INPUT_HEADER input/oismanager.hpp input/listener.hpp input/func_binder.hpp input/dispatch_map.hpp input/dispatcher.hpp input/poller.hpp) +source_group(input FILES ${INPUT} ${INPUT_HEADER}) set(GAME game/main.cpp game/engine.cpp) set(GAME_HEADER game/mwinput/inputmanager.hpp game/engine.hpp) +source_group(game FILES ${GAME} ${GAME_HEADER}) set(ESM_STORE esm_store/store.cpp esm_store/cell_store.cpp) set(ESM_STORE_HEADER esm_store/cell_store.hpp esm_store/reclists.hpp esm_store/store.hpp) +source_group(esm_store FILES ${ESM_STORE} ${ESM_STORE_HEADER}) set(GAMEREND game/mwrender/mwscene.cpp game/mwrender/cell.cpp game/mwrender/interior.cpp) set(GAMEREND_HEADER game/mwrender/cell.hpp game/mwrender/mwscene.hpp game/mwrender/interior.hpp game/mwrender/playerpos.hpp) +source_group(game_renderer FILES ${GAMEREND} ${GAMEREND_HEADER}) set(ESM_HEADER esm/defs.hpp esm/loadcell.hpp esm/loadfact.hpp esm/loadltex.hpp esm/loadskil.hpp @@ -50,6 +60,7 @@ set(ESM_HEADER esm/defs.hpp esm/loadcell.hpp esm/loadfact.hpp esm/loadltex.hpp esm/loadbody.hpp esm/loaddial.hpp esm/loadlevlist.hpp esm/loadrace.hpp esm/loadweap.hpp esm/loadbook.hpp esm/loaddoor.hpp esm/loadligh.hpp esm/loadregn.hpp esm/records.hpp esm/loadbsgn.hpp esm/loadench.hpp esm/loadlocks.hpp esm/loadscpt.hpp) +source_group(esm_header FILES ${ESM_HEADER}) # Platform specific if (WIN32) diff --git a/esm/loadcell.hpp b/esm/loadcell.hpp index dcb255949..c4641a57b 100644 --- a/esm/loadcell.hpp +++ b/esm/loadcell.hpp @@ -11,8 +11,9 @@ namespace ESM { loading process, but are rather loaded later on demand when we are setting up a specific cell. */ -struct CellRef +class CellRef { +public: int refnum; // Reference number std::string refID; // ID of object being referenced diff --git a/esm/loadlevlist.hpp b/esm/loadlevlist.hpp index 046fd91ef..8b0ae45b2 100644 --- a/esm/loadlevlist.hpp +++ b/esm/loadlevlist.hpp @@ -60,7 +60,7 @@ struct LeveledListBase // items. Also, some times we don't want to merge lists, just // overwrite. Figure out a way to give the user this option. - for(int i=0; i()); engine.setCell (variables["start"].as()); engine.addMaster (variables["master"].as()); + + return true; } int main(int argc, char**argv) diff --git a/game/mwinput/inputmanager.hpp b/game/mwinput/inputmanager.hpp index 8fa8c6ad2..5c2c9857f 100644 --- a/game/mwinput/inputmanager.hpp +++ b/game/mwinput/inputmanager.hpp @@ -45,10 +45,14 @@ namespace MWInput // Write screenshot to file. void screenshot() { - // TODO: add persistent counting so we don't overwrite shots - // from previous runs. - char buf[50]; - snprintf(buf,50, "screenshot%d.png", shotCount++); + // Find the first unused filename. + // + char buf[50]; + do + { + snprintf(buf, 50, "screenshot%03d.png", shotCount++); + } while (boost::filesystem::exists(buf)); + ogre.screenshot(buf); } @@ -108,8 +112,6 @@ namespace MWInput float speed = 300 * evt.timeSinceLastFrame; float moveX = 0, moveY = 0, moveZ = 0; - using namespace std; - if(poller.isDown(A_MoveLeft)) moveX -= speed; if(poller.isDown(A_MoveRight)) moveX += speed; if(poller.isDown(A_MoveForward)) moveZ -= speed; @@ -120,10 +122,8 @@ namespace MWInput if(poller.isDown(A_MoveUp)) moveY += speed; if(poller.isDown(A_MoveDown)) moveY -= speed; - if(moveX == 0 && moveY == 0 && moveZ == 0) - return true; - - player.moveRel(moveX, moveY, moveZ); + if(moveX != 0 || moveY != 0 || moveZ != 0) + player.moveRel(moveX, moveY, moveZ); return true; } diff --git a/game/mwrender/cell.cpp b/game/mwrender/cell.cpp index dfbe6bbb5..396e24cf5 100644 --- a/game/mwrender/cell.cpp +++ b/game/mwrender/cell.cpp @@ -29,13 +29,14 @@ void insertObj(CellRender& cellRender, const ESMS::LiveCellRef& live cellRender.insertBegin (liveRef.ref); cellRender.insertMesh ("meshes\\" + model); - - int color = liveRef.base->data.color; - - cellRender.insertLight(color & 255, - (color >> 8) & 255, - (color >> 16) & 255, - liveRef.base->data.radius); + + // Extract the color and convert to floating point + const int color = liveRef.base->data.color; + const float r = ((color >> 0) & 0xFF) / 255.0f; + const float g = ((color >> 8) & 0xFF) / 255.0f; + const float b = ((color >> 16) & 0xFF) / 255.0f; + const float radius = float(liveRef.base->data.radius); + cellRender.insertLight(r, g, b, radius); cellRender.insertEnd(); } diff --git a/game/mwrender/interior.cpp b/game/mwrender/interior.cpp index 22c39423e..684e7cf63 100644 --- a/game/mwrender/interior.cpp +++ b/game/mwrender/interior.cpp @@ -156,7 +156,7 @@ void InteriorCellRender::setAmbientMode() case 1: - scene.getMgr()->setAmbientLight(0.7*ambientColor + 0.3*ColourValue(1,1,1)); + scene.getMgr()->setAmbientLight(0.7f*ambientColor + 0.3f*ColourValue(1,1,1)); break; case 2: diff --git a/input/func_binder.hpp b/input/func_binder.hpp index b70650202..20119b07b 100644 --- a/input/func_binder.hpp +++ b/input/func_binder.hpp @@ -54,7 +54,8 @@ public: */ void bind(int index, Action action, const std::string &name="") { - assert(index >= 0 && index < bindings.size()); + assert(index >= 0 && index < (int)bindings.size()); + FuncBinding &fb = bindings[index]; fb.action = action; fb.name = name; @@ -65,7 +66,8 @@ public: */ void unbind(int index) { - assert(index >= 0 && index < bindings.size()); + assert(index >= 0 && index < (int)bindings.size()); + bindings[index] = FuncBinding(); } @@ -75,7 +77,8 @@ public: */ void call(int index, const void *p=NULL) const { - assert(index >= 0 && index < bindings.size()); + assert(index >= 0 && index < (int)bindings.size()); + const FuncBinding &fb = bindings[index]; if(fb.action) fb.action(index, p); } @@ -83,14 +86,16 @@ public: /// Check if a given index is bound to anything bool isBound(int index) const { - assert(index >= 0 && index < bindings.size()); + assert(index >= 0 && index < (int)bindings.size()); + return !bindings[index].action.empty(); } /// Return the name associated with an action (empty if not bound) const std::string &getName(int index) const { - assert(index >= 0 && index < bindings.size()); + assert(index >= 0 && index < (int)bindings.size()); + return bindings[index].name; } }; diff --git a/input/listener.hpp b/input/listener.hpp index f2a1bff20..5b9d4fb49 100644 --- a/input/listener.hpp +++ b/input/listener.hpp @@ -68,7 +68,7 @@ namespace Input assert(camera); // Mouse sensitivity. Should be a config option later. - const float MS = 0.2; + const float MS = 0.2f; float x = arg.state.X.rel * MS; float y = arg.state.Y.rel * MS;