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(); } } } } }
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(); }
/// <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); }
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); }
public HandlerDataManager(GameHandlerMetadata metadata, Stream stream) { using (StreamReader reader = new StreamReader(stream)) { Initialize(metadata, reader.ReadToEnd()); } }
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) }
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; }
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(); }
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); }
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(); }
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); }
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(); } }
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) { //} } } }
/// <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); }
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)); }
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); }
public HandlerDataManager(GameHandlerMetadata metadata, string jsCode) { Initialize(metadata, jsCode); }
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); }
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); }