Beispiel #1
0
        private void btn_Browse_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog open = new OpenFileDialog())
            {
                open.Filter = "Game Executable Files|*.exe";
                if (open.ShowDialog() == DialogResult.OK)
                {
                    string path = open.FileName;

                    List <GameHandlerMetadata> allGames = gameManager.User.InstalledHandlers;

                    GameList list = new GameList(allGames);
                    DPIManager.ForceUpdate();

                    if (list.ShowDialog() == DialogResult.OK)
                    {
                        GameHandlerMetadata selected = list.Selected;
                        UserGameInfo        game     = gameManager.TryAddGame(path, list.Selected);

                        if (game == null)
                        {
                            MessageBox.Show("Game already in your library!");
                        }
                        else
                        {
                            MessageBox.Show("Game accepted as ID " + game.GameID);
                            RefreshGames();
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public void RebuildGameDb()
        {
            string        installedDir = GetInstalledPackagePath();
            DirectoryInfo dir          = new DirectoryInfo(installedDir);

            if (!dir.Exists)
            {
                // nothing installed
                return;
            }

            DirectoryInfo[] installedHandlers = dir.GetDirectories();

            user.InstalledHandlers = new List <GameHandlerMetadata>();
            for (int i = 0; i < installedHandlers.Length; i++)
            {
                DirectoryInfo handlerDir = installedHandlers[i];

                // read the game's json
                string metadataPath          = Path.Combine(handlerDir.FullName, repoManager.InfoFileName + repoManager.JsonFormat);
                GameHandlerMetadata metadata = repoManager.ReadMetadataFromFile(metadataPath);
                user.InstalledHandlers.Add(metadata);
            }

            user.Save();
        }
Beispiel #3
0
        /// <summary>
        /// Initializes the User Game Info with known information from a game,
        /// and the path to the game's executable in the end user machine
        /// </summary>
        /// <param name="game">A reference to the </param>
        /// <param name="exePath"></param>
        public void InitializeDefault(GameHandlerMetadata game, string exePath)
        {
            ExePath = exePath;
            //Profiles = new List<GameProfile>();

            GameID = game.GameID;
        }
        private void SetupSteps(GameHandlerMetadata metadataSelected)
        {
            KillCurrentStep();

            if (handlerDataManager != null)
            {
                // dispose
                handlerDataManager.Dispose();
                handlerDataManager = null;
            }

            selectedHandler    = metadataSelected;
            handlerDataManager = GameManager.Instance.PackageManager.ReadHandlerDataFromInstalledPackage(selectedHandler);
            handlerData        = handlerDataManager.HandlerData;

            BrowserBtns.SetPlayButtonState(false);

            stepsList = new List <UserInputControl>();
            stepsList.Add(positionsControl);
            stepsList.Add(optionsControl);
            if (handlerData.CustomSteps != null)
            {
                for (int i = 0; i < handlerData.CustomSteps.Count; i++)
                {
                    stepsList.Add(jsControl);
                }
            }

            currentProfile = new GameProfile();
            currentProfile.InitializeDefault(handlerData);

            MainForm.Instance.ChangeGameInfo(userGame);
        }
Beispiel #5
0
        public HandlerControl(GameHandlerMetadata metadata)
        {
            Metadata = metadata;

            picture          = new PictureBox();
            picture.SizeMode = PictureBoxSizeMode.StretchImage;

            title = new Label();
            if (metadata == null)
            {
                title.Text = "No handlers";
            }
            else
            {
                title.Text = metadata.ToString();
            }
            TitleText = title.Text;

            BackColor = Color.FromArgb(30, 30, 30);
            Size      = new Size(200, 52);

            Controls.Add(picture);
            Controls.Add(title);

            DPIManager.Register(this);
        }
Beispiel #6
0
 public HandlerDataManager(GameHandlerMetadata metadata, Stream stream)
 {
     using (StreamReader reader = new StreamReader(stream))
     {
         Initialize(metadata, reader.ReadToEnd());
     }
 }
Beispiel #7
0
        public HandlerDataEngine(GameHandlerMetadata metadata, string jsCode)
        {
            this.metadata = metadata;
            this.jsCode   = jsCode;

            string   tempPath = GameManager.GetTempFolder(metadata.GameID);
            Assembly platform = Assembly.GetExecutingAssembly();

            Evidence evidence = new Evidence();

            evidence.AddHostEvidence(new Zone(SecurityZone.Untrusted));

            PermissionSet permissionSet = new PermissionSet(PermissionState.None);

            permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Write, tempPath));
            permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, metadata.RootDirectory));
            permissionSet.AddPermission(new FileIOPermission(FileIOPermissionAccess.Read | FileIOPermissionAccess.PathDiscovery, AssemblyUtil.GetStartFolder()));
            permissionSet.AddPermission(new SecurityPermission(SecurityPermissionFlag.Execution));

            AppDomainSetup setup = new AppDomainSetup {
                ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase
            };

            domain = AppDomain.CreateDomain("JSENGINE", evidence, setup, permissionSet);

            string enginePath = GetLibraryPath();

            byte[] engineData = File.ReadAllBytes(enginePath);
            domain.Load(engineData);

            ObjectHandle jsobj = domain.CreateInstance("SplitScreenMe.Engine", "SplitScreenMe.Engine.AppDomainEngine");

            jsEngine = jsobj.Unwrap();
            // TODO: strong typing on dynamic object (cache the fields/use reflection)
        }
