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"; } }