Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Globalization;
- using System.Windows;
- using System.Windows.Navigation;
- using GlowArkanoid.Code;
- using GlowArkanoid.Helpers;
- using GlowArkanoid.Input;
- using GlowArkanoid.Other;
- using GlowArkanoid.Screens;
- using GlowArkanoid.Screens.GameScreen;
- using GlowArkanoid.Storage;
- using Microsoft.Phone.Controls;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Content;
- using Microsoft.Xna.Framework.GamerServices;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input.Touch;
- namespace GlowArkanoid
- {
- /// <summary>
- /// Soubor specifický pro WP7 (Silver/XNA projekt)
- /// </summary>
- public partial class GamePage : PhoneApplicationPage
- {
- GameTimer timer;
- ContentManager content;
- SpriteBatch spriteBatch;
- bool contentLoaded = false;
- bool isNewPageInstance = false;
- UpdateRateComponent updateRate = new UpdateRateComponent();
- MogadeClass mogadeClass = null;
- public GamePage()
- {
- InitializeComponent();
- isNewPageInstance = true;
- content = (Application.Current as App).Content;
- SharedGraphicsDeviceManager.Current.PreferredBackBufferFormat = SurfaceFormat.Color;
- timer = new GameTimer();
- timer.UpdateInterval = TimeSpan.FromTicks(166666);
- timer.Update += OnUpdate;
- timer.Draw += OnDraw;
- TouchPanel.EnabledGestures = GestureType.Flick;
- Settings.Data.IsTrial = Microsoft.Xna.Framework.GamerServices.Guide.IsTrialMode;
- }
- protected override void OnNavigatedTo(NavigationEventArgs e)
- {
- GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
- device.SetSharingMode(true);
- SetDisplayResolution();
- SetLanguageInfo();
- if (isNewPageInstance)
- {
- // Návrat z tombstoningu, nebo nové spuštění aplikace
- // - zjistíme, zda už nějaká hra není uložena...
- spriteBatch = new SpriteBatch(device);
- OnlineScoreComponent.InitializeStorage();
- Settings.LoadSettings();
- // Zaloguje start hry, příp. odešle staré skóre na web...
- if (mogadeClass == null)
- mogadeClass = new MogadeClass();
- // Načtu obsah do hry (zde to bude zavoláno vždy... contentLoaded je deprecated)
- if (!contentLoaded)
- {
- ScreenManager.InitializeScreens(this, content, mogadeClass);
- LoadContent();
- UserInput.AccInput.StartAccelerometerInput();
- contentLoaded = true;
- }
- isNewPageInstance = false;
- }
- // Ověřím spuštění hudby... (i při návratu z dormant stavu)
- GlobalMethods.PlayMusicIfPossible();
- // Pokud je jen dormant stav, tak se nic nemění (jen zaktualizuje licence...)
- Settings.Data.IsTrial = Microsoft.Xna.Framework.GamerServices.Guide.IsTrialMode;
- timer.Start();
- base.OnNavigatedTo(e);
- }
- /// <summary>
- /// Nastaví rozlišení hry... (nyní natvrdo podle bufferů, u ostatních platforem dynamicky?)
- /// - voláno úplně na začátku
- /// </summary>
- private void SetDisplayResolution()
- {
- GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
- Settings.Data.ScreenWidth = device.Viewport.Width;
- Settings.Data.ScreenHeight = device.Viewport.Height;
- }
- /// <summary>
- /// Zapamatuje si aktuálně nastavený jazyk (voláno úplně na začátku)
- /// - je potřeba aktualizovat i v případě jeho změny
- /// </summary>
- private void SetLanguageInfo()
- {
- string s = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToUpperInvariant();
- Settings.Data.SelectedLanguage = s;
- }
- private void LoadContent()
- {
- // Načte obsah do hry... nejdřív sdílené textury a zvuky
- GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
- Global.LoadContent(content);
- Settings.LoadLanguage();
- ChallengeItems.LoadContent(device, content);
- ChallengeItems.LoadItems(Settings.Data.SelectedLanguage);
- #if DEBUG
- //TODO only debug!!!
- //Microsoft.Xna.Framework.GamerServices.Guide.SimulateTrialMode = true;
- //Settings.Data.IsTrial = Microsoft.Xna.Framework.GamerServices.Guide.IsTrialMode;
- //Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("cs-CZ");
- #endif
- }
- protected override void OnNavigatedFrom(NavigationEventArgs e)
- {
- // Odchází z aplikace (obdoba Deactivated a Closing z objektu appService)
- GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
- if (Settings.Data.GameRunning)
- {
- GlobalMethods.AddToGlobalGameTime();
- Settings.SavePlan(ScreenManager.GameScr.SerializableData);
- }
- else
- Settings.ClearStorage();
- Settings.SaveInfoForChallenges();
- // Vše se nám odehrává na jedné Silver/XNA obrazovce, správu obrazovek si řešíme sami...
- timer.Stop();
- SharedGraphicsDeviceManager.Current.GraphicsDevice.SetSharingMode(false);
- base.OnNavigatedFrom(e);
- }
- protected override void OnBackKeyPress(System.ComponentModel.CancelEventArgs e)
- {
- if (ScreenManager.SelectedScreen != ScreenManager.ScreenType.MainMenu &&
- ScreenManager.SelectedScreen != ScreenManager.ScreenType.Demo)
- {
- // Návrat do hlavního menu...
- e.Cancel = true;
- if (ScreenManager.SelectedScreen == ScreenManager.ScreenType.GameScreen)
- {
- // Návrat ze hry...
- GlobalMethods.PlayMenuMusic();
- OnlineScoreComponent.ActualizeOnlineScore(Settings.Data.HighScore, ChallengeItems.DoneItemsCount, Settings.Data.BestLevel);
- }
- ScreenManager.SelectedScreen = ScreenManager.ScreenType.MainMenu;
- Guide.IsScreenSaverEnabled = true;
- return;
- }
- if (ScreenManager.SelectedScreen == ScreenManager.ScreenType.MainMenu)
- {
- // Ukončení hry... (pokud je trialka, zobrazí ještě lákací obrazovku)
- if (Settings.Data.IsTrial)
- {
- e.Cancel = true;
- ScreenManager.SelectedScreen = ScreenManager.ScreenType.Demo;
- }
- }
- }
- private void OnUpdate(object sender, GameTimerEventArgs e)
- {
- GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
- float elapsedMs = (float)e.ElapsedTime.TotalMilliseconds;
- float totalSeconds = (float)e.TotalTime.TotalSeconds;
- ChallengeItems.UpdateDisplayedChallenges(elapsedMs);
- FPSCounter.Update(elapsedMs);
- updateRate.Update(elapsedMs);
- // Správa obrazovek...
- HandleTiltOnMenu();
- ScreenManager.Screens[ScreenManager.SelectedScreen].Update(device, elapsedMs, totalSeconds);
- }
- private void HandleTiltOnMenu()
- {
- // Podle naklopení vykreslí na pozice obrázky...
- Vector2 accVector = new Vector2(UserInput.AccInput.Value.X, -UserInput.AccInput.Value.Y);
- accVector = Vector2.Min(accVector, new Vector2(1, 1));
- accVector = Vector2.Max(accVector, new Vector2(-1, -1));
- Global.BackPlanShift = accVector * 30f - new Vector2(30f);
- Global.FrontPlanShift = -Global.BackPlanShift / 2f;
- }
- private void OnDraw(object sender, GameTimerEventArgs e)
- {
- GraphicsDevice device = SharedGraphicsDeviceManager.Current.GraphicsDevice;
- device.Clear(Color.Black);
- float elapsedMs = (float)e.ElapsedTime.TotalMilliseconds;
- // Vykreslení pozadí (na každé obrazovce)
- spriteBatch.Begin();
- spriteBatch.Draw(Global.TxBack, Global.BackPlanShift, Color.White);
- FPSCounter.CountDraw(elapsedMs);
- // Vykreslení vybrané obrazovky...
- ScreenManager.Screens[ScreenManager.SelectedScreen].Draw(spriteBatch, device, elapsedMs, Global.FrontPlanShift.X, Global.FrontPlanShift.Y);
- if (ScreenManager.SelectedScreen != ScreenManager.ScreenType.GameScreen)
- ChallengeItems.DrawDisplayedChallenges(spriteBatch, device);
- spriteBatch.End();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment