Presentation is loading. Please wait.

Presentation is loading. Please wait.

SE Team 9 GlobalFlyer Cole Hoosier Ryan Hannebaum Leanne Gray Alex Stampbach.

Similar presentations


Presentation on theme: "SE Team 9 GlobalFlyer Cole Hoosier Ryan Hannebaum Leanne Gray Alex Stampbach."— Presentation transcript:

1 SE Team 9 GlobalFlyer Cole Hoosier Ryan Hannebaum Leanne Gray Alex Stampbach

2 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.

3 Iteration Plans Fixup 1: Get music and sound effects working again 2: Get collision detection with buildings working 3: Update Ogre library versions 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 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.

4 GlobalFlyer Web Site http://seteam9.cis.ksu.edu/

5 The Plan and Analysis

6 Plan for Iteration 3

7 Comparisons of Effort

8

9 BCWACWEst CompActual Comp Iter 1: Fixup10207202/26/20072/3/2007 Iter 1: Visual6603902/26/20072/10/2007 Iter 1: UI60014702/26/20072/23/2007 Pres 41802402/27/20072/23/2007 Iter 2: Fixup & VE - initial research1801203/6/20073/5/2007 - create slides120603/13/20073/12/2007 - collision detection with buildings3002403/20/20073/10/2007 - proximity detection with bubbles120603/27/20073/10/2007 - create OCL120 3/29/20073/26/2007 - test code60 3/30/20073/26/2007 - integrate code60 4/1/20073/26/2007 Iter 2: UI - initial research1801203/6/20073/5/2007 - create slides120603/13/20073/12/2007 - prettify text2406003/20/20073/26/2007 - test readout120903/27/20073/26/2007 - integrate code120303/30/20073/26/2007 Pres 5 - assemble presentation240 4/1/2007 Open House - prepare display2403304/10/20074/9/2007 - rehearse/test presentation12004/13/20074/9/2007 Iter 3: Update Ogre libraries - update libraries and fix code3604804/22/20074/23/2007 - test code and create slides120 4/27/2007 Iter 3: Visual80004/27/20073/10/2007 Iter 3: UI - study methods of toggling settings2401804/22/20074/25/2007 - implement toggling & test120 4/27/20074/25/2007 Pres 6 - assemble presentation240 4/29/2007 Final Docs CD2401805/4/20074/29/2007 Total69206330

10 Earned Value EV= Budgeted cost of Work Performed over Budgeted at Completion Shows our the gradual completion of tasks over time

11 Schedule Performance Index SPI= Budgeted Cost of Work Performed over Budgeted Cost of Work Schedule Shows that we are always on or ahead of schedule

12 Schedule Variance SV= Budgeted Cost of Work Performed minus Budgeted Cost of Work Schedule Show how far ahead of schedule (or right on target) we were

13 Cost Performance Index CPI= Budgeted Cost of Work Performed over Actual Cost of Work Performed Show us under budget and over budget but finally ending under (just barely)

14 Cost Variance CV= Budgeted Cost of Work Performed minus Actual Cost of Work Performed Show just how much over and under budget we were

15 OCL

16 Areas that lend themselves well to OCL specifications The airplane cannot fly beneath the ground The FMOD sound system shouldn't be re-initialized The bubbles and buildings must be within the boundaries of the world Checking the win-condition for a level, theoretically we would load a new level after hitting all targets

17 OCL The airplane cannot fly beneath the ground context OgreCharacter::update(elapsedTime, *input) : void post: self.raySceneQuery->forAll( worldFragment.singleIntersection.y < self.mMainNode.getPosition().y )

18 OCL The FMOD sound system shouldn't be re-initialized context CFMod::InitSoundSystem() : bool pre: self.initialized = false post: self.initialized = true

19 OCL The bubbles and buildings must be within the boundaries of the world context SampleApplication::createScene() : void post: self.buildings.getBoundingBox->forAll( getMinimum.x >= 0 and getMinimum.z >= 0 and getMaximum.x <= 10000 and getMaximum.z <= 10000 ) post: self.bubbles.getBoundingBox->forAll( getMinimum.x >= 0 and getMinimum.z >= 0 and getMaximum.x <= 10000 and getMaximum.z <= 10000 )

20 OCL Checking the win-condition for a level -- theoretically we would load a new level after hitting all targets context OgreCharacter::targetsRemaining() : int result = self.targetHit->count(false) context OgreCharacter::checkWin() : bool result = self.targetsRemaining = 0 context SampleListener::frameStarted(frameEvent) : void post: self.mChar.checkWin = false

21 Testing Code void Sound::Play() { debug ("Sound::Play 1"); if (m_pSound != NULL) { debug ("Sound::Play 2a"); m_soundChannel = FSOUND_PlaySound(FSOUND_FREE, m_pSound); } else { debug ("Sound::Play 2b."); } debug ("Sound::Play 3 (last)"); }

