diff --git a/EmoTracker.Data/Items/CompositeToggleItem.cs b/EmoTracker.Data/Items/CompositeToggleItem.cs index d4503d1..93bd0da 100644 --- a/EmoTracker.Data/Items/CompositeToggleItem.cs +++ b/EmoTracker.Data/Items/CompositeToggleItem.cs @@ -115,7 +115,7 @@ protected override void ParseDataInternal(JObject data, IGamePackage package) foreach (JObject imageData in imageMap) { string imgName = imageData.GetValue("img"); - var img = ImageReference.FromPackRelativePath(package, imgName, imageData.GetValue("img_mods")); + var img = ImageReference.FromPackRelativePath((this.OwnerState as Sessions.TrackerState)?.PackageInstance, imgName, imageData.GetValue("img_mods")); if (img != null) { diff --git a/EmoTracker.Data/Items/ConsumableItem.cs b/EmoTracker.Data/Items/ConsumableItem.cs index 8c6039b..f669beb 100644 --- a/EmoTracker.Data/Items/ConsumableItem.cs +++ b/EmoTracker.Data/Items/ConsumableItem.cs @@ -236,10 +236,11 @@ protected override void ParseDataInternal(JObject data, IGamePackage package) mCodeProvider.Clear(); mCodeProvider.AddCodes(data.GetValue("codes")); - mFullIcon = ImageReference.FromPackRelativePath(package, data.GetValue("img"), data.GetValue("img_mods")); + var pi = (this.OwnerState as Sessions.TrackerState)?.PackageInstance; + mFullIcon = ImageReference.FromPackRelativePath(pi, data.GetValue("img"), data.GetValue("img_mods")); // Allow loading a custom disabled image, and then apply filters - mEmptyIcon = ImageReference.FromPackRelativePath(package, data.GetValue("disabled_img"), data.GetValue("disabled_img_mods") ?? DisabledImageFilterSpec); + mEmptyIcon = ImageReference.FromPackRelativePath(pi, data.GetValue("disabled_img"), data.GetValue("disabled_img_mods") ?? DisabledImageFilterSpec); if (mEmptyIcon == null) mEmptyIcon = ImageReference.FromImageReference(mFullIcon, data.GetValue("disabled_img_mods") ?? DisabledImageFilterSpec); diff --git a/EmoTracker.Data/Items/ProgressiveItem.cs b/EmoTracker.Data/Items/ProgressiveItem.cs index 28624d7..746cefb 100644 --- a/EmoTracker.Data/Items/ProgressiveItem.cs +++ b/EmoTracker.Data/Items/ProgressiveItem.cs @@ -215,10 +215,11 @@ protected override void ParseDataInternal(JObject data, IGamePackage package) string codes = ""; + var pi = (this.OwnerState as Sessions.TrackerState)?.PackageInstance; JArray stages = (JArray)data.GetValue("stages"); foreach (JObject stageData in stages) { - var img = ImageReference.FromPackRelativePath(package, stageData.GetValue("img"), stageData.GetValue("img_mods")); + var img = ImageReference.FromPackRelativePath(pi, stageData.GetValue("img"), stageData.GetValue("img_mods")); // Reset the code inheritance chain if requested bool bInheritCodes = stageData.GetValue("inherit_codes", true); diff --git a/EmoTracker.Data/Items/ProgressiveToggleItem.cs b/EmoTracker.Data/Items/ProgressiveToggleItem.cs index 25323c2..0015f9d 100644 --- a/EmoTracker.Data/Items/ProgressiveToggleItem.cs +++ b/EmoTracker.Data/Items/ProgressiveToggleItem.cs @@ -178,11 +178,12 @@ protected override void ParseDataInternal(JObject data, IGamePackage package) uint stageIdx = 0; + var pi = (this.OwnerState as Sessions.TrackerState)?.PackageInstance; JArray stages = (JArray)data.GetValue("stages"); foreach (JObject stageData in stages) { - var img = ImageReference.FromPackRelativePath(package, stageData.GetValue("img"), stageData.GetValue("img_mods")); - var disabledImg = ImageReference.FromPackRelativePath(package, stageData.GetValue("disabled_img"), stageData.GetValue("disabled_img_mods") ?? DisabledImageFilterSpec); + var img = ImageReference.FromPackRelativePath(pi, stageData.GetValue("img"), stageData.GetValue("img_mods")); + var disabledImg = ImageReference.FromPackRelativePath(pi, stageData.GetValue("disabled_img"), stageData.GetValue("disabled_img_mods") ?? DisabledImageFilterSpec); if (img != null) { diff --git a/EmoTracker.Data/Items/StaticItem.cs b/EmoTracker.Data/Items/StaticItem.cs index 4414fc3..e7fe9da 100644 --- a/EmoTracker.Data/Items/StaticItem.cs +++ b/EmoTracker.Data/Items/StaticItem.cs @@ -53,7 +53,7 @@ public override void AdvanceToCode(string code = null) protected override void ParseDataInternal(JObject data, IGamePackage package) { - Icon = ImageReference.FromPackRelativePath(package, data.GetValue("img"), data.GetValue("img_mods")); + Icon = ImageReference.FromPackRelativePath((this.OwnerState as Sessions.TrackerState)?.PackageInstance, data.GetValue("img"), data.GetValue("img_mods")); mCodeProvider.AddCodes(data.GetValue("codes")); Capturable = data.GetValue("capturable", false); } diff --git a/EmoTracker.Data/Items/ToggleBadgedItem.cs b/EmoTracker.Data/Items/ToggleBadgedItem.cs index af99132..e1180cc 100644 --- a/EmoTracker.Data/Items/ToggleBadgedItem.cs +++ b/EmoTracker.Data/Items/ToggleBadgedItem.cs @@ -140,8 +140,9 @@ protected override void ParseDataInternal(JObject data, IGamePackage package) string disabledImgMods = data.GetValue("disabled_img_spec"); disabledImgMods = data.GetValue("disabled_img_mods", disabledImgMods); - mInactiveIcon = ImageReference.FromPackRelativePath(package, data.GetValue("disabled_img"), disabledImgMods ?? DisabledImageFilterSpec); - ActiveIcon = ImageReference.FromPackRelativePath(package, data.GetValue("img"), data.GetValue("img_mods")); + var pi = (this.OwnerState as Sessions.TrackerState)?.PackageInstance; + mInactiveIcon = ImageReference.FromPackRelativePath(pi, data.GetValue("disabled_img"), disabledImgMods ?? DisabledImageFilterSpec); + ActiveIcon = ImageReference.FromPackRelativePath(pi, data.GetValue("img"), data.GetValue("img_mods")); Active = data.GetValue("initial_active_state", Active); AddProvidedCodes(data.GetValue("codes")); diff --git a/EmoTracker.Data/Items/ToggleItem.cs b/EmoTracker.Data/Items/ToggleItem.cs index bc77a7e..7e770f1 100644 --- a/EmoTracker.Data/Items/ToggleItem.cs +++ b/EmoTracker.Data/Items/ToggleItem.cs @@ -133,12 +133,13 @@ public void AddProvidedCodes(string spec) protected override void ParseDataInternal(JObject data, IGamePackage package) { string imgName = data.GetValue("img"); - ActiveIcon = ImageReference.FromPackRelativePath(package, imgName, data.GetValue("img_mods")); + var pi = (this.OwnerState as Sessions.TrackerState)?.PackageInstance; + ActiveIcon = ImageReference.FromPackRelativePath(pi, imgName, data.GetValue("img_mods")); string disabledImgMods = data.GetValue("disabled_img_spec", DisabledImageFilterSpec); disabledImgMods = data.GetValue("disabled_img_mods", disabledImgMods); - mInactiveIcon = ImageReference.FromPackRelativePath(package, data.GetValue("disabled_img"), disabledImgMods); + mInactiveIcon = ImageReference.FromPackRelativePath(pi, data.GetValue("disabled_img"), disabledImgMods); if (mActiveIcon != null && mInactiveIcon == null) mInactiveIcon = ImageReference.FromImageReference(mActiveIcon, disabledImgMods); diff --git a/EmoTracker.Data/Layout/ButtonPopup.cs b/EmoTracker.Data/Layout/ButtonPopup.cs index bcc3161..51fb10a 100644 --- a/EmoTracker.Data/Layout/ButtonPopup.cs +++ b/EmoTracker.Data/Layout/ButtonPopup.cs @@ -66,7 +66,7 @@ protected override void PopulateDefinitionData(JObject data, IGamePackage packag { definition[nameof(Style) + "__def"] = data.GetEnumValue("style", ButtonStyle.Settings); definition[nameof(Image) + "__def"] = ImageReference.FromPackRelativePath( - package, data.GetValue("image"), data.GetValue("image_filter")); + (this.OwnerState as Sessions.TrackerState)?.PackageInstance, data.GetValue("image"), data.GetValue("image_filter")); definition[nameof(PopupBackground) + "__def"] = data.GetValue("popup_background", "#ff212121"); definition[nameof(MaskInput) + "__def"] = data.GetValue("mask_input", false); definition[nameof(LayoutKey)] = data.GetValue("layout"); diff --git a/EmoTracker.Data/Layout/Image.cs b/EmoTracker.Data/Layout/Image.cs index 9cd7726..2d20665 100644 --- a/EmoTracker.Data/Layout/Image.cs +++ b/EmoTracker.Data/Layout/Image.cs @@ -20,7 +20,7 @@ public partial class Image : LayoutItem protected override void PopulateDefinitionData(JObject data, IGamePackage package, Dictionary definition) { definition[nameof(Content) + "__def"] = ImageReference.FromPackRelativePath( - package, data.GetValue("image"), data.GetValue("image_filter")); + (this.OwnerState as Sessions.TrackerState)?.PackageInstance, data.GetValue("image"), data.GetValue("image_filter")); } protected override bool TryParseInternal(JObject data, IGamePackage package) diff --git a/EmoTracker.Data/Layout/TabPanel.cs b/EmoTracker.Data/Layout/TabPanel.cs index 2f526e1..e735a72 100644 --- a/EmoTracker.Data/Layout/TabPanel.cs +++ b/EmoTracker.Data/Layout/TabPanel.cs @@ -152,7 +152,7 @@ protected override bool TryParseInternal(JObject data, IGamePackage package) tab.OwnerState = this.OwnerState; tab.SeedDefinition( entry.GetValue("title"), - ImageReference.FromPackRelativePath(package, entry.GetValue("icon"), entry.GetValue("icon_image_spec")), + ImageReference.FromPackRelativePath((this.OwnerState as Sessions.TrackerState)?.PackageInstance, entry.GetValue("icon"), entry.GetValue("icon_image_spec")), layout); mTabs.Add(tab); } diff --git a/EmoTracker.Data/LocationDatabase.cs b/EmoTracker.Data/LocationDatabase.cs index f1dc5fc..875b7ba 100644 --- a/EmoTracker.Data/LocationDatabase.cs +++ b/EmoTracker.Data/LocationDatabase.cs @@ -177,11 +177,11 @@ public void Reset() public void ParseLocationVisualProperties(JObject data, LocationVisualProperties visual, IGamePackage package) { - ImageReference openImg = ImageReference.FromPackRelativePath(package, data.GetValue("chest_opened_img")); + ImageReference openImg = ImageReference.FromPackRelativePath(this.State?.PackageInstance, data.GetValue("chest_opened_img")); if (openImg != null) visual.OpenChestImage = openImg; - ImageReference closedImg = ImageReference.FromPackRelativePath(package, data.GetValue("chest_unopened_img")); + ImageReference closedImg = ImageReference.FromPackRelativePath(this.State?.PackageInstance, data.GetValue("chest_unopened_img")); if (closedImg != null) visual.ClosedChestImage = closedImg; @@ -723,7 +723,7 @@ Location LoadLocation(IGamePackage package, Location parent, JObject data, Sessi string thumbnailPath = sectionData.GetValue("thumbnail"); if (!string.IsNullOrWhiteSpace(thumbnailPath)) - section.Thumbnail = ImageReference.FromPackRelativePath(package, thumbnailPath); + section.Thumbnail = ImageReference.FromPackRelativePath(this.State?.PackageInstance, thumbnailPath); section.HostedItemCode = sectionData.GetValue("hosted_item"); section.GateItemCode = sectionData.GetValue("gate_item"); @@ -1018,8 +1018,7 @@ internal bool Load(JObject root) if (!string.IsNullOrEmpty(imagePath)) { - var pkg = this.State?.PackageInstance?.GamePackage; - ImageReference imageRef = ImageReference.FromPackRelativePath(pkg, imagePath, filter); + ImageReference imageRef = ImageReference.FromPackRelativePath(this.State?.PackageInstance, imagePath, filter); if (imageRef != null) location.AddBadge(key, imageRef, null, ox, oy); } diff --git a/EmoTracker.Data/Locations/Location.cs b/EmoTracker.Data/Locations/Location.cs index 924ae05..28e2642 100644 --- a/EmoTracker.Data/Locations/Location.cs +++ b/EmoTracker.Data/Locations/Location.cs @@ -521,9 +521,9 @@ public ImageReference AddBadge(string imageRef, string filterSpec = null) { try { - var pkg = (this.OwnerState as Sessions.TrackerState)?.PackageInstance?.GamePackage - ?? Sessions.ActiveSession.Primary?.PackageInstance?.GamePackage; - ImageReference badge = ImageReference.FromPackRelativePath(pkg, imageRef, filterSpec); + var pi = (this.OwnerState as Sessions.TrackerState)?.PackageInstance + ?? Sessions.ActiveSession.Primary?.PackageInstance; + ImageReference badge = ImageReference.FromPackRelativePath(pi, imageRef, filterSpec); if (badge == null) return null; mBadges[DefaultBadgeKey] = new BadgeEntry(DefaultBadgeKey, badge); return badge; diff --git a/EmoTracker.Data/MapDatabase.cs b/EmoTracker.Data/MapDatabase.cs index cafe7bf..5650b4a 100644 --- a/EmoTracker.Data/MapDatabase.cs +++ b/EmoTracker.Data/MapDatabase.cs @@ -78,7 +78,7 @@ internal bool IncrementalLoad(string path, IGamePackage package, Sessions.Tracke mapObj.Name = map.GetValue("name"); mapObj.LocationSize = map.GetValue("location_size", 70); mapObj.LocationBorderThickness = map.GetValue("location_border_thickness", 8); - mapObj.Image = ImageReference.FromPackRelativePath(package, map.GetValue("img"), map.GetValue("img_mods")); + mapObj.Image = ImageReference.FromPackRelativePath(state?.PackageInstance, map.GetValue("img"), map.GetValue("img_mods")); mMaps.Add(mapObj); } } diff --git a/EmoTracker.Data/Media/ImageReference.cs b/EmoTracker.Data/Media/ImageReference.cs index ef74c80..454dce0 100644 --- a/EmoTracker.Data/Media/ImageReference.cs +++ b/EmoTracker.Data/Media/ImageReference.cs @@ -251,10 +251,10 @@ static void PopulateDimensions(ImageReference result, IGamePackage package, IGam public static ImageReference FromPackRelativePath(string path, string filter = null) { - return FromPackRelativePath(Sessions.ActiveSession.Primary?.PackageInstance?.GamePackage, path, filter); + return FromPackRelativePath(Sessions.ActiveSession.Primary?.PackageInstance, path, filter); } - public static ImageReference FromPackRelativePath(IGamePackage package, string path, string filter = null) + public static ImageReference FromPackRelativePath(Sessions.PackageInstance pi, string path, string filter = null) { if (string.IsNullOrWhiteSpace(path)) return null; @@ -262,6 +262,7 @@ public static ImageReference FromPackRelativePath(IGamePackage package, string p path = path.Trim(); path = path.TrimStart(',', '/', '\\'); + var package = pi?.GamePackage; if (package == null || !package.Exists(path)) return null; @@ -274,13 +275,10 @@ public static ImageReference FromPackRelativePath(IGamePackage package, string p { URI = new Uri(path), Filter = filter, - // Phase 7.1.h: stamp the owning PackageInstance so the - // resolver can find this reference's cache + open the - // file directly without consulting an ambient session. - PackageInstance = Sessions.ActiveSession.FindPackageInstanceFor(package), + PackageInstance = pi, }; - PopulateDimensions(result, package, result.PackageInstance?.ActiveVariant, path); + PopulateDimensions(result, package, pi?.ActiveVariant, path); NotifyCreated(result); return result; diff --git a/EmoTracker.Data/ScriptManager.cs b/EmoTracker.Data/ScriptManager.cs index e92d8db..768304c 100644 --- a/EmoTracker.Data/ScriptManager.cs +++ b/EmoTracker.Data/ScriptManager.cs @@ -39,7 +39,7 @@ public ImageReferenceProvider(Sessions.TrackerState state) public ImageReference FromPackRelativePath(string path, string filter = null) { - return ImageReference.FromPackRelativePath(mState.PackageInstance?.GamePackage, path, filter); + return ImageReference.FromPackRelativePath(mState.PackageInstance, path, filter); } public ImageReference FromImageReference(ImageReference existingReference, string filter = null)