Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
        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();
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        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);
            }
        }