Beispiel #8
0
 public bool UpdateNaming(GameHandlerMetadata info) {
     // TODO: better logic so repositories can agree on game name
     if (GameNames.ContainsKey(info.GameID)) {
         return false;
     }
     GameNames.Add(info.GameID, info.GameTitle);
     return true;
 }
Beispiel #9
0
        public ContentManager(GameHandlerMetadata info, HandlerData game)
        {
            this.game    = game;
            loadedImages = new Dictionary <string, Image>();

            handlersFolder = GameManager.Instance.GetInstalledPackagePath();
            pkgFolder      = PackageManager.GetInstallPath(info);

            DefaultImage = new Bitmap(1, 1);
        }
        public void ChangeSelectedGame(UserGameInfo userGame)
        {
            this.userGame = userGame;

            panel_steps.Controls.Clear();
            string gameId = userGame.GameID;

            if (mainForm == null)
            {
                mainForm = MainForm.Instance;
                mainForm.BrowserBtns.OnBrowse += BrowserBtns_OnBrowse;
            }

            currentHandlers = GameManager.Instance.PackageManager.GetInstalledHandlers(gameId);
            if (currentHandlers.Length == 0)
            {
                // uninstalled package perhaps?
                return;
            }

            if (currentHandlers.Length > 1)
            {
                MainForm.Instance.ChangeTitle("Choose one handler to run game",
                                              FormGraphicsUtil.BuildCharToBitmap(new Size(40, 40), 30, Color.FromArgb(240, 240, 240), "⤷"));

                panel_steps.Controls.Add(list_handlers);

                list_handlers.Width  = panel_steps.Width;
                list_handlers.Height = panel_steps.Height;
                list_handlers.Left   = 1;
                list_handlers.Controls.Clear();

                for (var i = 0; i < currentHandlers.Length; i++)
                {
                    GameHandlerMetadata metadata = currentHandlers[i];

                    GameControl handlerControl = new GameControl();
                    handlerControl.Width  = list_handlers.Width;
                    handlerControl.Click += HandlerControl_Click;

                    handlerControl.SetHandlerMetadata(metadata);
                    list_handlers.Controls.Add(handlerControl);
                }
            }
            else
            {
                // create first step
                SetupSteps(currentHandlers[0]);
                GoToStep(0);
            }

            DPIManager.ForceUpdate();
        }
Beispiel #11
0
        private void Initialize(GameHandlerMetadata metadata, string jsCode)
        {
            this.handlerMetadata = metadata;

            jsEngine = new HandlerDataEngine(metadata, jsCode);

            string handlerStr = jsEngine.Initialize();

            handlerData = JsonConvert.DeserializeObject <HandlerData>(handlerStr);

            // content manager is shared withing the same game
            content = new ContentManager(metadata, handlerData);
        }
