]> git.rm.cloudns.org Git - xonotic/netradiant.git/commitdiff
somewhat unclean code, sorry... but it allows opening brushPrimitives maps in nonBrus...
authorRudolf Polzer <divverent@alientrap.org>
Sun, 10 Oct 2010 08:47:16 +0000 (10:47 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sun, 10 Oct 2010 08:47:16 +0000 (10:47 +0200)
include/imap.h
plugins/mapq3/plugin.cpp
radiant/brushmodule.cpp
radiant/brushmodule.h
radiant/map.cpp

index 53c804e46a112cb4752b728c5848bdad0d6be6bc..c97a2ff2a326048f49fa0c5dbbc4b2a8298f8109 100644 (file)
@@ -61,6 +61,7 @@ class MapFormat
 public:
   INTEGER_CONSTANT(Version, 2);
   STRING_CONSTANT(Name, "map");
+  mutable bool wrongFormat;
 
   /// \brief Read a map graph into \p root from \p outputStream, using \p entityTable to create entities.
   virtual void readGraph(scene::Node& root, TextInputStream& inputStream, EntityCreator& entityTable) const = 0;
index be7212c2bc9fa84d67e12008a8d5d50d7ee5c213..c08a7e2e6f051adfba4a5322072489460b30fe18 100644 (file)
@@ -291,6 +291,7 @@ public:
        else if(!detectedFormat && string_equal(primitive, "("))
        {
          detectedFormat = true;
+         wrongFormat = true;
          Tokeniser_unexpectedError(tokeniser, primitive, "#quake3-switch-to-texdef");
          return g_nullNode;
        }
@@ -306,6 +307,7 @@ public:
        else if(!detectedFormat && string_equal(primitive, "("))
        {
          detectedFormat = true;
+         wrongFormat = true;
          Tokeniser_unexpectedError(tokeniser, primitive, "#quake3-switch-to-brush-primitives");
          return g_nullNode;
        }
@@ -319,6 +321,7 @@ public:
   void readGraph(scene::Node& root, TextInputStream& inputStream, EntityCreator& entityTable) const
   {
     detectedFormat = false;
+    wrongFormat = false;
     Tokeniser& tokeniser = GlobalScripLibModule::getTable().m_pfnNewSimpleTokeniser(inputStream);
     Map_Read(root, tokeniser, entityTable, *this);
     tokeniser.release();
index e8b605ca7d4a8da202ff4b350610644035951b12..d5853f07248b744c4894ddc1ec4a6b29d9e3786f 100644 (file)
@@ -101,6 +101,17 @@ void Brush_unlatchPreferences()
        }
 }
 
+void Brush_toggleProjection()
+{
+       if(g_showAlternativeTextureProjectionOption)
+       {
+               g_useAlternativeTextureProjection.m_value = !g_useAlternativeTextureProjection.m_value;
+               globalErrorStream() << "Toggled g_useAlternativeTextureProjection (" << g_useAlternativeTextureProjection.m_value << ")\n";
+               Brush::destroyStatic();
+               Brush::constructStatic(g_useAlternativeTextureProjection.m_value ? eBrushTypeQuake3BP : eBrushTypeQuake3);
+       }
+}
+
 void Brush_Construct(EBrushType type)
 {
   if(type == eBrushTypeQuake3)
index 76e74b7122231fe844c636f99807bc32bb5faad6..efb808af97f527ba2b7829fa37709b48e7a53cbb 100644 (file)
@@ -24,5 +24,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 void Brush_clipperColourChanged();
 void Brush_unlatchPreferences();
+void Brush_toggleProjection();
 
 #endif
index 0e401ea41d98ba5bbbc3be6c910f5c5abfab2680..339de05f1208a2462e66ce3f638d9280b36ab6e1 100644 (file)
@@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 #include "debugging/debugging.h"
 
 #include "imap.h"
+MapModules& ReferenceAPI_getMapModules();
 #include "iselection.h"
 #include "iundo.h"
 #include "ibrush.h"
@@ -1038,7 +1039,20 @@ void Map_LoadFile (const char *filename)
     ScopeTimer timer("map load");
 
     g_map.m_resource = GlobalReferenceCache().capture(g_map.m_name.c_str());
+
+    const MapFormat* format = ReferenceAPI_getMapModules().findModule("mapq3");
+    format->wrongFormat = false;
     g_map.m_resource->attach(g_map);
+    if(format->wrongFormat)
+    {
+      // try toggling BrushPrimitives
+      Map_Free();
+      Brush_toggleProjection();
+      g_map.m_name = filename;
+      Map_UpdateTitle(g_map);
+      g_map.m_resource = GlobalReferenceCache().capture(g_map.m_name.c_str());
+      g_map.m_resource->attach(g_map);
+    }
 
     Node_getTraversable(GlobalSceneGraph().root())->traverse(entity_updateworldspawn());
   }