using System.Collections.Generic; using System.ComponentModel; using Godot; using Godot.Bridge; using Godot.Collections; using Godot.NativeInterop; [ScriptPath("res://Scripts/Entities/NPC.cs")] public class NPC : Entity, Interacteable { public new class MethodName : Entity.MethodName { public new static readonly StringName _EnterTree = "_EnterTree"; public new static readonly StringName _Process = "_Process"; public static readonly StringName Interact = "Interact"; public static readonly StringName GetNext = "GetNext"; public static readonly StringName OnTriggerEnter = "OnTriggerEnter"; public static readonly StringName OnTriggerExit = "OnTriggerExit"; } public new class PropertyName : Entity.PropertyName { public static readonly StringName spawn = "spawn"; public static readonly StringName despawn = "despawn"; public static readonly StringName neededVar = "neededVar"; public static readonly StringName neededCapture = "neededCapture"; public static readonly StringName radius = "radius"; public static readonly StringName behaviours = "behaviours"; public static readonly StringName current = "current"; public static readonly StringName playerIn = "playerIn"; } public new class SignalName : Entity.SignalName { } [Export(PropertyHint.None, "")] public Array spawn; [Export(PropertyHint.None, "")] public Array despawn; [Export(PropertyHint.None, "")] public int[] neededVar; [Export(PropertyHint.None, "")] public IDs neededCapture = IDs.None; [Export(PropertyHint.None, "")] public Area2D radius; [Export(PropertyHint.None, "")] public IBehaviour[] behaviours; public IBehaviour current; private bool playerIn; public override void _EnterTree() { if ((spawn != null && spawn.Count != 0 && !SaveFile.HasFlags(spawn)) || (despawn != null && despawn.Count != 0 && SaveFile.HasFlags(despawn)) || (neededCapture != IDs.None && !SaveFile.current.apprehended.Contains(neededCapture))) { QueueFree(); return; } base._EnterTree(); IBehaviour[] array = behaviours; if (array != null && array.Length != 0) { for (int i = 0; i < behaviours.Length; i++) { behaviours[i].parent = this; } } Room.current.entities.Add(this); if (radius != null) { radius.Monitorable = false; radius.BodyEntered += OnTriggerEnter; radius.BodyExited += OnTriggerExit; } } public override void _Process(double delta) { base._Process(delta); if (!TextSystem.instance.Visible && (Main.inEvent == null || Main.inEvent.done) && !IsQueuedForDeletion()) { if (current == null) { GetNext(IBehaviour.Triggers.Always); } else { current.Do(); } } } public void Interact() { GetNext(IBehaviour.Triggers.Interact); } private void GetNext(IBehaviour.Triggers trigger) { if (behaviours == null || behaviours.Length == 0) { if (trigger == IBehaviour.Triggers.Interact) { Player.instance.canInput = true; } return; } for (int num = behaviours.Length - 1; num >= 0; num--) { if (behaviours[num].trigger == trigger && SaveFile.CanDo(behaviours[num].needs, behaviours[num].limit)) { current = behaviours[num]; behaviours[num].Do(); break; } } } private void OnTriggerEnter(Node other) { if (other is Player) { GetNext(IBehaviour.Triggers.Range); } } private void OnTriggerExit(Node other) { } [EditorBrowsable(EditorBrowsableState.Never)] internal new static List GetGodotMethodList() { return new List(6) { new MethodInfo(MethodName._EnterTree, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, null), new MethodInfo(MethodName._Process, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, new List { new PropertyInfo(Variant.Type.Float, "delta", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false) }, null), new MethodInfo(MethodName.Interact, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, null), new MethodInfo(MethodName.GetNext, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, new List { new PropertyInfo(Variant.Type.Int, "trigger", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false) }, null), new MethodInfo(MethodName.OnTriggerEnter, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, new List { new PropertyInfo(Variant.Type.Object, "other", PropertyHint.None, "", PropertyUsageFlags.Default, new StringName("Node"), exported: false) }, null), new MethodInfo(MethodName.OnTriggerExit, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, new List { new PropertyInfo(Variant.Type.Object, "other", PropertyHint.None, "", PropertyUsageFlags.Default, new StringName("Node"), exported: false) }, null) }; } [EditorBrowsable(EditorBrowsableState.Never)] protected override bool InvokeGodotClassMethod(in godot_string_name method, NativeVariantPtrArgs args, out godot_variant ret) { if (method == MethodName._EnterTree && args.Count == 0) { _EnterTree(); ret = default(godot_variant); return true; } if (method == MethodName._Process && args.Count == 1) { _Process(VariantUtils.ConvertTo(in args[0])); ret = default(godot_variant); return true; } if (method == MethodName.Interact && args.Count == 0) { Interact(); ret = default(godot_variant); return true; } if (method == MethodName.GetNext && args.Count == 1) { GetNext(VariantUtils.ConvertTo(in args[0])); ret = default(godot_variant); return true; } if (method == MethodName.OnTriggerEnter && args.Count == 1) { OnTriggerEnter(VariantUtils.ConvertTo(in args[0])); ret = default(godot_variant); return true; } if (method == MethodName.OnTriggerExit && args.Count == 1) { OnTriggerExit(VariantUtils.ConvertTo(in args[0])); ret = default(godot_variant); return true; } return base.InvokeGodotClassMethod(in method, args, out ret); } [EditorBrowsable(EditorBrowsableState.Never)] protected override bool HasGodotClassMethod(in godot_string_name method) { if (method == MethodName._EnterTree) { return true; } if (method == MethodName._Process) { return true; } if (method == MethodName.Interact) { return true; } if (method == MethodName.GetNext) { return true; } if (method == MethodName.OnTriggerEnter) { return true; } if (method == MethodName.OnTriggerExit) { return true; } return base.HasGodotClassMethod(in method); } [EditorBrowsable(EditorBrowsableState.Never)] protected override bool SetGodotClassPropertyValue(in godot_string_name name, in godot_variant value) { if (name == PropertyName.spawn) { spawn = VariantUtils.ConvertToArray(in value); return true; } if (name == PropertyName.despawn) { despawn = VariantUtils.ConvertToArray(in value); return true; } if (name == PropertyName.neededVar) { neededVar = VariantUtils.ConvertTo(in value); return true; } if (name == PropertyName.neededCapture) { neededCapture = VariantUtils.ConvertTo(in value); return true; } if (name == PropertyName.radius) { radius = VariantUtils.ConvertTo(in value); return true; } if (name == PropertyName.behaviours) { behaviours = VariantUtils.ConvertToSystemArrayOfGodotObject(in value); return true; } if (name == PropertyName.current) { current = VariantUtils.ConvertTo(in value); return true; } if (name == PropertyName.playerIn) { playerIn = VariantUtils.ConvertTo(in value); return true; } return base.SetGodotClassPropertyValue(in name, in value); } [EditorBrowsable(EditorBrowsableState.Never)] protected override bool GetGodotClassPropertyValue(in godot_string_name name, out godot_variant value) { if (name == PropertyName.spawn) { value = VariantUtils.CreateFromArray(spawn); return true; } if (name == PropertyName.despawn) { value = VariantUtils.CreateFromArray(despawn); return true; } if (name == PropertyName.neededVar) { value = VariantUtils.CreateFrom(in neededVar); return true; } if (name == PropertyName.neededCapture) { value = VariantUtils.CreateFrom(in neededCapture); return true; } if (name == PropertyName.radius) { value = VariantUtils.CreateFrom(in radius); return true; } if (name == PropertyName.behaviours) { GodotObject[] array = behaviours; value = VariantUtils.CreateFromSystemArrayOfGodotObject(array); return true; } if (name == PropertyName.current) { value = VariantUtils.CreateFrom(in current); return true; } if (name == PropertyName.playerIn) { value = VariantUtils.CreateFrom(in playerIn); return true; } return base.GetGodotClassPropertyValue(in name, out value); } [EditorBrowsable(EditorBrowsableState.Never)] internal new static List GetGodotPropertyList() { return new List { new PropertyInfo(Variant.Type.Array, PropertyName.spawn, PropertyHint.TypeString, "2/2:NULL:99999,HasNecklace:-10,PartySplit:-9,FullStorage:-8,FullWeapon:-7,FullArmor:-6,FullLInv:-5,FullDInv:-4,SpareMore:-3,FightMore:-2,None:-1,IsInDW:0,KanakoFollowing:1,AxisFollowing:2,StephFollowing:3,JuneFollowing:4,SawKetsukaneWindow:5,AxisCutoutKanako:6,Day1End:7,Day2End:8,Day3End:9,Day4End:10,Day5End:11,Day6End:12,CerobaDay1Talk:13,IntroEvent:14,WeirdStart:15,FirstCrateGate:16,FirstPuzzleSign:17,FirstDW1Chest:18,SavedKanakoCh1:19,ApprehendTutorial:20,KanakoFirstDWTalk:21,KanakoRoomAfterRescueTalk:22,SecondDW1Chest:23,EnemyAfterKanako1:24,EnemyAfterKanako2:25,EnemyAfterKanako3:26,FreedFromJail:27,MossChecked:28,AteMoss:29,KanakoCommentsOnMoss:30,PrisonTriedCrack:31,DisagreedWardenFirstTalk:32,WardenExposited:33,KanakoBearTalk:34,DarkPrisonRightTalk:35,DarkPrisonSouthTalk:36,BearingDefeated:37,WeaponTalk:38,KanakoTalkAfterTutorial:39,DidApprehendTutorial:40,KanakoLakeTalk:41,MoneyChestLake:42,PenniltonFought:43,PenniltonCaught:44,LuncherFought:45,LuncherCaught:46,BearingFought:47,BearingCaught:48,BackpackFirstTalk:49,RubbermanTalk:50,KanakoTownDiag:51,KanakoPhoneEvent:52,ChestBridgeRoom:53,KanakoLandscapeDiag:54,PencellerSidePath:55,EraserSidePath:56,PencellerSidePath2:57,ChestBridgeRoom2:58,WardenApprehendRegular:59,PeniltonDEAD:60,LuncherDEAD:61,BearingDEAD:62,KanakoMemoryGameRoomBefore:63,KanakoMemoryGameInProgress:64,KanakoMemoryGameRoomAfter:65,KanakoPostPennyWeird:66,KanakoPostPennyNormal:67,MP3DarknerTalk:68,BeatMemoryGame:69,YellowPaintEvent:70,MemoryGameWin:71,PenGuyFirstTalk:72,KanakoLakeWeird:73,BearingFortFirstPuzzle:74,KanakoTalkBFortFirstPRoom:75,BFortTrashCan:76,KanakoGateNote:77,KanakoGateEvent:78,BearingFortMainGate:79,BearingFortUpRoomLock:80,MopperMainHall1:81,MopperMainHall2:82,PencellerMainHall:83,WeirdedOnce:84,BearFortLeftMinigame:85,BBallTalk1:86,BBallTalk2:87,BBallPlayedOnce:88,BBallKanakoTalk1:89,BBallKanakoTalk2:90,BBallKanakoTalk3:91,KanakoWeirdTalkBreakRoom:92,KanakoTalkBreakRoom:93,MopperBigCorridor1:94,MopperBigCorridor2:95,MopperBigCorridor3:96,MopperBigCorridor4:97,KanakoTalkFortBigCorridor:98,KanakoWarningBeforeBear:99,KanakoTalkBearPrison:100,KanakoWarningBeforeFountain:101,BearFortTreasureRoom:102,BearFortGotTreasure:103,BearFortTreasureTalk:104,BearTreasureChest1:105,BearTreasureChest2:106,BearTreasureChest3:107,BearFortTreasureInvFull:108,BearTreasureLost:109,KanakoTalkTreasurePost:110,NightTime:111,SchoolFountainSealed:112,FoxFirstTalk:113,FoxDefeated:114,FoxFullInvSpare:115,FoxFullInvDefeat:116,FoxGotItem:117,PenGuyReturn:118,SchoolCheckedLock:119,MagicDoorActive:120,WardenTalkEndDay1:121,WardenInnocentTalk:122,DinaDay1Talk:123,VirgilDay1:124,AfterDinnerDay1:125,MartletHouseCheckD1:126,IgnoredCerobaCallD1:127,FirstKetsuShopEvent:128,CerobaTalkChujinDoor:129,KanakoDiscussDay1:130,ListenedToCCDay1:131,ReturnedNecklace:132,GaveLetterMartlet:133,LuncherDisappear:134,StarloDay1:135,VirgilDay1Weird:136,VirgilDay1Rejected:137,NicePenceller:138,BearingSpareItem:139,BearingSpared:140,KanakoTalkPostBearingF:141,PenGuyPrison:142,KanakoTalkNorthPrisonTalk:143,KanakoApprehendTalk:144,MoochTalkD1:145,AnnoyedDecibat:146,MartEventDay2:147,MailWhaleDay2:148,KanakoEventDay2:149,SchoolRecessDay2:150,JuneRecessDay2:151,MelodyEventDay2:152,RedLetterDay2:153,EnterDarkJailDay2:154,WardenTalkDay2:155,PostWardenOutDWTalkDay2:156,CerobaEventDay2:157,FridgeDay2:158,Day2KanakoRoomCheck:159,KanakoRedLetterDWEntTalk:160,AxisEvent:161,AxisFirstTalk:162,AxisTalkSlide:163,DW2Overview:164,DW2MagicDoor:165,LockLightWorldPortal:166,WardenRobotopiaTalk:167,Gizzard1:168,Gizzard2:169,ChestDW2_1:170,FirstPuzzleDW2:171,Gizzard3:172,KanakoTalkWaterGun:173,Puzzle2_DW2:174,ChestDW2_2:175,DW2Room2Stapler:176,DW2Room2Wrench:177,DW2Room2Gear:178,DW2PlanTalk:179,DW2TownTVEvent:180,Puzzle3_DW2:181,FactoryMainEnemyLeft:182,FactoryMainEnemyRight:183,FactoryPuzzle1:184,FactoryPuzzle2:185,AxisPuzzleTalk:186,EnemyBeforeFactory:187,FactoryRightPuzzle1:188,TalkFactoryRight:189,ChestFactoryRight:190,FactoryRightEnemy:191,ChestFactoryLeft:192,ChestFactoryLeft2:193,TalkFactoryLeft:194,FactoryLeftEnemy1:195,FactoryLeftEnemy2:196,FactoryFirstSwitch:197,ClawTalk:198,TramEvent:199,AxisTrashEvent:200,AxisSoloTalk:201,AxisTrashTreasure:202,PuzzleChujinDWTrash:203,AxisTrashPuzzleTalk:204,AxisHandGet:205,FirstUpstairsTalk:206,UpstairsOverview:207,BunBunEvent1:208,BunBunEvent2:209,KanakoFountainTalk:210,KanakoTosterTalk:211,UpstairsGreenChest:212,UpstairsTalk2:213,RangerEvent:214,RangerTalk:215,RangerBlueBalloon:216,ArchiveChestOutside:217,ArchivesPC:218,PenGuyTalkDay2:219,ChujinShopTalk:220,PenGuyRestRoom:221,SchoolJokeDuoD2:222,BBallPity1:223,BBallPity2:224,BBallPitied:225,BellCrusherPity:226,BBallChestOpen:227,EnemyAfterKanako4:228,EnemyAfterKanako5:229,EnemyAfterKanako6:230,AfterKanakoBridgeOpen:231,PedlaHospitalD1:232,KTalkPrisonRightBD:233,WarpDoorFirst:234,BenchTSouth:235,BenchTMain:236,BenchDW2Archive:237,KanakoFishFirstTalk:238,FishGuyFirstTalk:239,FishGuyTaskDay2:240,PedlaHospitalD2:241,StarloDadDay2:242,ViolettaD2:243,BlackjackD2:244,MochaEventD1:245,StarloEventD2:246,RobaDay2Early:247", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true), new PropertyInfo(Variant.Type.Array, PropertyName.despawn, PropertyHint.TypeString, "2/2:NULL:99999,HasNecklace:-10,PartySplit:-9,FullStorage:-8,FullWeapon:-7,FullArmor:-6,FullLInv:-5,FullDInv:-4,SpareMore:-3,FightMore:-2,None:-1,IsInDW:0,KanakoFollowing:1,AxisFollowing:2,StephFollowing:3,JuneFollowing:4,SawKetsukaneWindow:5,AxisCutoutKanako:6,Day1End:7,Day2End:8,Day3End:9,Day4End:10,Day5End:11,Day6End:12,CerobaDay1Talk:13,IntroEvent:14,WeirdStart:15,FirstCrateGate:16,FirstPuzzleSign:17,FirstDW1Chest:18,SavedKanakoCh1:19,ApprehendTutorial:20,KanakoFirstDWTalk:21,KanakoRoomAfterRescueTalk:22,SecondDW1Chest:23,EnemyAfterKanako1:24,EnemyAfterKanako2:25,EnemyAfterKanako3:26,FreedFromJail:27,MossChecked:28,AteMoss:29,KanakoCommentsOnMoss:30,PrisonTriedCrack:31,DisagreedWardenFirstTalk:32,WardenExposited:33,KanakoBearTalk:34,DarkPrisonRightTalk:35,DarkPrisonSouthTalk:36,BearingDefeated:37,WeaponTalk:38,KanakoTalkAfterTutorial:39,DidApprehendTutorial:40,KanakoLakeTalk:41,MoneyChestLake:42,PenniltonFought:43,PenniltonCaught:44,LuncherFought:45,LuncherCaught:46,BearingFought:47,BearingCaught:48,BackpackFirstTalk:49,RubbermanTalk:50,KanakoTownDiag:51,KanakoPhoneEvent:52,ChestBridgeRoom:53,KanakoLandscapeDiag:54,PencellerSidePath:55,EraserSidePath:56,PencellerSidePath2:57,ChestBridgeRoom2:58,WardenApprehendRegular:59,PeniltonDEAD:60,LuncherDEAD:61,BearingDEAD:62,KanakoMemoryGameRoomBefore:63,KanakoMemoryGameInProgress:64,KanakoMemoryGameRoomAfter:65,KanakoPostPennyWeird:66,KanakoPostPennyNormal:67,MP3DarknerTalk:68,BeatMemoryGame:69,YellowPaintEvent:70,MemoryGameWin:71,PenGuyFirstTalk:72,KanakoLakeWeird:73,BearingFortFirstPuzzle:74,KanakoTalkBFortFirstPRoom:75,BFortTrashCan:76,KanakoGateNote:77,KanakoGateEvent:78,BearingFortMainGate:79,BearingFortUpRoomLock:80,MopperMainHall1:81,MopperMainHall2:82,PencellerMainHall:83,WeirdedOnce:84,BearFortLeftMinigame:85,BBallTalk1:86,BBallTalk2:87,BBallPlayedOnce:88,BBallKanakoTalk1:89,BBallKanakoTalk2:90,BBallKanakoTalk3:91,KanakoWeirdTalkBreakRoom:92,KanakoTalkBreakRoom:93,MopperBigCorridor1:94,MopperBigCorridor2:95,MopperBigCorridor3:96,MopperBigCorridor4:97,KanakoTalkFortBigCorridor:98,KanakoWarningBeforeBear:99,KanakoTalkBearPrison:100,KanakoWarningBeforeFountain:101,BearFortTreasureRoom:102,BearFortGotTreasure:103,BearFortTreasureTalk:104,BearTreasureChest1:105,BearTreasureChest2:106,BearTreasureChest3:107,BearFortTreasureInvFull:108,BearTreasureLost:109,KanakoTalkTreasurePost:110,NightTime:111,SchoolFountainSealed:112,FoxFirstTalk:113,FoxDefeated:114,FoxFullInvSpare:115,FoxFullInvDefeat:116,FoxGotItem:117,PenGuyReturn:118,SchoolCheckedLock:119,MagicDoorActive:120,WardenTalkEndDay1:121,WardenInnocentTalk:122,DinaDay1Talk:123,VirgilDay1:124,AfterDinnerDay1:125,MartletHouseCheckD1:126,IgnoredCerobaCallD1:127,FirstKetsuShopEvent:128,CerobaTalkChujinDoor:129,KanakoDiscussDay1:130,ListenedToCCDay1:131,ReturnedNecklace:132,GaveLetterMartlet:133,LuncherDisappear:134,StarloDay1:135,VirgilDay1Weird:136,VirgilDay1Rejected:137,NicePenceller:138,BearingSpareItem:139,BearingSpared:140,KanakoTalkPostBearingF:141,PenGuyPrison:142,KanakoTalkNorthPrisonTalk:143,KanakoApprehendTalk:144,MoochTalkD1:145,AnnoyedDecibat:146,MartEventDay2:147,MailWhaleDay2:148,KanakoEventDay2:149,SchoolRecessDay2:150,JuneRecessDay2:151,MelodyEventDay2:152,RedLetterDay2:153,EnterDarkJailDay2:154,WardenTalkDay2:155,PostWardenOutDWTalkDay2:156,CerobaEventDay2:157,FridgeDay2:158,Day2KanakoRoomCheck:159,KanakoRedLetterDWEntTalk:160,AxisEvent:161,AxisFirstTalk:162,AxisTalkSlide:163,DW2Overview:164,DW2MagicDoor:165,LockLightWorldPortal:166,WardenRobotopiaTalk:167,Gizzard1:168,Gizzard2:169,ChestDW2_1:170,FirstPuzzleDW2:171,Gizzard3:172,KanakoTalkWaterGun:173,Puzzle2_DW2:174,ChestDW2_2:175,DW2Room2Stapler:176,DW2Room2Wrench:177,DW2Room2Gear:178,DW2PlanTalk:179,DW2TownTVEvent:180,Puzzle3_DW2:181,FactoryMainEnemyLeft:182,FactoryMainEnemyRight:183,FactoryPuzzle1:184,FactoryPuzzle2:185,AxisPuzzleTalk:186,EnemyBeforeFactory:187,FactoryRightPuzzle1:188,TalkFactoryRight:189,ChestFactoryRight:190,FactoryRightEnemy:191,ChestFactoryLeft:192,ChestFactoryLeft2:193,TalkFactoryLeft:194,FactoryLeftEnemy1:195,FactoryLeftEnemy2:196,FactoryFirstSwitch:197,ClawTalk:198,TramEvent:199,AxisTrashEvent:200,AxisSoloTalk:201,AxisTrashTreasure:202,PuzzleChujinDWTrash:203,AxisTrashPuzzleTalk:204,AxisHandGet:205,FirstUpstairsTalk:206,UpstairsOverview:207,BunBunEvent1:208,BunBunEvent2:209,KanakoFountainTalk:210,KanakoTosterTalk:211,UpstairsGreenChest:212,UpstairsTalk2:213,RangerEvent:214,RangerTalk:215,RangerBlueBalloon:216,ArchiveChestOutside:217,ArchivesPC:218,PenGuyTalkDay2:219,ChujinShopTalk:220,PenGuyRestRoom:221,SchoolJokeDuoD2:222,BBallPity1:223,BBallPity2:224,BBallPitied:225,BellCrusherPity:226,BBallChestOpen:227,EnemyAfterKanako4:228,EnemyAfterKanako5:229,EnemyAfterKanako6:230,AfterKanakoBridgeOpen:231,PedlaHospitalD1:232,KTalkPrisonRightBD:233,WarpDoorFirst:234,BenchTSouth:235,BenchTMain:236,BenchDW2Archive:237,KanakoFishFirstTalk:238,FishGuyFirstTalk:239,FishGuyTaskDay2:240,PedlaHospitalD2:241,StarloDadDay2:242,ViolettaD2:243,BlackjackD2:244,MochaEventD1:245,StarloEventD2:246,RobaDay2Early:247", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true), new PropertyInfo(Variant.Type.PackedInt32Array, PropertyName.neededVar, PropertyHint.None, "", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true), new PropertyInfo(Variant.Type.Int, PropertyName.neededCapture, PropertyHint.Enum, "None:-1,Clover:0,Kanako:1,Martlet:2,Ceroba:3,Chujin:4,Starlo:5,Ed:6,Mooch:7,Moray:8,Ace:9,Dina:10,Mo:11,Axis:12,June:13,Melody:14,Dalv:15,TestEnemy:16,Penceller:17,Eraserhead:18,Bearing:19,Pennilton:20,BellBoss:21,Necklace:22,Mopper:23,Warden:24,BackpackDarkner:25,KeychainDarkner:26,JacketDarkner:27,MP3Darkner:28,PenGuy:29,UNUSED:30,FoxBoss:31,CarDarkner:32,BBallDarkner:33,ThumbtackDarkner:34,CoinDarkner:35,Decibat:36,Virgil:37,Kangaroo:38,Cat:39,Pyramid:40,Mirror:41,Scroll:42,Fly:43,PencilLizard:44,AntKid:45,TinfoilLizard:46,HorseGirl:47,DeerGirl:48,TravellerM:49,TravellerF:50,RichGuy:51,RichWoman:52,Aunt:53,Snake:54,Cactus:55,TechGuy:56,Golem:57,StarloBrother:58,StarloDad:59,StarloMom:60,GreenBear:61,RadDude:62,Dunebud:63,Horse:64,PyramidBug:65,Doctor:66,BlueTriangle:67,TallAntlerGirl:68,BlueFire:69,CursorMan:70,IceCreamGuy:71,DemonGuy:72,Squid:73,Bunny:74,KidR:75,KidB:76,KidG:77,MuscleGuy:78,SadGirl:79,SittingGuy:80,MagmaBug:81,CloakAntlerGirl:82,CactusGirl:83,FortuneTeller:84,EyeballGuy:85,MailWhale:86,Gizmo:87,Mocha:88,Britz:89,Violetta:90,Rosa:91,Pedla:92,Conner:93,Gearzerd:94,Toaster:95,Capacitor:96,Stapler:97,BigAxis:98,Wrench:99,RedLetter:100,Batter:101,BunBun:102,Drill:103,Toaster2:104,LegoGreen:105,LegoPink:106,LegoBlue:107,LegoOrange:108,LegoBull:109,KanakoPC:110,RangerRed:111,RangerGreen:112,RangerBlue:113,CameraMan:114,Ruler:115,BlueFireGuy:116,MinerGF:117,SmokerMiner:118,HatMinerGuy:119,GemMinerGuy:120,HappyMinerGirl:121,TeaBull:122,MorayDad:123,MorayMom:124,SittingBunnyGuy:125,ElevatorMinerGuy:126,NervousGirl:127,Blackjack:128", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true), new PropertyInfo(Variant.Type.Object, PropertyName.radius, PropertyHint.NodeType, "Area2D", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true), new PropertyInfo(Variant.Type.Array, PropertyName.behaviours, PropertyHint.TypeString, "24/17:IBehaviour", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true), new PropertyInfo(Variant.Type.Object, PropertyName.current, PropertyHint.None, "", PropertyUsageFlags.ScriptVariable, exported: false), new PropertyInfo(Variant.Type.Bool, PropertyName.playerIn, PropertyHint.None, "", PropertyUsageFlags.ScriptVariable, exported: false) }; } [EditorBrowsable(EditorBrowsableState.Never)] protected override void SaveGodotObjectData(GodotSerializationInfo info) { base.SaveGodotObjectData(info); info.AddProperty(PropertyName.spawn, Variant.CreateFrom(spawn)); info.AddProperty(PropertyName.despawn, Variant.CreateFrom(despawn)); info.AddProperty(PropertyName.neededVar, Variant.From(in neededVar)); info.AddProperty(PropertyName.neededCapture, Variant.From(in neededCapture)); info.AddProperty(PropertyName.radius, Variant.From(in radius)); StringName name = PropertyName.behaviours; GodotObject[] array = behaviours; info.AddProperty(name, Variant.CreateFrom(array)); info.AddProperty(PropertyName.current, Variant.From(in current)); info.AddProperty(PropertyName.playerIn, Variant.From(in playerIn)); } [EditorBrowsable(EditorBrowsableState.Never)] protected override void RestoreGodotObjectData(GodotSerializationInfo info) { base.RestoreGodotObjectData(info); if (info.TryGetProperty(PropertyName.spawn, out var value)) { spawn = value.AsGodotArray(); } if (info.TryGetProperty(PropertyName.despawn, out var value2)) { despawn = value2.AsGodotArray(); } if (info.TryGetProperty(PropertyName.neededVar, out var value3)) { neededVar = value3.As(); } if (info.TryGetProperty(PropertyName.neededCapture, out var value4)) { neededCapture = value4.As(); } if (info.TryGetProperty(PropertyName.radius, out var value5)) { radius = value5.As(); } if (info.TryGetProperty(PropertyName.behaviours, out var value6)) { behaviours = value6.AsGodotObjectArray(); } if (info.TryGetProperty(PropertyName.current, out var value7)) { current = value7.As(); } if (info.TryGetProperty(PropertyName.playerIn, out var value8)) { playerIn = value8.As(); } } }