From: Rudolf Polzer Date: Sun, 10 Oct 2010 08:47:16 +0000 (+0200) Subject: somewhat unclean code, sorry... but it allows opening brushPrimitives maps in nonBrus... X-Git-Tag: xonotic-v0.5.0~178 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2b0a97c814fc84fea99c3d960cfc6314815cf022;p=xonotic%2Fnetradiant.git somewhat unclean code, sorry... but it allows opening brushPrimitives maps in nonBrushPrimitives mode (experimental) by temp toggling to the correct mode --- diff --git a/include/imap.h b/include/imap.h index 53c804e4..c97a2ff2 100644 --- a/include/imap.h +++ b/include/imap.h @@ -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; diff --git a/plugins/mapq3/plugin.cpp b/plugins/mapq3/plugin.cpp index be7212c2..c08a7e2e 100644 --- a/plugins/mapq3/plugin.cpp +++ b/plugins/mapq3/plugin.cpp @@ -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(); diff --git a/radiant/brushmodule.cpp b/radiant/brushmodule.cpp index e8b605ca..d5853f07 100644 --- a/radiant/brushmodule.cpp +++ b/radiant/brushmodule.cpp @@ -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) diff --git a/radiant/brushmodule.h b/radiant/brushmodule.h index 76e74b71..efb808af 100644 --- a/radiant/brushmodule.h +++ b/radiant/brushmodule.h @@ -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 diff --git a/radiant/map.cpp b/radiant/map.cpp index 0e401ea4..339de05f 100644 --- a/radiant/map.cpp +++ b/radiant/map.cpp @@ -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()); }