// // UnrealPackageObjectModel.cs - provides an ObjectModel for manipulating Unreal Engine package files // // Author: // Michael Becker // // Copyright (c) 2011-2020 Mike Becker's Software // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . using System; using System.Collections.Generic; namespace UniversalEditor.ObjectModels.UnrealEngine { /// /// Provides an for manipulating Unreal Engine package files. /// public class UnrealPackageObjectModel : ObjectModel { private static ObjectModelReference _omr = null; protected override ObjectModelReference MakeReferenceInternal() { if (_omr == null) { _omr = base.MakeReferenceInternal(); _omr.Path = new string[] { "Game development", "Unreal Engine", "Package" }; } return _omr; } /// /// Unique identifiers used for package downloading from servers. /// public List PackageGUIDs { get; set; } = new List(); /// /// This is the licensee number, different for each game. /// public ushort LicenseeNumber { get; set; } = 0; /// /// Global package flags; i.e., if a package may be downloaded from a game server, etc. /// public PackageFlags PackageFlags { get; set; } = PackageFlags.None; /// /// 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; } = new NameTableEntry.NameTableEntryCollection(); /// /// 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; } = new ExportTableEntry.ExportTableEntryCollection(); public ImportTableEntry.ImportTableEntryCollection ImportTableEntries { get; } = new ImportTableEntry.ImportTableEntryCollection(); public Generation.GenerationCollection Generations { get; } = new Generation.GenerationCollection(); public override void Clear() { LicenseeNumber = 0; PackageFlags = UnrealEngine.PackageFlags.None; PackageGUIDs.Clear(); NameTableEntries.Clear(); ExportTableEntries.Clear(); ImportTableEntries.Clear(); } public override void CopyTo(ObjectModel where) { UnrealPackageObjectModel clone = (where as UnrealPackageObjectModel); clone.LicenseeNumber = LicenseeNumber; clone.PackageFlags = PackageFlags; foreach (Guid guid in PackageGUIDs) { clone.PackageGUIDs.Add(guid); } foreach (NameTableEntry entry in NameTableEntries) { clone.NameTableEntries.Add(entry.Clone() as NameTableEntry); } foreach (ExportTableEntry entry in ExportTableEntries) { clone.ExportTableEntries.Add(entry.Clone() as ExportTableEntry); } foreach (ImportTableEntry entry in ImportTableEntries) { clone.ImportTableEntries.Add(entry.Clone() as ImportTableEntry); } } } }