diff --git a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs
index 9be0e02..8a9c187 100644
--- a/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs
+++ b/DungeonShooting_Godot/addons/dungeonShooting_plugin/generator/ExcelGenerator.cs
@@ -97,6 +97,7 @@
//dotnet publish excelTool -c Release -r win-x64 -o ./excelTool/publish/win-x64
//dotnet publish excelTool -c Release -r osx-x64 -o excelTool/publish/osx-x64
//dotnet publish excelTool -c Release -r osx-x64 --self-contained true -p:PublishSingleFile=true -o excelTool/publish/osx-x64
+ GD.Print("编译命令: " + $"dotnet publish {csProjectPath} -c Release -r {rid} --self-contained true -p:PublishSingleFile=true -o {outputPath}");
var outLog = new Array();
var result = OS.Execute("dotnet", new string[]
{
diff --git a/DungeonShooting_Godot/excel/ActivityBase.xlsx b/DungeonShooting_Godot/excel/ActivityBase.xlsx
index 8643a42..9455033 100644
--- a/DungeonShooting_Godot/excel/ActivityBase.xlsx
+++ b/DungeonShooting_Godot/excel/ActivityBase.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excelTool/ExcelGenerator.cs b/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
index c206007..8a60a7c 100644
--- a/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
+++ b/DungeonShooting_Godot/excelTool/ExcelGenerator.cs
@@ -89,9 +89,13 @@
//记录文件
foreach (var fileInfo in fileInfos)
{
- var fileName = Path.GetFileNameWithoutExtension(fileInfo.Name).FirstToUpper();
- _excelNames.Add(fileName);
+ if (fileInfo.Extension == ".xlsx")
+ {
+ var fileName = Path.GetFileNameWithoutExtension(fileInfo.Name).FirstToUpper();
+ _excelNames.Add(fileName);
+ }
}
+
//读取配置文件
foreach (var fileInfo in fileInfos)
{
diff --git a/DungeonShooting_Godot/excelTool/version b/DungeonShooting_Godot/excelTool/version
index bf0d87a..7813681 100644
--- a/DungeonShooting_Godot/excelTool/version
+++ b/DungeonShooting_Godot/excelTool/version
@@ -1 +1 @@
-4
\ No newline at end of file
+5
\ No newline at end of file
diff --git a/DungeonShooting_Godot/prefab/item/Item0031.tscn b/DungeonShooting_Godot/prefab/item/Item0031.tscn
new file mode 100644
index 0000000..09bfd46
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/item/Item0031.tscn
@@ -0,0 +1,64 @@
+[gd_scene load_steps=8 format=3 uid="uid://bhcqel0ylhti3"]
+
+[ext_resource type="Script" path="res://src/game/activity/item/ObstacleObject.cs" id="1_g24mc"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_05yhp"]
+[ext_resource type="Texture2D" uid="uid://c45ffwqrk708i" path="res://resource/sprite/item/hall/item _31.png" id="3_7e6ju"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_wh4b7"]
+resource_local_to_scene = true
+shader = ExtResource("2_05yhp")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_f7tsa"]
+resource_local_to_scene = true
+shader = ExtResource("2_05yhp")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_uqva1"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("3_7e6ju")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_kmpvc"]
+size = Vector2(10, 9.5)
+
+[node name="Item0031" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 512
+collision_mask = 0
+script = ExtResource("1_g24mc")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_wh4b7")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_f7tsa")
+position = Vector2(0, -2)
+sprite_frames = SubResource("SpriteFrames_uqva1")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, 3.25)
+shape = SubResource("RectangleShape2D_kmpvc")
diff --git a/DungeonShooting_Godot/prefab/item/Item0057.tscn b/DungeonShooting_Godot/prefab/item/Item0057.tscn
new file mode 100644
index 0000000..805cd3f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/item/Item0057.tscn
@@ -0,0 +1,63 @@
+[gd_scene load_steps=8 format=3 uid="uid://bhwiakjbpjbsb"]
+
+[ext_resource type="Script" path="res://src/game/activity/item/ObstacleObject.cs" id="1_fsyqi"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_ot8r8"]
+[ext_resource type="Texture2D" uid="uid://ce4byqcoo2n05" path="res://resource/sprite/item/hall/item _57.png" id="3_2h0tv"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_wh4b7"]
+resource_local_to_scene = true
+shader = ExtResource("2_ot8r8")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_f7tsa"]
+resource_local_to_scene = true
+shader = ExtResource("2_ot8r8")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = false
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
+shader_parameter/outline_use_blend = true
+shader_parameter/grey = 0.0
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_uqva1"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("3_2h0tv")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_kmpvc"]
+size = Vector2(20, 12)
+
+[node name="Item0057" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 512
+collision_mask = 0
+script = ExtResource("1_fsyqi")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_wh4b7")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_f7tsa")
+sprite_frames = SubResource("SpriteFrames_uqva1")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, 2)
+shape = SubResource("RectangleShape2D_kmpvc")
diff --git a/DungeonShooting_Godot/resource/config/ActivityBase.json b/DungeonShooting_Godot/resource/config/ActivityBase.json
index 4f62c43..eb431b1 100644
--- a/DungeonShooting_Godot/resource/config/ActivityBase.json
+++ b/DungeonShooting_Godot/resource/config/ActivityBase.json
@@ -866,5 +866,33 @@
"Prefab": "res://prefab/item/Item0017.tscn",
"Icon": "",
"ShowInMapEditor": false
+ },
+ {
+ "Id": "item_0031",
+ "Type": 99,
+ "Name": "\u53F0\u706F",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": true,
+ "__Material": "",
+ "Prefab": "res://prefab/item/Item0031.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
+ },
+ {
+ "Id": "item_0057",
+ "Type": 99,
+ "Name": "\u5361\u5E26\u76D2\u5B50",
+ "Quality": 0,
+ "Price": 0,
+ "Intro": "",
+ "Details": "",
+ "IsStatic": true,
+ "__Material": "",
+ "Prefab": "res://prefab/item/Item0057.tscn",
+ "Icon": "",
+ "ShowInMapEditor": false
}
]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/item/hall/item _31.png b/DungeonShooting_Godot/resource/sprite/item/hall/item _31.png
index 0b0bdb6..30e47fe 100644
--- a/DungeonShooting_Godot/resource/sprite/item/hall/item _31.png
+++ b/DungeonShooting_Godot/resource/sprite/item/hall/item _31.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/item/hall/item _57.png b/DungeonShooting_Godot/resource/sprite/item/hall/item _57.png
index 28b44f5..5ec97f0 100644
--- a/DungeonShooting_Godot/resource/sprite/item/hall/item _57.png
+++ b/DungeonShooting_Godot/resource/sprite/item/hall/item _57.png
Binary files differ
diff --git a/DungeonShooting_Godot/scene/Hall.tscn b/DungeonShooting_Godot/scene/Hall.tscn
index d664853..ccaeecf 100644
--- a/DungeonShooting_Godot/scene/Hall.tscn
+++ b/DungeonShooting_Godot/scene/Hall.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=12 format=3 uid="uid://c2hynqudkykxl"]
+[gd_scene load_steps=13 format=3 uid="uid://c2hynqudkykxl"]
[ext_resource type="PackedScene" path="res://scene/Dungeon.tscn" id="1_31od0"]
[ext_resource type="Script" path="res://src/game/hall/Hall.cs" id="2_43fdu"]
@@ -6,6 +6,7 @@
[ext_resource type="Script" path="res://src/game/hall/DungeonEntrance.cs" id="3_t3my6"]
[ext_resource type="Script" path="res://src/framework/activity/ActivityInstance.cs" id="5_lowqi"]
[ext_resource type="TileSet" uid="uid://db76iwmblenk8" path="res://resource/tileset/HallTileset.tres" id="6_xwnih"]
+[ext_resource type="Texture2D" uid="uid://b38x81ind5fk3" path="res://resource/sprite/item/hall/item _05.png" id="7_42rdc"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_ru8u4"]
size = Vector2(66, 32)
@@ -29,7 +30,8 @@
metadata/_edit_horizontal_guides_ = [666.0, -210.0]
[node name="HallBg" type="Sprite2D" parent="." index="1"]
-z_index = -5
+visible = false
+z_index = 20
texture = ExtResource("3_0g5wq")
centered = false
@@ -79,7 +81,7 @@
y_sort_enabled = true
[node name="Item0012" type="Node2D" parent="ItemRoot" index="0"]
-position = Vector2(129, 338)
+position = Vector2(806, 379)
script = ExtResource("5_lowqi")
Id = "item_0012"
DefaultLayer = 1
@@ -87,7 +89,7 @@
CollisionVisible = false
[node name="Item0006" type="Node2D" parent="ItemRoot" index="1"]
-position = Vector2(188, 342)
+position = Vector2(854, 428)
script = ExtResource("5_lowqi")
Id = "item_0006"
DefaultLayer = 1
@@ -95,15 +97,21 @@
CollisionVisible = false
[node name="Item0008" type="Node2D" parent="ItemRoot" index="2"]
-position = Vector2(250, 348)
+position = Vector2(810, 347)
script = ExtResource("5_lowqi")
Id = "item_0008"
DefaultLayer = 1
ShowOffset = Vector2(2.08165e-12, 2)
CollisionVisible = false
+[node name="ActivityInstance" type="Node2D" parent="ItemRoot/Item0008" index="1"]
+position = Vector2(4, -14)
+script = ExtResource("5_lowqi")
+Id = "item_0031"
+CollisionVisible = false
+
[node name="Item0013" type="Node2D" parent="ItemRoot" index="3"]
-position = Vector2(190, 301)
+position = Vector2(854, 341)
script = ExtResource("5_lowqi")
Id = "item_0013"
DefaultLayer = 1
@@ -111,7 +119,7 @@
CollisionVisible = false
[node name="Item0014" type="Node2D" parent="ItemRoot" index="4"]
-position = Vector2(254, 385)
+position = Vector2(918, 362)
script = ExtResource("5_lowqi")
Id = "item_0014"
DefaultLayer = 1
@@ -119,7 +127,7 @@
CollisionVisible = false
[node name="Item0017" type="Node2D" parent="ItemRoot" index="5"]
-position = Vector2(187, 389)
+position = Vector2(854, 380)
script = ExtResource("5_lowqi")
Id = "item_0017"
DefaultLayer = 1
@@ -127,7 +135,12 @@
CollisionVisible = false
[node name="Weapon" type="Node2D" parent="ItemRoot" index="6"]
-position = Vector2(277, 308)
+position = Vector2(252, 302)
script = ExtResource("5_lowqi")
Id = "weapon0002"
CollisionVisible = false
+
+[node name="Item05" type="Sprite2D" parent="." index="7"]
+z_index = -4
+position = Vector2(859, 383)
+texture = ExtResource("7_42rdc")
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
index 26b7608..b693bdc 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityInstance.cs
@@ -9,6 +9,8 @@
[Tool]
public partial class ActivityInstance : Node2D
{
+ private const string GroupName = "Editor";
+
///
/// 物体Id
///
@@ -123,6 +125,10 @@
private Vector2 _collPos;
private bool _createFlag = false;
+ //嵌套Instance相关
+ private bool _isNested = false;
+ private ActivityObject _activityInstance;
+
private static string _jsonText;
///
@@ -195,12 +201,11 @@
#if TOOLS
if (Engine.IsEditorHint())
{
- var children = GetChildren();
- foreach (var child in children)
- {
- child.QueueFree();
- }
_dirty = true;
+ if (_activityObject != null)
+ {
+ _activityObject.QueueFree();
+ }
_activityObject = null;
_prevId = null;
}
@@ -218,25 +223,65 @@
#endif
}
- private void DoCreateObject()
+ private ActivityObject DoCreateObject()
{
if (_createFlag)
{
- return;
+ return _activityInstance;
}
_createFlag = true;
var activityObject = ActivityObject.Create(Id);
- activityObject.Position = GlobalPosition;
- activityObject.Scale = GlobalScale;
- activityObject.Rotation = GlobalRotation;
- activityObject.Name = Name;
+ if (_isNested)
+ {
+ activityObject.Position = Position;
+ activityObject.Scale = Scale;
+ activityObject.Rotation = Rotation;
+ }
+ else
+ {
+ activityObject.Position = GlobalPosition;
+ activityObject.Scale = GlobalScale;
+ activityObject.Rotation = GlobalRotation;
+ }
+
activityObject.Visible = Visible;
activityObject.ShadowOffset = _showOffset;
activityObject.Altitude = _altitude;
activityObject.EnableVerticalMotion = VerticalMotion;
- activityObject.PutDown(DefaultLayer, _showShadow);
+ if (!_isNested)
+ {
+ activityObject.PutDown(DefaultLayer, _showShadow);
+ }
+
+ var children = GetChildren();
+ foreach (var child in children)
+ {
+ if (!child.IsInGroup(GroupName))
+ {
+ if (child is ActivityInstance o)
+ {
+ o._isNested = true;
+ var instance = o.DoCreateObject();
+ if (instance is IMountItem mountItem)
+ {
+ activityObject.AddMountObject(mountItem);
+ }
+ else
+ {
+ activityObject.AddChild(instance);
+ }
+ }
+ else
+ {
+ child.Reparent(activityObject);
+ }
+ }
+ }
+
QueueFree();
+ _activityInstance = activityObject;
+ return activityObject;
}
private void OnChangeActivityId(string id)
@@ -251,7 +296,6 @@
if (string.IsNullOrEmpty(id))
{
- GD.Print("删除物体");
ShowErrorSprite();
return;
}
@@ -272,7 +316,6 @@
if (endIndex > -1)
{
var prefab = _jsonText.Substring(startIndex + s.Length, endIndex - (startIndex + s.Length));
- GD.Print("创建物体: " + id);
var instance = ResourceManager.LoadAndInstantiate(prefab);
_activityObject = instance;
_collPos = instance.Collision.Position - instance.AnimatedSprite.Position - instance.AnimatedSprite.Offset;
@@ -293,6 +336,7 @@
}
}
AddChild(instance);
+ MoveChild(instance, 0);
HideErrorSprite();
return;
}
@@ -325,8 +369,10 @@
if (_errorSprite == null)
{
_errorSprite = new Sprite2D();
+ _errorSprite.AddToGroup(GroupName);
_errorSprite.Texture = ResourceManager.LoadTexture2D(ResourcePath.resource_sprite_ui_commonIcon_Error_mini_png);
AddChild(_errorSprite);
+ MoveChild(_errorSprite, GetChildCount() - 1);
}
}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
index 575b94d..8c0c2a3 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
@@ -318,5 +318,15 @@
/// 简介:
///
public const string Id_item_0017 = "item_0017";
+ ///
+ /// 名称: 台灯
+ /// 简介:
+ ///
+ public const string Id_item_0031 = "item_0031";
+ ///
+ /// 名称: 卡带盒子
+ /// 简介:
+ ///
+ public const string Id_item_0057 = "item_0057";
}
}