tomasslavicek

Glow Arkanoid - Main GamePage

Jan 28th, 2013
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.09 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Windows;
  5. using System.Windows.Navigation;
  6. using GlowArkanoid.Code;
  7. using GlowArkanoid.Helpers;
  8. using GlowArkanoid.Input;
  9. using GlowArkanoid.Other;
  10. using GlowArkanoid.Screens;
  11. using GlowArkanoid.Screens.GameScreen;
  12. using GlowArkanoid.Storage;
  13. using Microsoft.Phone.Controls;
  14. using Microsoft.Xna.Framework;
  15. using Microsoft.Xna.Framework.Content;
  16. using Microsoft.Xna.Framework.GamerServices;
  17. using Microsoft.Xna.Framework.Graphics;
  18. using Microsoft.Xna.Framework.Input.Touch;
  19.  
  20. namespace GlowArkanoid
  21. {
  22.     /// <summary>
  23.     /// Soubor specifický pro WP7 (Silver/XNA projekt)
  24.     /// </summary>
  25.     public partial class GamePage : PhoneApplicationPage
  26.     {
  27.         GameTimer timer;
  28.         ContentManager content;
  29.         SpriteBatch spriteBatch;
  30.         bool contentLoaded = false;
  31.         bool isNewPageInstance = false;
  32.         UpdateRateComponent updateRate = new UpdateRateComponent();
  33.         MogadeClass mogadeClass = null;
  34.  
  35.         public GamePage()
  36.         {
  37.             InitializeComponent();
  38.             isNewPageInstance = true;
  39.  
  40.             content = (Application.Current as App).Content;
  41.             SharedGraphicsDeviceManager.Current.PreferredBackBufferFormat = SurfaceFormat.Color;
  42.             timer = new GameTimer();
  43.             timer.UpdateInterval = TimeSpan.FromTicks(166666);
  44.             timer.Update += OnUpdate;
  45.             timer.Draw += OnDraw;
  46.  
  47.             TouchPanel.EnabledGestures = GestureType.Flick;
  48.             Settings.Data.IsTrial = Microsoft.Xna.Framework.GamerServices.Guide.IsTrialMode;
  49.         }
  50.  
  51.         protected override void OnNavigatedTo(NavigationEventArgs e)
  52.         {
  53.             GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
  54.             device.SetSharingMode(true);
  55.             SetDisplayResolution();
  56.             SetLanguageInfo();
  57.  
  58.             if (isNewPageInstance)
  59.             {
  60.                 // Návrat z tombstoningu, nebo nové spuštění aplikace
  61.                 // - zjistíme, zda už nějaká hra není uložena...
  62.                 spriteBatch = new SpriteBatch(device);
  63.                 OnlineScoreComponent.InitializeStorage();
  64.                 Settings.LoadSettings();
  65.  
  66.                 // Zaloguje start hry, příp. odešle staré skóre na web...
  67.                 if (mogadeClass == null)
  68.                     mogadeClass = new MogadeClass();
  69.  
  70.                 // Načtu obsah do hry (zde to bude zavoláno vždy... contentLoaded je deprecated)
  71.                 if (!contentLoaded)
  72.                 {
  73.                     ScreenManager.InitializeScreens(this, content, mogadeClass);
  74.                     LoadContent();
  75.                     UserInput.AccInput.StartAccelerometerInput();
  76.                     contentLoaded = true;
  77.                 }
  78.                 isNewPageInstance = false;
  79.             }
  80.  
  81.             // Ověřím spuštění hudby... (i při návratu z dormant stavu)
  82.             GlobalMethods.PlayMusicIfPossible();
  83.  
  84.             // Pokud je jen dormant stav, tak se nic nemění (jen zaktualizuje licence...)
  85.             Settings.Data.IsTrial = Microsoft.Xna.Framework.GamerServices.Guide.IsTrialMode;
  86.  
  87.             timer.Start();
  88.             base.OnNavigatedTo(e);
  89.         }
  90.  
  91.         /// <summary>
  92.         /// Nastaví rozlišení hry... (nyní natvrdo podle bufferů, u ostatních platforem dynamicky?)
  93.         /// - voláno úplně na začátku
  94.         /// </summary>
  95.         private void SetDisplayResolution()
  96.         {
  97.             GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
  98.             Settings.Data.ScreenWidth = device.Viewport.Width;
  99.             Settings.Data.ScreenHeight = device.Viewport.Height;
  100.         }
  101.  
  102.         /// <summary>
  103.         /// Zapamatuje si aktuálně nastavený jazyk (voláno úplně na začátku)
  104.         /// - je potřeba aktualizovat i v případě jeho změny
  105.         /// </summary>
  106.         private void SetLanguageInfo()
  107.         {
  108.             string s = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToUpperInvariant();
  109.             Settings.Data.SelectedLanguage = s;
  110.         }
  111.  
  112.         private void LoadContent()
  113.         {
  114.             // Načte obsah do hry... nejdřív sdílené textury a zvuky
  115.             GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
  116.             Global.LoadContent(content);
  117.             Settings.LoadLanguage();
  118.             ChallengeItems.LoadContent(device, content);
  119.             ChallengeItems.LoadItems(Settings.Data.SelectedLanguage);
  120. #if DEBUG
  121.             //TODO only debug!!!
  122.             //Microsoft.Xna.Framework.GamerServices.Guide.SimulateTrialMode = true;
  123.             //Settings.Data.IsTrial = Microsoft.Xna.Framework.GamerServices.Guide.IsTrialMode;
  124.             //Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("cs-CZ");                
  125. #endif
  126.         }
  127.  
  128.         protected override void OnNavigatedFrom(NavigationEventArgs e)
  129.         {
  130.             // Odchází z aplikace (obdoba Deactivated a Closing z objektu appService)
  131.             GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
  132.             if (Settings.Data.GameRunning)
  133.             {
  134.                 GlobalMethods.AddToGlobalGameTime();
  135.                 Settings.SavePlan(ScreenManager.GameScr.SerializableData);
  136.             }
  137.             else
  138.                 Settings.ClearStorage();
  139.             Settings.SaveInfoForChallenges();
  140.  
  141.             // Vše se nám odehrává na jedné Silver/XNA obrazovce, správu obrazovek si řešíme sami...
  142.             timer.Stop();
  143.             SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(false);
  144.             base.OnNavigatedFrom(e);
  145.         }
  146.  
  147.         protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
  148.         {
  149.             if (ScreenManager.SelectedScreen != ScreenManager.ScreenType.MainMenu &&
  150.                 ScreenManager.SelectedScreen != ScreenManager.ScreenType.Demo)
  151.             {
  152.                 // Návrat do hlavního menu...
  153.                 e.Cancel = true;
  154.                 if (ScreenManager.SelectedScreen == ScreenManager.ScreenType.GameScreen)
  155.                 {
  156.                     // Návrat ze hry...
  157.                     GlobalMethods.PlayMenuMusic();
  158.                     OnlineScoreComponent.ActualizeOnlineScore(Settings.Data.HighScore, ChallengeItems.DoneItemsCount, Settings.Data.BestLevel);
  159.                 }
  160.                 ScreenManager.SelectedScreen = ScreenManager.ScreenType.MainMenu;
  161.                 Guide.IsScreenSaverEnabled = true;
  162.                 return;
  163.             }
  164.  
  165.             if (ScreenManager.SelectedScreen == ScreenManager.ScreenType.MainMenu)
  166.             {
  167.                 // Ukončení hry... (pokud je trialka, zobrazí ještě lákací obrazovku)
  168.                 if (Settings.Data.IsTrial)
  169.                 {
  170.                     e.Cancel = true;
  171.                     ScreenManager.SelectedScreen = ScreenManager.ScreenType.Demo;
  172.                 }
  173.             }
  174.         }
  175.  
  176.         private void OnUpdate(object sender, GameTimerEventArgs e)
  177.         {
  178.             GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
  179.             float elapsedMs = (float)e.ElapsedTime.TotalMilliseconds;
  180.             float totalSeconds = (float)e.TotalTime.TotalSeconds;
  181.             ChallengeItems.UpdateDisplayedChallenges(elapsedMs);
  182.             FPSCounter.Update(elapsedMs);
  183.             updateRate.Update(elapsedMs);
  184.  
  185.             // Správa obrazovek...
  186.             HandleTiltOnMenu();
  187.             ScreenManager.Screens[ScreenManager.SelectedScreen].Update(device, elapsedMs, totalSeconds);            
  188.         }
  189.  
  190.         private void HandleTiltOnMenu()
  191.         {
  192.             // Podle naklopení vykreslí na pozice obrázky...
  193.             Vector2 accVector = new Vector2(UserInput.AccInput.Value.X, -UserInput.AccInput.Value.Y);
  194.             accVector = Vector2.Min(accVector, new Vector2(1, 1));
  195.             accVector = Vector2.Max(accVector, new Vector2(-1, -1));
  196.             Global.BackPlanShift = accVector * 30f - new Vector2(30f);
  197.             Global.FrontPlanShift = -Global.BackPlanShift / 2f;
  198.         }
  199.  
  200.         private void OnDraw(object sender, GameTimerEventArgs e)
  201.         {
  202.             GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
  203.             device.Clear(Color.Black);
  204.             float elapsedMs = (float)e.ElapsedTime.TotalMilliseconds;
  205.  
  206.             // Vykreslení pozadí (na každé obrazovce)
  207.             spriteBatch.Begin();
  208.             spriteBatch.Draw(Global.TxBack, Global.BackPlanShift, Color.White);
  209.             FPSCounter.CountDraw(elapsedMs);
  210.  
  211.             // Vykreslení vybrané obrazovky...
  212.             ScreenManager.Screens[ScreenManager.SelectedScreen].Draw(spriteBatch, device, elapsedMs, Global.FrontPlanShift.X, Global.FrontPlanShift.Y);
  213.  
  214.             if (ScreenManager.SelectedScreen != ScreenManager.ScreenType.GameScreen)
  215.                 ChallengeItems.DrawDisplayedChallenges(spriteBatch, device);
  216.  
  217.             spriteBatch.End();
  218.         }
  219.  
  220.     }
  221. }
Advertisement
Add Comment
Please, Sign In to add comment