Plays a video file. More...
Public Member Functions | |
| PendulumVideoScreen () | |
| Constructor. | |
| override void | LoadContent () |
| Loads graphics content for this screen. The background texture is quite big, so we use our own local ContentManager to load it. This allows us to unload before going from the menus into the game itself, wheras if we used the shared ContentManager provided by the Game class, the content would remain loaded forever. | |
| override void | UnloadContent () |
| Unloads graphics content for this screen. | |
| override void | HandleInput (InputState input) |
| Lets the game respond to player input. Unlike the Update method, this will only be called when the gameplay screen is active. | |
| override void | Update (GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen) |
| Updates the background screen. Unlike most screens, this should not transition off even if it has been covered by another screen: it is supposed to be covered, after all! This overload forces the coveredByOtherScreen parameter to false in order to stop the base Update method wanting to transition off. | |
| override void | Draw (GameTime gameTime) |
| Draws the background screen. | |
Plays a video file.
Definition at line 22 of file PendulumVideoScreen.cs.
| PendulumGame.PendulumVideoScreen.PendulumVideoScreen | ( | ) |
Constructor.
Definition at line 58 of file PendulumVideoScreen.cs.
00059 { 00060 TransitionOnTime = TimeSpan.FromSeconds(0.5); 00061 TransitionOffTime = TimeSpan.FromSeconds(0.5); 00062 }
| override void PendulumGame.PendulumVideoScreen.Draw | ( | GameTime | gameTime | ) | [virtual] |
Draws the background screen.
Reimplemented from NewGamePhysics.StateManager.GameScreen.
Definition at line 189 of file PendulumVideoScreen.cs.
00190 { 00191 SpriteBatch spriteBatch = ScreenManager.SpriteBatch; 00192 Viewport viewport = ScreenManager.GraphicsDevice.Viewport; 00193 Rectangle fullscreen = new Rectangle(0, 0, viewport.Width, viewport.Height); 00194 byte fade = TransitionAlpha; 00195 00196 // Render the video in it's orginal resolution 00197 // to the screen using SpriteBatch 00198 if (ScreenManager.VideoPlayer.State == MediaState.Playing) 00199 { 00200 spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None); 00201 effect.Begin(); 00202 float threshold = 0.3f; 00203 effect.Parameters["referenceColor"].SetValue(this.referenceColor.ToVector3()); 00204 effect.Parameters["threshold"].SetValue(threshold); 00205 foreach (EffectPass pass in effect.CurrentTechnique.Passes) 00206 { 00207 pass.Begin(); 00208 spriteBatch.Draw( 00209 ScreenManager.VideoPlayer.GetTexture(), 00210 new Rectangle( 00211 (viewport.Width - videoFile.Width) / 2, 00212 (viewport.Height - videoFile.Height) / 2, 00213 videoFile.Width, 00214 videoFile.Height), 00215 new Color(fade, fade, fade)); 00216 pass.End(); 00217 } 00218 effect.End(); 00219 spriteBatch.End(); 00220 } 00221 }
| override void PendulumGame.PendulumVideoScreen.HandleInput | ( | InputState | input | ) | [virtual] |
Lets the game respond to player input. Unlike the Update method, this will only be called when the gameplay screen is active.
Reimplemented from NewGamePhysics.StateManager.GameScreen.
Definition at line 121 of file PendulumVideoScreen.cs.
00122 { 00123 if (input == null) 00124 { 00125 throw new ArgumentNullException("input"); 00126 } 00127 00128 if (input.IsInputCancel(null) || input.IsDisconnected(null)) 00129 { 00130 ScreenManager.AddScreen(new PendulumPauseMenuScreen(), null); 00131 } 00132 else 00133 { 00134 PlayerIndex playerIndex; 00135 00136 // Back to main menu 00137 if (input.IsMenuCancel(null, out playerIndex) || 00138 input.IsMenuSelect(null, out playerIndex)) 00139 { 00140 PendulumLoadingScreen.Load( 00141 ScreenManager, false, null, 00142 new PendulumBackgroundScreen(), 00143 new PendulumMainMenuScreen()); 00144 } 00145 } 00146 }
| override void PendulumGame.PendulumVideoScreen.LoadContent | ( | ) | [virtual] |
Loads graphics content for this screen. The background texture is quite big, so we use our own local ContentManager to load it. This allows us to unload before going from the menus into the game itself, wheras if we used the shared ContentManager provided by the Game class, the content would remain loaded forever.
Reimplemented from NewGamePhysics.StateManager.GameScreen.
Definition at line 71 of file PendulumVideoScreen.cs.
00072 { 00073 if (content == null) 00074 { 00075 content = new ContentManager(ScreenManager.Game.Services, "Content"); 00076 } 00077 00078 // Pick random video 00079 int videoNumber = PendulumGame.State.PhysicalRandomNumberGenerator.Next(0, 12); 00080 00081 videoFile = content.Load<Video>(@"Videos\Pendulum" + videoNumber); 00082 effect = content.Load<Effect>(@"Effects\ColorChromaKey"); 00083 00084 // Determine chromakey reference color by averaging 00085 // the color over the reference image 00086 Texture2D backgroundReference = 00087 content.Load<Texture2D>(@"Textures\PendulumBackgroundReference"); 00088 Color[] colors = TextureHelpers.TextureToColors(backgroundReference); 00089 ulong rSum = 0; 00090 ulong gSum = 0; 00091 ulong bSum = 0; 00092 ulong num = (ulong)colors.Length; 00093 foreach (Color color in colors) 00094 { 00095 rSum += (ulong)color.R; 00096 gSum += (ulong)color.G; 00097 bSum += (ulong)color.B; 00098 } 00099 00100 this.referenceColor = new Color( 00101 (byte)(rSum / num), 00102 (byte)(gSum / num), 00103 (byte)(bSum / num)); 00104 }
| override void PendulumGame.PendulumVideoScreen.UnloadContent | ( | ) | [virtual] |
Unloads graphics content for this screen.
Reimplemented from NewGamePhysics.StateManager.GameScreen.
Definition at line 109 of file PendulumVideoScreen.cs.
| override void PendulumGame.PendulumVideoScreen.Update | ( | GameTime | gameTime, | |
| bool | otherScreenHasFocus, | |||
| bool | coveredByOtherScreen | |||
| ) | [virtual] |
Updates the background screen. Unlike most screens, this should not transition off even if it has been covered by another screen: it is supposed to be covered, after all! This overload forces the coveredByOtherScreen parameter to false in order to stop the base Update method wanting to transition off.
Reimplemented from NewGamePhysics.StateManager.GameScreen.
Definition at line 157 of file PendulumVideoScreen.cs.
00159 { 00160 if (!videoStarted) 00161 { 00162 ScreenManager.VideoPlayer.Play(videoFile); 00163 videoStarted = true; 00164 } 00165 else 00166 { 00167 if (ScreenManager.VideoPlayer.State == MediaState.Stopped) 00168 { 00169 // Return to main menu 00170 PendulumLoadingScreen.Load(ScreenManager, false, null, 00171 new PendulumBackgroundScreen(), 00172 new PendulumMainMenuScreen()); 00173 } 00174 } 00175 00176 // If the game is transitioning on or off, fade it out to black. 00177 if (TransitionPosition > 0) 00178 { 00179 ScreenManager.FadeBackBufferToBlack(255 - TransitionAlpha); 00180 } 00181 00182 base.Update(gameTime, otherScreenHasFocus, false); 00183 }
1.6.2