using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace UniversalEditor.ObjectModels.UnrealEngine { public class UnrealPackageObjectModel : ObjectModel { private static ObjectModelReference _omr = null; protected override ObjectModelReference MakeReferenceInternal() { if (_omr == null) { _omr = base.MakeReferenceInternal(); _omr.Title = "Unreal Engine package"; _omr.Path = new string[] { "Game development", "Unreal Engine", "Package" }; } return _omr; } private List mvarPackageGUIDs = new List(); /// /// Unique identifiers used for package downloading from servers. /// public List PackageGUIDs { get { return mvarPackageGUIDs; } set { mvarPackageGUIDs = value; } } private ushort mvarLicenseeNumber = 0; /// /// This is the licensee number, different for each game. /// public ushort LicenseeNumber { get { return mvarLicenseeNumber; } set { mvarLicenseeNumber = value; } } private PackageFlags mvarPackageFlags = PackageFlags.None; /// /// Global package flags; i.e., if a package may be downloaded from a game server, etc. /// public PackageFlags PackageFlags { get { return mvarPackageFlags; } set { mvarPackageFlags = value; } } private NameTableEntry.NameTableEntryCollection mvarNameTableEntries = new NameTableEntry.NameTableEntryCollection(); /// /// The name-table can be considered an index of all unique names used for objects and /// references within the file. Later on, you'll often find indexes into this table instead of /// a string containing the object-name. /// public NameTableEntry.NameTableEntryCollection NameTableEntries { get { return mvarNameTableEntries; } } private ExportTableEntry.ExportTableEntryCollection mvarExportTableEntries = new ExportTableEntry.ExportTableEntryCollection(); /// /// The export-table is an index for all objects within the package. Every object in the body /// of the file has a corresponding entry in this table, with information like offset within /// the file etc. /// public ExportTableEntry.ExportTableEntryCollection ExportTableEntries { get { return mvarExportTableEntries; } } private ImportTableEntry.ImportTableEntryCollection mvarImportTableEntries = new ImportTableEntry.ImportTableEntryCollection(); public ImportTableEntry.ImportTableEntryCollection ImportTableEntries { get { return mvarImportTableEntries; } } private Generation.GenerationCollection mvarGenerations = new Generation.GenerationCollection(); public Generation.GenerationCollection Generations { get { return mvarGenerations; } } public override void Clear() { mvarLicenseeNumber = 0; mvarPackageFlags = UnrealEngine.PackageFlags.None; mvarPackageGUIDs.Clear(); mvarNameTableEntries.Clear(); mvarExportTableEntries.Clear(); mvarImportTableEntries.Clear(); } public override void CopyTo(ObjectModel where) { UnrealPackageObjectModel clone = (where as UnrealPackageObjectModel); clone.LicenseeNumber = mvarLicenseeNumber; clone.PackageFlags = mvarPackageFlags; foreach (Guid guid in mvarPackageGUIDs) { clone.PackageGUIDs.Add(guid); } foreach (NameTableEntry entry in mvarNameTableEntries) { clone.NameTableEntries.Add(entry.Clone() as NameTableEntry); } foreach (ExportTableEntry entry in mvarExportTableEntries) { clone.ExportTableEntries.Add(entry.Clone() as ExportTableEntry); } foreach (ImportTableEntry entry in mvarImportTableEntries) { clone.ImportTableEntries.Add(entry.Clone() as ImportTableEntry); } } } }