509 lines
20 KiB
C#
509 lines
20 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using Godot;
|
|
using Godot.Bridge;
|
|
using Godot.Collections;
|
|
using Godot.NativeInterop;
|
|
|
|
[ScriptPath("res://Scripts/Puzzles/PuzzleGate.cs")]
|
|
public class PuzzleGate : StaticBody2D, IPuzzle
|
|
{
|
|
[Signal]
|
|
public delegate void GateOpenEventHandler();
|
|
|
|
public new class MethodName : StaticBody2D.MethodName
|
|
{
|
|
public new static readonly StringName _EnterTree = "_EnterTree";
|
|
|
|
public static readonly StringName Active = "Active";
|
|
|
|
public static readonly StringName Deactivate = "Deactivate";
|
|
|
|
public new static readonly StringName _Process = "_Process";
|
|
|
|
public static readonly StringName CheckLinked = "CheckLinked";
|
|
}
|
|
|
|
public new class PropertyName : StaticBody2D.PropertyName
|
|
{
|
|
public static readonly StringName active = "active";
|
|
|
|
public static readonly StringName sprite = "sprite";
|
|
|
|
public static readonly StringName tex = "tex";
|
|
|
|
public static readonly StringName linked = "linked";
|
|
|
|
public static readonly StringName onlyOnce = "onlyOnce";
|
|
|
|
public static readonly StringName shakeOnCompletion = "shakeOnCompletion";
|
|
|
|
public static readonly StringName flags = "flags";
|
|
|
|
public static readonly StringName collider = "collider";
|
|
|
|
public static readonly StringName activeSound = "activeSound";
|
|
|
|
public static readonly StringName overrideState = "overrideState";
|
|
}
|
|
|
|
public new class SignalName : StaticBody2D.SignalName
|
|
{
|
|
public static readonly StringName GateOpen = "GateOpen";
|
|
}
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private Sprite2D[] sprite;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private Texture2D[] tex;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private Node[] linked;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private bool onlyOnce = true;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private bool shakeOnCompletion = true;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private Array<SaveFile.Flags> flags;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private CollisionShape2D collider;
|
|
|
|
[Export(PropertyHint.None, "")]
|
|
private AudioStream activeSound;
|
|
|
|
private IPuzzle[] linkedp;
|
|
|
|
public bool overrideState;
|
|
|
|
private GateOpenEventHandler backing_GateOpen;
|
|
|
|
public bool active { get; set; }
|
|
|
|
public event GateOpenEventHandler GateOpen
|
|
{
|
|
add
|
|
{
|
|
backing_GateOpen = (GateOpenEventHandler)Delegate.Combine(backing_GateOpen, value);
|
|
}
|
|
remove
|
|
{
|
|
backing_GateOpen = (GateOpenEventHandler)Delegate.Remove(backing_GateOpen, value);
|
|
}
|
|
}
|
|
|
|
public override void _EnterTree()
|
|
{
|
|
linkedp = new IPuzzle[linked.Length];
|
|
for (int i = 0; i < linked.Length; i++)
|
|
{
|
|
linkedp[i] = (IPuzzle)linked[i];
|
|
}
|
|
Array<SaveFile.Flags> array = flags;
|
|
if (array != null && array.Count > 0 && SaveFile.HasFlags(flags))
|
|
{
|
|
Active(doEffects: false);
|
|
}
|
|
base.CollisionLayer = 524289u;
|
|
}
|
|
|
|
public void Active(bool doEffects = true)
|
|
{
|
|
active = true;
|
|
for (int i = 0; i < sprite.Length; i++)
|
|
{
|
|
Sprite2D obj = sprite[i];
|
|
Texture2D[] array = tex;
|
|
obj.Texture = ((array != null && array.Length != 0) ? tex[1] : null);
|
|
}
|
|
collider?.SetDeferred("disabled", true);
|
|
if (!doEffects)
|
|
{
|
|
return;
|
|
}
|
|
if (shakeOnCompletion)
|
|
{
|
|
CameraController.Shake(15f, 2f);
|
|
}
|
|
if (activeSound != null)
|
|
{
|
|
Audio.PlaySound(activeSound);
|
|
}
|
|
Array<SaveFile.Flags> array2 = flags;
|
|
if (array2 != null && array2.Count > 0)
|
|
{
|
|
for (int j = 0; j < flags.Count; j++)
|
|
{
|
|
SaveFile.AddFlag(flags[j]);
|
|
}
|
|
}
|
|
EmitSignal(SignalName.GateOpen);
|
|
}
|
|
|
|
public void Deactivate()
|
|
{
|
|
active = false;
|
|
collider?.SetDeferred("disabled", false);
|
|
for (int i = 0; i < sprite.Length; i++)
|
|
{
|
|
sprite[i].Texture = tex[0];
|
|
}
|
|
Party.MoveAndSlide(delayed: true);
|
|
}
|
|
|
|
public override void _Process(double delta)
|
|
{
|
|
if (!active)
|
|
{
|
|
if (CheckLinked() || overrideState)
|
|
{
|
|
Active();
|
|
}
|
|
}
|
|
else if (!onlyOnce && !CheckLinked() && !overrideState)
|
|
{
|
|
Deactivate();
|
|
}
|
|
}
|
|
|
|
private bool CheckLinked()
|
|
{
|
|
for (int i = 0; i < linkedp.Length; i++)
|
|
{
|
|
if (!linkedp[i].active)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
internal static List<MethodInfo> GetGodotMethodList()
|
|
{
|
|
return new List<MethodInfo>(5)
|
|
{
|
|
new MethodInfo(MethodName._EnterTree, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, null),
|
|
new MethodInfo(MethodName.Active, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, new List<PropertyInfo>
|
|
{
|
|
new PropertyInfo(Variant.Type.Bool, "doEffects", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false)
|
|
}, null),
|
|
new MethodInfo(MethodName.Deactivate, 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<PropertyInfo>
|
|
{
|
|
new PropertyInfo(Variant.Type.Float, "delta", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false)
|
|
}, null),
|
|
new MethodInfo(MethodName.CheckLinked, new PropertyInfo(Variant.Type.Bool, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, 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.Active && args.Count == 1)
|
|
{
|
|
Active(VariantUtils.ConvertTo<bool>(in args[0]));
|
|
ret = default(godot_variant);
|
|
return true;
|
|
}
|
|
if (method == MethodName.Deactivate && args.Count == 0)
|
|
{
|
|
Deactivate();
|
|
ret = default(godot_variant);
|
|
return true;
|
|
}
|
|
if (method == MethodName._Process && args.Count == 1)
|
|
{
|
|
_Process(VariantUtils.ConvertTo<double>(in args[0]));
|
|
ret = default(godot_variant);
|
|
return true;
|
|
}
|
|
if (method == MethodName.CheckLinked && args.Count == 0)
|
|
{
|
|
ret = VariantUtils.CreateFrom<bool>(CheckLinked());
|
|
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.Active)
|
|
{
|
|
return true;
|
|
}
|
|
if (method == MethodName.Deactivate)
|
|
{
|
|
return true;
|
|
}
|
|
if (method == MethodName._Process)
|
|
{
|
|
return true;
|
|
}
|
|
if (method == MethodName.CheckLinked)
|
|
{
|
|
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.active)
|
|
{
|
|
active = VariantUtils.ConvertTo<bool>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.sprite)
|
|
{
|
|
sprite = VariantUtils.ConvertToSystemArrayOfGodotObject<Sprite2D>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.tex)
|
|
{
|
|
tex = VariantUtils.ConvertToSystemArrayOfGodotObject<Texture2D>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.linked)
|
|
{
|
|
linked = VariantUtils.ConvertToSystemArrayOfGodotObject<Node>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.onlyOnce)
|
|
{
|
|
onlyOnce = VariantUtils.ConvertTo<bool>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.shakeOnCompletion)
|
|
{
|
|
shakeOnCompletion = VariantUtils.ConvertTo<bool>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.flags)
|
|
{
|
|
flags = VariantUtils.ConvertToArray<SaveFile.Flags>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.collider)
|
|
{
|
|
collider = VariantUtils.ConvertTo<CollisionShape2D>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.activeSound)
|
|
{
|
|
activeSound = VariantUtils.ConvertTo<AudioStream>(in value);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.overrideState)
|
|
{
|
|
overrideState = VariantUtils.ConvertTo<bool>(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.active)
|
|
{
|
|
value = VariantUtils.CreateFrom<bool>(active);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.sprite)
|
|
{
|
|
GodotObject[] array = sprite;
|
|
value = VariantUtils.CreateFromSystemArrayOfGodotObject(array);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.tex)
|
|
{
|
|
GodotObject[] array = tex;
|
|
value = VariantUtils.CreateFromSystemArrayOfGodotObject(array);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.linked)
|
|
{
|
|
GodotObject[] array = linked;
|
|
value = VariantUtils.CreateFromSystemArrayOfGodotObject(array);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.onlyOnce)
|
|
{
|
|
value = VariantUtils.CreateFrom(in onlyOnce);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.shakeOnCompletion)
|
|
{
|
|
value = VariantUtils.CreateFrom(in shakeOnCompletion);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.flags)
|
|
{
|
|
value = VariantUtils.CreateFromArray(flags);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.collider)
|
|
{
|
|
value = VariantUtils.CreateFrom(in collider);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.activeSound)
|
|
{
|
|
value = VariantUtils.CreateFrom(in activeSound);
|
|
return true;
|
|
}
|
|
if (name == PropertyName.overrideState)
|
|
{
|
|
value = VariantUtils.CreateFrom(in overrideState);
|
|
return true;
|
|
}
|
|
return base.GetGodotClassPropertyValue(in name, out value);
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
internal static List<PropertyInfo> GetGodotPropertyList()
|
|
{
|
|
return new List<PropertyInfo>
|
|
{
|
|
new PropertyInfo(Variant.Type.Array, PropertyName.sprite, PropertyHint.TypeString, "24/34:Sprite2D", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Array, PropertyName.tex, PropertyHint.TypeString, "24/17:Texture2D", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Array, PropertyName.linked, PropertyHint.TypeString, "24/34:Node", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Bool, PropertyName.onlyOnce, PropertyHint.None, "", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Bool, PropertyName.shakeOnCompletion, PropertyHint.None, "", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Array, PropertyName.flags, 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.Object, PropertyName.collider, PropertyHint.NodeType, "CollisionShape2D", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Object, PropertyName.activeSound, PropertyHint.ResourceType, "AudioStream", PropertyUsageFlags.Default | PropertyUsageFlags.ScriptVariable, exported: true),
|
|
new PropertyInfo(Variant.Type.Bool, PropertyName.active, PropertyHint.None, "", PropertyUsageFlags.ScriptVariable, exported: false),
|
|
new PropertyInfo(Variant.Type.Bool, PropertyName.overrideState, PropertyHint.None, "", PropertyUsageFlags.ScriptVariable, exported: false)
|
|
};
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
protected override void SaveGodotObjectData(GodotSerializationInfo info)
|
|
{
|
|
base.SaveGodotObjectData(info);
|
|
info.AddProperty(PropertyName.active, Variant.From<bool>(active));
|
|
StringName name = PropertyName.sprite;
|
|
GodotObject[] array = sprite;
|
|
info.AddProperty(name, Variant.CreateFrom(array));
|
|
StringName name2 = PropertyName.tex;
|
|
array = tex;
|
|
info.AddProperty(name2, Variant.CreateFrom(array));
|
|
StringName name3 = PropertyName.linked;
|
|
array = linked;
|
|
info.AddProperty(name3, Variant.CreateFrom(array));
|
|
info.AddProperty(PropertyName.onlyOnce, Variant.From(in onlyOnce));
|
|
info.AddProperty(PropertyName.shakeOnCompletion, Variant.From(in shakeOnCompletion));
|
|
info.AddProperty(PropertyName.flags, Variant.CreateFrom(flags));
|
|
info.AddProperty(PropertyName.collider, Variant.From(in collider));
|
|
info.AddProperty(PropertyName.activeSound, Variant.From(in activeSound));
|
|
info.AddProperty(PropertyName.overrideState, Variant.From(in overrideState));
|
|
info.AddSignalEventDelegate(SignalName.GateOpen, backing_GateOpen);
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
protected override void RestoreGodotObjectData(GodotSerializationInfo info)
|
|
{
|
|
base.RestoreGodotObjectData(info);
|
|
if (info.TryGetProperty(PropertyName.active, out var value))
|
|
{
|
|
active = value.As<bool>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.sprite, out var value2))
|
|
{
|
|
sprite = value2.AsGodotObjectArray<Sprite2D>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.tex, out var value3))
|
|
{
|
|
tex = value3.AsGodotObjectArray<Texture2D>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.linked, out var value4))
|
|
{
|
|
linked = value4.AsGodotObjectArray<Node>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.onlyOnce, out var value5))
|
|
{
|
|
onlyOnce = value5.As<bool>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.shakeOnCompletion, out var value6))
|
|
{
|
|
shakeOnCompletion = value6.As<bool>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.flags, out var value7))
|
|
{
|
|
flags = value7.AsGodotArray<SaveFile.Flags>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.collider, out var value8))
|
|
{
|
|
collider = value8.As<CollisionShape2D>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.activeSound, out var value9))
|
|
{
|
|
activeSound = value9.As<AudioStream>();
|
|
}
|
|
if (info.TryGetProperty(PropertyName.overrideState, out var value10))
|
|
{
|
|
overrideState = value10.As<bool>();
|
|
}
|
|
if (info.TryGetSignalEventDelegate<GateOpenEventHandler>(SignalName.GateOpen, out var value11))
|
|
{
|
|
backing_GateOpen = value11;
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
internal static List<MethodInfo> GetGodotSignalList()
|
|
{
|
|
return new List<MethodInfo>(1)
|
|
{
|
|
new MethodInfo(SignalName.GateOpen, new PropertyInfo(Variant.Type.Nil, "", PropertyHint.None, "", PropertyUsageFlags.Default, exported: false), MethodFlags.Normal, null, null)
|
|
};
|
|
}
|
|
|
|
protected void EmitSignalGateOpen()
|
|
{
|
|
EmitSignal(SignalName.GateOpen);
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
protected override void RaiseGodotClassSignalCallbacks(in godot_string_name signal, NativeVariantPtrArgs args)
|
|
{
|
|
if (signal == SignalName.GateOpen && args.Count == 0)
|
|
{
|
|
backing_GateOpen?.Invoke();
|
|
}
|
|
else
|
|
{
|
|
base.RaiseGodotClassSignalCallbacks(in signal, args);
|
|
}
|
|
}
|
|
|
|
[EditorBrowsable(EditorBrowsableState.Never)]
|
|
protected override bool HasGodotClassSignal(in godot_string_name signal)
|
|
{
|
|
if (signal == SignalName.GateOpen)
|
|
{
|
|
return true;
|
|
}
|
|
return base.HasGodotClassSignal(in signal);
|
|
}
|
|
}
|