internal Screen(GameProfile gameProfile, string name, bool useAdvanced, Geometry geometry) { GameProfile = gameProfile; Name = name; UseAdvanced = useAdvanced; Geometry = geometry; }
public static GameProfile FromZip(string filePath) { var archive = ZipFile.OpenRead(filePath); var entries = archive.Entries; var xmlFiles = entries.Where(z => z.Name.Contains(".xml")); if (xmlFiles.Count() == 0) { throw new Exception("Game Profile XML is missing"); } else if (xmlFiles.Count() > 1) { throw new Exception("Multiple XML files found, we only need one."); } var stream = xmlFiles.First().Open(); GameProfile gp = FromXml(stream); foreach (var s in gp.Screens) { var search = s.Name.ToLower() + "_autofit.png"; var files = entries.Where(z => z.Name.ToLower().Contains(search)); if (files.Count() == 0) { continue; } else if (files.Count() > 1) { throw new Exception("Multiple autofit images found for " + s.Name + ", only one per screen is currently supported."); } var imageStream = files.First().Open(); s.Autofitter.Image = new Bitmap(imageStream); } foreach (var wi in gp.WatchImages) { var search = wi.FilePath.Replace('\\', '/').ToLower(); var files = entries.Where(z => z.FullName.ToLower().Contains(search)); if (files.Count() == 0) { throw new Exception("Image for " + search + " not found."); } else if (files.Count() > 1) { throw new Exception("Multiple images found for " + search + ", somehow."); } var imageStream = files.First().Open(); wi.Image = new Bitmap(imageStream); } return(gp); }
public static GameProfile FromXml(Stream stream) { using (StreamReader reader = new StreamReader(stream)) { XmlSerializer serializer = new XmlSerializer(typeof(GameProfile)); GameProfile gp = null; // Todo: ACTUAL exception handling. try { gp = (GameProfile)serializer.Deserialize(reader); gp.ReSyncRelationships(); } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Game Profile failed to load."); System.Diagnostics.Debug.WriteLine(e.ToString()); return(null); } return(gp); } }
public static void Compile(GameProfile gameProfile, bool useExtremePrecision) { if (CWatchZones != null) { foreach (var cWatchZone in CWatchZones) { cWatchZone.Dispose(); } Array.Clear(CWatchZones, 0, CWatchZones.Length); } HasDupeCheck = false; UseExtremePrecision = useExtremePrecision; var cWatchZones = new CWatchZone[gameProfile.WatchZones.Count]; var indexCount = 0; for (int i1 = 0; i1 < gameProfile.WatchZones.Count; i1++) { WatchZone watchZone = gameProfile.WatchZones[i1]; Screen screen = watchZone.Screen; var CWatches = new CWatcher[watchZone.Watches.Count]; var gameGeo = screen.GameGeometry.HasSize ? screen.GameGeometry : screen.Geometry; var wzCropGeo = watchZone.WithoutScale(gameGeo); wzCropGeo.RemoveAnchor(gameGeo); wzCropGeo.ResizeTo(screen.CropGeometry, gameGeo); wzCropGeo.Update(screen.CropGeometry.X, screen.CropGeometry.Y); for (int i2 = 0; i2 < watchZone.Watches.Count; i2++) { Watcher watcher = watchZone.Watches[i2]; if (watcher.WatcherType == WatcherType.Standard) { var CWatchImages = new CWatchImage[watcher.WatchImages.Count]; for (int i3 = 0; i3 < watcher.WatchImages.Count; i3++) { WatchImage watchImage = watcher.WatchImages[i3]; var mi = new MagickImage(watchImage.Image) { ColorSpace = watcher.ColorSpace }; GetComposedImage(ref mi, watcher.Channel); if (!UseExtremePrecision) { StandardResize(ref mi, wzCropGeo.ToMagick(false)); } else { PreciseResize(ref mi, watchZone.Geometry, gameGeo); } if (watcher.Equalize) { mi.Equalize(); } CWatchImages[i3] = new CWatchImage(watchImage.Name, indexCount, mi); indexCount++; } CWatches[i2] = new CWatcher(CWatchImages, watcher); } else if (watcher.WatcherType == WatcherType.BestMatch) { var mic = new MagickImageCollection(); for (int i3 = 0; i3 < watcher.WatchImages.Count; i3++) { WatchImage watchImage = watcher.WatchImages[i3]; var mi = new MagickImage(watchImage.FilePath) { ColorSpace = watcher.ColorSpace }; GetComposedImage(ref mi, watcher.Channel); if (!UseExtremePrecision) { StandardResize(ref mi, wzCropGeo.ToMagick(false)); } else { PreciseResize(ref mi, watchZone.Geometry, gameGeo); } if (watcher.Equalize) { mi.Equalize(); } //CWatchImages[i3] = new CWatchImage(watchImage.Name, indexCount, mi); indexCount++; } } else if (watcher.WatcherType == WatcherType.DuplicateFrame) { HasDupeCheck = true; } } cWatchZones[i1] = new CWatchZone(watchZone.Name, wzCropGeo, CWatches); } CWatchZones = cWatchZones; }