diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs
index 2ba1f9f..0a88097 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/Plugin.cs
@@ -43,12 +43,6 @@
private CustomTypeInfo[] _customTypeInfos = new CustomTypeInfo[]
{
new CustomTypeInfo(
- "ActivityObjectTemplate",
- "Node",
- "res://src/framework/activity/ActivityObjectTemplate.cs",
- "res://addons/dungeonShooting_plugin/ActivityObject.svg"
- ),
- new CustomTypeInfo(
"ActivityMark",
"Node2D",
"res://src/framework/map/mark/ActivityMark.cs",
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index 44a8fd3..da5607c 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -10,6 +10,7 @@
/// ActivityObject 子类实例化请不要直接使用 new, 而用该在类上标上 [RegisterActivity(id, prefabPath)],
/// ActivityObject 类会自动扫描并注册物体, 然后使用而是使用 ActivityObject.Create(id) 来创建实例
///
+[Tool]
public abstract partial class ActivityObject : CharacterBody2D, IDestroy
{
///
@@ -212,9 +213,7 @@
//开启的协程
private List _coroutineList;
- //模板实例
- private ActivityObjectTemplate _templateInstance;
-
+
//物体所在区域
private AffiliationArea _affiliationArea;
@@ -244,56 +243,21 @@
private static long _instanceIndex = 0;
//初始化节点
- private void _InitNode(string itemId, string scenePath, World world)
+ private void _InitNode(string itemId, World world)
{
World = world;
- //加载预制体
- var tempPrefab = ResourceManager.Load(scenePath);
- if (tempPrefab == null)
- {
- throw new Exception("创建 ActivityObject 没有找到指定挂载的预制体: " + scenePath);
- }
ItemId = itemId;
Name = GetType().Name + (_instanceIndex++);
- _templateInstance = tempPrefab.Instantiate();
- //移动子节点
- var count = _templateInstance.GetChildCount();
- for (int i = 0; i < count; i++)
- {
- var body = _templateInstance.GetChild(0);
- _templateInstance.RemoveChild(body);
- AddChild(body);
- body.Owner = this;
- switch (body.Name)
- {
- case "AnimatedSprite":
- AnimatedSprite = (AnimatedSprite2D)body;
- _blendShaderMaterial = AnimatedSprite.Material as ShaderMaterial;
- break;
- case "ShadowSprite":
- ShadowSprite = (Sprite2D)body;
- ShadowSprite.Visible = false;
- break;
- case "Collision":
- Collision = (CollisionShape2D)body;
- break;
- }
- }
-
- ZIndex = _templateInstance.z_index;
- CollisionLayer = _templateInstance.collision_layer;
- CollisionMask = _templateInstance.collision_mask;
- Scale = _templateInstance.scale;
- Visible = _templateInstance.visible;
+ AnimatedSprite = GetNode("AnimatedSprite");
+ _blendShaderMaterial = AnimatedSprite.Material as ShaderMaterial;
+ ShadowSprite = GetNode("ShadowSprite");
+ ShadowSprite.Visible = false;
+ Collision = GetNode("Collision");
MotionMode = MotionModeEnum.Floating;
-
MoveController = AddComponent();
-
- //临时处理, 4.0 有bug, 不能销毁模板实例, 不然关闭游戏会报错!!!
- //_templateInstance.CallDeferred(Node.MethodName.QueueFree);
OnInit();
}
@@ -303,6 +267,86 @@
///
public sealed override void _Ready()
{
+#if TOOLS
+ // 在工具模式下创建的 template 节点自动创建对应的必要子节点
+ if (Engine.IsEditorHint())
+ {
+ var parent = GetParent();
+ if (parent != null)
+ {
+ //寻找 owner
+ Node owner;
+ if (parent.Owner != null)
+ {
+ owner = parent.Owner;
+ }
+ else if (Plugin.Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
+ {
+ owner = this;
+ }
+ else
+ {
+ owner = parent;
+ }
+
+ var sprite = GetNodeOrNull("ShadowSprite");
+ //创建Shadow
+ if (sprite == null)
+ {
+ sprite = new Sprite2D();
+ sprite.Name = "ShadowSprite";
+ sprite.ZIndex = -1;
+ var material =
+ ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+ material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
+ material.SetShaderParameter("schedule", 1);
+ sprite.Material = material;
+ AddChild(sprite);
+ sprite.Owner = owner;
+ }
+ else if (sprite.Material == null)
+ {
+ var material =
+ ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+ material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
+ material.SetShaderParameter("schedule", 1);
+ sprite.Material = material;
+ }
+
+ var animatedSprite = GetNodeOrNull("AnimatedSprite");
+ //创建 Sprite2D
+ if (animatedSprite == null)
+ {
+ animatedSprite = new AnimatedSprite2D();
+ animatedSprite.Name = "AnimatedSprite";
+ var material =
+ ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+ material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
+ material.SetShaderParameter("schedule", 0);
+ animatedSprite.Material = material;
+ AddChild(animatedSprite);
+ animatedSprite.Owner = owner;
+ }
+ else if (animatedSprite.Material == null)
+ {
+ var material =
+ ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+ material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
+ material.SetShaderParameter("schedule", 0);
+ animatedSprite.Material = material;
+ }
+
+ //创建Collision
+ if (GetNodeOrNull("Collision") == null)
+ {
+ var co = new CollisionShape2D();
+ co.Name = "Collision";
+ AddChild(co);
+ co.Owner = owner;
+ }
+ }
+ }
+#endif
}
///
@@ -1024,9 +1068,6 @@
{
AffiliationArea.RemoveItem(this);
}
-
- //临时处理, 4.0 有bug, 不能提前销毁模板实例, 不然关闭游戏会报错!!!
- _templateInstance.QueueFree();
}
///
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs
index 6ead626..4e7ccbd 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs
@@ -1,127 +1,127 @@
-using Godot;
-
-///
-/// ActivityObject 节点模板对象
-///
-[Tool]
-public partial class ActivityObjectTemplate : Node
-{
- // ///
- // /// 默认放入的层级
- // ///
- // [Export] public RoomLayerEnum DefaultLayer = RoomLayerEnum.NormalLayer;
-
- ///
- /// 是否是静态物体
- ///
- [Export] public bool IsStatic = false;
-
- ///
- /// 物体初始缩放
- ///
- [Export] public Vector2 scale = Vector2.One;
-
- ///
- /// 当前物体所属物理层
- ///
- [Export(PropertyHint.Layers2DPhysics)] public uint collision_layer;
-
- ///
- /// 当前物体扫描的物理层
- ///
- [Export(PropertyHint.Layers2DPhysics)] public uint collision_mask;
-
- ///
- /// 显示状态
- ///
- [Export] public bool visible = true;
-
- ///
- /// 当前物体渲染层级
- ///
- [Export] public int z_index;
-
- public override void _Ready()
- {
-#if TOOLS
- // 在工具模式下创建的 template 节点自动创建对应的必要子节点
- if (Engine.IsEditorHint())
- {
- var parent = GetParent();
- if (parent != null)
- {
- //寻找 owner
- Node owner;
- if (parent.Owner != null)
- {
- owner = parent.Owner;
- }
- else if (Plugin.Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
- {
- owner = this;
- }
- else
- {
- owner = parent;
- }
-
- var sprite = GetNodeOrNull("ShadowSprite");
- //创建Shadow
- if (sprite == null)
- {
- sprite = new Sprite2D();
- sprite.Name = "ShadowSprite";
- sprite.ZIndex = -1;
- var material =
- ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
- material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
- material.SetShaderParameter("schedule", 1);
- sprite.Material = material;
- AddChild(sprite);
- sprite.Owner = owner;
- }
- else if (sprite.Material == null)
- {
- var material =
- ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
- material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
- material.SetShaderParameter("schedule", 1);
- sprite.Material = material;
- }
-
- var animatedSprite = GetNodeOrNull("AnimatedSprite");
- //创建 Sprite2D
- if (animatedSprite == null)
- {
- animatedSprite = new AnimatedSprite2D();
- animatedSprite.Name = "AnimatedSprite";
- var material =
- ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
- material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
- material.SetShaderParameter("schedule", 0);
- animatedSprite.Material = material;
- AddChild(animatedSprite);
- animatedSprite.Owner = owner;
- }
- else if (animatedSprite.Material == null)
- {
- var material =
- ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
- material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
- material.SetShaderParameter("schedule", 0);
- animatedSprite.Material = material;
- }
-
- //创建Collision
- if (GetNodeOrNull("Collision") == null)
- {
- var co = new CollisionShape2D();
- co.Name = "Collision";
- AddChild(co);
- co.Owner = owner;
- }
- }
- }
-#endif
- }
-}
\ No newline at end of file
+// using Godot;
+//
+// ///
+// /// ActivityObject 节点模板对象
+// ///
+// [Tool]
+// public partial class ActivityObjectTemplate : Node
+// {
+// // ///
+// // /// 默认放入的层级
+// // ///
+// // [Export] public RoomLayerEnum DefaultLayer = RoomLayerEnum.NormalLayer;
+//
+// ///
+// /// 是否是静态物体
+// ///
+// [Export] public bool IsStatic = false;
+//
+// ///
+// /// 物体初始缩放
+// ///
+// [Export] public Vector2 scale = Vector2.One;
+//
+// ///
+// /// 当前物体所属物理层
+// ///
+// [Export(PropertyHint.Layers2DPhysics)] public uint collision_layer;
+//
+// ///
+// /// 当前物体扫描的物理层
+// ///
+// [Export(PropertyHint.Layers2DPhysics)] public uint collision_mask;
+//
+// ///
+// /// 显示状态
+// ///
+// [Export] public bool visible = true;
+//
+// ///
+// /// 当前物体渲染层级
+// ///
+// [Export] public int z_index;
+//
+// public override void _Ready()
+// {
+// #if TOOLS
+// // 在工具模式下创建的 template 节点自动创建对应的必要子节点
+// if (Engine.IsEditorHint())
+// {
+// var parent = GetParent();
+// if (parent != null)
+// {
+// //寻找 owner
+// Node owner;
+// if (parent.Owner != null)
+// {
+// owner = parent.Owner;
+// }
+// else if (Plugin.Plugin.Instance.GetEditorInterface().GetEditedSceneRoot() == this)
+// {
+// owner = this;
+// }
+// else
+// {
+// owner = parent;
+// }
+//
+// var sprite = GetNodeOrNull("ShadowSprite");
+// //创建Shadow
+// if (sprite == null)
+// {
+// sprite = new Sprite2D();
+// sprite.Name = "ShadowSprite";
+// sprite.ZIndex = -1;
+// var material =
+// ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+// material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
+// material.SetShaderParameter("schedule", 1);
+// sprite.Material = material;
+// AddChild(sprite);
+// sprite.Owner = owner;
+// }
+// else if (sprite.Material == null)
+// {
+// var material =
+// ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+// material.SetShaderParameter("blend", new Color(0, 0, 0, 0.47058824F));
+// material.SetShaderParameter("schedule", 1);
+// sprite.Material = material;
+// }
+//
+// var animatedSprite = GetNodeOrNull("AnimatedSprite");
+// //创建 Sprite2D
+// if (animatedSprite == null)
+// {
+// animatedSprite = new AnimatedSprite2D();
+// animatedSprite.Name = "AnimatedSprite";
+// var material =
+// ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+// material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
+// material.SetShaderParameter("schedule", 0);
+// animatedSprite.Material = material;
+// AddChild(animatedSprite);
+// animatedSprite.Owner = owner;
+// }
+// else if (animatedSprite.Material == null)
+// {
+// var material =
+// ResourceManager.Load(ResourcePath.resource_material_Blend_tres, false);
+// material.SetShaderParameter("blend", new Color(1, 1, 1, 1));
+// material.SetShaderParameter("schedule", 0);
+// animatedSprite.Material = material;
+// }
+//
+// //创建Collision
+// if (GetNodeOrNull("Collision") == null)
+// {
+// var co = new CollisionShape2D();
+// co.Name = "Collision";
+// AddChild(co);
+// co.Owner = owner;
+// }
+// }
+// }
+// #endif
+// }
+// }
\ No newline at end of file