diff --git a/CMakeLists.txt b/CMakeLists.txt index 3dc9cf5..039cee7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ -project(world2) cmake_minimum_required(VERSION 3.13.0) +project(world2) set(CMAKE_CXX_STANDARD 14) set(BLENDER ${CMAKE_SOURCE_DIR}/../../blender-bin/bin/blender) @@ -16,8 +16,6 @@ set(CREATE_DIRECTORIES # ${CMAKE_SOURCE_DIR}/characters/male/vroid-normal-male.scene # ) -option(OGRE_DYNAMIC "Build against dynamic ogre" ON) - # workaround horribly broken assimp cmake, fixed with assimp 5.1 #add_library(assimp INTERFACE IMPORTED) #set_target_properties(assimp PROPERTIES @@ -55,7 +53,7 @@ set_target_properties(fix::OgreProcedural PROPERTIES INTERFACE_LINK_DIRECTORIES "${CMAKE_PREFIX_PATH}/lib" ) -if(NOT OGRE_DYNAMIC) +if(OGRE_STATIC) add_library(OgreGLSupportStatic INTERFACE IMPORTED) set_target_properties(OgreGLSupportStatic PROPERTIES INTERFACE_LINK_LIBRARIES "OgreGLSupportStatic" @@ -78,21 +76,17 @@ add_executable(0_Bootstrap Bootstrap.cpp) # this also sets the includes and pulls third party dependencies target_link_libraries(0_Bootstrap OgreBites OgreBullet OgrePaging ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY} ${ASSIMP_LIBRARIES}) -target_include_directories(0_Bootstrap PUBLIC OgreBites OgrePaging OgreBullet) add_dependencies(0_Bootstrap stage_files import_vrm) add_executable(Editor Editor.cpp ${TERRAIN_SRC} ${WATER_SRC} ${CHARACTERS_SRC}) -target_link_libraries(Editor OgreBites OgreBullet OgrePaging OgreTerrain OgreMeshLodGenerator ${OgreProcedural_LIBRARIES} ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) -target_include_directories(Editor PUBLIC OgreBites OgrePaging OgreBullet OgreTerrain OgreMeshLodGenerator ${OgreProcedural_INCLUDE_DIRS}) +target_link_libraries(Editor OgreBites OgreBullet OgrePaging OgreTerrain OgreMeshLodGenerator OgreProcedural::OgreProcedural ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) add_dependencies(Editor stage_files import_buildings import_water_stuff import_vehicles import_vrm) add_executable(Game Game.cpp ${TERRAIN_SRC} ${WATER_SRC} ${CHARACTERS_SRC}) -target_link_libraries(Game OgreBites OgreBullet OgrePaging OgreTerrain OgreMeshLodGenerator ${OgreProcedural_LIBRARIES} ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) -target_include_directories(Game PUBLIC OgreBites OgrePaging OgreBullet OgreTerrain OgreMeshLodGenerator ${OgreProcedural_INCLUDE_DIRS}) +target_link_libraries(Game OgreBites OgreBullet OgrePaging OgreTerrain OgreMeshLodGenerator OgreProcedural::OgreProcedural ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) add_dependencies(Game stage_files import_buildings import_water_stuff import_vehicles import_vrm) add_executable(Procedural Procedural.cpp ${TERRAIN_SRC}) target_link_libraries(Procedural OgreBites OgreBullet OgrePaging OgreTerrain OgreProcedural::OgreProcedural ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) -target_include_directories(Procedural PUBLIC OgreBites OgrePaging OgreBullet OgreTerrain OgreProcedural::OgreProcedural ${CMAKE_PREFIX_PATH}/include/OgreProcedural) add_dependencies(Procedural stage_files import_buildings) file(GLOB BUILDINGS_SRC ${CMAKE_SOURCE_DIR}/assets/blender/buildings/*.blend) set(BUILDING_OUTPUT_FILES) @@ -145,15 +139,14 @@ add_custom_target(import_water_stuff ALL DEPENDS ${WATER_STUFF}) add_executable(TerrainTest terrain.cpp ${TERRAIN_SRC}) target_link_libraries(TerrainTest OgreBites OgreBullet OgrePaging OgreTerrain lua ${BULLET_DYNAMICS_LIBRARY} ${BULLET_COLLISION_LIBRARY} ${BULLET_MATH_LIBRARY}) -target_include_directories(TerrainTest PUBLIC OgreBites OgrePaging OgreTerrain OgreBullet PRIVATE . src/terrain src/lua src/lua/lua-5.4.8/src) -if(NOT OGRE_DYNAMIC) +target_include_directories(TerrainTest PRIVATE . src/terrain src/lua src/lua/lua-5.4.8/src) +if(OGRE_STATIC) target_link_libraries(TerrainTest fix::assimp pugixml) target_link_libraries(Procedural fix::assimp pugixml) target_link_libraries(0_Bootstrap fix::assimp pugixml) target_link_libraries(Editor fix::assimp pugixml) endif() - file(GLOB LUA_SCRIPTS_SRC ${CMAKE_SOURCE_DIR}/lua-scripts/*.lua) set(LUA_SCRIPTS_OUTPUT) foreach(LUA_SCRIPT_FILE ${LUA_SCRIPTS_SRC}) diff --git a/src/lua/CMakeLists.txt b/src/lua/CMakeLists.txt index 1263e76..c8ce393 100644 --- a/src/lua/CMakeLists.txt +++ b/src/lua/CMakeLists.txt @@ -23,8 +23,8 @@ target_include_directories(lua PRIVATE lua-5.4.8/src) add_executable(luavm lua-5.4.8/src/lua.c) target_link_libraries(luavm lua m) target_include_directories(luavm PRIVATE lua-5.4.8/src) -add_executable(luac lua-5.4.8/src/luac.c) -target_link_libraries(luac lua m) +add_executable(luac lua-5.4.8/src/luac.c ${LUA_SRC}) +target_link_libraries(luac m) target_include_directories(luac PRIVATE lua-5.4.8/src) diff --git a/water/water.cpp b/water/water.cpp index e21eaf7..0af0864 100644 --- a/water/water.cpp +++ b/water/water.cpp @@ -228,6 +228,11 @@ void Water::updateWater(float delta) mViewports[i]->update(); for (i = 0; i < mWaterMeshes.size(); i++) mWaterMeshes[i]->setVisible(true); + mOverlaps.clear(); + for (i = 0; i < mWaterBody->getNumOverlappingObjects(); i++) { + btCollisionObject *sb = mWaterBody->getOverlappingObject(i); + mOverlaps.insert(sb); + } } void Water::preRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) diff --git a/water/water.h b/water/water.h index 0d4a5ec..72b27c6 100644 --- a/water/water.h +++ b/water/water.h @@ -26,6 +26,7 @@ class Water : public /* Ogre::FrameListener, */ Ogre::RenderTargetListener { void create_cameras(); btGhostObject *mWaterBody; Ogre::Bullet::DynamicsWorld *mDynWorld; + std::set mOverlaps; public: Water(); @@ -43,5 +44,10 @@ public: postRenderTargetUpdate(const Ogre::RenderTargetEvent &evt) override; void add_submerged_entity(Ogre::Entity *ent); void add_surface_entity(Ogre::Entity *ent); + bool isInWater(const btCollisionObject *body) const + { + btCollisionObject *test = const_cast(body); + return mOverlaps.find(test) != mOverlaps.end(); + } }; #endif