410 likes | 478 Views
SE Team 9 GlobalFlyer. Cole Hoosier Ryan Hannebaum Leanne Gray Alex Stampbach. Project Statement. GlobalFlyer allows a player to fly a Wright brothers-style airplane in 3D space using the OGRE graphic rendering engine and the FMOD sound system. Iteration Plans. Fixup
E N D
SE Team 9GlobalFlyer Cole HoosierRyan HannebaumLeanne GrayAlex Stampbach
Project Statement • GlobalFlyer allows a player to fly a Wright brothers-style airplane in 3D space using the OGRE graphic rendering engine and the FMOD sound system.
Iteration Plans • Fixup • 1: Get music and sound effects working again • 2: Get collision detection with buildings working • 3: Get the propellor showing up again • Visual Environment • 1: Add hovering objects to the world • 2: Add proximity detection to hovering objects • 3: Modify texture of hovering objects based on proximity • Icing: Create multiple levels, progressing in difficulty • User Interface • 1: Add mouse control of camera • 2: Add visually-appealing digital readouts of data the user might want • 3: Add the ability to toggle sound, gui, etc.
OCL plan • Areas that lend themselves well to OCL specifications • Collision detection of plane with ground/objects • No re-initialization of sound system • Placement of bubbles/buildings on terrain (must be within the boundaries of the world) • Checking win-condition for a level (must have “touched” all bubbles)
GlobalFlyer Web Site • http://seteam9.cis.ksu.edu/
Class Diagram Overview
The Sound Old New
Bubbly Source ballNode = mSceneMgr->getRootSceneNode ()->createChildSceneNode ( StringConverter::toString (i), Vector3 ( Math::RangeRandom (1000, 14000), Math::RangeRandom(500,1000), Math::RangeRandom (1000, 14000))); ballEntity = mSceneMgr->createEntity (StringConverter::toString (i), "sphere.mesh"); //ballEntity->setMaterialName("GlobalFlyer/YellowSphere"); ballEntity->setMaterialName("GlobalFlyer/RedSphere"); //ballEntity->setMaterialName("GlobalFlyer/BlueSphere"); ballEntity->setCastShadows(true); ballNode->attachObject(ballEntity); sample_application.cpp
Bubbly Source FileSystem=../../new_media/materials/scripts FileSystem=../../new_media/materials/textures resources.cfg
Bubbly Source Texture_spheremap.png
Bubbly Source material GlobalFlyer/RedSphere { technique { pass { ambient 0.5 0 0 diffuse 1 0 0 texture_unit { texture spheremap.png env_map spherical rotate_anim 0.1 }}}} gf.material
Sound Source bool CFmod::initialized = false; bool CFmod::InitSoundSystem() { if (!initialized) { if (!FSOUND_Init(44100, 32, FSOUND_INIT_GLOBALFOCUS)) { DisplayError(); return false; } initialized = true; } return true; } fmod.cpp
Sound Source void CFmod::FreeSoundSystem() { FSOUND_Close(); initialized = false; } fmod.cpp
Sound Source void CFmod::SetLoop(bool loop, int start, int end) { if (m_pSound != NULL) { if (loop) { FSOUND_Sample_SetMode ( m_pSound, FSOUND_LOOP_NORMAL ); if( start >= 0 && end >= 0) { FSOUND_Sample_SetLoopPoints( m_pSound, start, end); } } else { FSOUND_Sample_SetMode ( m_pSound, FSOUND_LOOP_OFF ); } } } fmod.cpp
Sound Source // in constructor CFmod::InitSoundSystem(); musicSound.Load("../../new_media/audio/GlobalFlyer.mp3"); musicSound.SetLoop(true, -1, -1); musicSound.Play(); engineSound.Load("../../new_media/audio/engine.wav"); engineSound.SetLoop(true, 5000, 70000); engineSound.Play(); crashSound.Load("../../new_media/audio/crash.wav"); … // at crash // at restart engineSound.Pause(); crashSound.Stop(); crashSoundStarted = true; crashSoundStarted = false; crashSound.Play(); engineSound.Pause(); ogre_character.cpp
MouseLook • MouseListener, MouseMotionListener • void mouseDragged(MouseEvent* e) • mEventProcessor?!
EventProcessor • ExampleFrameListener.h • mEventProcessor always instantiates • SampleListener.cpp • Initialize mEventProcessor • Add mouse-related event listeners • Start processing events
mouseDragged() void SampleListener::mouseDragged(MouseEvent* e) { //mChar->getCameraNode()->setAutoTracking(false); //mChar->getSightNode()->yaw(Degree(-e->getX()*mRotate)); //mChar->getSightNode()->pitch(Degree(-e->getY()*mRotate)); if (mExCamera) { mExCamera->instantUpdate(mChar->getCameraNode()->getWorldPosition(), mChar->getCameraNode()->getWorldPosition() + (100*(Vector3(-e->getX(), -e->getY(), e->getZ())))); // mExCamera->mouseLook(-e->getRelX(), -e->getRelY(), mRotate); } }
Earned Value • The sum of the planned values for all completed tasks • Shows that tasks were completed at regular intervals up until the 27th when Iteration 1 was schedule to be completed
Schedule Performance Index • Budgeted Cost of Work Performed over Budgeted Cost of Work Scheduled
Schedule Variance • Budgeted Cost of Work Performed less the Budgeted Cost of work Scheduled
Cost Performance Index • Budgeted Cost of Work Performed over Actual Cost of Work Performed • For the first 2 weeks, over estimated • For the last 2 week, under estimated
Cost Variance • Budgeted Cost of Work Performed over Actual Cost of Work Performed • Same as Cost Performance Index
Who has Questions? -Images from texasbestgrok.mu.nu/images/GF2.jpg