se team 9 globalflyer
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
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 PlansFixup
1: Get music and sound effects working again2: Get collision detection with buildings working3: Get the propellor showing up again
Visual Environment1: Add hovering objects to the world2: Add proximity detection to hovering objects3: Modify texture of hovering objects based on proximity
User Interface1: Add mouse control of camera2: Add visually-appealing digital readouts of data the user might want3: Add the ability to toggle sound, gui, etc.
Raw Data up to Presentation 5BCW ACW Est Comp Actual Comp
Iter 1: Fixup 1020 720 2/26/2007 2/3/2007
Iter 1: Visual 660 390 2/26/2007 2/10/2007
Iter 1: UI 600 1470 2/26/2007 2/23/2007
Pres 4 180 240 2/27/2007 2/23/2007
Iter 2: Fixup & VE
- initial research 180 120 3/6/2007 3/5/2007
- create slides 120 60 3/13/2007 3/12/2007
- collision detection with buildings 300 240 3/20/2007 3/10/2007
- proximity detection with bubbles 120 60 3/27/2007 3/10/2007
- create OCL 120 120 3/29/2007 3/26/2007
- test code 60 60 3/30/2007 3/26/2007
- integrate code 60 60 4/1/2007 3/26/2007
Iter 2: UI
- initial research 180 120 3/6/2007 3/5/2007
- create slides 120 60 3/13/2007 3/12/2007
- prettify text 240 600 3/20/2007 3/26/2007
- test readout 120 90 3/27/2007 3/26/2007
- integrate code 120 30 3/30/2007 3/26/2007
Pres 5
- assemble presentation 240 4/1/2007 4/1/2007
Raw Data after Presentation 5BCW ACW Est Comp Actual Comp
Open House 420
- prepare display 240 4/10/2007
- rehearse/test presentation 120 4/13/2007
Iter 3: Fixup
- learn about rotating objects 240 4/22/2007
- fix propellor & test 360 4/29/2007
Iter 3: Visual 800 0 4/28/2007 3/10/2007
Iter 3: UI
- study methods of toggling settings 240 4/22/2007
- implement toggling & test 120 4/29/2007
Pres 6 5/1/2007
- assemble presentation 240 5/1/2007
Final Docs CD 240 5/4/2007
Total 7460 4440
EV Calculations
Date BCWS BCWP ACWP BAC EV SPI SV CPI CV
2/2/2007 0 0 0 7460 0.00% -- 0 -- 0
2/9/2007 0 1020 720 7460 13.67% inf 1020 141.67% 300
2/16/2007 0 1680 1110 7460 22.52% inf 1680 151.35% 570
2/23/2007 0 2460 2820 7460 32.98% inf 2460 87.23% -360
3/2/2007 2460 2460 2820 7460 32.98% 100.00% 0 87.23% -360
3/9/2007 2820 2820 3060 7460 37.80% 100.00% 0 92.16% -240
3/16/2007 3060 3480 3480 7460 46.65% 113.73% 420 100.00% 0
3/30/2007 4200 5000 4440 7460 67.02% 119.05% 800 112.61% 560
Earned Value
• Shows the steady completion of tasks after presentation 4
0.00%
10.00%
20.00%
30.00%
40.00%
50.00%
60.00%
70.00%
80.00%
90.00%
100.00%
2/2/
07
2/9/
07
2/16
/07
2/23
/07
3/2/
07
3/9/
07
3/16
/07
3/23
/07
3/30
/07
Scheduled Performance Index
• On schedule until the end and now we are ahead of schedule
0
0.5
1
1.5
2
2/2/
2007
2/9/
2007
2/16
/200
7
2/23
/200
7
3/2/
2007
3/9/
2007
3/16
/200
7
3/23
/200
7
3/30
/200
7
Scheduled Variance
• On schedule to ahead of schedule back on a finally ending ahead
0
500
1000
1500
2000
2500
3000
2/2/
2007
2/9/
2007
2/16
/200
7
2/23
/200
7
3/2/
2007
3/9/
2007
3/16
/200
7
3/23
/200
7
3/30
/200
7
Cost Performance Index
• Under budget to over and finally ending on budget
0
0.5
1
1.5
2
2/2/
2007
2/9/
2007
2/16
/200
7
2/23
/200
7
3/2/
2007
3/9/
2007
3/16
/200
7
3/23
/200
7
3/30
/200
7
Cost Variance
• Under budget to over and ending on budget
-600
-400
-200
0
200
400
600
800
2/2/
07
2/9/
07
2/16
/07
2/23
/07
3/2/
07
3/9/
07
3/16
/07
3/23
/07
3/30
/07
Division of Time and LOC
Effort (in minutes)
2370, 32%
1560, 21%
2025, 28%
1380, 19%
Cole
Leanne
Ryan
Alex
Lines of Code
205, 33%
200, 33%
105, 17%
105, 17%
Cole
Leanne
Ryan
Alex
OCLAreas 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
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 )
OCL•The FMOD sound system shouldn't be re-initialized
•context CFMod::InitSoundSystem() : bool•pre: self.initialized = false•post: self.initialized = true
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
)
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
Proximity Detection
SampleApplication fills arrays that contain pointers to the buildings and bubbles in the world.
Hit a Building?bool OgreCharacter::inObstacle() { int i; const AxisAlignedBox me = this->mEntity->getWorldBoundingBox(); for (i=0; i<numObstacles; ++i) { if (obstacles[i]->getWorldBoundingBox().intersects(me)) { crashed = true; if (!crashSoundStarted) { engineSound.Pause(); crashSoundStarted = true; crashSound.Play(); } return true; } } return false;}
ogre_character.cpp
Hit a Bubble?bool OgreCharacter::inTarget(){ int i; const AxisAlignedBox me = this->mEntity->getWorldBoundingBox(); for (i=0; i<numTargets; ++i) { if (targets[i]->getWorldBoundingBox().intersects(me)) { targets[i]->setMaterialName("GlobalFlyer/BlueSphere"); targetHit[i] = true; return true; } } return false;}
ogre_character.cpp
Bubbles Left?int OgreCharacter::targetsRemaining(){ int i; int remaining = 0; for (i=0; i<numTargets; ++i) { if (this->targetHit[i] == false) { ++remaining; } } return remaining;}
ogre_character.cpp
Operation Beautify
• eliminate debugging script and Ogre logo
• clean up physics script
• create cockpit graphic
• add graphic as overlay panel material
• orient text aesthetically
gf.materialmaterial GlobalFlyer/cockpit{
technique{
pass{
lighting offscene_blend alpha_blend
texture_unit{
texture cockpit.png}
}}
}
SampleApplication.cpp
Ogre::OverlayContainer* panel = static_cast<OverlayContainer*>(
overlayMgr.createOverlayElement("Panel", "PanelName"));
…
panel->setMaterialName("GlobalFlyer/cockpit");