Bullet spawners in editor and bullets come out at the spanwer position

This commit is contained in:
Marco 2025-07-09 15:05:50 +02:00
commit b64e096661
16 changed files with 288 additions and 169 deletions

View file

@ -2,9 +2,11 @@
using Cirno.Scripts.Resources;
using Cirno.Scripts.Resources.BulletScripts;
using Godot;
using Godot.Collections;
namespace Cirno.Scripts.Actors;
[Tool]
public partial class ScriptableBulletsEmitter3D : Node3D, IActivable, IScriptHost3D
{
public Node3D ParentObject => this;
@ -31,6 +33,7 @@ public partial class ScriptableBulletsEmitter3D : Node3D, IActivable, IScriptHos
public override void _Ready()
{
if (Engine.IsEditorHint()) return;
//_scriptInstance = Script.Duplicate(true) as BulletScript;
if (!string.IsNullOrWhiteSpace(ActivationGroup))
@ -49,9 +52,23 @@ public partial class ScriptableBulletsEmitter3D : Node3D, IActivable, IScriptHos
}
EmitSignal(SignalName.StateChanged, _isActive);
}
public virtual void _func_godot_apply_properties(Dictionary<string, Variant> props)
{
ActivationGroup = props["targetname"].AsString();
var scriptPath = props["script_path"].AsString();
Script = GD.Load<BulletScript3D>(scriptPath);
EmitOnStart = props["emit_on_start"].AsBool();
InvertSignal = props["invert_signal"].AsBool();
//TargetFunc = props["targetfunc"];
//TargetName = props["targetname"];
}
public bool Activate(ActivationType activationType = ActivationType.Toggle)
{
if (Engine.IsEditorHint()) return false;
switch (activationType)
{
case ActivationType.Use:
@ -89,6 +106,7 @@ public partial class ScriptableBulletsEmitter3D : Node3D, IActivable, IScriptHos
public override void _Process(double delta)
{
if (Engine.IsEditorHint()) return;
if (!_isActive) return;
ScriptMachine.UpdatePhase(delta);