protected override void InitializeExplicitlyForGame(Engine.BlamEngineTargetHandle gameTarget) { Data = RuntimeData.ContentHeader.Create(gameTarget.Build); Contract.Assert(gameTarget.Build.RevisionIndex.IsNotNone()); mBuildMajor = (short)gameTarget.Build.Revision.Version; }
BlobObject CreateObjectImpl(Engine.BlamEngineTargetHandle gameTarget, BlobGroup blobGroup, int version, int binarySize) { BlobObject bobject; switch (blobGroup.KnownAs) { case WellKnownBlob.ContentHeader: bobject = new ContentHeaderBlob(); break; case WellKnownBlob.GameVariant: bobject = new GameEngineVariantBlob(); break; default: throw new KSoft.Debug.UnreachableException(blobGroup.GroupTag.Name); } Util.MarkUnusedVariable(ref binarySize); bobject.Initialize(this, gameTarget, blobGroup, version); return(bobject); }
public BlobObject CreateObject(Engine.BlamEngineTargetHandle gameTarget, BlobGroup blobGroup, int version = TypeExtensions.kNone, int binarySize = TypeExtensions.kNone) { Contract.Requires(!gameTarget.IsNone); Contract.Requires(blobGroup != null); Contract.Requires(version.IsNoneOrPositive()); return(CreateObjectImpl(gameTarget, blobGroup, version, binarySize)); }
public override int CalculateFixedBinarySize(Engine.BlamEngineTargetHandle gameTarget) { var game_build = gameTarget.Build; if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHaloReach)) { return(kSizeOfHaloReach); } if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHalo4)) { return(kSizeOfHalo4); } throw new KSoft.Debug.UnreachableException(game_build.ToDisplayString()); }
public static long GetBlfFileLength(Engine.BlamEngineTargetHandle gameTarget) { var game_build = gameTarget.Build; if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHaloReach)) { return(kSizeOfBitStreamHaloReach + 0x329); } if (game_build.IsWithinSameBranch(Engine.EngineRegistry.EngineBranchHalo4)) { return(kSizeOfBitStreamHalo4 + 0x329); } throw new KSoft.Debug.UnreachableException(game_build.ToDisplayString()); }
internal void Initialize(BlobSystem system, Engine.BlamEngineTargetHandle gameTarget, BlobGroup blobGroup, int version) { SystemGroup = blobGroup; GameTarget = gameTarget; Version = version; BlobGroupVersionAndBuildInfo info_for_version; if (SystemGroup.VersionAndBuildMap.TryGetValue(Version, out info_for_version)) { SystemGroupVersionInfo = info_for_version; } else { throw new KSoft.Debug.UnreachableException(); } InitializeExplicitlyForGame(gameTarget); }
public BlobObject CreateObject(Engine.BlamEngineTargetHandle gameTarget, WellKnownBlob knownBlob) { if (gameTarget.IsNone) { throw new ArgumentNoneException(nameof(gameTarget)); } if (!gameTarget.Build.IsFullyFormed) { throw new ArgumentException("Target build needs to be fully formed", nameof(gameTarget)); } if (knownBlob == WellKnownBlob.NotWellKnown) { throw new ArgumentException(nameof(WellKnownBlob.NotWellKnown), nameof(knownBlob)); } BlobGroup known_blob_group; if (!TryGetBlobGroup(knownBlob, out known_blob_group)) { throw new InvalidOperationException(string.Format( "No blob groups marked to be known as {0} under {1}", knownBlob, this.Prototype.Engine)); } BlobGroupVersionAndBuildInfo known_blob_group_version_info = known_blob_group.FindMostRelaventVersionInfo(gameTarget.Build); if (known_blob_group_version_info == null) { throw new InvalidOperationException(string.Format( "No {0} blob group versions resolved possibly for {1} under {2}", knownBlob, gameTarget.Build, this.Prototype.Engine)); } return(CreateObject(gameTarget, known_blob_group, known_blob_group_version_info.MajorVersion)); }
protected virtual void InitializeExplicitlyForGame(Engine.BlamEngineTargetHandle gameTarget) { }
public abstract int CalculateFixedBinarySize(Engine.BlamEngineTargetHandle gameTarget);
public ICollection <BlobObject> StreamObjects <TDoc, TCursor>(IO.TagElementStream <TDoc, TCursor, string> s, ICollection <BlobObject> results, Engine.BlamEngineTargetHandle gameTarget) where TDoc : class where TCursor : class { Contract.Requires <ArgumentNullException>(!gameTarget.IsNone); if (s.IsReading) { results = new List <BlobObject>(); } var ctxt = new SerializeObjectContext(this, gameTarget); s.StreamElements("BlobObject", results, ctxt, SerializeObject, _ctxt => null); return(results); }
public SerializeObjectContext(BlobSystem system, Engine.BlamEngineTargetHandle gameTarget) { System = system; GameTarget = gameTarget; }
public override int CalculateFixedBinarySize(Engine.BlamEngineTargetHandle gameTarget) { return(kSizeOf); }
protected override void InitializeExplicitlyForGame(Engine.BlamEngineTargetHandle gameTarget) { Data = new RuntimeData.Variants.GameEngineVariant(gameTarget.Build); }