Эх сурвалжийг харах

win32: added maps restriction: if more than one map file is specified, only the specified files shall be loaded.

Ivan 'w23' Avdeev 11 жил өмнө
parent
commit
51bc3a2c03

BIN
bin/OpenSource.exe


+ 4 - 1
src/OpenSource.cpp

@@ -89,7 +89,10 @@ void OpenSource::init(kapusha::IViewportController* viewctrl)
           if (map != ref->first && 
               std::find(maps_to_load_.begin(),
                         maps_to_load_.end(), ref->first) == maps_to_load_.end())
-            maps_to_load_.push_back(ref->first);
+          {
+            if (enabled_maps_.empty() || enabled_maps_.count(ref->first))
+              maps_to_load_.push_back(ref->first);
+          }
         }
       }
 

+ 6 - 0
src/OpenSource.h

@@ -4,6 +4,7 @@
 #include <vector>
 #include <deque>
 #include <map>
+#include <unordered_set>
 
 #include <kapusha/core/IViewport.h>
 #include <kapusha/render/Render.h>
@@ -22,6 +23,10 @@ public:
     int depth = 32);
   virtual ~OpenSource();
 
+  void addMapRestriction(const std::string& name) {
+    enabled_maps_.emplace(name);
+  }
+
 public: // IViewport
   virtual void init(kapusha::IViewportController *viewctrl);
   virtual void resize(kapusha::vec2i size);
@@ -38,6 +43,7 @@ private:
   std::map<std::string, BSP*> levels_;
   std::vector<BSP*> levelsv_;
   std::deque<std::string> maps_to_load_;
+  std::unordered_set<std::string> enabled_maps_;
   
   kapusha::rect2f viewport_;
   kapusha::Camera camera_;

+ 6 - 2
src/OpenSource.vcxproj

@@ -72,7 +72,7 @@
     <ClCompile>
       <WarningLevel>Level3</WarningLevel>
       <PrecompiledHeader>NotUsing</PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
+      <Optimization>Full</Optimization>
       <FunctionLevelLinking>true</FunctionLevelLinking>
       <IntrinsicFunctions>true</IntrinsicFunctions>
       <PreprocessorDefinitions>WIN32;_HAS_EXCEPTIONS=0;_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
@@ -84,6 +84,10 @@
       <AdditionalIncludeDirectories>$(SolutionDir)/3p/kapusha;$(SolutionDir)/3p/kapusha/3p/glew</AdditionalIncludeDirectories>
       <SuppressStartupBanner>
       </SuppressStartupBanner>
+      <OmitFramePointers>true</OmitFramePointers>
+      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>
+      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
     </ClCompile>
     <Link>
       <SubSystem>Windows</SubSystem>
@@ -124,4 +128,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
   <ImportGroup Label="ExtensionTargets">
   </ImportGroup>
-</Project>
+</Project>

+ 17 - 0
src/main_win.cpp

@@ -20,6 +20,16 @@ public:
 
 ///////////////////////////////////////////////////////////////////////////////
 
+std::string extractMapName(const char* s)
+{
+  const char* mapspos = strstr(s, "\\maps\\");
+  const char* bsppos = strstr(s, ".bsp");
+
+  if (mapspos == 0 || bsppos == 0) return std::string();
+
+  return std::string(mapspos + 6, bsppos);
+}
+
 int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int cmdShow)
 {
   UNREFERENCED_PARAMETER(hPrevInst);
@@ -57,5 +67,12 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR cmdLine, int cmdS
 
   OpenSource *os = new OpenSource(infile, filepart, 128);
 
+  for (int i = 2; i < __argc; ++i)
+  {
+    std::string mapname = extractMapName(__argv[i]);
+    if (!mapname.empty())
+      os->addMapRestriction(mapname);
+  }
+
   return RunWindow(hInst, os, WIDTH, HEIGHT, false);
 }