/// <summary>Returns a CacheFile object based on a ResourcePtr</summary> /// <param name="cf">Halo2 cache housing the <paramref name="ptr"/> value</param> /// <param name="ptr">ResourcePtr to use</param> /// <returns>The CacheFile <paramref name="ptr"/> references</returns> /// <remarks>Returns null if <paramref name="ptr"/> doesn't point to anything</remarks> public static Blam.Halo2.CacheFile FromLocation(Blam.Halo2.CacheFile cf, Blam.ResourcePtr ptr) { if (ptr.Offset == -1) { return(null); } var ver = cf.EngineVersion; if (ptr.Map == BlamLib.Blam.ResourcePtr.Location.Internal) { return(cf); } if (ver == BlamVersion.Halo2_Xbox) { switch (ptr.Map) { case BlamLib.Blam.ResourcePtr.Location.MainMenu: return(XboxMainmenu); case BlamLib.Blam.ResourcePtr.Location.Shared: return(XboxShared); case BlamLib.Blam.ResourcePtr.Location.Campaign: return(XboxCampaign); } } else if (ver == BlamVersion.Halo2_Alpha) { switch (ptr.Map) { case BlamLib.Blam.ResourcePtr.Location.MainMenu: return(AlphaMainmenu); case BlamLib.Blam.ResourcePtr.Location.Shared: return(AlphaShared); case BlamLib.Blam.ResourcePtr.Location.Campaign: throw new Debug.Exceptions.UnreachableException(); } } else if (ver == BlamVersion.Halo2_PC) { switch (ptr.Map) { case BlamLib.Blam.ResourcePtr.Location.MainMenu: return(PcMainmenu); case BlamLib.Blam.ResourcePtr.Location.Shared: return(PcShared); case BlamLib.Blam.ResourcePtr.Location.Campaign: return(PcCampaign); } } return(null); }
/// <summary>Returns a CacheFile object based on a ResourcePtr</summary> /// <remarks> /// If the resource is internal then <paramref name="is_internal"/> gets set to true /// and <paramref name="cf"/> is returned. If null and <paramref name="is_internal"/> is not set, /// the CacheFile is either not loaded or the location was invalid. /// /// Returns null if <paramref name="ptr"/> doesn't point to anything /// </remarks> /// <param name="cf">Halo2 cache housing the <paramref name="ptr"/> value</param> /// <param name="ptr">ResourcePtr to use</param> /// <param name="is_internal">bool reference to set if <paramref name="ptr"/> is internal</param> /// <returns>The CacheFile <paramref name="ptr"/> references</returns> public static Blam.Halo2.CacheFile FromLocation(Blam.Halo2.CacheFile cf, Blam.ResourcePtr ptr, out bool is_internal) { var ver = cf.EngineVersion; is_internal = false; if (ptr.Offset == -1) { return(null); } if (ptr.Map == BlamLib.Blam.ResourcePtr.Location.Internal) { is_internal = true; return(cf); } return(FromLocation(cf, ptr)); }