public override async Task GenerateInClass(ObjectGeneration obj, FileGeneration fg) { await base.GenerateInClass(obj, fg); if (!await obj.IsMajorRecord()) { return; } using (var args = new FunctionWrapper(fg, $"public {obj.Name}")) { args.Add($"{nameof(FormKey)} formKey"); if (obj.GetObjectData().HasMultipleReleases) { args.Add($"{obj.GetObjectData().GameCategory}Release gameRelease"); } } using (new BraceWrapper(fg)) { fg.AppendLine("this.FormKey = formKey;"); if (obj.GetObjectData().HasMultipleReleases) { fg.AppendLine("this.FormVersion = gameRelease.ToGameRelease().GetDefaultFormVersion()!.Value;"); } fg.AppendLine("CustomCtor();"); } fg.AppendLine(); // Used for reflection based construction using (var args = new FunctionWrapper(fg, $"private {obj.Name}")) { args.Add($"{nameof(FormKey)} formKey"); args.Add($"{nameof(GameRelease)} gameRelease"); } using (new BraceWrapper(fg)) { fg.AppendLine("this.FormKey = formKey;"); if (obj.GetObjectData().GameCategory?.HasFormVersion() ?? false) { fg.AppendLine("this.FormVersion = gameRelease.GetDefaultFormVersion()!.Value;"); } fg.AppendLine("CustomCtor();"); } fg.AppendLine(); if (obj.GetObjectData().GameCategory?.HasFormVersion() ?? false) { using (var args = new FunctionWrapper(fg, $"internal {obj.Name}")) { args.Add($"{nameof(FormKey)} formKey"); args.Add($"ushort formVersion"); } using (new BraceWrapper(fg)) { fg.AppendLine("this.FormKey = formKey;"); fg.AppendLine("this.FormVersion = formVersion;"); fg.AppendLine("CustomCtor();"); } fg.AppendLine(); } fg.AppendLine($"public {obj.Name}(I{obj.GetObjectData().GameCategory}Mod mod)"); using (new DepthWrapper(fg)) { using (var args = new FunctionWrapper(fg, ": this")) { args.Add($"mod.{nameof(IMod.GetNextFormKey)}()"); if (obj.GetObjectData().HasMultipleReleases) { args.Add($"mod.{obj.GetObjectData().GameCategory}Release"); } } } using (new BraceWrapper(fg)) { } fg.AppendLine(); fg.AppendLine($"public {obj.Name}(I{obj.GetObjectData().GameCategory}Mod mod, string editorID)"); using (new DepthWrapper(fg)) { using (var args = new FunctionWrapper(fg, ": this")) { args.Add($"mod.{nameof(IMod.GetNextFormKey)}(editorID)"); if (obj.GetObjectData().HasMultipleReleases) { args.Add($"mod.{obj.GetObjectData().GameCategory}Release"); } } } using (new BraceWrapper(fg)) { fg.AppendLine("this.EditorID = editorID;"); } fg.AppendLine(); }
public override async Task GenerateInCommon(ObjectGeneration obj, FileGeneration fg, MaskTypeSet maskTypes) { if (!maskTypes.Applicable(LoquiInterfaceType.IGetter, CommonGenerics.Class)) { return; } await base.GenerateInCommon(obj, fg, maskTypes); if (!await obj.IsMajorRecord()) { return; } using (new RegionWrapper(fg, "Duplicate")) { using (var args = new FunctionWrapper(fg, $"public{obj.Virtual()}{obj.Name} Duplicate{obj.GetGenericTypes(MaskType.Normal, MaskType.NormalGetter)}")) { args.Wheres.AddRange(obj.GenericTypeMaskWheres(LoquiInterfaceType.IGetter, MaskType.Normal, MaskType.NormalGetter)); args.Add($"{obj.Interface(getter: true)} item"); args.Add($"{nameof(FormKey)} formKey"); args.Add($"TranslationCrystal? copyMask"); } using (new BraceWrapper(fg)) { if (obj.Abstract) { fg.AppendLine("throw new NotImplementedException();"); } else { fg.AppendLine($"var newRec = new {obj.Name}(formKey{(obj.GetObjectData().HasMultipleReleases ? $", item.FormVersion" : null)});"); fg.AppendLine($"newRec.DeepCopyIn(item, default({nameof(ErrorMaskBuilder)}?), copyMask);"); fg.AppendLine("return newRec;"); } } fg.AppendLine(); foreach (var baseClass in obj.BaseClassTrail()) { using (var args = new FunctionWrapper(fg, $"public override {baseClass.Name} Duplicate{baseClass.GetGenericTypes(MaskType.Normal, MaskType.NormalGetter)}")) { args.Wheres.AddRange(baseClass.GenericTypeMaskWheres(LoquiInterfaceType.IGetter, MaskType.Normal, MaskType.NormalGetter)); args.Add($"{baseClass.Interface(getter: true)} item"); args.Add($"{nameof(FormKey)} formKey"); args.Add($"TranslationCrystal? copyMask"); } using (new BraceWrapper(fg)) { using (var args = new ArgsWrapper(fg, $"return this.Duplicate")) { args.Add($"item: ({obj.Interface(getter: true)})item"); args.AddPassArg("formKey"); args.AddPassArg("copyMask"); } } fg.AppendLine(); } } }