Beispiel #12
0
        public void RefreshGames()
        {
            lock (controls)
            {
                foreach (var con in controls)
                {
                    if (con.Value != null)
                    {
                        con.Value.Dispose();
                    }
                }
                this.list_Games.Controls.Clear();
                this.list_Handlers.Controls.Clear();
                controls.Clear();

                List <GameHandlerMetadata> handlers = gameManager.User.InstalledHandlers;
                for (int i = 0; i < handlers.Count; i++)
                {
                    GameHandlerMetadata handler = handlers[i];
                    NewGameHandler(handler);
                }

                List <UserGameInfo> games = gameManager.User.Games;
                for (int i = 0; i < games.Count; i++)
                {
                    UserGameInfo game = games[i];
                    NewUserGame(game);
                }

                if (games.Count == 0)
                {
                    noGamesPresent = true;
                    GameControl con = new GameControl(null);
                    con.Width = list_Games.Width;
                    con.Text  = "No games";
                    this.list_Games.Controls.Add(con);
                }

                if (handlers.Count == 0)
                {
                    noGamesPresent = true;
                    HandlerControl con = new HandlerControl(null);
                    con.Width = list_Games.Width;
                    con.Text  = "No handlers";
                    this.list_Handlers.Controls.Add(con);
                }
            }

            DPIManager.ForceUpdate();
            gameManager.User.Save();
        }
Beispiel #13
0
        public void NewGameHandler(GameHandlerMetadata metadata)
        {
            if (noGamesPresent)
            {
                noGamesPresent = false;
                RefreshGames();
                return;
            }

            // get all Repository Game Infos
            HandlerControl con = new HandlerControl(metadata);

            con.Width = list_Games.Width;
            this.list_Handlers.Controls.Add(con);
        }
Beispiel #14
0
        private void combo_Handlers_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (combo_Handlers.SelectedIndex == -1)
            {
                return;
            }

            KillCurrentStep();

            if (handlerDataManager != null)
            {
                // dispose
                handlerDataManager.Dispose();
                handlerDataManager = null;
            }

            try
            {
                selectedHandler    = currentHandlers[combo_Handlers.SelectedIndex];
                handlerDataManager = gameManager.RepoManager.ReadHandlerDataFromInstalledPackage(selectedHandler);
                handlerData        = handlerDataManager.HandlerData;

                btn_Play.Enabled = false;

                stepsList = new List <UserInputControl>();
                stepsList.Add(positionsControl);
                stepsList.Add(optionsControl);
                if (handlerData.CustomSteps != null)
                {
                    for (int i = 0; i < handlerData.CustomSteps.Count; i++)
                    {
                        stepsList.Add(jsControl);
                    }
                }

                currentProfile = new GameProfile();
                currentProfile.InitializeDefault(handlerData);

                gameNameControl.GameInfo = selectedControl.UserGameInfo;

                GoToStep(0);
            }
            catch (Exception ex)
            {
                Debugger.Break();
            }
        }
Beispiel #15
0
        private void InstallGame_Click(object sender, EventArgs e)
        {
            ResetPanels();

            var gm = GameManager.Instance;

            using (OpenFileDialog open = new OpenFileDialog()) {
                open.Filter = "Game Executable Files|*.exe";
                if (open.ShowDialog() == DialogResult.OK)
                {
                    string path = open.FileName;

#if false
                    List <GameHandlerMetadata> allGames = gm.User.InstalledHandlers;
                    var availableHandlers = allGames.Where(c => c.ExeName.ToLowerInvariant() == Path.GetFileNameWithoutExtension(open.FileName).ToLowerInvariant());

                    if (availableHandlers.Count() == 1)
                    {
                        GameHandlerMetadata first = availableHandlers.First();
                        UserGameInfo        game  = gm.TryAddGame(path, first);

                        if (game == null)
                        {
                            MessageBox.Show("Game already in your library!");
                        }
                        else
                        {
                            MessageBox.Show("Game accepted as ID " + game.GameID);
                            MainForm.Instance.RefreshGames();
                        }
                    }
                    else
                    {
                        throw new NotImplementedException();
                    }
#endif

                    //GameList list = new GameList(allGames);
                    //DPIManager.ForceUpdate();
                    //if (list.ShowDialog() == DialogResult.OK) {
                    //}
                }
            }
        }
