private void Install() { // den benutzer fragen wo das spiel gespeichert werden soll SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Title = "Choose save location"; saveFileDialog.InitialDirectory = Path.GetFullPath("./Games/" + GameSettings.Name + "/"); saveFileDialog.Filter = "Executables (*.exe)|*.exe|All Files|*.*"; // den dialog anzeigen bool?ret = saveFileDialog.ShowDialog(); // wurde nichts ausgewählt? if (!ret.HasValue || ret.Value == false) { MessageBox.Show("Please choose an install location!", "Error", MessageBoxButton.OK, MessageBoxImage.Error); return; } // installationspfad setzten0 GameSettings.GameDir = Path.GetDirectoryName(saveFileDialog.FileName); MessageBox.Show("Du hast folgenden Pfad ausgewählt: " + GameSettings.GameDir); // das spiel muss geladen werden State = GameTabState.UPDATE_REQUIRED; // das update soll das spiel installieren CheckForUpdates(); // anzeige aktualisieren RefreshUI(); }
public GameTab(Game _game, MainWindow _window) { this.DataContext = this; Avmnts = new ObservableCollection <Achievement>(); Avmnts.Add(new Achievement("Started the Game")); Avmnts.Add(new Achievement("Ate an Icecream")); // window setzen window = _window; // einstellungen setzen GameSettings = _game; // liste für die auflösungen erstellen resolutions = new List <Resolution>(); // Liste laden LoadResolutionList(); // falls die liste leer ist if (resolutions.Count == 0) { // => mit beispielwerten füllen resolutions.Add(new Resolution(1024, 786)); // die liste speichern SaveResolutionList(); } // das tab initialisieren InitializeComponent(); // Label mit dem Namen des Spieles setzten // gameNameLabel.Content = game.Name; avmntList.ItemsSource = Avmnts; // wenn das spiel installiert ist if (GameSettings.IsInstalled()) { // min. einmal die spiel dateien überprüfen State = GameTabState.UPDATE_REQUIRED; // prüfen wir auf updates CheckForUpdates(); } else { State = GameTabState.NOT_INSTALLED; } updateTimer = new DispatcherTimer(); updateTimer.Interval = TimeSpan.FromSeconds(5); updateTimer.Tick += updateTimer_Tick; RefreshUI(); }
private void CheckForUpdates() { // wenn bereits ein update läuft => nicht nochmal updaten if (State == GameTabState.UPDATING || State == GameTabState.UPDATE_PENDING) { return; } State = GameTabState.UPDATE_PENDING; window.QueueUpdate(this); // ui aktualisieren RefreshUI(); }
public void OnUpdateCompleted(object sender, RunWorkerCompletedEventArgs e) { // wurde das update abgebrochen (durch den nutzer oder einen fehler)? if (e.Cancelled || e.Error != null) { // update nicht fertig State = GameTabState.UPDATE_REQUIRED; } else { // spiel ist spielbar State = GameTabState.PLAYABLE; } // ui aktualisieren RefreshUI(); }
public void OnCheckForUpdates(object sender, DoWorkEventArgs e) { // signalisieren das geupdated wird State = GameTabState.UPDATING; // den parameter holen und in einen BackgroundWorker casten BackgroundWorker updateWorker = e.Argument as BackgroundWorker; // den progress resetten updateWorker.ReportProgress(0); // installationspfad string installDirectory = GameSettings.GameDir; // liste aller dateien welche noch gedownloadet werden müssen List <string> toDownload = new List <string>(); // welche dateien gibt es? foreach (string file in Directory.GetFiles(GameSettings.Origin)) { // vorübergehend ordener ignorieren if (Directory.Exists(file)) { continue; } // der pfad der datei lokal string localFilePath = Path.Combine(installDirectory, Path.GetFileName(file)); bool needsDownload = true; // gibt es die datei? if (File.Exists(localFilePath)) { // prüfen ob die datei aktuell ist if (true) // TODO: Prüfen ob die Datei aktuell ist { // wenn ja => dann nicht laden needsDownload = false; } } // wenn die datei geladen werden muss if (needsDownload) { // datei für den download vormerken toDownload.Add(file); } } // zähler für gedownloadete files int numFile = 0; foreach (string fileToDownload in toDownload) { // soll abgebrochen werden? if (updateWorker.CancellationPending) { // signalisieren das abgebrochen wurde e.Cancel = true; // beenden return; } // läuft gerade ein spiel? while (window.State == LauncherState.GAME_PLAYING) { // thread pausieren Thread.Yield(); } // der pfad der datei lokal string localFilePath = Path.Combine(installDirectory, Path.GetFileName(fileToDownload)); // datei downloaden // Pseudo downloaded File.Copy(fileToDownload, localFilePath); // simulieren dowloadspeed => Niemals in Production Code nutzen! Thread.Sleep(2000); // file counter erhöhen numFile++; // Progress berechnen float progress = 100.0f * numFile / toDownload.Count; // und übergeben updateWorker.ReportProgress((int)progress); } }