source: GTP/trunk/App/Demos/Illum/Ogre/src/SpaceStation/include/SpaceStation.h @ 2509

Revision 2509, 23.4 KB checked in by szirmay, 17 years ago (diff)
Line 
1/*
2-----------------------------------------------------------------------------
3This source file is part of OGRE
4    (Object-oriented Graphics Rendering Engine)
5For the latest info, see http://www.ogre3d.org/
6
7Copyright (c) 2000-2005 The OGRE Team
8Also see acknowledgements in Readme.html
9
10You may use this sample code for anything you like, it is not covered by the
11LGPL like the rest of the engine.
12-----------------------------------------------------------------------------
13*/
14
15/**
16    \file
17        Lighting.h
18    \brief
19        Shows lighting support in OGRE. Also demonstrates the use of billboards
20        and controllers for automatic time-relative behaviour.
21*/
22
23
24#include "ExampleApplication.h"
25#include "OgreIlluminationManager.h"
26#include "NXOgre.h"
27#include "SceneSerializer.h"
28#include "Characters.h"
29
30bool highQuality = true;
31
32Scene* NXScene = 0;
33FPSPlayer* gFPSPlayer;
34
35bool PP_glowON = true;
36bool PP_tonemapON = true;
37bool PP_dofON = true;
38
39Real lightpower = 32.0;
40Real glowCut = 50.6;
41Real glowTimeBlur = 0.6;
42Real glowStrech = 1.8;
43Real glowCombine = 0.5;
44
45bool hallLightON = true;
46bool smokeON = true;
47bool smokeVisible = true;
48Timer* smokeOffTimer;
49
50ParticleSystem* smokeSystem;
51
52Entity* LightButton;
53Entity* SmokeButton;
54SceneNode* hlNode;
55SceneNode* rlNode;
56
57int targetCount = 6;
58Vector3 targets[] = {Vector3(-8.5,-1.3, -9.8),
59                                        Vector3(-9.8,-1.3,-10.7),
60                                        Vector3(-6.5,-1.3,-11.5),
61                                        Vector3(-6.3,-1.3,-9.6),
62                                        Vector3(-7.7,-1.3,-10.6),
63                                        Vector3(-5.4,-1.3,-10.9)};
64
65class Scientist : FrameListener
66{
67public:
68        Scientist(String name, SceneManager* mSceneMgr)
69        {
70                scientist = mSceneMgr->createEntity(name, "scientist.mesh");
71                mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
72                mNode->setPosition(-7.5,-1.3,-11);
73                mNode->setScale(0.02,0.02,0.02);
74                mNode->attachObject(scientist);
75                scientist->setCastShadows(true);
76                mNode->_updateBounds();
77                animState = scientist->getAnimationState("idle");
78                animState->setEnabled(true);
79
80                setPriority(20);       
81                Root::getSingleton().addFrameListener(this);
82
83                waitTimer = new Timer();
84                waitTimer->reset();
85
86                wait_min = 2000;
87                wait_max = 5000;
88                waitTime = Math::RangeRandom(wait_min, wait_max);
89
90                targetReached = true;
91                movespeed = 0.2;
92        }
93
94        bool frameStarted(const FrameEvent& evt)
95    {
96                animState->addTime(evt.timeSinceLastFrame * 0.75);
97
98                //mNode->translate(movespeed * 0.001 * Vector3(0,0,1), Node::TS_LOCAL);
99               
100                Vector3 pos = mNode->getWorldPosition();
101                dir = target - pos;
102                if(!targetReached && dir.length() < 0.05)
103                {
104                        waitTimer->reset();
105                        targetReached = true;
106                        animState = scientist->getAnimationState("idle");
107                        animState->setEnabled(true);
108                        animState->setLoop(true);
109                       
110                        Vector3 look = FPSPlayer::thePlayer->getPosition() - pos;
111                        look.y = 0;
112                        look.normalise();
113                        Vector3 right = -look.crossProduct(Vector3::UNIT_Y);
114                        Quaternion q;                   
115                        q.FromAxes(right,Vector3::UNIT_Y, look);
116                        mNode->setOrientation(q);
117
118                }
119                               
120                if(!targetReached)
121                {
122                        //move forward to target
123                        mNode->translate(movespeed * evt.timeSinceLastFrame * 2 * Vector3(0,0,1), Node::TS_LOCAL);
124                }
125                else
126                {
127                        //look for new target
128                        if(waitTimer->getMilliseconds() > waitTime)
129                        {
130                                int nextTarget = (int)(Math::UnitRandom() * targetCount);
131                                target = targets[nextTarget];
132                                dir = target - mNode->getWorldPosition();
133                                dir.normalise();
134                                Vector3 right = -dir.crossProduct(Vector3::UNIT_Y);
135                                Quaternion q;                   
136                                q.FromAxes(right,Vector3::UNIT_Y, dir);
137                                mNode->setOrientation(q);
138
139                                targetReached = false;
140                                animState = scientist->getAnimationState("walk");
141                                animState->setEnabled(true);
142                                animState->setLoop(true);
143                        }
144                }
145
146                return true;
147        }
148
149        Entity* scientist;
150        SceneNode* mNode;
151        Vector3 target;
152        Vector3 dir;
153        float movespeed;
154        bool targetReached;
155        Timer* waitTimer;
156        AnimationState* animState;
157        int wait_min;
158        int wait_max;
159        int waitTime;
160
161};
162
163// Listener class for frame updates
164class SpaceStationFrameListener : public ExampleFrameListener
165{
166protected:
167       
168        unsigned long framecount;
169        SceneNode* mainLightNode;
170        Light* light1;
171        Light* light2;
172        SceneNode* sysNode;
173       
174public:
175    SpaceStationFrameListener(RenderWindow* window, Camera* maincam, SceneNode* lightNode, Light* l, Light* l2, SceneNode* sysNode)
176        :ExampleFrameListener(window, maincam)
177                                 
178    {
179                mainLightNode = lightNode;
180                light1 = l;
181                light2 = l2;
182                framecount = 0;
183                mMoveSpeed /= 50.0;
184                this->sysNode = sysNode;
185
186                mStatsOn = false;
187                showDebugOverlay(mStatsOn);
188                smokeOffTimer = new Timer();
189                smokeOffTimer->reset();
190    }
191
192    bool frameStarted(const FrameEvent& evt)
193    {   
194               
195                if(smokeOffTimer->getMilliseconds()>10)
196                {
197                        if(smokeVisible)
198                        {
199                                smokeVisible = false;
200                                smokeSystem->setVisible(false);
201                        }
202                }
203
204                float dt = evt.timeSinceLastFrame;
205                static float rotate = 0;
206                rotate += dt * 100.0;
207                hlNode->rotate(Vector3(0,1,0),Radian(-Degree(dt * 100.0)));
208                rlNode->rotate(Vector3(0,1,0),Radian(-Degree(dt * 100.0)));
209                Vector3 dir(Math::Cos(Radian(Degree(rotate))), -1.4,Math::Sin(Radian(Degree(rotate))));
210                dir.normalise();
211                if(light1)
212                        light1->setDirection(dir);
213
214                if(light2)
215                {
216                        Vector3 pos = Vector3(-1.6,3,-25.5)+ Vector3(dir.x, 0, dir.z) * 0.3;
217                        light2->setPosition(pos);
218                        dir *= -1;
219                        dir.y = -2.0;
220                        dir.normalise();
221                        light2->setDirection(dir);
222                }
223               
224                return ExampleFrameListener::frameStarted(evt);     
225    }
226       
227        void turnSmokeOff()
228        {
229                smokeSystem->getEmitter(0)->setEmissionRate(0);
230                smokeOffTimer->reset();
231                Ogre::Material* blueMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/bluebutton").getPointer();
232                blueMat->getTechnique(0)->getPass(0)->setAmbient(0.01,0.01,0.01);
233                if(smokeON)
234                        SmokeButton->getParentSceneNode()->translate(0,0.02,0,Node::TS_LOCAL);                 
235        }
236        void lightbuttonpressed()
237        {
238                hallLightON = !hallLightON;
239                                light2->setVisible(hallLightON);
240                        if(!hallLightON)
241                        {
242                                turnSmokeOff();
243                                smokeON = false;
244                               
245                                LightButton->getParentSceneNode()->translate(0,0.02,0,Node::TS_LOCAL);
246                                Ogre::Material* redMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/redbutton").getPointer();
247                                redMat->getTechnique(0)->getPass(0)->setAmbient(0.1,0.01,0.01);
248                                Ogre::Material* lampMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station_lamp").getPointer();
249                                lampMat->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("color",Vector4(0,0,0,0));       
250
251                        }
252                        else
253                        {
254                                LightButton->getParentSceneNode()->translate(0,-0.02,0,Node::TS_LOCAL);
255                                Ogre::Material* redMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/redbutton").getPointer();
256                                redMat->getTechnique(0)->getPass(0)->setAmbient(1,0.1,0.1);                                                     
257                                Ogre::Material* lampMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station_lamp").getPointer();
258                                lampMat->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("color",Vector4(20,20,20,20));           
259                        }
260                       
261                       
262                                               
263        }
264        void smokebuttonpressed()
265        {
266                if(hallLightON)
267                {
268                        smokeON = !smokeON;
269                        if(smokeON)
270                        {
271                                smokeSystem->getEmitter(0)->setEmissionRate(3);
272                                smokeSystem->setVisible(true);
273                                smokeVisible = true;
274
275                                SmokeButton->getParentSceneNode()->translate(0,-0.02,0,Node::TS_LOCAL);
276                                Ogre::Material* blueMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/bluebutton").getPointer();
277                                blueMat->getTechnique(0)->getPass(0)->setAmbient(0.1,0.1,1);                           
278                        }
279                        else
280                        {
281                                turnSmokeOff();
282                                SmokeButton->getParentSceneNode()->translate(0,0.02,0,Node::TS_LOCAL);
283                        }
284                               
285                }
286        }
287
288        bool processUnbufferedKeyInput(const FrameEvent& evt)
289    {
290                gFPSPlayer->processKeyInputs(mInputDevice);
291                               
292                if (mInputDevice->isKeyDown(KC_ADD) && mTimeUntilNextToggle <= 0)
293                {
294                        if (mInputDevice->isKeyDown(KC_RSHIFT))
295                                lightpower /= 1.2;
296                        else
297                                lightpower *= 1.2;
298                        light2->setPowerScale(lightpower);
299                        mTimeUntilNextToggle = 0.2;
300                                mWindow->setDebugText(String("LightPower ") + StringConverter::toString(lightpower));
301                }
302                if (mInputDevice->isKeyDown(KC_SUBTRACT) && mTimeUntilNextToggle <= 0)
303                {
304                        if (mInputDevice->isKeyDown(KC_RSHIFT))
305                                glowCut /= 1.2;
306                        else
307                                glowCut *= 1.2;
308                        Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Station/PostProc/GlowCut").getPointer();
309                        m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("cutValue",glowCut);
310                        mTimeUntilNextToggle = 0.2;
311                        mWindow->setDebugText(String("GlowCut ") + StringConverter::toString(glowCut));
312                }
313                if (mInputDevice->isKeyDown(KC_MULTIPLY) && mTimeUntilNextToggle <= 0)
314                {
315                        if (mInputDevice->isKeyDown(KC_RSHIFT))
316                                glowTimeBlur /= 1.2;
317                        else
318                                glowTimeBlur *= 1.2;
319                        Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Station/PostProc/GlowCut").getPointer();
320                        m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("timeBlur", glowTimeBlur);
321                        mTimeUntilNextToggle = 0.2;
322                        mWindow->setDebugText(String("GlowTimeBlur ") + StringConverter::toString(glowTimeBlur));
323                }
324                if (mInputDevice->isKeyDown(KC_M))
325                {
326                        if (mInputDevice->isKeyDown(KC_RSHIFT))
327                                glowStrech -= 0.01;
328                        else
329                                glowStrech += 0.01;
330                        Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Station/PostProc/GlowBlurH").getPointer();
331                        m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("Stretch", glowStrech);
332                        m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Station/PostProc/GlowBlurV").getPointer();
333                        m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("Stretch", glowStrech);
334                        mWindow->setDebugText(String("GlowStretch ") + StringConverter::toString(glowStrech));
335                }
336                if (mInputDevice->isKeyDown(KC_N))
337                {
338                        if (mInputDevice->isKeyDown(KC_RSHIFT))
339                                glowCombine -= 0.01;
340                        else
341                                glowCombine += 0.01;
342                        Ogre::Material* m = (Ogre::Material*) MaterialManager::getSingleton().getByName("GTP/Station/GlowFinalCombine").getPointer();
343                        m->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("weight2", glowCombine);
344                        mTimeUntilNextToggle = 0.2;
345                        mWindow->setDebugText(String("GlowCombine ") + StringConverter::toString(glowCombine));
346                }
347
348                if (mInputDevice->isKeyDown(KC_3) && mTimeUntilNextToggle <= 0)
349                {
350                        PP_glowON = !PP_glowON;
351                        CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
352                                                                                                                "GTP/Station/PostProc/Glow", PP_glowON);
353                        mTimeUntilNextToggle = 0.2;
354                }
355                if (mInputDevice->isKeyDown(KC_4) && mTimeUntilNextToggle <= 0)
356                {
357                        PP_tonemapON = !PP_tonemapON;
358
359                        CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
360                                                                                                                "GTP/PostProc/ToneMap", PP_tonemapON);
361                       
362                        mTimeUntilNextToggle = 0.2;
363                }
364                if (mInputDevice->isKeyDown(KC_5) && mTimeUntilNextToggle <= 0)
365                {
366                        PP_dofON = !PP_dofON;
367                        CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
368                                                                                                                "GTP/Moria/PostProc/DoF", PP_dofON);
369                        mTimeUntilNextToggle = 0.2;
370                }
371
372                if( mInputDevice->isKeyDown( KC_ESCAPE) )
373        {           
374            return false;
375        }
376                if (mInputDevice->isKeyDown(KC_F) && mTimeUntilNextToggle <= 0)
377        {
378            mStatsOn = !mStatsOn;
379            showDebugOverlay(mStatsOn);
380
381            mTimeUntilNextToggle = 1;
382        }
383                if (mInputDevice->isKeyDown(KC_SYSRQ) && mTimeUntilNextToggle <= 0)
384        {
385                        char tmp[20];
386                        sprintf(tmp, "screenshot_%d.png", ++mNumScreenShots);
387            mWindow->writeContentsToFile(tmp);
388            mTimeUntilNextToggle = 0.5;
389                        mWindow->setDebugText(String("Wrote ") + tmp);
390        }
391                return true;
392                //return ExampleFrameListener::processUnbufferedKeyInput(evt);
393        }
394
395        bool processUnbufferedMouseInput(const FrameEvent& evt)
396        {
397                gFPSPlayer->processMouseInputs(mInputDevice);
398        //      return ExampleFrameListener::processUnbufferedMouseInput(evt);
399
400                static float lasttime = 0;
401                float thistime = Root::getSingleton().getTimer()->getMilliseconds();
402                float dt = ((float)(thistime - lasttime))/ 1000.0;
403                lasttime = thistime;
404
405                static float buttonChangeTime = 0;
406                buttonChangeTime += dt;
407                if( mInputDevice->getMouseButton( 1 ) && buttonChangeTime > 0.25)
408                {
409                        buttonChangeTime = 0;
410                       
411                        Vector3 PlayerPos = FPSPlayer::thePlayer->getPosition();
412                        float dist = (PlayerPos - Vector3(-1.5375, -0.73,-27.6)).length();
413                        if( dist < 1 && FPSPlayer::thePlayer->getDirection().dotProduct(Vector3(0,0,-1))>0)
414                        {
415                                if(PlayerPos.x > -1.5375)
416                                {
417                                        smokebuttonpressed();
418                                }
419                                else
420                                {
421                                        lightbuttonpressed();
422                                }
423                        }
424                }
425                return true;
426        }
427};
428
429/** Application class */
430class SpaceStationApplication : public ExampleApplication
431{
432
433
434
435
436protected:
437        SceneNode* kupolaNode;
438        SceneNode* roomLightNode;
439        SceneNode* hallLightNode;
440        Light* roomLight;
441        Light* hallLight;
442        SceneNode *pSysNode;
443       
444        void loadResources(void)
445        {
446                // Initialise, parse scripts etc
447                ResourceGroupManager::getSingleton().initialiseResourceGroup("Bootstrap");
448                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Basic");
449                ResourceGroupManager::getSingleton().initialiseResourceGroup("General");
450                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_EnvMap");
451                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Caustic");
452                ResourceGroupManager::getSingleton().initialiseResourceGroup("PostProc");
453                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Particles");
454                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_PathMap");
455                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_Diffuse");
456                ResourceGroupManager::getSingleton().initialiseResourceGroup("GTP_SpaceStation");               
457        }
458
459        void createPostproc()
460        {               
461        /*      CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
462                                                                                                                "GTP/SpaceStation/PostProc/DoF");
463                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
464                                                                                                                "GTP/SpaceStation/PostProc/DoF", true);*/
465
466                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
467                                                                                                                "GTP/Station/PostProc/Glow");
468                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
469                                                                                                                "GTP/Station/PostProc/Glow", true);
470               
471                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
472                                                                                                                "GTP/PostProc/ToneMap");
473                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
474                                                                                                                "GTP/PostProc/ToneMap", true); 
475                /*             
476                CompositorManager::getSingleton().addCompositor(mWindow->getViewport(0),
477                                                                                                                "GTP/PostProc/MotionBlur");
478                CompositorManager::getSingleton().setCompositorEnabled(mWindow->getViewport(0),
479                                                                                                                "GTP/PostProc/MotionBlur", false);*/
480               
481        }
482   
483        void chooseSceneManager()
484        {
485                mSceneMgr = mRoot->createSceneManager("OctreeSceneManager");
486                //mSceneMgr = mRoot->createSceneManager("OcclusionCullingSceneManager");
487        }
488
489        void createScene(void) ///TOWERS
490    {
491                roomLight = hallLight = 0;
492
493                std::string occlusion_cfg("OcclusionCulling.cfg");
494                //mSceneMgr->setWorldGeometry(occlusion_cfg);
495               
496                //Overlay* mainOverlay = OverlayManager::getSingleton().getByName("MORIA/MainOverlay");
497                //mainOverlay->show();
498
499                createPostproc();
500
501                OgreIlluminationManager::getSingleton().setMainCamera(mCamera);
502                OgreIlluminationManager::getSingleton().setMainViewport(mWindow->getViewport(0));
503                 OgreIlluminationManager::getSingleton().setFocusingSM(false);
504           OgreIlluminationManager::getSingleton().setShadowMapSize(700);
505           OgreIlluminationManager::getSingleton().setBlurShadowMap(highQuality);
506           if(highQuality)
507                   OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_SPOTLIGHT, "GTP/Basic/Distance_Normalized");
508           else
509                   OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_SPOTLIGHT, "GTP/Basic/Depth");//GTP/Basic/Distance_Normalize
510           OgreIlluminationManager::getSingleton().setShadowMapMaterialName(Light::LT_POINT, "GTP/Basic/Distance_Normalized");
511           OgreIlluminationManager::getSingleton().setUseLISPSM(false);
512           OgreIlluminationManager::getSingleton().joinSharedRuns(false);
513                               
514                Root::getSingleton()._setCurrentSceneManager(mSceneMgr);
515                mCamera->setPosition(0,0,0);
516                //mCamera->setPosition(0,100,0);
517                //mCamera->lookAt(0,-1,0);
518                mCamera->setFOVy(Radian(Degree(80)));
519                mCamera->setNearClipDistance(0.001);
520                mCamera->setFarClipDistance(820);
521                // Set ambient light
522       // mSceneMgr->setAmbientLight(ColourValue(0.1, 0.1, 0.1));
523                //mSceneMgr->setSkyBox(true, "Examples/EveningSkyBox", 500);
524               
525                SceneNode* rootNode = mSceneMgr->getRootSceneNode();
526               
527                SceneSerializer s(mSceneMgr);
528                DataStreamPtr inputStream;                             
529                inputStream = ResourceGroupManager::getSingleton().openResource("station.level");       
530                World* NXWorld = new World("FrameListener: no, log: html");
531                NXWorld->getPhysXDriver()->createFrameListener(90);
532                NXScene = NXWorld->createScene("Main", mSceneMgr, "gravity: yes, floor: no");
533                s.setScene(NXScene);
534                s.setWorld(NXWorld);
535                s.parseScript(inputStream, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
536                s.parseEntryPoints("StationPrmEntryPoints.text");
537       
538                NXScene->createActor("bound", new MeshShape("stationbound.mesh"), Vector3(0,0,0), "static: yes");
539                NXScene->createActor("bound2", new MeshShape("stationbound2.mesh"), Vector3(0,0,0), "static: yes");
540               
541                hallLight = mSceneMgr->createLight("hallLight");
542                hallLight->setType(Light::LT_SPOTLIGHT);
543                hallLight->setCastShadows(true);
544        hallLight->setDiffuseColour(ColourValue::White);
545                hallLight->setSpecularColour(ColourValue::White);
546                hallLightNode = rootNode->createChildSceneNode();
547               
548                //hallLightNode->setPosition(-1.6,3,-25.5);             
549                hallLight->setPowerScale(200);
550                hallLight->setDirection(0,0,-1);
551                hallLightNode->attachObject(hallLight);
552                hallLight->setSpotlightRange(Degree(0),Degree(140));
553                hallLight->setAttenuation(20.0, 0, 0, 3);
554                hallLight->setVisible(hallLightON);
555
556               
557                roomLight = mSceneMgr->createLight("roomLight");
558                roomLight->setType(Light::LT_SPOTLIGHT);
559                roomLight->setCastShadows(true);
560        roomLight->setDiffuseColour(ColourValue::White);
561                roomLight->setSpecularColour(ColourValue::White);
562                roomLightNode = rootNode->createChildSceneNode();
563               
564                roomLightNode->setPosition(-7.5,1,-11);         
565                roomLight->setPowerScale(50);
566                roomLight->setDirection(0,0,-1);
567                roomLightNode->attachObject(roomLight);
568                roomLight->setSpotlightRange(Degree(0),Degree(140));
569                roomLight->setAttenuation(20.0, 0, 0, 3);
570        /*
571                BillboardSet* bbs = mSceneMgr->createBillboardSet("bb", 1);
572                bbs->setDefaultDimensions(0.3, 0.3);
573                bbs->createBillboard(Vector3::ZERO, ColourValue::White);
574                bbs->setMaterialName("Flare");
575                roomLightNode->attachObject(bbs);*/
576
577
578                Entity* CauCaster = mSceneMgr->createEntity("CauCaster", "sphere.mesh");
579                SceneNode* casterNode = rootNode->createChildSceneNode();
580                casterNode->setPosition(-1.5, 1.0, -25);
581                casterNode->setScale(0.75, .75, 0.75);
582                CauCaster->setMaterialName("SpaceStation_CausticCaster");
583                casterNode->attachObject(CauCaster);
584                casterNode->_updateBounds();
585                CauCaster->setCastShadows(true);
586
587                smokeSystem = mSceneMgr->createParticleSystem("psys1", "GTP/Station/Smoke");
588                smokeSystem->setKeepParticlesInLocalSpace(false);
589                SceneNode *pSysNode = rootNode->createChildSceneNode("psys1");
590                pSysNode->attachObject(smokeSystem);
591                smokeSystem->getEmitter(0)->setPosition(Vector3(0,-3.7,0));
592                smokeSystem->setCastShadows(false);
593                pSysNode->setPosition(-1.5, 3, -25);
594                smokeSystem->setVisible(smokeVisible);
595
596                LightButton = mSceneMgr->createEntity("lightButton", "cube.mesh");
597                SceneNode* lbNode = rootNode->createChildSceneNode();
598                lbNode->setScale(0.1,0.1,0.1);
599                lbNode->setPosition(-1.8, -0.73, -27.6);
600                lbNode->rotate(Vector3(1,0,0), Degree(30.0));
601                lbNode->attachObject(LightButton);
602                lbNode->translate(0,-0.02,0,Node::TS_LOCAL);
603                LightButton->setMaterialName("Station/redbutton");
604               
605                SmokeButton = mSceneMgr->createEntity("smokeButton", "cube.mesh");
606                SceneNode* sbNode = rootNode->createChildSceneNode();
607                sbNode->setScale(0.1,0.1,0.1);
608                sbNode->setPosition(-1.25, -0.73, -27.6);
609                sbNode->rotate(Vector3(1,0,0), Degree(30.0));
610                sbNode->attachObject(SmokeButton);
611                sbNode->translate(0,-0.02,0,Node::TS_LOCAL);
612                SmokeButton->setMaterialName("Station/bluebutton");             
613
614                Entity* hallLampHolder = mSceneMgr->createEntity("hallLampHolder", "hallLampHolder.mesh");
615                SceneNode* hlhNode = rootNode->createChildSceneNode();
616                hlhNode->setPosition(-1.547, 4.308, -24.242);
617                hlhNode->attachObject(hallLampHolder);
618
619                Entity* hallLamp = mSceneMgr->createEntity("hallLamp", "hallLamp.mesh");
620                hlNode = rootNode->createChildSceneNode();
621                hlNode->setPosition(-1.547, 2.899, -24.242);
622                hlNode->attachObject(hallLamp);
623                hallLamp->setCastShadows(false);
624
625                Entity* roomLamp = mSceneMgr->createEntity("roomLamp", "roomLamp.mesh");
626                rlNode = rootNode->createChildSceneNode();
627                rlNode->setPosition(-7.579, 1.000, -10.831);
628                rlNode->attachObject(roomLamp);
629                rlNode->rotate(Vector3(0,1,0),Radian(Degree(180)));
630                roomLamp->setCastShadows(false);
631
632                new Scientist("scientist", mSceneMgr);
633                PlayerCharacter::frameListenerPriority = 30;
634       
635                gFPSPlayer = new FPSPlayer(NXScene, mSceneMgr, Vector3(0.4, 1.0, 0.35),/*Vector3(-7.5,0.0,-11)*/Vector3(0, 0.0, 11.5), 1.15, mCamera, false);
636                /*gFPSPlayer->addPlayerMesh("FPSarm.mesh", 0.02, false);
637                gFPSPlayer->addWeaponModel("sword.mesh", "joint28");
638       
639                TrollCharacter* troll = new TrollCharacter("troll1", NXScene, mSceneMgr, Vector3(1.5, 3.0, 1.2), Vector3(15, 10, 15), false);
640                troll->addPlayerMesh("troll.mesh", 0.05, false);
641                troll->addWeaponModel("trollMace.mesh", "RightHand");
642
643                CharacterManager::getSingleton().mScene = NXScene;
644                CharacterManager::getSingleton().mSceneManager = mSceneMgr;*/
645
646                OgreIlluminationManager::getSingleton().initTechniques();
647   }
648       
649        void createPlane(Ogre::String _name, Ogre::String _material, Ogre::Vector3 _pos, Ogre::Vector2 _size, Ogre::Vector2 _subdivisions = Ogre::Vector2(1,1))
650        {
651                Plane _plane;
652        _plane.normal = Vector3::UNIT_Y;
653        _plane.d = 0;
654
655
656        MeshManager::getSingleton().createPlane(_name + ".plane",
657            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
658            _plane,_size.x,_size.y,1,1,true,1,_subdivisions.x,_subdivisions.y,Vector3::UNIT_Z);
659       
660                Entity *_entity = mSceneMgr->createEntity(_name + ".entity", _name + ".plane");
661        _entity->setMaterialName(_material);
662
663                SceneNode* _node = mSceneMgr->getRootSceneNode()->createChildSceneNode(_name + ".node");
664                _node->attachObject(_entity);
665                _node->setPosition(_pos);
666
667        }
668
669        void createFrameListener(void)
670    {
671                // This is where we instantiate our own frame listener
672                mFrameListener= new SpaceStationFrameListener(mWindow,
673                        mCamera, roomLightNode, roomLight, hallLight, pSysNode  );
674        mFrameListener->setPriority(10);       
675                mRoot->addFrameListener(mFrameListener);
676//              gFPSPlayer->setPriority(20);
677//              mRoot->addFrameListener(gFPSPlayer);
678                OgreIlluminationManager::getSingleton().setPriority(100);
679            mRoot->addFrameListener(&OgreIlluminationManager::getSingleton());
680         
681    }
682
683};
684
Note: See TracBrowser for help on using the repository browser.