Beispiel #16
0
        /// <summary>
        /// Tries adding a game to the collection with the provided IGameInfo
        /// </summary>
        /// <param name="exePath"></param>
        /// <returns></returns>
        public UserGameInfo TryAddGame(string exePath, GameHandlerMetadata metadata)
        {
            string lower = exePath.ToLower();
            string dir   = Path.GetDirectoryName(exePath);

            if (user.Games.Any(c => c.ExePath.ToLower() == lower))
            {
                return(null);
            }

            Log.WriteLine($"Added game: {metadata.Title}, on path: {exePath}");
            UserGameInfo uinfo = new UserGameInfo();

            uinfo.InitializeDefault(metadata, exePath);
            user.Games.Add(uinfo);
            user.Save();

            return(uinfo);
        }
Beispiel #17
0
        public string Initialize(string metadata, string metadataRootfolder, string jsCode)
        {
            hData = new HandlerData();

            engine = new Jint.Engine();

            gameMetadata = JsonConvert.DeserializeObject <GameHandlerMetadata>(metadata);
            gameMetadata.RootDirectory = metadataRootfolder;

            engine.SetValue("SaveType", TypeReference.CreateTypeReference(engine, typeof(SaveType)));
            engine.SetValue("DPIHandling", TypeReference.CreateTypeReference(engine, typeof(DPIHandling)));
            engine.SetValue("Folder", TypeReference.CreateTypeReference(engine, typeof(Folder)));
            engine.SetValue("SaveType", TypeReference.CreateTypeReference(engine, typeof(SaveType)));

            engine.SetValue("Game", hData);
            engine.SetValue("Import", (Action <string>)Import);

            engine.Execute(jsCode);

            return(JsonConvert.SerializeObject(hData));
        }
Beispiel #18
0
        private void combo_Handlers_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (combo_Handlers.SelectedIndex == -1)
            {
                return;
            }

            selectedHandler = currentHandlers[combo_Handlers.SelectedIndex];
            handlerData     = gameManager.RepoManager.ReadHandlerDataFromInstalledPackage(selectedHandler);

            btn_Play.Enabled = false;

            stepsList = new List <UserInputControl>();
            stepsList.Add(positionsControl);
            stepsList.Add(optionsControl);
            if (handlerData.CustomSteps != null)
            {
                for (int i = 0; i < handlerData.CustomSteps.Count; i++)
                {
                    stepsList.Add(jsControl);
                }
            }

            currentProfile = new GameProfile();
            currentProfile.InitializeDefault(handlerData);

            gameNameControl.GameInfo = selectedControl.UserGameInfo;

            if (content != null)
            {
                content.Dispose();
            }

            // content manager is shared withing the same game
            content = new ContentManager(selectedHandler, handlerData);
            GoToStep(0);
        }
Beispiel #19
0
 public HandlerDataManager(GameHandlerMetadata metadata, string jsCode)
 {
     Initialize(metadata, jsCode);
 }
