Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/resource2/src/orxonox/tools/Mesh.cc @ 5684

Last change on this file since 5684 was 5684, checked in by rgrieder, 15 years ago

Build fix for Ogre 1.6 Shoggoth.
Everything runs except for the particle scripts where the syntax is mutually exclusive between 1.4 and 1.6
This probably forces us to have two particle scripts folders or some sort of ä preprocessor because 1.6 requires the "particle_system" keyword in front of the script and 1.4 doesn't accept that.

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *                    > www.orxonox.net <
4 *
5 *
6 *   License notice:
7 *
8 *   This program is free software; you can redistribute it and/or
9 *   modify it under the terms of the GNU General Public License
10 *   as published by the Free Software Foundation; either version 2
11 *   of the License, or (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
21 *
22 *   Author:
23 *      Fabian 'x3n' Landau
24 *   Co-authors:
25 *      ...
26 *
27 */
28
29#include "Mesh.h"
30
31#include <cassert>
32#include <sstream>
33#include <string>
34#include <OgreEntity.h>
35#include <OgreSceneManager.h>
36
37#include "util/Convert.h"
38#include "util/StringUtils.h"
39#include "core/GameMode.h"
40
41namespace orxonox
42{
43    unsigned int Mesh::meshCounter_s = 0;
44
45    Mesh::Mesh()
46    {
47        this->entity_ = 0;
48        this->bCastShadows_ = true;
49    }
50
51    Mesh::~Mesh()
52    {
53        if (this->entity_ && this->scenemanager_)
54            this->scenemanager_->destroyEntity(this->entity_);
55    }
56
57    void Mesh::setMeshSource(Ogre::SceneManager* scenemanager, const std::string& meshsource)
58    {
59        assert(scenemanager);
60
61        this->scenemanager_ = scenemanager;
62
63        if (this->entity_)
64            this->scenemanager_->destroyEntity(this->entity_);
65
66        if (GameMode::showsGraphics())
67        {
68            try
69            {
70                this->entity_ = this->scenemanager_->createEntity("Mesh" + multi_cast<std::string>(Mesh::meshCounter_s++), meshsource);
71                this->entity_->setCastShadows(this->bCastShadows_);
72
73#if OGRE_VERSION < 0x010600
74                this->entity_->setNormaliseNormals(true);
75                /*
76                    Excerpt from Ogre forum:
77                    "Note that the above is only for the fixed function pipeline.
78                    If/when you get into shaders, you'll need to manually normalize() the normal inside the vertex or pixel shader."
79
80                    I don't know exactly what this means, but I put this here if there will be problems with shaders.
81                */
82#endif
83            }
84            catch (...)
85            {
86                COUT(1) << "Error: Couln't load mesh \"" << meshsource << "\"" << std::endl;
87                this->entity_ = 0;
88            }
89        }
90    }
91
92    void Mesh::setCastShadows(bool bCastShadows)
93    {
94        this->bCastShadows_ = bCastShadows;
95        if (this->entity_)
96            this->entity_->setCastShadows(this->bCastShadows_);
97    }
98
99    const std::string& Mesh::getName() const
100    {
101        if (this->entity_)
102            return this->entity_->getName();
103        else
104            return BLANKSTRING;
105    }
106
107    void Mesh::setVisible(bool bVisible)
108    {
109        if (this->entity_)
110            this->entity_->setVisible(bVisible);
111    }
112
113    bool Mesh::isVisible() const
114    {
115        if (this->entity_)
116            return this->entity_->getVisible();
117        else
118            return false;
119    }
120}
Note: See TracBrowser for help on using the repository browser.