Ignore:
Timestamp:
07/02/07 20:24:25 (17 years ago)
Author:
szirmay
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Illum/Ogre/src/SpaceStation/include/SpaceStation.h

    r2472 r2491  
    5252Entity* LightButton; 
    5353Entity* SmokeButton; 
    54  
    55 AnimationState* scientistAnimState; 
     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                                 
     111                if(!targetReached) 
     112                { 
     113                        //move forward to target 
     114                        mNode->translate(movespeed * 0.1 * Vector3(0,0,1), Node::TS_LOCAL); 
     115                } 
     116                else 
     117                { 
     118                        //look for new target 
     119                        if(waitTimer->getMilliseconds() > waitTime) 
     120                        { 
     121                                int nextTarget = (int)(Math::UnitRandom() * targetCount); 
     122                                target = targets[nextTarget]; 
     123                                dir = target - mNode->getWorldPosition(); 
     124                                dir.normalise(); 
     125                                Vector3 right = -dir.crossProduct(Vector3::UNIT_Y); 
     126                                Quaternion q;                    
     127                                q.FromAxes(right,Vector3::UNIT_Y, dir); 
     128                                mNode->setOrientation(q); 
     129 
     130                                targetReached = false; 
     131                                animState = scientist->getAnimationState("walk"); 
     132                                animState->setEnabled(true); 
     133                                animState->setLoop(true); 
     134                        } 
     135                } 
     136 
     137                return true; 
     138        } 
     139 
     140        Entity* scientist; 
     141        SceneNode* mNode; 
     142        Vector3 target; 
     143        Vector3 dir; 
     144        float movespeed; 
     145        bool targetReached; 
     146        Timer* waitTimer; 
     147        AnimationState* animState; 
     148        int wait_min; 
     149        int wait_max; 
     150        int waitTime; 
     151 
     152}; 
    56153 
    57154// Listener class for frame updates 
     
    86183    bool frameStarted(const FrameEvent& evt) 
    87184    {    
    88                 scientistAnimState->addTime(evt.timeSinceLastFrame); 
    89  
     185                 
    90186                if(smokeOffTimer->getMilliseconds()>10) 
    91187                { 
     
    100196                static float rotate = 0; 
    101197                rotate += dt * 100.0; 
    102                 Vector3 dir(Math::Sin(Radian(Degree(rotate))), -1.4,Math::Cos(Radian(Degree(rotate)))); 
     198                hlNode->rotate(Vector3(0,1,0),Radian(-Degree(dt * 100.0))); 
     199                rlNode->rotate(Vector3(0,1,0),Radian(-Degree(dt * 100.0))); 
     200                Vector3 dir(Math::Cos(Radian(Degree(rotate))), -1.4,Math::Sin(Radian(Degree(rotate)))); 
    103201                dir.normalise(); 
    104202                if(light1) 
     
    122220                smokeSystem->getEmitter(0)->setEmissionRate(0); 
    123221                smokeOffTimer->reset(); 
    124         } 
    125         void smokebuttonpressed() 
     222                Ogre::Material* blueMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/bluebutton").getPointer(); 
     223                blueMat->getTechnique(0)->getPass(0)->setAmbient(0.01,0.01,0.01); 
     224                if(smokeON) 
     225                        SmokeButton->getParentSceneNode()->translate(0,0.02,0,Node::TS_LOCAL);                   
     226        } 
     227        void lightbuttonpressed() 
    126228        { 
    127229                hallLightON = !hallLightON; 
     
    129231                        if(!hallLightON) 
    130232                        { 
     233                                turnSmokeOff(); 
    131234                                smokeON = false; 
    132                                 turnSmokeOff(); 
     235                                 
     236                                LightButton->getParentSceneNode()->translate(0,0.02,0,Node::TS_LOCAL); 
     237                                Ogre::Material* redMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/redbutton").getPointer(); 
     238                                redMat->getTechnique(0)->getPass(0)->setAmbient(0.1,0.01,0.01);  
     239                                Ogre::Material* lampMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station_lamp").getPointer(); 
     240                                lampMat->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("color",Vector4(0,0,0,0));        
     241 
    133242                        } 
    134         } 
    135         void lightbuttonpressed() 
     243                        else 
     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(1,0.1,0.1);                                                      
     248                                Ogre::Material* lampMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station_lamp").getPointer(); 
     249                                lampMat->getTechnique(0)->getPass(0)->getFragmentProgramParameters()->setNamedConstant("color",Vector4(20,20,20,20));            
     250                        } 
     251                         
     252                         
     253                                                 
     254        } 
     255        void smokebuttonpressed() 
    136256        { 
    137257                if(hallLightON) 
     
    143263                                smokeSystem->setVisible(true); 
    144264                                smokeVisible = true; 
     265 
     266                                SmokeButton->getParentSceneNode()->translate(0,-0.02,0,Node::TS_LOCAL); 
     267                                Ogre::Material* blueMat = (Ogre::Material*) MaterialManager::getSingleton().getByName("Station/bluebutton").getPointer(); 
     268                                blueMat->getTechnique(0)->getPass(0)->setAmbient(0.1,0.1,1);                             
    145269                        } 
    146270                        else 
    147271                        { 
    148272                                turnSmokeOff(); 
     273                                SmokeButton->getParentSceneNode()->translate(0,0.02,0,Node::TS_LOCAL); 
    149274                        } 
    150275                                 
     
    279404                        if( dist < 1 && FPSPlayer::thePlayer->getDirection().dotProduct(Vector3(0,0,-1))>0) 
    280405                        { 
    281                                 if(PlayerPos.x > -1.5375)//lightbutton 
     406                                if(PlayerPos.x > -1.5375) 
     407                                { 
     408                                        smokebuttonpressed(); 
     409                                } 
     410                                else 
    282411                                { 
    283412                                        lightbuttonpressed(); 
    284                                 } 
    285                                 else//smokebutton 
    286                                 { 
    287                                         smokebuttonpressed(); 
    288413                                } 
    289414                        } 
     
    466591                lbNode->rotate(Vector3(1,0,0), Degree(30.0)); 
    467592                lbNode->attachObject(LightButton); 
     593                lbNode->translate(0,-0.02,0,Node::TS_LOCAL); 
    468594                LightButton->setMaterialName("Station/redbutton"); 
    469595                 
     
    474600                sbNode->rotate(Vector3(1,0,0), Degree(30.0)); 
    475601                sbNode->attachObject(SmokeButton); 
    476                 SmokeButton->setMaterialName("Station/bluebutton"); 
    477  
    478                 Entity* scientist = mSceneMgr->createEntity("scientist", "scientist.mesh"); 
    479                 //scientist->setMaterialName("GTP/Diffuse/Disc2Point"); 
    480                 SceneNode* aNode = rootNode->createChildSceneNode(); 
    481                 aNode->setPosition(-7.5,-1.3,-11); 
    482                 aNode->setScale(0.02,0.02,0.02); 
    483                 aNode->attachObject(scientist); 
    484                 scientist->setCastShadows(true); 
    485                 aNode->_updateBounds(); 
    486                 AxisAlignedBox bb4 = scientist->getWorldBoundingBox(); 
    487                 AxisAlignedBox bb3 = scientist->getBoundingBox(); 
    488                 Ogre::Sphere bs2 = scientist->getWorldBoundingSphere(); 
    489                 scientistAnimState = scientist->getAnimationState("idle"); 
    490                 scientistAnimState->setEnabled(true); 
    491  
    492                 PlayerCharacter::frameListenerPriority = 20; 
    493          
    494                 gFPSPlayer = new FPSPlayer(NXScene, mSceneMgr, Vector3(0.4, 1.0, 0.35),/* Vector3(-0.6,-0.5,-24)*/Vector3(0, -0.5, 11.5), 1.15, mCamera, false); 
     602                sbNode->translate(0,-0.02,0,Node::TS_LOCAL); 
     603                SmokeButton->setMaterialName("Station/bluebutton");              
     604 
     605                Entity* hallLampHolder = mSceneMgr->createEntity("hallLampHolder", "hallLampHolder.mesh"); 
     606                SceneNode* hlhNode = rootNode->createChildSceneNode(); 
     607                hlhNode->setPosition(-1.547, 4.308, -24.242); 
     608                hlhNode->attachObject(hallLampHolder); 
     609 
     610                Entity* hallLamp = mSceneMgr->createEntity("hallLamp", "hallLamp.mesh"); 
     611                hlNode = rootNode->createChildSceneNode(); 
     612                hlNode->setPosition(-1.547, 2.899, -24.242); 
     613                hlNode->attachObject(hallLamp); 
     614                hallLamp->setCastShadows(false); 
     615 
     616                Entity* roomLamp = mSceneMgr->createEntity("roomLamp", "roomLamp.mesh"); 
     617                rlNode = rootNode->createChildSceneNode(); 
     618                rlNode->setPosition(-7.579, 1.000, -10.831); 
     619                rlNode->attachObject(roomLamp);  
     620                rlNode->rotate(Vector3(0,1,0),Radian(Degree(180))); 
     621                roomLamp->setCastShadows(false); 
     622 
     623                new Scientist("scientist", mSceneMgr); 
     624                PlayerCharacter::frameListenerPriority = 30; 
     625         
     626                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); 
    495627                /*gFPSPlayer->addPlayerMesh("FPSarm.mesh", 0.02, false); 
    496628                gFPSPlayer->addWeaponModel("sword.mesh", "joint28"); 
Note: See TracChangeset for help on using the changeset viewer.