Beispiel #20
0
        private static void BuildDir(string output, string toBuild)
        {
            string infosFolder = Path.Combine(output, "infos");
            string pkgsFolder  = Path.Combine(output, "handlers");

            string indexPagePath = Path.Combine(output, "index.html");
            string indexData     = "<html><head><link rel='stylesheet' href='bootstrap.css'><link rel='stylesheet' href='style.css'></head><body>";

            if (Directory.Exists(output))
            {
                Directory.Delete(output, true);
            }

            Directory.CreateDirectory(output);
            Directory.CreateDirectory(infosFolder);
            Directory.CreateDirectory(pkgsFolder);

            string sourceCssPath = "..\\..\\MainRepo\\bootstrap.min.css";
            string cssPath       = Path.Combine(output, "bootstrap.css");

            File.Copy(sourceCssPath, cssPath);

            sourceCssPath = "..\\..\\MainRepo\\style.css";
            cssPath       = Path.Combine(output, "style.css");
            File.Copy(sourceCssPath, cssPath);

            DirectoryInfo dirSource = new DirectoryInfo(toBuild);

            DirectoryInfo[] dirs = dirSource.GetDirectories();

            List <Infos> infos = new List <Infos>();

            for (int i = 0; i < dirs.Length; i++)
            {
                DirectoryInfo dir = dirs[i];

                if (dir.Name.Contains("239140")) // ignore dying light, unfinished
                {
                    continue;
                }

                // read handler data
                string handlerPath           = Path.Combine(dir.FullName, "info.json");
                string handlerData           = File.ReadAllText(handlerPath);
                GameHandlerMetadata metadata = JsonConvert.DeserializeObject <GameHandlerMetadata>(handlerData);
                if (metadata.GameID.ToLower().StartsWith("debug"))
                {
                    continue;
                }

                string pkgName  = PackageManager.GetPackageFileName(metadata) + ".nc";
                string destName = Path.Combine(pkgsFolder, pkgName);

                infos.Add(new Infos()
                {
                    Metadata = metadata, RootFolder = dir.FullName
                });

                string firstPic = Path.Combine(dir.FullName, "header.jpg");
                if (!File.Exists(firstPic))
                {
                    // see if steam has a header pic
                    string headerUrl = string.Format("https://steamcdn-a.opskins.media/steam/apps/{0}/header.jpg", metadata.GameID);

                    try
                    {
                        using (WebClient client = new WebClient())
                        {
                            client.DownloadFile(headerUrl, firstPic);
                        }
                    }
                    catch { }
                }

                using (var file = new ZipFile())
                {
                    file.AddDirectory(dir.FullName);
                    file.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;

                    file.Save(destName);
                }
            }

            var newInfos = infos.OrderBy(c => c.Metadata.GameTitle);

            indexData += "<div id='grid'>";

            foreach (Infos info in newInfos)
            {
                GameHandlerMetadata metadata = info.Metadata;

                // write info file
                GameHandlerBaseMetadata baseMetadata = new GameHandlerBaseMetadata();
                ObjectUtil.DeepCopy(metadata, baseMetadata);

                string metadataSerialized = JsonConvert.SerializeObject(baseMetadata);
                string infoFolder         = Path.Combine(infosFolder, metadata.HandlerID);
                Directory.CreateDirectory(infoFolder);

                string infoFile = Path.Combine(infoFolder, "info.json");
                File.WriteAllText(infoFile, metadataSerialized);

                string firstPic = Path.Combine(info.RootFolder, "header.jpg");
                if (File.Exists(firstPic))
                {
                    string destHeaderScreenshot = Path.Combine(infoFolder, "header.jpg");
                    Directory.CreateDirectory(Path.GetDirectoryName(destHeaderScreenshot));
                    File.Copy(firstPic, destHeaderScreenshot);
                }

                indexData += "<div>";

                string pkgName = PackageManager.GetPackageFileName(metadata);

                indexData += string.Format("<a href='packages/{0}.nc'>", pkgName);
                indexData += string.Format("<img src='infos/{0}/header.jpg' /></a> ", metadata.HandlerID);
                indexData += string.Format("<h3>{0}</h3><h4>{1}</h4><h5><a href='handlers/{2}.nc'>[DOWNLOAD HANDLER v{3}]</a></h5>",
                                           metadata.GameTitle, metadata.Title, pkgName, metadata.V);
                indexData += "<br /> </div>";
            }

            indexData += "</div>";


            indexData += "</body></html>";
            File.WriteAllText(indexPagePath, indexData);
        }
Beispiel #21
0
 private void Con_Click(object sender, EventArgs e)
 {
     clicked       = ((HandlerControl)sender).Metadata;
     btnOk.Enabled = true;
 }
 private void privShowPackage(GameHandlerMetadata gameInfo)
 {
     lbl_GameTitle.Text   = gameInfo.Title;
     lbl_NukeVersion.Text = gameInfo.PlatformVersion.ToString(CultureInfo.InvariantCulture);
 }