22 Testing Output Airplane::Airplane (only) Airplane::GetPosit (only) Airplane::GetRelVeloc (only) Airplane::GetVeloc (only) Airplane::checkWin (only) Airplane::inObstacle 1 Airplane::inObstacle 2 Airplane::inObstacle 3a Airplane::inObstacle 3b. Airplane::inObstacle 4a Airplane::inObstacle 4b. Airplane::inObstacle 5a Airplane::inObstacle 5b. Airplane::inObstacle 6 (last)

23 Exceptions to C1 Sound::InitSoundSytem 3a -- would need an invalid version of fmod Sound::InitSoundSytem 4a -- would need a bad version of fmod Sound::Load 3a -- fmod would have to screw up to hit this case Sound::Mute 2b. -- fmod would have to screw up to hit this case Sound::Pause 2b. -- fmod would have to screw up to hit this case Sound::SetLoop 2b. -- fmod would have to screw up to hit this case bool Sound::Load(char *strName) { debug ("Sound::Load 1"); bool retval = false; // set to 'true' if successfully loaded // if FMOD isn't loaded, or strName is invalid, we can't load a sample if (initialized && strName) { debug ("Sound::Load 2a"); m_pSound = FSOUND_Sample_Load(FSOUND_FREE, strName, 0, 0, 0); // make sure we got a valid sound pointer if (!m_pSound ) { debug ("Sound::Load 3a"); // bad news, bail out with an error message DisplayError(); ……..

24 UML Models

25 FrameStarted Sequence Diag

26 Old Class Diagram Overview

27 New Class Diagram Airplane Sound PhysicsEngine ExtendedFrame Listener Extended Camera GlobalFlyer Level Manager

28 GlobalFlyer

29 ExtendedFrameListener

30 ExtendedCamera

31 LevelManager

32 Airplane

33 PhysicsEngine

34 Sound

35 New Features and Updates

36 Library Update Ogre has updated from 1.2.3 to 1.4.0 during the year. We thought it might be nice to start next year’s team with updated code.

37 Where’s the Keyboard? using namespace OIS; void Airplane::Update (Real elapsedTime, Keyboard *keyboard, Mouse *mouse) { … if ( keyboard->isKeyDown(KC_W) …)…. …} airplane.{h,c}

38 LevelManager Sets up the world –Bubbles –Buildings Format follows: int buildingPositions[MAX_LEVEL][MAX_BUILDINGS][6] = { … {//level 2 {5000, 0, 6000, 50, 950, 3000}, // x, y, z, width, height, length {10000, 0, 6000, 50, 950, 3000}, // 1 {6000, 0, 5000, 3000, 950, 50}, // 2 {6000, 0, 10000, 3000, 950, 50}, {6000, 1000, 6000, 3000, 50, 3000}, {0, 0, 0, 0, 0, 0}, // 5

39 LevelManager

40

41 Camera Controls if (mKeyboard->isKeyDown (KC_F1) && mExCamera) { mExCamera->SetTightness (1.0f); } else if (mKeyboard->isKeyDown (KC_F2) && mExCamera) { mExCamera->SetTightness (0.1f); } else if (mKeyboard->isKeyDown (KC_F3) && mExCamera) { mExCamera->SetTightness (0.05f); } else if (mKeyboard->isKeyDown (KC_F4) && mExCamera) …….. extended_frame_listener.cpp

42 Camera Controls

43 Sight & Sound bind keys to toggle cockpit and sound create guard variable to ensure only a single toggle per click

44 Toggle Cockpit F9

45 Void ExtendedFrameListener::setTextArea(…Ogre::Overlay* olay){ overlay = olay; … } //toggle GUI if (mInputDevice->isKeyDown (KC_F9) && keyCountGUI >= 0.5) { if (overlay->isVisible()) { overlay->hide(); } else { overlay->show(); } keyCountGUI = 0; }

46 Toggle Sound (demonstration) F10

47 Toggle Sound if (mKeyboard->isKeyDown (KC_F10) && mChar && keyCountSound >= 0.5) { bool enabled; enabled = mChar->ToggleSound(); keyCountSound = 0; if (enabled) { status->setCaption("Sound Enabled"); } else { status->setCaption("Sound Disabled"); } } else if (keyCountSound >= 4.0) { status->setCaption(""); } void Airplane::toggleSound() { soundEnabled = !soundEnabled; musicSound.Mute(); if (soundEnabled) { if (crashed) { crashSound.Mute(); } else { engineSound.Play(); } } else { if (crashSoundStarted) { crashSound.Mute(); } else { engineSound.Stop(); }

48 Protection from Rapid-Fire key press was registering every frame (up to 250 times per second) Introduced timer to guard against this rapid-fire toggling once toggle is registered, cannot be registered again for 0.5 second

49 The Result:

50 Who has Questions? -Images from texasbestgrok.mu.nu/images/GF2.jpg


Download ppt "SE Team 9 GlobalFlyer Cole Hoosier Ryan Hannebaum Leanne Gray Alex Stampbach."

Similar presentations


Ads by Google