[Orxonox-commit 901] r5624 - code/branches/resource2/src/orxonox/tools
rgrieder at orxonox.net
rgrieder at orxonox.net
Tue Aug 11 15:05:09 CEST 2009
Author: rgrieder
Date: 2009-08-11 15:05:02 +0200 (Tue, 11 Aug 2009)
New Revision: 5624
Added:
code/branches/resource2/src/orxonox/tools/ResourceCollection.cc
code/branches/resource2/src/orxonox/tools/ResourceCollection.h
code/branches/resource2/src/orxonox/tools/ResourceLocation.cc
code/branches/resource2/src/orxonox/tools/ResourceLocation.h
Modified:
code/branches/resource2/src/orxonox/tools/CMakeLists.txt
Log:
Added two classes to allow resource declaration via XML.
Modified: code/branches/resource2/src/orxonox/tools/CMakeLists.txt
===================================================================
--- code/branches/resource2/src/orxonox/tools/CMakeLists.txt 2009-08-11 09:12:50 UTC (rev 5623)
+++ code/branches/resource2/src/orxonox/tools/CMakeLists.txt 2009-08-11 13:05:02 UTC (rev 5624)
@@ -4,6 +4,8 @@
DynamicRenderable.cc
Mesh.cc
ParticleInterface.cc
+ ResourceCollection.cc
+ ResourceLocation.cc
Shader.cc
TextureGenerator.cc
Timer.cc
Added: code/branches/resource2/src/orxonox/tools/ResourceCollection.cc
===================================================================
--- code/branches/resource2/src/orxonox/tools/ResourceCollection.cc (rev 0)
+++ code/branches/resource2/src/orxonox/tools/ResourceCollection.cc 2009-08-11 13:05:02 UTC (rev 5624)
@@ -0,0 +1,96 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+#include "ResourceCollection.h"
+
+#include "util/Exception.h"
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "ResourceLocation.h"
+
+namespace orxonox
+{
+ ResourceCollection::ResourceCollection(BaseObject* creator)
+ : BaseObject(creator)
+ {
+ RegisterObject(ResourceCollection);
+
+ // Default group is "General"
+ this->setResourceGroup(Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
+ }
+
+ ResourceCollection::~ResourceCollection()
+ {
+ }
+
+ void ResourceCollection::XMLPort(Element& xmlElement, XMLPort::Mode mode)
+ {
+ XMLPortParam(ResourceCollection, "resourceGroup", setResourceGroup, getResourceGroup, xmlElement, mode);
+ XMLPortObject(ResourceCollection, ResourceLocation, "", addResourceLocation, getResourceLocation, xmlElement, mode);
+ }
+
+ void ResourceCollection::setResourceGroup(const std::string& resourceGroup)
+ {
+ if (resourceGroup.empty())
+ {
+ COUT(2) << "Warning: \"\" is not a valid resource group." << std::endl;
+ return;
+ }
+ if (!resourceLocations_.empty())
+ ThrowException(InitialisationFailed, "ResourceGroup: Group change not allowed with locations already added!");
+ resourceGroup_ = resourceGroup;
+ }
+
+ void ResourceCollection::addResourceLocation(ResourceLocation* location)
+ {
+ location->load(resourceGroup_);
+ this->resourceLocations_.push_back(location);
+ }
+
+ void ResourceCollection::removeResourceLocation(ResourceLocation* location)
+ {
+ for (std::vector<ResourceLocation*>::iterator it = resourceLocations_.begin(); it != resourceLocations_.end(); )
+ {
+ if (*it == location)
+ {
+ it = resourceLocations_.erase(it);
+ location->unload(); // doesn't throw
+ }
+ else
+ ++it;
+ }
+ }
+
+ ResourceLocation* ResourceCollection::getResourceLocation(unsigned int index) const
+ {
+ if (index >= resourceLocations_.size())
+ return NULL;
+ else
+ return resourceLocations_[index];
+ }
+}
Property changes on: code/branches/resource2/src/orxonox/tools/ResourceCollection.cc
___________________________________________________________________
Added: svn:eol-style
+ native
Added: code/branches/resource2/src/orxonox/tools/ResourceCollection.h
===================================================================
--- code/branches/resource2/src/orxonox/tools/ResourceCollection.h (rev 0)
+++ code/branches/resource2/src/orxonox/tools/ResourceCollection.h 2009-08-11 13:05:02 UTC (rev 5624)
@@ -0,0 +1,65 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+#ifndef _ResourceCollection_H__
+#define _ResourceCollection_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <string>
+#include <vector>
+#include "core/BaseObject.h"
+
+namespace orxonox
+{
+ class ResourceLocation;
+
+ class _OrxonoxExport ResourceCollection : public BaseObject
+ {
+ public:
+ ResourceCollection(BaseObject* creator);
+ virtual ~ResourceCollection();
+
+ virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
+
+ void setResourceGroup(const std::string& resourceGroup);
+ const std::string& getResourceGroup() const { return resourceGroup_; }
+
+ void addResourceLocation(ResourceLocation* location);
+ void removeResourceLocation(ResourceLocation* location);
+ ResourceLocation* getResourceLocation(unsigned int index) const;
+
+ private:
+ ResourceCollection(const ResourceCollection&);
+
+ std::string resourceGroup_;
+ std::vector<ResourceLocation*> resourceLocations_;
+ };
+}
+
+#endif /* _ResourceCollection_H__ */
Property changes on: code/branches/resource2/src/orxonox/tools/ResourceCollection.h
___________________________________________________________________
Added: svn:eol-style
+ native
Added: code/branches/resource2/src/orxonox/tools/ResourceLocation.cc
===================================================================
--- code/branches/resource2/src/orxonox/tools/ResourceLocation.cc (rev 0)
+++ code/branches/resource2/src/orxonox/tools/ResourceLocation.cc 2009-08-11 13:05:02 UTC (rev 5624)
@@ -0,0 +1,85 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+#include "ResourceLocation.h"
+
+#include <OgreResourceGroupManager.h>
+#include "util/Exception.h"
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+ ResourceLocation::ResourceLocation(BaseObject* creator)
+ : BaseObject(creator)
+ {
+ RegisterObject(ResourceLocation);
+
+ // Default values
+ archiveType_ = "FileSystem";
+ bRecursive_ = false;
+ }
+
+ ResourceLocation::~ResourceLocation()
+ {
+ }
+
+ void ResourceLocation::XMLPort(Element& xmlElement, XMLPort::Mode mode)
+ {
+ XMLPortParam(ResourceLocation, "path", setPath, getPath, xmlElement, mode);
+ XMLPortParam(ResourceLocation, "archiveType", setArchiveType, getArchiveType, xmlElement, mode);
+ XMLPortParam(ResourceLocation, "recursive", setRecursive, getRecursive, xmlElement, mode);
+ if (path_.empty())
+ ThrowException(AbortLoading, "ResourceLocation: No path given.");
+ }
+
+ void ResourceLocation::load(const std::string& resourceGroup)
+ {
+ if (path_.empty())
+ ThrowException(InitialisationFailed, "ResourceLocation: Trying to add one without the path being set");
+ // Add it to the Ogre paths
+ Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
+ this->getPath(), this->getArchiveType(), resourceGroup, this->getRecursive());
+ resourceGroup_ = resourceGroup;
+ }
+
+ void ResourceLocation::unload()
+ {
+ // Remove from Ogre paths
+ resourceGroup_.erase();
+ try
+ {
+ Ogre::ResourceGroupManager::getSingleton().removeResourceLocation(
+ this->getPath(), this->getResourceGroup());
+ }
+ catch (const std::exception& ex)
+ {
+ COUT(1) << "Removing of a ResourceLocation failed: " << ex.what() << std::endl;
+ }
+ }
+}
Property changes on: code/branches/resource2/src/orxonox/tools/ResourceLocation.cc
___________________________________________________________________
Added: svn:eol-style
+ native
Added: code/branches/resource2/src/orxonox/tools/ResourceLocation.h
===================================================================
--- code/branches/resource2/src/orxonox/tools/ResourceLocation.h (rev 0)
+++ code/branches/resource2/src/orxonox/tools/ResourceLocation.h 2009-08-11 13:05:02 UTC (rev 5624)
@@ -0,0 +1,74 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+#ifndef _ResourceLocation_H__
+#define _ResourceLocation_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include <string>
+#include "core/BaseObject.h"
+
+namespace orxonox
+{
+ class _OrxonoxExport ResourceLocation : public BaseObject
+ {
+ // for load/unload
+ friend class ResourceCollection;
+
+ public:
+ ResourceLocation(BaseObject* creator);
+ virtual ~ResourceLocation();
+
+ virtual void XMLPort(Element& xmlElement, XMLPort::Mode mode);
+
+ void setPath(const std::string& path) { path_ = path; }
+ const std::string& getPath() const { return path_; }
+
+ void setArchiveType(const std::string& archiveType) { archiveType_ = archiveType; }
+ const std::string& getArchiveType() const { return archiveType_; }
+
+ void setRecursive(bool bRecursive) { bRecursive_ = bRecursive; }
+ bool getRecursive() const { return bRecursive_; }
+
+ const std::string& getResourceGroup() const { return resourceGroup_; }
+
+ private:
+ ResourceLocation(const ResourceLocation&);
+
+ void load(const std::string& resourceGroup);
+ void unload();
+
+ std::string path_;
+ std::string archiveType_;
+ std::string resourceGroup_;
+ bool bRecursive_;
+ };
+}
+
+#endif /* _ResourceLocation_H__ */
Property changes on: code/branches/resource2/src/orxonox/tools/ResourceLocation.h
___________________________________________________________________
Added: svn:eol-style
+ native
More information about the Orxonox-commit
mailing list