aboutsummaryrefslogtreecommitdiff
path: root/source/Irrlicht/CBSPMeshFileLoader.cpp
diff options
context:
space:
mode:
authorcutealien <cutealien@dfc29bdd-3216-0410-991c-e03cc46cb475>2020-01-03 19:05:16 +0000
committercutealien <cutealien@dfc29bdd-3216-0410-991c-e03cc46cb475>2020-01-03 19:05:16 +0000
commit2ae2a551a6290f46734307bbfdafea4b1a2cf2ba (patch)
treeba2f0b468640e44899fed3df2d4cc58795f4a003 /source/Irrlicht/CBSPMeshFileLoader.cpp
downloadirrlicht-2ae2a551a6290f46734307bbfdafea4b1a2cf2ba.tar.xz
Merging r5975 through r6036 from trunk to ogl-es branch.
GLES drivers adapted, but only did make compile-tests. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6038 dfc29bdd-3216-0410-991c-e03cc46cb475
Diffstat (limited to 'source/Irrlicht/CBSPMeshFileLoader.cpp')
-rw-r--r--source/Irrlicht/CBSPMeshFileLoader.cpp107
1 files changed, 107 insertions, 0 deletions
diff --git a/source/Irrlicht/CBSPMeshFileLoader.cpp b/source/Irrlicht/CBSPMeshFileLoader.cpp
new file mode 100644
index 0000000..01ac04a
--- /dev/null
+++ b/source/Irrlicht/CBSPMeshFileLoader.cpp
@@ -0,0 +1,107 @@
+// Copyright (C) 2002-2012 Nikolaus Gebhardt
+// This file is part of the "Irrlicht Engine".
+// For conditions of distribution and use, see copyright notice in irrlicht.h
+
+#include "IrrCompileConfig.h"
+#ifdef _IRR_COMPILE_WITH_BSP_LOADER_
+
+#include "CBSPMeshFileLoader.h"
+#include "CQ3LevelMesh.h"
+
+namespace irr
+{
+namespace scene
+{
+
+//! Constructor
+CBSPMeshFileLoader::CBSPMeshFileLoader(scene::ISceneManager* smgr,
+ io::IFileSystem* fs)
+: FileSystem(fs), SceneManager(smgr)
+{
+
+ #ifdef _DEBUG
+ setDebugName("CBSPMeshFileLoader");
+ #endif
+
+ if (FileSystem)
+ FileSystem->grab();
+}
+
+
+//! destructor
+CBSPMeshFileLoader::~CBSPMeshFileLoader()
+{
+ if (FileSystem)
+ FileSystem->drop();
+}
+
+
+//! returns true if the file maybe is able to be loaded by this class
+//! based on the file extension (e.g. ".bsp")
+bool CBSPMeshFileLoader::isALoadableFileExtension(const io::path& filename) const
+{
+ return core::hasFileExtension ( filename, "bsp", "shader", "cfg" );
+}
+
+
+//! creates/loads an animated mesh from the file.
+//! \return Pointer to the created mesh. Returns 0 if loading failed.
+//! If you no longer need the mesh, you should call IAnimatedMesh::drop().
+//! See IReferenceCounted::drop() for more information.
+IAnimatedMesh* CBSPMeshFileLoader::createMesh(io::IReadFile* file)
+{
+ s32 type = core::isFileExtension ( file->getFileName(), "bsp", "shader", "cfg" );
+ CQ3LevelMesh* q = 0;
+
+ switch ( type )
+ {
+ case 1:
+ q = new CQ3LevelMesh(FileSystem, SceneManager, LoadParam);
+
+ // determine real shaders in LoadParam
+ if ( 0 == LoadParam.loadAllShaders )
+ {
+ q->getShader("scripts/common.shader");
+ q->getShader("scripts/sfx.shader");
+ q->getShader("scripts/gfx.shader");
+ q->getShader("scripts/liquid.shader");
+ q->getShader("scripts/models.shader");
+ q->getShader("scripts/walls.shader");
+ //q->getShader("scripts/sky.shader");
+ }
+
+ if ( q->loadFile(file) )
+ return q;
+
+ q->drop();
+ break;
+
+ case 2:
+ q = new CQ3LevelMesh(FileSystem, SceneManager,LoadParam);
+ q->getShader( file );
+ return q;
+ break;
+
+ case 3:
+ // load quake 3 loading parameter
+ if ( file->getFileName() == "levelparameter.cfg" )
+ {
+ file->read ( &LoadParam, sizeof ( LoadParam ) );
+ }
+ else
+ {
+ q = new CQ3LevelMesh(FileSystem, SceneManager,LoadParam);
+ q->getConfiguration( file );
+ return q;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+} // end namespace scene
+} // end namespace irr
+
+#endif // _IRR_COMPILE_WITH_BSP_LOADER_
+