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 53c804e..c97a2ff 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 be7212c..c08a7e2 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 e8b605c..d5853f0 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 76e74b7..efb808a 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 0e401ea..339de05 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());
   }