diff --git a/.gitignore b/.gitignore
index ddc5aab..04ce749 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,7 @@
/DScript/DScript_Compiler_Test/obj
/DScript/DScript_Runtime/Backups
/DScript/DScript.sln.DotSettings.user
-**/.idea
\ No newline at end of file
+**/.idea
+**/~$*
+/DungeonShooting_ExcelTool/obj
+/DungeonShooting_ExcelTool/bin
diff --git a/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.csproj b/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.csproj
new file mode 100644
index 0000000..9a963c3
--- /dev/null
+++ b/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.csproj
@@ -0,0 +1,23 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
diff --git a/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.sln b/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.sln
new file mode 100644
index 0000000..e3d1576
--- /dev/null
+++ b/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.sln
@@ -0,0 +1,16 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DungeonShooting_ExcelTool", "DungeonShooting_ExcelTool.csproj", "{F6A26370-A918-40F0-8D78-414213011172}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F6A26370-A918-40F0-8D78-414213011172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F6A26370-A918-40F0-8D78-414213011172}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F6A26370-A918-40F0-8D78-414213011172}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F6A26370-A918-40F0-8D78-414213011172}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.sln.DotSettings.user b/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.sln.DotSettings.user
new file mode 100644
index 0000000..5ef2d60
--- /dev/null
+++ b/DungeonShooting_ExcelTool/DungeonShooting_ExcelTool.sln.DotSettings.user
@@ -0,0 +1,2 @@
+
+ WARNING
\ No newline at end of file
diff --git a/DungeonShooting_ExcelTool/ExcelGenerator.cs b/DungeonShooting_ExcelTool/ExcelGenerator.cs
new file mode 100644
index 0000000..6ee11ed
--- /dev/null
+++ b/DungeonShooting_ExcelTool/ExcelGenerator.cs
@@ -0,0 +1,733 @@
+using System.Text.Json;
+using System.Text.RegularExpressions;
+using NPOI.SS.UserModel;
+using NPOI.XSSF.UserModel;
+
+public static class ExcelGenerator
+{
+ private const string CodeOutPath = "src/config/";
+ private const string JsonOutPath = "resource/config/";
+#if DEBUG
+ private const string ExcelFilePath = "excelFile";
+#else
+ private const string ExcelFilePath = "excel/excelFile";
+#endif
+
+ private static HashSet _excelNames = new HashSet();
+
+
+ private enum CollectionsType
+ {
+ None,
+ Array,
+ Map
+ }
+
+ private class MappingData
+ {
+
+ public string TypeStr;
+ public string TypeName;
+ public CollectionsType CollectionsType;
+
+ public bool IsRefExcel;
+ public string RefTypeStr;
+ public string RefTypeName;
+
+ public MappingData(string typeStr, string typeName, CollectionsType collectionsType)
+ {
+ TypeStr = typeStr;
+ TypeName = typeName;
+ CollectionsType = collectionsType;
+ IsRefExcel = false;
+ }
+
+ public MappingData(string typeStr, string typeName, CollectionsType collectionsType, string refTypeStr, string refTypeName)
+ {
+ TypeStr = typeStr;
+ TypeName = typeName;
+ CollectionsType = collectionsType;
+ IsRefExcel = true;
+ RefTypeStr = refTypeStr;
+ RefTypeName = refTypeName;
+ }
+ }
+
+ private class ExcelData
+ {
+ public string TableName;
+ public string OutCode;
+ public List ColumnNames = new List();
+ public Dictionary ColumnMappingData = new Dictionary();
+ public Dictionary ColumnType = new Dictionary();
+ public List> DataList = new List>();
+ }
+
+ public static bool ExportExcel()
+ {
+ Console.WriteLine("当前路径: " + Environment.CurrentDirectory);
+ try
+ {
+ var excelDataList = new List();
+
+ var directoryInfo = new DirectoryInfo(ExcelFilePath);
+ if (directoryInfo.Exists)
+ {
+ var fileInfos = directoryInfo.GetFiles();
+ //记录文件
+ foreach (var fileInfo in fileInfos)
+ {
+ var fileName = Path.GetFileNameWithoutExtension(fileInfo.Name).FirstToUpper();
+ _excelNames.Add(fileName);
+ }
+ //读取配置文件
+ foreach (var fileInfo in fileInfos)
+ {
+ if (fileInfo.Extension == ".xlsx")
+ {
+ if (fileInfo.Name == "ExcelConfig.xlsx")
+ {
+ throw new Exception("excel表文件名称不允许叫'ExcelConfig.xlsx'!");
+ }
+ Console.WriteLine("excel表: " + fileInfo.FullName);
+ excelDataList.Add(ReadExcel(fileInfo.FullName));
+ }
+ }
+ }
+
+ Console.WriteLine($"一共检测到excel表共{excelDataList.Count}张.");
+ if (excelDataList.Count == 0)
+ {
+ return true;
+ }
+
+ if (Directory.Exists(CodeOutPath))
+ {
+ Directory.Delete(CodeOutPath, true);
+ }
+ if (Directory.Exists(JsonOutPath))
+ {
+ Directory.Delete(JsonOutPath, true);
+ }
+ Directory.CreateDirectory(CodeOutPath);
+ Directory.CreateDirectory(JsonOutPath);
+
+ //保存配置和代码
+ foreach (var excelData in excelDataList)
+ {
+ File.WriteAllText(CodeOutPath + "ExcelConfig_" + excelData.TableName + ".cs", excelData.OutCode);
+ var config = new JsonSerializerOptions();
+ config.WriteIndented = true;
+ File.WriteAllText(JsonOutPath + excelData.TableName + ".json", JsonSerializer.Serialize(excelData.DataList, config));
+ }
+
+ //生成加载代码
+ var code = GeneratorInitCode(excelDataList);
+ File.WriteAllText(CodeOutPath + "ExcelConfig.cs", code);
+ }
+ catch (Exception e)
+ {
+ PrintError(e.ToString());
+ return false;
+ }
+
+ return true;
+ }
+
+ private static string GeneratorInitCode(List excelList)
+ {
+ var code = $"using System;\n";
+ code += $"using System.Collections.Generic;\n";
+ code += $"using System.Text.Json;\n";
+ code += $"using Godot;\n";
+ code += $"\n";
+ code += $"namespace Config;\n";
+ code += $"\n";
+ code += $"public static partial class ExcelConfig\n";
+ code += $"{{\n";
+
+ var fieldCode = "";
+ var callFuncCode = "";
+ var callInitRefFuncCode = "";
+ var funcCode = "";
+ var initRefFuncCode = "";
+
+ foreach (var excelData in excelList)
+ {
+ var idName = excelData.ColumnNames[0];
+ var idTypeStr = excelData.ColumnMappingData[idName].TypeStr;
+
+ //---------------------------- 引用其他表处理 ----------------------------
+ var hasRefColumn = false;
+ var refColumnNoneCode = "";
+ foreach (var columnName in excelData.ColumnNames)
+ {
+ var mappingData = excelData.ColumnMappingData[columnName];
+ if (mappingData.IsRefExcel)
+ {
+ hasRefColumn = true;
+ if (mappingData.CollectionsType == CollectionsType.None)
+ {
+ refColumnNoneCode += $" if (!string.IsNullOrEmpty(item.__{columnName}))\n";
+ refColumnNoneCode += $" {{\n";
+ refColumnNoneCode += $" item.{columnName} = {mappingData.RefTypeName}_Map[item.__{columnName}];\n";
+ refColumnNoneCode += $" }}\n";
+ }
+ else if (mappingData.CollectionsType == CollectionsType.Array)
+ {
+ refColumnNoneCode += $" if (item.__{columnName} != null)\n";
+ refColumnNoneCode += $" {{\n";
+ refColumnNoneCode += $" item.{columnName} = new {mappingData.RefTypeName}[item.__{columnName}.Length];\n";
+ refColumnNoneCode += $" for (var i = 0; i < item.__{columnName}.Length; i++)\n";
+ refColumnNoneCode += $" {{\n";
+ refColumnNoneCode += $" item.{columnName}[i] = {mappingData.RefTypeName}_Map[item.__{columnName}[i]];\n";
+ refColumnNoneCode += $" }}\n";
+ refColumnNoneCode += $" }}\n";
+ }
+ else
+ {
+ refColumnNoneCode += $" if (item.__{columnName} != null)\n";
+ refColumnNoneCode += $" {{\n";
+ refColumnNoneCode += $" item.{columnName} = new {mappingData.RefTypeStr}();\n";
+ refColumnNoneCode += $" foreach (var pair in item.__{columnName})\n";
+ refColumnNoneCode += $" {{\n";
+ refColumnNoneCode += $" item.{columnName}.Add(pair.Key, {mappingData.RefTypeName}_Map[pair.Value]);\n";
+ refColumnNoneCode += $" }}\n";
+ refColumnNoneCode += $" }}\n";
+ }
+ refColumnNoneCode += $"\n";
+ }
+ }
+
+ //----------------------------- 数据集合 ------------------------------------
+ fieldCode += $" /// \n";
+ fieldCode += $" /// {excelData.TableName}.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同\n";
+ fieldCode += $" /// \n";
+ fieldCode += $" public static List<{excelData.TableName}> {excelData.TableName}_List {{ get; private set; }}\n";
+ fieldCode += $" /// \n";
+ fieldCode += $" /// {excelData.TableName}.xlsx表数据集合, 里 Map 形式存储, key 为 {idName}\n";
+ fieldCode += $" /// \n";
+ fieldCode += $" public static Dictionary<{idTypeStr}, {excelData.TableName}> {excelData.TableName}_Map {{ get; private set; }}\n";
+ fieldCode += $"\n";
+
+ //------------------------------- 初始化函数 -------------------------------------
+ callFuncCode += $" _Init{excelData.TableName}Config();\n";
+
+ funcCode += $" private static void _Init{excelData.TableName}Config()\n";
+ funcCode += $" {{\n";
+ funcCode += $" try\n";
+ funcCode += $" {{\n";
+ funcCode += $" var text = _ReadConfigAsText(\"res://resource/config/{excelData.TableName}.json\");\n";
+ if (hasRefColumn) //存在引用列
+ {
+ funcCode += $" {excelData.TableName}_List = new List<{excelData.TableName}>(JsonSerializer.Deserialize>(text));\n";
+ }
+ else
+ {
+ funcCode += $" {excelData.TableName}_List = JsonSerializer.Deserialize>(text);\n";
+ }
+ funcCode += $" {excelData.TableName}_Map = new Dictionary<{idTypeStr}, {excelData.TableName}>();\n";
+ funcCode += $" foreach (var item in {excelData.TableName}_List)\n";
+ funcCode += $" {{\n";
+ funcCode += $" {excelData.TableName}_Map.Add(item.{idName}, item);\n";
+ funcCode += $" }}\n";
+ funcCode += $" }}\n";
+ funcCode += $" catch (Exception e)\n";
+ funcCode += $" {{\n";
+ funcCode += $" GD.PrintErr(e.ToString());\n";
+ funcCode += $" throw new Exception(\"初始化表'{excelData.TableName}'失败!\");\n";
+ funcCode += $" }}\n";
+ funcCode += $" }}\n";
+
+
+ //------------------------------- 初始化引用 ---------------------------------
+ if (hasRefColumn)
+ {
+ callInitRefFuncCode += $" _Init{excelData.TableName}Ref();\n";
+
+ initRefFuncCode += $" private static void _Init{excelData.TableName}Ref()\n";
+ initRefFuncCode += $" {{\n";
+ initRefFuncCode += $" foreach (Ref_{excelData.TableName} item in {excelData.TableName}_List)\n";
+ initRefFuncCode += $" {{\n";
+ initRefFuncCode += $" try\n";
+ initRefFuncCode += $" {{\n";
+ initRefFuncCode += refColumnNoneCode;
+ initRefFuncCode += $" }}\n";
+ initRefFuncCode += $" catch (Exception e)\n";
+ initRefFuncCode += $" {{\n";
+ initRefFuncCode += $" GD.PrintErr(e.ToString());\n";
+ initRefFuncCode += $" throw new Exception(\"初始化'{excelData.TableName}'引用其他表数据失败, 当前行id: \" + item.Id);\n";
+ initRefFuncCode += $" }}\n";
+ initRefFuncCode += $" }}\n";
+ initRefFuncCode += $" }}\n";
+ }
+ }
+
+ code += fieldCode;
+ code += $"\n";
+ code += $" private static bool _init = false;\n";
+ code += $" /// \n";
+ code += $" /// 初始化所有配置表数据\n";
+ code += $" /// \n";
+ code += $" public static void Init()\n";
+ code += $" {{\n";
+ code += $" if (_init) return;\n";
+ code += $" _init = true;\n";
+ code += $"\n";
+ code += callFuncCode;
+ code += $"\n";
+ code += callInitRefFuncCode;
+ code += $" }}\n";
+ code += funcCode;
+ code += $"\n";
+ code += initRefFuncCode;
+ code += $" private static string _ReadConfigAsText(string path)\n";
+ code += $" {{\n";
+ code += $" var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);\n";
+ code += $" var asText = file.GetAsText();\n";
+ code += $" file.Dispose();\n";
+ code += $" return asText;\n";
+ code += $" }}\n";
+ code += $"}}";
+ return code;
+ }
+
+ private static ExcelData ReadExcel(string excelPath)
+ {
+ var excelData = new ExcelData();
+ //文件名称
+ var fileName = Path.GetFileNameWithoutExtension(excelPath).FirstToUpper();
+ excelData.TableName = fileName;
+ //输出代码
+ var outStr = $"using System.Text.Json.Serialization;\n";
+ outStr += $"using System.Collections.Generic;\n\n";
+ outStr += $"namespace Config;\n\n";
+ outStr += $"public static partial class ExcelConfig\n{{\n";
+ outStr += $" public class {fileName}\n";
+ outStr += $" {{\n";
+ //继承的带有引用其他表的类代码
+ var outRefStr = "";
+
+ var cloneFuncStr = $" /// \n";
+ cloneFuncStr += $" /// 返回浅拷贝出的新对象\n";
+ cloneFuncStr += $" /// \n";
+ cloneFuncStr += $" public {fileName} Clone()\n";
+ cloneFuncStr += $" {{\n";
+ cloneFuncStr += $" var inst = new {fileName}();\n";
+
+ var sourceFile = excelPath;
+
+ //行数
+ var rowCount = -1;
+ //列数
+ var columnCount = -1;
+
+ //加载表数据
+ var workbook = new XSSFWorkbook(sourceFile);
+ using (workbook)
+ {
+ var sheet1 = workbook.GetSheet("Sheet1");
+ rowCount = sheet1.LastRowNum;
+ //先解析表中的列名, 注释, 类型
+ var names = sheet1.GetRow(0);
+ var descriptions = sheet1.GetRow(1);
+ var types = sheet1.GetRow(2);
+ columnCount = names.LastCellNum;
+ foreach (var cell in names)
+ {
+ //字段名称
+ var field = GetCellStringValue(cell);
+ if (string.IsNullOrEmpty(field))
+ {
+ if (cell.ColumnIndex == 0)
+ {
+ throw new Exception($"表'{fileName}'的列数为0!");
+ }
+ //到达最后一列了
+ columnCount = cell.ColumnIndex;
+ break;
+ }
+ field = field.FirstToUpper();
+ excelData.ColumnNames.Add(field);
+ if (field == "Clone")
+ {
+ throw new Exception($"表'{fileName}'中不允许有'Clone'字段!");
+ }
+
+ var descriptionCell = descriptions.GetCell(cell.ColumnIndex);
+ //描述
+ string description;
+ if (descriptionCell != null)
+ {
+ description = GetCellStringValue(descriptionCell).Replace("\n", "
\n /// ");
+ }
+ else
+ {
+ description = "";
+ }
+ //类型
+ var typeString = GetCellStringValue(types.GetCell(cell.ColumnIndex));
+ if (string.IsNullOrEmpty(typeString))
+ {
+ throw new Exception($"表'{fileName}'中'{field}'这一列类型为空!");
+ }
+
+ //尝试解析类型
+ MappingData mappingData;
+ try
+ {
+ mappingData = ConvertToType(typeString.Replace(" ", ""));
+ }
+ catch (Exception e)
+ {
+ PrintError(e.ToString());
+ throw new Exception($"表'{fileName}'中'{field}'这一列类型描述语法错误: {typeString}");
+ }
+
+ if (!excelData.ColumnMappingData.TryAdd(field, mappingData))
+ {
+ throw new Exception($"表'{fileName}'中存在相同名称的列: '{field}'!");
+ }
+ outStr += $" /// \n";
+ outStr += $" /// {description}\n";
+ outStr += $" /// \n";
+ if (!mappingData.IsRefExcel) //没有引用其他表
+ {
+ outStr += $" [JsonInclude]\n";
+ outStr += $" public {mappingData.TypeStr} {field};\n\n";
+ }
+ else
+ {
+ outStr += $" public {mappingData.RefTypeStr} {field};\n\n";
+ }
+
+ if (mappingData.IsRefExcel) //引用其他表
+ {
+ if (string.IsNullOrEmpty(outRefStr))
+ {
+ outRefStr += $" private class Ref_{fileName} : {fileName}\n";
+ outRefStr += $" {{\n";
+ }
+ outRefStr += $" [JsonInclude]\n";
+ outRefStr += $" public {mappingData.TypeStr} __{field};\n\n";
+ }
+
+ cloneFuncStr += $" inst.{field} = {field};\n";
+ }
+
+ cloneFuncStr += " return inst;\n";
+ cloneFuncStr += " }\n";
+ outStr += cloneFuncStr;
+ outStr += " }\n";
+
+ if (!string.IsNullOrEmpty(outRefStr))
+ {
+ outRefStr += " }\n";
+ outStr += outRefStr;
+ }
+
+ outStr += "}";
+
+ //解析字段类型
+ foreach (var kv in excelData.ColumnMappingData)
+ {
+ var typeName = kv.Value.TypeName;
+ var type = Type.GetType(typeName);
+ if (type == null)
+ {
+ throw new Exception($"表'{fileName}'中'{kv.Key}'这一列类型未知! " + kv.Value.TypeStr);
+ }
+ excelData.ColumnType.Add(kv.Key, type);
+ }
+
+ //解析数据
+ for (int i = 3; i <= rowCount; i++)
+ {
+ Dictionary data = null;
+ var row = sheet1.GetRow(i);
+ if (row == null)
+ {
+ continue;
+ }
+ for (int j = 0; j < columnCount; j++)
+ {
+ var cell = row.GetCell(j);
+ var strValue = GetCellStringValue(cell);
+ //如果这一行的第一列数据为空, 则跳过这一行
+ if (j == 0 && string.IsNullOrEmpty(strValue))
+ {
+ break;
+ }
+ else if (data == null)
+ {
+ data = new Dictionary();
+ excelData.DataList.Add(data);
+ }
+
+ var fieldName = excelData.ColumnNames[j];
+ var mappingData = excelData.ColumnMappingData[fieldName];
+ var field = mappingData.IsRefExcel ? "__" + fieldName : fieldName;
+ try
+ {
+ switch (mappingData.TypeStr)
+ {
+ case "bool":
+ case "boolean":
+ data.Add(field, GetCellBooleanValue(cell));
+ break;
+ case "byte":
+ data.Add(field, Convert.ToByte(GetCellNumberValue(cell)));
+ break;
+ case "sbyte":
+ data.Add(field, Convert.ToSByte(GetCellNumberValue(cell)));
+ break;
+ case "short":
+ data.Add(field, Convert.ToInt16(GetCellNumberValue(cell)));
+ break;
+ case "ushort":
+ data.Add(field, Convert.ToUInt16(GetCellNumberValue(cell)));
+ break;
+ case "int":
+ data.Add(field, Convert.ToInt32(GetCellNumberValue(cell)));
+ break;
+ case "uint":
+ data.Add(field, Convert.ToUInt32(GetCellNumberValue(cell)));
+ break;
+ case "long":
+ data.Add(field, Convert.ToInt64(GetCellNumberValue(cell)));
+ break;
+ case "ulong":
+ data.Add(field, Convert.ToUInt64(GetCellNumberValue(cell)));
+ break;
+ case "float":
+ data.Add(field, Convert.ToSingle(GetCellNumberValue(cell)));
+ break;
+ case "double":
+ data.Add(field, GetCellNumberValue(cell));
+ break;
+ case "string":
+ data.Add(field, GetCellStringValue(cell));
+ break;
+ default:
+ {
+ var cellStringValue = GetCellStringValue(cell);
+ if (cellStringValue.Length == 0)
+ {
+ data.Add(field, null);
+ }
+ else
+ {
+ data.Add(field, JsonSerializer.Deserialize(cellStringValue, excelData.ColumnType[fieldName]));
+ }
+ }
+ break;
+ }
+ }
+ catch (Exception e)
+ {
+ PrintError(e.ToString());
+ throw new Exception($"解析表'{fileName}'第'{i + 1}'行第'{j + 1}'列数据时发生异常");
+ }
+ }
+ }
+ }
+
+ excelData.OutCode = outStr;
+ return excelData;
+ }
+
+ private static string GetCellStringValue(ICell cell)
+ {
+ if (cell == null)
+ {
+ return "";
+ }
+ switch (cell.CellType)
+ {
+ case CellType.Numeric:
+ return cell.NumericCellValue.ToString();
+ case CellType.String:
+ return cell.StringCellValue;
+ case CellType.Formula:
+ return cell.CellFormula;
+ case CellType.Boolean:
+ return cell.BooleanCellValue ? "true" : "false";
+ }
+
+ return "";
+ }
+
+ private static double GetCellNumberValue(ICell cell)
+ {
+ if (cell == null)
+ {
+ return 0;
+ }
+
+ return cell.NumericCellValue;
+ }
+
+ private static bool GetCellBooleanValue(ICell cell)
+ {
+ if (cell == null)
+ {
+ return false;
+ }
+
+ return cell.BooleanCellValue;
+ }
+
+ private static MappingData ConvertToType(string str, int depth = 0)
+ {
+ if (Regex.IsMatch(str, "^\\w+$"))
+ {
+ var typeStr = TypeStrMapping(str);
+ var typeName = TypeNameMapping(str);
+ return new MappingData(typeStr, typeName, CollectionsType.None);
+ }
+ else if (Regex.IsMatch(str, "^\\$\\w+$")) //引用其他表
+ {
+ var realName = str.Substring(1);
+ if (!_excelNames.Contains(realName))
+ {
+ throw new Exception($"引用表数据失败, 未找到表: {realName}!");
+ }
+
+ if (depth > 1)
+ {
+ throw new Exception("引用表数据失败, 引用表数据仅支持放入第一层的数组和字典!");
+ }
+
+ return new MappingData(TypeStrMapping("string"), TypeNameMapping("string"), CollectionsType.None, realName, realName);
+ }
+ else if (str.StartsWith('{')) //字典
+ {
+ var tempStr = str.Substring(1, str.Length - 2);
+ var index = tempStr.IndexOf(':');
+ if (index == -1)
+ {
+ throw new Exception("类型描述语法错误!");
+ }
+
+ var keyStr = tempStr.Substring(0, index);
+ if (!IsBaseType(keyStr))
+ {
+ throw new Exception($"字典key类型必须是基础类型!");
+ }
+
+ var type1 = ConvertToType(keyStr, depth + 1);
+ var type2 = ConvertToType(tempStr.Substring(index + 1), depth + 1);
+
+ var typeStr = $"Dictionary<{type1.TypeStr}, {type2.TypeStr}>";
+ var typeName = $"System.Collections.Generic.Dictionary`2[[{type1.TypeName}],[{type2.TypeName}]]";
+
+ if (type2.IsRefExcel) //引用过其他表
+ {
+ var refTypeStr = $"Dictionary<{type1.TypeStr}, {type2.RefTypeStr}>";
+ return new MappingData(typeStr, typeName, CollectionsType.Map, refTypeStr, type2.RefTypeName);
+ }
+
+ return new MappingData(typeStr, typeName, CollectionsType.Map);
+ }
+ else if (str.StartsWith('[')) //数组
+ {
+ var tempStr = str.Substring(1, str.Length - 2);
+ var typeData = ConvertToType(tempStr, depth + 1);
+ var typeStr = typeData.TypeStr + "[]";
+ var typeName = typeData.TypeName + "[]";
+
+ if (typeData.IsRefExcel) //引用过其他表
+ {
+ var refTypeStr = typeData.RefTypeStr + "[]";
+ return new MappingData(typeStr, typeName, CollectionsType.Array, refTypeStr, typeData.RefTypeName);
+ }
+
+ return new MappingData(typeStr, typeName, CollectionsType.Array);
+ }
+ throw new Exception("类型描述语法错误!");
+ }
+
+ private static string TypeStrMapping(string typeName)
+ {
+ switch (typeName)
+ {
+ case "boolean": return "bool";
+ case "vector2": return "SerializeVector2";
+ case "vector3": return "SerializeVector3";
+ case "color": return "SerializeColor";
+ }
+
+ return typeName;
+ }
+
+ private static string TypeNameMapping(string typeName)
+ {
+ switch (typeName)
+ {
+ case "bool":
+ case "boolean": return typeof(bool).FullName;
+ case "byte": return typeof(byte).FullName;
+ case "sbyte": return typeof(sbyte).FullName;
+ case "short": return typeof(short).FullName;
+ case "ushort": return typeof(ushort).FullName;
+ case "int": return typeof(int).FullName;
+ case "uint": return typeof(uint).FullName;
+ case "long": return typeof(long).FullName;
+ case "ulong": return typeof(ulong).FullName;
+ case "string": return typeof(string).FullName;
+ case "float": return typeof(float).FullName;
+ case "double": return typeof(double).FullName;
+ case "vector2": return "SerializeVector2";
+ case "vector3": return "SerializeVector3";
+ case "color": return "SerializeColor";
+ }
+
+ return typeName;
+ }
+
+ private static bool IsBaseType(string typeName)
+ {
+ switch (typeName)
+ {
+ case "bool":
+ case "boolean":
+ case "byte":
+ case "sbyte":
+ case "short":
+ case "ushort":
+ case "int":
+ case "uint":
+ case "long":
+ case "ulong":
+ case "string":
+ case "float":
+ case "double":
+ return true;
+ }
+
+ return false;
+ }
+
+ private static void PrintError(string message)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+ Console.WriteLine(message);
+ Console.ResetColor();
+ }
+
+ ///
+ /// 字符串首字母小写
+ ///
+ public static string FirstToLower(this string str)
+ {
+ return str.Substring(0, 1).ToLower() + str.Substring(1);
+ }
+
+ ///
+ /// 字符串首字母大写
+ ///
+ public static string FirstToUpper(this string str)
+ {
+ return str.Substring(0, 1).ToUpper() + str.Substring(1);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_ExcelTool/Program.cs b/DungeonShooting_ExcelTool/Program.cs
new file mode 100644
index 0000000..142920d
--- /dev/null
+++ b/DungeonShooting_ExcelTool/Program.cs
@@ -0,0 +1,16 @@
+
+public class Program
+{
+ public static void Main(string[] args)
+ {
+ Console.WriteLine("准备导出excel表...");
+ if (ExcelGenerator.ExportExcel())
+ {
+ Console.WriteLine("excel表导出成功!");
+ }
+ else
+ {
+ Console.WriteLine("excel表导出失败!");
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_ExcelTool/excelFile/ActivityObject.xlsx b/DungeonShooting_ExcelTool/excelFile/ActivityObject.xlsx
new file mode 100644
index 0000000..286ad1d
--- /dev/null
+++ b/DungeonShooting_ExcelTool/excelFile/ActivityObject.xlsx
Binary files differ
diff --git a/DungeonShooting_ExcelTool/excelFile/Sound.xlsx b/DungeonShooting_ExcelTool/excelFile/Sound.xlsx
new file mode 100644
index 0000000..4a5986a
--- /dev/null
+++ b/DungeonShooting_ExcelTool/excelFile/Sound.xlsx
Binary files differ
diff --git a/DungeonShooting_ExcelTool/excelFile/Test.xlsx b/DungeonShooting_ExcelTool/excelFile/Test.xlsx
new file mode 100644
index 0000000..3699e31
--- /dev/null
+++ b/DungeonShooting_ExcelTool/excelFile/Test.xlsx
Binary files differ
diff --git a/DungeonShooting_ExcelTool/excelFile/Weapon.xlsx b/DungeonShooting_ExcelTool/excelFile/Weapon.xlsx
new file mode 100644
index 0000000..8e77d9c
--- /dev/null
+++ b/DungeonShooting_ExcelTool/excelFile/Weapon.xlsx
Binary files differ
diff --git a/DungeonShooting_ExcelTool/serialize/SerializeColor.cs b/DungeonShooting_ExcelTool/serialize/SerializeColor.cs
new file mode 100644
index 0000000..c1f6c1e
--- /dev/null
+++ b/DungeonShooting_ExcelTool/serialize/SerializeColor.cs
@@ -0,0 +1,31 @@
+
+
+using System.Text.Json.Serialization;
+
+///
+/// 可序列化的 Color 对象
+///
+public class SerializeColor
+{
+ public SerializeColor(float r, float g, float b, float a)
+ {
+ R = r;
+ G = g;
+ B = b;
+ A = a;
+ }
+
+ public SerializeColor()
+ {
+ }
+
+ [JsonInclude]
+ public float R { get; private set; }
+ [JsonInclude]
+ public float G { get; private set; }
+ [JsonInclude]
+ public float B { get; private set; }
+ [JsonInclude]
+ public float A { get; private set; }
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_ExcelTool/serialize/SerializeVector2.cs b/DungeonShooting_ExcelTool/serialize/SerializeVector2.cs
new file mode 100644
index 0000000..f3051d1
--- /dev/null
+++ b/DungeonShooting_ExcelTool/serialize/SerializeVector2.cs
@@ -0,0 +1,30 @@
+
+using System.Text.Json.Serialization;
+
+///
+/// 可序列化的 Vector2 对象
+///
+public class SerializeVector2
+{
+ public SerializeVector2(float x, float y)
+ {
+ X = x;
+ Y = y;
+ }
+
+ public SerializeVector2(SerializeVector2 v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+ public SerializeVector2()
+ {
+
+ }
+
+ [JsonInclude]
+ public float X { get; private set; }
+ [JsonInclude]
+ public float Y { get; private set; }
+}
\ No newline at end of file
diff --git a/DungeonShooting_ExcelTool/serialize/SerializeVector3.cs b/DungeonShooting_ExcelTool/serialize/SerializeVector3.cs
new file mode 100644
index 0000000..60f74e8
--- /dev/null
+++ b/DungeonShooting_ExcelTool/serialize/SerializeVector3.cs
@@ -0,0 +1,32 @@
+using System.Text.Json.Serialization;
+
+///
+/// 可序列化的 Vector3 对象
+///
+public class SerializeVector3
+{
+ public SerializeVector3(float x, float y, float z)
+ {
+ X = x;
+ Y = y;
+ Z = z;
+ }
+
+ public SerializeVector3(SerializeVector3 v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+ public SerializeVector3()
+ {
+ }
+
+ [JsonInclude]
+ public float X { get; private set; }
+ [JsonInclude]
+ public float Y { get; private set; }
+ [JsonInclude]
+ public float Z { get; private set; }
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/DungeonShooting.csproj b/DungeonShooting_Godot/DungeonShooting.csproj
index 69ed320..4e093b1 100644
--- a/DungeonShooting_Godot/DungeonShooting.csproj
+++ b/DungeonShooting_Godot/DungeonShooting.csproj
@@ -1,4 +1,4 @@
-
+
net6.0
true
diff --git a/DungeonShooting_Godot/DungeonShooting.csproj.old b/DungeonShooting_Godot/DungeonShooting.csproj.old
new file mode 100644
index 0000000..8e15ac5
--- /dev/null
+++ b/DungeonShooting_Godot/DungeonShooting.csproj.old
@@ -0,0 +1,11 @@
+
+
+ net6.0
+ true
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/DungeonShooting_Godot/Silver.ttf b/DungeonShooting_Godot/Silver.ttf
deleted file mode 100644
index 9d568c4..0000000
--- a/DungeonShooting_Godot/Silver.ttf
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/Silver.ttf.import b/DungeonShooting_Godot/Silver.ttf.import
deleted file mode 100644
index 0cb40e8..0000000
--- a/DungeonShooting_Godot/Silver.ttf.import
+++ /dev/null
@@ -1,33 +0,0 @@
-[remap]
-
-importer="font_data_dynamic"
-type="FontFile"
-uid="uid://byrf43x8my2ym"
-path="res://.godot/imported/Silver.ttf-acf985a494ec9501dbab5d460c1c1e21.fontdata"
-
-[deps]
-
-source_file="res://Silver.ttf"
-dest_files=["res://.godot/imported/Silver.ttf-acf985a494ec9501dbab5d460c1c1e21.fontdata"]
-
-[params]
-
-Rendering=null
-antialiasing=1
-generate_mipmaps=false
-multichannel_signed_distance_field=false
-msdf_pixel_range=8
-msdf_size=48
-allow_system_fallback=true
-force_autohinter=false
-hinting=1
-subpixel_positioning=1
-oversampling=0.0
-Fallbacks=null
-fallbacks=[]
-Compress=null
-compress=true
-preload=[]
-language_support={}
-script_support={}
-opentype_features={}
diff --git a/DungeonShooting_Godot/SourceHanSerifCN-SemiBold.otf b/DungeonShooting_Godot/SourceHanSerifCN-SemiBold.otf
deleted file mode 100644
index efa94cb..0000000
--- a/DungeonShooting_Godot/SourceHanSerifCN-SemiBold.otf
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/SourceHanSerifCN-SemiBold.otf.import b/DungeonShooting_Godot/SourceHanSerifCN-SemiBold.otf.import
deleted file mode 100644
index 3aed657..0000000
--- a/DungeonShooting_Godot/SourceHanSerifCN-SemiBold.otf.import
+++ /dev/null
@@ -1,33 +0,0 @@
-[remap]
-
-importer="font_data_dynamic"
-type="FontFile"
-uid="uid://cxje5ycy236ds"
-path="res://.godot/imported/SourceHanSerifCN-SemiBold.otf-8dcf564a1a7bde5d3a872366b8020586.fontdata"
-
-[deps]
-
-source_file="res://SourceHanSerifCN-SemiBold.otf"
-dest_files=["res://.godot/imported/SourceHanSerifCN-SemiBold.otf-8dcf564a1a7bde5d3a872366b8020586.fontdata"]
-
-[params]
-
-Rendering=null
-antialiasing=1
-generate_mipmaps=false
-multichannel_signed_distance_field=false
-msdf_pixel_range=8
-msdf_size=48
-allow_system_fallback=true
-force_autohinter=false
-hinting=1
-subpixel_positioning=1
-oversampling=0.0
-Fallbacks=null
-fallbacks=[]
-Compress=null
-compress=true
-preload=[]
-language_support={}
-script_support={}
-opentype_features={}
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/default_bus_layout.tres b/DungeonShooting_Godot/default_bus_layout.tres
index 60797cc..d877009 100644
--- a/DungeonShooting_Godot/default_bus_layout.tres
+++ b/DungeonShooting_Godot/default_bus_layout.tres
@@ -1,15 +1,15 @@
-[gd_resource type="AudioBusLayout" format=2]
+[gd_resource type="AudioBusLayout" format=3 uid="uid://tqvsp0nnvq3k"]
[resource]
-bus/1/name = "BGM"
+bus/1/name = &"BGM"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = 0.0
-bus/1/send = "Master"
-bus/2/name = "SFX"
+bus/1/send = &"Master"
+bus/2/name = &"SFX"
bus/2/solo = false
bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
-bus/2/send = "Master"
+bus/2/send = &"Master"
diff --git a/DungeonShooting_Godot/excel/BouncyCastle.Crypto.dll b/DungeonShooting_Godot/excel/BouncyCastle.Crypto.dll
new file mode 100644
index 0000000..b811138
--- /dev/null
+++ b/DungeonShooting_Godot/excel/BouncyCastle.Crypto.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.deps.json b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.deps.json
new file mode 100644
index 0000000..df88148
--- /dev/null
+++ b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.deps.json
@@ -0,0 +1,352 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0/win-x64",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {},
+ ".NETCoreApp,Version=v6.0/win-x64": {
+ "DungeonShooting_ExcelTool/1.0.0": {
+ "dependencies": {
+ "NPOI": "2.6.0"
+ },
+ "runtime": {
+ "DungeonShooting_ExcelTool.dll": {}
+ }
+ },
+ "Enums.NET/4.0.0": {
+ "runtime": {
+ "lib/netcoreapp3.0/Enums.NET.dll": {
+ "assemblyVersion": "4.0.0.0",
+ "fileVersion": "4.0.0.0"
+ }
+ }
+ },
+ "MathNet.Numerics.Signed/4.15.0": {
+ "runtime": {
+ "lib/netstandard2.0/MathNet.Numerics.dll": {
+ "assemblyVersion": "4.15.0.0",
+ "fileVersion": "4.15.0.0"
+ }
+ }
+ },
+ "Microsoft.IO.RecyclableMemoryStream/2.2.0": {
+ "runtime": {
+ "lib/net5.0/Microsoft.IO.RecyclableMemoryStream.dll": {
+ "assemblyVersion": "2.2.0.0",
+ "fileVersion": "2.2.0.0"
+ }
+ }
+ },
+ "Microsoft.Win32.SystemEvents/6.0.0": {
+ "runtime": {
+ "runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "NPOI/2.6.0": {
+ "dependencies": {
+ "Enums.NET": "4.0.0",
+ "MathNet.Numerics.Signed": "4.15.0",
+ "Microsoft.IO.RecyclableMemoryStream": "2.2.0",
+ "Portable.BouncyCastle": "1.9.0",
+ "SharpZipLib": "1.3.3",
+ "SixLabors.Fonts": "1.0.0-beta18",
+ "SixLabors.ImageSharp": "2.1.3",
+ "System.Configuration.ConfigurationManager": "6.0.0",
+ "System.Security.Cryptography.Xml": "6.0.1",
+ "System.Text.Encoding.CodePages": "6.0.0"
+ },
+ "runtime": {
+ "lib/net6.0/NPOI.OOXML.dll": {
+ "assemblyVersion": "2.6.0.0",
+ "fileVersion": "2.6.0.0"
+ },
+ "lib/net6.0/NPOI.OpenXml4Net.dll": {
+ "assemblyVersion": "2.6.0.0",
+ "fileVersion": "2.6.0.0"
+ },
+ "lib/net6.0/NPOI.OpenXmlFormats.dll": {
+ "assemblyVersion": "2.6.0.0",
+ "fileVersion": "2.6.0.0"
+ },
+ "lib/net6.0/NPOI.dll": {
+ "assemblyVersion": "2.6.0.0",
+ "fileVersion": "2.6.0.0"
+ }
+ }
+ },
+ "Portable.BouncyCastle/1.9.0": {
+ "runtime": {
+ "lib/netstandard2.0/BouncyCastle.Crypto.dll": {
+ "assemblyVersion": "1.9.0.0",
+ "fileVersion": "1.9.0.1"
+ }
+ }
+ },
+ "SharpZipLib/1.3.3": {
+ "runtime": {
+ "lib/netstandard2.1/ICSharpCode.SharpZipLib.dll": {
+ "assemblyVersion": "1.3.3.11",
+ "fileVersion": "1.3.3.11"
+ }
+ }
+ },
+ "SixLabors.Fonts/1.0.0-beta18": {
+ "runtime": {
+ "lib/netcoreapp3.1/SixLabors.Fonts.dll": {
+ "assemblyVersion": "1.0.0.0",
+ "fileVersion": "1.0.0.0"
+ }
+ }
+ },
+ "SixLabors.ImageSharp/2.1.3": {
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encoding.CodePages": "6.0.0"
+ },
+ "runtime": {
+ "lib/netcoreapp3.1/SixLabors.ImageSharp.dll": {
+ "assemblyVersion": "2.0.0.0",
+ "fileVersion": "2.1.3.0"
+ }
+ }
+ },
+ "System.Configuration.ConfigurationManager/6.0.0": {
+ "dependencies": {
+ "System.Security.Cryptography.ProtectedData": "6.0.0",
+ "System.Security.Permissions": "6.0.0"
+ },
+ "runtime": {
+ "lib/net6.0/System.Configuration.ConfigurationManager.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Drawing.Common/6.0.0": {
+ "dependencies": {
+ "Microsoft.Win32.SystemEvents": "6.0.0"
+ },
+ "runtime": {
+ "runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Formats.Asn1/6.0.0": {},
+ "System.Runtime.CompilerServices.Unsafe/6.0.0": {},
+ "System.Security.AccessControl/6.0.0": {},
+ "System.Security.Cryptography.Pkcs/6.0.1": {
+ "dependencies": {
+ "System.Formats.Asn1": "6.0.0"
+ },
+ "runtime": {
+ "runtimes/win/lib/net6.0/System.Security.Cryptography.Pkcs.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.522.21309"
+ }
+ }
+ },
+ "System.Security.Cryptography.ProtectedData/6.0.0": {
+ "runtime": {
+ "runtimes/win/lib/net6.0/System.Security.Cryptography.ProtectedData.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Security.Cryptography.Xml/6.0.1": {
+ "dependencies": {
+ "System.Security.AccessControl": "6.0.0",
+ "System.Security.Cryptography.Pkcs": "6.0.1"
+ },
+ "runtime": {
+ "lib/net6.0/System.Security.Cryptography.Xml.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.822.36306"
+ }
+ }
+ },
+ "System.Security.Permissions/6.0.0": {
+ "dependencies": {
+ "System.Security.AccessControl": "6.0.0",
+ "System.Windows.Extensions": "6.0.0"
+ },
+ "runtime": {
+ "lib/net6.0/System.Security.Permissions.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ },
+ "System.Text.Encoding.CodePages/6.0.0": {
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Windows.Extensions/6.0.0": {
+ "dependencies": {
+ "System.Drawing.Common": "6.0.0"
+ },
+ "runtime": {
+ "runtimes/win/lib/net6.0/System.Windows.Extensions.dll": {
+ "assemblyVersion": "6.0.0.0",
+ "fileVersion": "6.0.21.52210"
+ }
+ }
+ }
+ }
+ },
+ "libraries": {
+ "DungeonShooting_ExcelTool/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ },
+ "Enums.NET/4.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-d47SgeuGxKpalKhYoHqFkDPmO9SoE3amSwVNDoUdy4d675/tX7bLyZFHdjfo3Tobth9Y80VnjfasQ/PD4LqUuA==",
+ "path": "enums.net/4.0.0",
+ "hashPath": "enums.net.4.0.0.nupkg.sha512"
+ },
+ "MathNet.Numerics.Signed/4.15.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-LFjukMRatkg9dgRM7U/gM4uKgaWAX7E0lt3fsVDTPdtBIVuh7uPlksDie290br1/tv1a4Ar/Bz9ywCPSL8PhHg==",
+ "path": "mathnet.numerics.signed/4.15.0",
+ "hashPath": "mathnet.numerics.signed.4.15.0.nupkg.sha512"
+ },
+ "Microsoft.IO.RecyclableMemoryStream/2.2.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-uyjY/cqomw1irT4L7lDeg4sJ36MsjHg3wKqpGrBAdzvZaxo85yMF+sAA9RIzTV92fDxuUzjqksMqA0+SNMkMgA==",
+ "path": "microsoft.io.recyclablememorystream/2.2.0",
+ "hashPath": "microsoft.io.recyclablememorystream.2.2.0.nupkg.sha512"
+ },
+ "Microsoft.Win32.SystemEvents/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-hqTM5628jSsQiv+HGpiq3WKBl2c8v1KZfby2J6Pr7pEPlK9waPdgEO6b8A/+/xn/yZ9ulv8HuqK71ONy2tg67A==",
+ "path": "microsoft.win32.systemevents/6.0.0",
+ "hashPath": "microsoft.win32.systemevents.6.0.0.nupkg.sha512"
+ },
+ "NPOI/2.6.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-Pwjo65CUH3MiRnBEbVo8ff31ZrDGdGyyFJyAEncmbTQ0/gYgDkBUnGKm20aLpdwCpPNLzvapZm8v5tx4S6qAWg==",
+ "path": "npoi/2.6.0",
+ "hashPath": "npoi.2.6.0.nupkg.sha512"
+ },
+ "Portable.BouncyCastle/1.9.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-eZZBCABzVOek+id9Xy04HhmgykF0wZg9wpByzrWN7q8qEI0Qen9b7tfd7w8VA3dOeesumMG7C5ZPy0jk7PSRHw==",
+ "path": "portable.bouncycastle/1.9.0",
+ "hashPath": "portable.bouncycastle.1.9.0.nupkg.sha512"
+ },
+ "SharpZipLib/1.3.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-N8+hwhsKZm25tDJfWpBSW7EGhH/R7EMuiX+KJ4C4u+fCWVc1lJ5zg1u3S1RPPVYgTqhx/C3hxrqUpi6RwK5+Tg==",
+ "path": "sharpziplib/1.3.3",
+ "hashPath": "sharpziplib.1.3.3.nupkg.sha512"
+ },
+ "SixLabors.Fonts/1.0.0-beta18": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-evykNmy/kEE9EAEKgZm3MNUYXuMHFfmcLUNPw7Ho5q7OI96GFkkIxBm+QaKOTPBKw+L0AjKOs+ArVg8P40Ac9g==",
+ "path": "sixlabors.fonts/1.0.0-beta18",
+ "hashPath": "sixlabors.fonts.1.0.0-beta18.nupkg.sha512"
+ },
+ "SixLabors.ImageSharp/2.1.3": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-8yonNRWX3vUE9k29ta0Hbfa0AEc0hbDjSH/nZ3vOTJEXmY6hLnGsjDKoz96Z+AgOsrdkAu6PdL/Ebaf70aitzw==",
+ "path": "sixlabors.imagesharp/2.1.3",
+ "hashPath": "sixlabors.imagesharp.2.1.3.nupkg.sha512"
+ },
+ "System.Configuration.ConfigurationManager/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-7T+m0kDSlIPTHIkPMIu6m6tV6qsMqJpvQWW2jIc2qi7sn40qxFo0q+7mEQAhMPXZHMKnWrnv47ntGlM/ejvw3g==",
+ "path": "system.configuration.configurationmanager/6.0.0",
+ "hashPath": "system.configuration.configurationmanager.6.0.0.nupkg.sha512"
+ },
+ "System.Drawing.Common/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-NfuoKUiP2nUWwKZN6twGqXioIe1zVD0RIj2t976A+czLHr2nY454RwwXs6JU9Htc6mwqL6Dn/nEL3dpVf2jOhg==",
+ "path": "system.drawing.common/6.0.0",
+ "hashPath": "system.drawing.common.6.0.0.nupkg.sha512"
+ },
+ "System.Formats.Asn1/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-T6fD00dQ3NTbPDy31m4eQUwKW84s03z0N2C8HpOklyeaDgaJPa/TexP4/SkORMSOwc7WhKifnA6Ya33AkzmafA==",
+ "path": "system.formats.asn1/6.0.0",
+ "hashPath": "system.formats.asn1.6.0.0.nupkg.sha512"
+ },
+ "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
+ "path": "system.runtime.compilerservices.unsafe/6.0.0",
+ "hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
+ },
+ "System.Security.AccessControl/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-AUADIc0LIEQe7MzC+I0cl0rAT8RrTAKFHl53yHjEUzNVIaUlhFY11vc2ebiVJzVBuOzun6F7FBA+8KAbGTTedQ==",
+ "path": "system.security.accesscontrol/6.0.0",
+ "hashPath": "system.security.accesscontrol.6.0.0.nupkg.sha512"
+ },
+ "System.Security.Cryptography.Pkcs/6.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ynmbW2GjIGg9K1wXmVIRs4IlyDolf0JXNpzFQ8JCVgwM+myUC2JeUggl2PwQig2PNVMegKmN1aAx7WPQ8tI3vA==",
+ "path": "system.security.cryptography.pkcs/6.0.1",
+ "hashPath": "system.security.cryptography.pkcs.6.0.1.nupkg.sha512"
+ },
+ "System.Security.Cryptography.ProtectedData/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-rp1gMNEZpvx9vP0JW0oHLxlf8oSiQgtno77Y4PLUBjSiDYoD77Y8uXHr1Ea5XG4/pIKhqAdxZ8v8OTUtqo9PeQ==",
+ "path": "system.security.cryptography.protecteddata/6.0.0",
+ "hashPath": "system.security.cryptography.protecteddata.6.0.0.nupkg.sha512"
+ },
+ "System.Security.Cryptography.Xml/6.0.1": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-5e5bI28T0x73AwTsbuFP4qSRzthmU2C0Gqgg3AZ3KTxmSyA+Uhk31puA3srdaeWaacVnHhLdJywCzqOiEpbO/w==",
+ "path": "system.security.cryptography.xml/6.0.1",
+ "hashPath": "system.security.cryptography.xml.6.0.1.nupkg.sha512"
+ },
+ "System.Security.Permissions/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-T/uuc7AklkDoxmcJ7LGkyX1CcSviZuLCa4jg3PekfJ7SU0niF0IVTXwUiNVP9DSpzou2PpxJ+eNY2IfDM90ZCg==",
+ "path": "system.security.permissions/6.0.0",
+ "hashPath": "system.security.permissions.6.0.0.nupkg.sha512"
+ },
+ "System.Text.Encoding.CodePages/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-ZFCILZuOvtKPauZ/j/swhvw68ZRi9ATCfvGbk1QfydmcXBkIWecWKn/250UH7rahZ5OoDBaiAudJtPvLwzw85A==",
+ "path": "system.text.encoding.codepages/6.0.0",
+ "hashPath": "system.text.encoding.codepages.6.0.0.nupkg.sha512"
+ },
+ "System.Windows.Extensions/6.0.0": {
+ "type": "package",
+ "serviceable": true,
+ "sha512": "sha512-IXoJOXIqc39AIe+CIR7koBtRGMiCt/LPM3lI+PELtDIy9XdyeSrwXFdWV9dzJ2Awl0paLWUaknLxFQ5HpHZUog==",
+ "path": "system.windows.extensions/6.0.0",
+ "hashPath": "system.windows.extensions.6.0.0.nupkg.sha512"
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.dll b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.dll
new file mode 100644
index 0000000..c2ed8e7
--- /dev/null
+++ b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.exe b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.exe
new file mode 100644
index 0000000..c623fc8
--- /dev/null
+++ b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.exe
Binary files differ
diff --git a/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.pdb b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.pdb
new file mode 100644
index 0000000..3b1e68d
--- /dev/null
+++ b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.pdb
Binary files differ
diff --git a/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.runtimeconfig.json b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.runtimeconfig.json
new file mode 100644
index 0000000..e7b3b03
--- /dev/null
+++ b/DungeonShooting_Godot/excel/DungeonShooting_ExcelTool.runtimeconfig.json
@@ -0,0 +1,12 @@
+{
+ "runtimeOptions": {
+ "tfm": "net6.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "6.0.0"
+ },
+ "configProperties": {
+ "System.Reflection.Metadata.MetadataUpdater.IsSupported": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/excel/Enums.NET.dll b/DungeonShooting_Godot/excel/Enums.NET.dll
new file mode 100644
index 0000000..1979743
--- /dev/null
+++ b/DungeonShooting_Godot/excel/Enums.NET.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/ICSharpCode.SharpZipLib.dll b/DungeonShooting_Godot/excel/ICSharpCode.SharpZipLib.dll
new file mode 100644
index 0000000..8a74343
--- /dev/null
+++ b/DungeonShooting_Godot/excel/ICSharpCode.SharpZipLib.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/MathNet.Numerics.dll b/DungeonShooting_Godot/excel/MathNet.Numerics.dll
new file mode 100644
index 0000000..71d6b4c
--- /dev/null
+++ b/DungeonShooting_Godot/excel/MathNet.Numerics.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/Microsoft.IO.RecyclableMemoryStream.dll b/DungeonShooting_Godot/excel/Microsoft.IO.RecyclableMemoryStream.dll
new file mode 100644
index 0000000..c19ee7f
--- /dev/null
+++ b/DungeonShooting_Godot/excel/Microsoft.IO.RecyclableMemoryStream.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/Microsoft.Win32.SystemEvents.dll b/DungeonShooting_Godot/excel/Microsoft.Win32.SystemEvents.dll
new file mode 100644
index 0000000..66af198
--- /dev/null
+++ b/DungeonShooting_Godot/excel/Microsoft.Win32.SystemEvents.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/NPOI.OOXML.dll b/DungeonShooting_Godot/excel/NPOI.OOXML.dll
new file mode 100644
index 0000000..b476bdc
--- /dev/null
+++ b/DungeonShooting_Godot/excel/NPOI.OOXML.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/NPOI.OpenXml4Net.dll b/DungeonShooting_Godot/excel/NPOI.OpenXml4Net.dll
new file mode 100644
index 0000000..bbdf16b
--- /dev/null
+++ b/DungeonShooting_Godot/excel/NPOI.OpenXml4Net.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/NPOI.OpenXmlFormats.dll b/DungeonShooting_Godot/excel/NPOI.OpenXmlFormats.dll
new file mode 100644
index 0000000..a968c09
--- /dev/null
+++ b/DungeonShooting_Godot/excel/NPOI.OpenXmlFormats.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/NPOI.dll b/DungeonShooting_Godot/excel/NPOI.dll
new file mode 100644
index 0000000..2b08549
--- /dev/null
+++ b/DungeonShooting_Godot/excel/NPOI.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/SixLabors.Fonts.dll b/DungeonShooting_Godot/excel/SixLabors.Fonts.dll
new file mode 100644
index 0000000..5780135
--- /dev/null
+++ b/DungeonShooting_Godot/excel/SixLabors.Fonts.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/SixLabors.ImageSharp.dll b/DungeonShooting_Godot/excel/SixLabors.ImageSharp.dll
new file mode 100644
index 0000000..dd87091
--- /dev/null
+++ b/DungeonShooting_Godot/excel/SixLabors.ImageSharp.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Configuration.ConfigurationManager.dll b/DungeonShooting_Godot/excel/System.Configuration.ConfigurationManager.dll
new file mode 100644
index 0000000..d67c8a8
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Configuration.ConfigurationManager.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Drawing.Common.dll b/DungeonShooting_Godot/excel/System.Drawing.Common.dll
new file mode 100644
index 0000000..7c9e87b
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Drawing.Common.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Security.Cryptography.Pkcs.dll b/DungeonShooting_Godot/excel/System.Security.Cryptography.Pkcs.dll
new file mode 100644
index 0000000..6cbb734
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Security.Cryptography.Pkcs.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Security.Cryptography.ProtectedData.dll b/DungeonShooting_Godot/excel/System.Security.Cryptography.ProtectedData.dll
new file mode 100644
index 0000000..332dbfa
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Security.Cryptography.ProtectedData.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Security.Cryptography.Xml.dll b/DungeonShooting_Godot/excel/System.Security.Cryptography.Xml.dll
new file mode 100644
index 0000000..b43ece0
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Security.Cryptography.Xml.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Security.Permissions.dll b/DungeonShooting_Godot/excel/System.Security.Permissions.dll
new file mode 100644
index 0000000..39dd4df
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Security.Permissions.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/System.Windows.Extensions.dll b/DungeonShooting_Godot/excel/System.Windows.Extensions.dll
new file mode 100644
index 0000000..69f0d1b
--- /dev/null
+++ b/DungeonShooting_Godot/excel/System.Windows.Extensions.dll
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx b/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx
new file mode 100644
index 0000000..24e11a1
--- /dev/null
+++ b/DungeonShooting_Godot/excel/excelFile/ActivityObject.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/Sound.xlsx b/DungeonShooting_Godot/excel/excelFile/Sound.xlsx
new file mode 100644
index 0000000..6679fea
--- /dev/null
+++ b/DungeonShooting_Godot/excel/excelFile/Sound.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx b/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx
new file mode 100644
index 0000000..a2bd8f8
--- /dev/null
+++ b/DungeonShooting_Godot/excel/excelFile/Weapon.xlsx
Binary files differ
diff --git a/DungeonShooting_Godot/prefab/Cursor.tscn b/DungeonShooting_Godot/prefab/Cursor.tscn
index c228d62..728e892 100644
--- a/DungeonShooting_Godot/prefab/Cursor.tscn
+++ b/DungeonShooting_Godot/prefab/Cursor.tscn
@@ -1,9 +1,8 @@
-[gd_scene load_steps=4 format=3]
+[gd_scene load_steps=4 format=3 uid="uid://d16r232hmj3ow"]
-[ext_resource type="Texture2D" uid="uid://ct5v768lsf6nc" path="res://resource/sprite/ui/Cursor.png" id="1"]
[ext_resource type="Script" path="res://src/game/Cursor.cs" id="2"]
[ext_resource type="Texture2D" uid="uid://cjiiu86a42mnj" path="res://resource/sprite/ui/CursorCenter.png" id="2_2j135"]
-
+[ext_resource type="Texture2D" uid="uid://dta28v3fgkfru" path="res://resource/sprite/ui/cursors.png" id="3_ni3bs"]
[node name="Cursor" type="Node2D"]
z_index = 10
@@ -16,28 +15,36 @@
[node name="LT" type="Sprite2D" parent="."]
scale = Vector2(4, 4)
-texture = ExtResource("1")
+texture = ExtResource("3_ni3bs")
offset = Vector2(-2, -2)
region_enabled = true
-region_rect = Rect2(0, 0, 4, 4)
+region_rect = Rect2(67, 35, 4, 4)
[node name="LB" type="Sprite2D" parent="."]
scale = Vector2(4, 4)
-texture = ExtResource("1")
+texture = ExtResource("3_ni3bs")
offset = Vector2(-2, 2)
region_enabled = true
-region_rect = Rect2(0, 4, 4, 4)
+region_rect = Rect2(67, 41, 4, 4)
[node name="RT" type="Sprite2D" parent="."]
scale = Vector2(4, 4)
-texture = ExtResource("1")
+texture = ExtResource("3_ni3bs")
offset = Vector2(2, -2)
region_enabled = true
-region_rect = Rect2(4, 0, 4, 4)
+region_rect = Rect2(73, 35, 4, 4)
[node name="RB" type="Sprite2D" parent="."]
scale = Vector2(4, 4)
-texture = ExtResource("1")
+texture = ExtResource("3_ni3bs")
offset = Vector2(2, 2)
region_enabled = true
-region_rect = Rect2(4, 4, 4, 4)
+region_rect = Rect2(73, 41, 4, 4)
+
+[node name="Finger" type="Sprite2D" parent="."]
+visible = false
+position = Vector2(8, 6)
+scale = Vector2(4, 4)
+texture = ExtResource("3_ni3bs")
+region_enabled = true
+region_rect = Rect2(68, 21, 7, 9)
diff --git a/DungeonShooting_Godot/prefab/bullet/Bullet0001.tscn b/DungeonShooting_Godot/prefab/bullet/Bullet0001.tscn
new file mode 100644
index 0000000..4081afc
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/Bullet0001.tscn
@@ -0,0 +1,67 @@
+[gd_scene load_steps=9 format=3 uid="uid://bj4kmvt8jg1cf"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/Bullet.cs" id="1_82ma0"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_p12d3"]
+[ext_resource type="Texture2D" uid="uid://bu0b11hiuecxy" path="res://resource/sprite/bullet/bullet.png" id="3_hjgpe"]
+
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_5a4f2"]
+resource_local_to_scene = true
+shader = ExtResource("2_p12d3")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o0655"]
+resource_local_to_scene = true
+shader = ExtResource("2_p12d3")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_5wvmf"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("3_hjgpe")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_c0onq"]
+size = Vector2(44.72, 12)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_lcqb8"]
+size = Vector2(11, 4)
+
+[node name="Bullet0001" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+script = ExtResource("1_82ma0")
+CollisionArea = NodePath("CollisionArea")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_5a4f2")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.8, 1.8, 1.8, 1)
+material = SubResource("ShaderMaterial_o0655")
+sprite_frames = SubResource("SpriteFrames_5wvmf")
+
+[node name="CollisionArea" type="Area2D" parent="."]
+visible = false
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionArea"]
+position = Vector2(2.93353, 0)
+scale = Vector2(0.226586, 0.333333)
+shape = SubResource("RectangleShape2D_c0onq")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(2.5, 0)
+shape = SubResource("RectangleShape2D_lcqb8")
diff --git a/DungeonShooting_Godot/prefab/bullet/Bullet0002.tscn b/DungeonShooting_Godot/prefab/bullet/Bullet0002.tscn
new file mode 100644
index 0000000..da195d0
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/bullet/Bullet0002.tscn
@@ -0,0 +1,54 @@
+[gd_scene load_steps=8 format=3 uid="uid://bqkj0rn72ppge"]
+
+[ext_resource type="Script" path="res://src/game/activity/bullet/Bullet.cs" id="1_hga3h"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_n44pd"]
+[ext_resource type="SpriteFrames" uid="uid://bpeodjqiy3mil" path="res://resource/spriteFrames/Bullet0002.tres" id="3_uvuj8"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_5a4f2"]
+resource_local_to_scene = true
+shader = ExtResource("2_n44pd")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o0655"]
+resource_local_to_scene = true
+shader = ExtResource("2_n44pd")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_c0onq"]
+size = Vector2(44.72, 12)
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_e2yn3"]
+radius = 3.0
+
+[node name="Bullet0002" type="CharacterBody2D" node_paths=PackedStringArray("CollisionArea", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 2
+script = ExtResource("1_hga3h")
+CollisionArea = NodePath("CollisionArea")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_5a4f2")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+modulate = Color(1.8, 1.8, 1.8, 1)
+material = SubResource("ShaderMaterial_o0655")
+sprite_frames = ExtResource("3_uvuj8")
+
+[node name="CollisionArea" type="Area2D" parent="."]
+visible = false
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionArea"]
+position = Vector2(2.93353, 0)
+scale = Vector2(0.226586, 0.333333)
+shape = SubResource("RectangleShape2D_c0onq")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("CircleShape2D_e2yn3")
diff --git a/DungeonShooting_Godot/prefab/effect/Blood.tscn b/DungeonShooting_Godot/prefab/effect/Blood.tscn
index 1e6ad14..7abbec9 100644
--- a/DungeonShooting_Godot/prefab/effect/Blood.tscn
+++ b/DungeonShooting_Godot/prefab/effect/Blood.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=3 format=3]
-[ext_resource path="res://resource/effects/Circle.png" type="Texture2D" id=1]
-[ext_resource path="res://src/game/effects/Blood.cs" type="Script" id=2]
+[ext_resource type="Texture2D" uid="uid://cgptnp74ive4r" path="res://resource/sprite/effects/Circle.png" id="1"]
+[ext_resource type="Script" path="res://src/game/effects/Blood.cs" id="2"]
+
[node name="Blood" type="CPUParticles2D"]
z_index = -5
diff --git a/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn b/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn
index 96428cb..54549a1 100644
--- a/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn
+++ b/DungeonShooting_Godot/prefab/effect/BulletDisappear.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=15 format=3 uid="uid://vbu1phb8mchw"]
+[gd_scene load_steps=15 format=3]
-[ext_resource type="Texture2D" uid="uid://d8ot2wrdoe4j" path="res://resource/effects/Explosion.png" id="1_qqm6c"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/effects/Smoke.png" id="1_ybsvf"]
+[ext_resource type="Texture2D" uid="uid://d8ot2wrdoe4j" path="res://resource/sprite/effects/Explosion.png" id="1_qqm6c"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="1_ybsvf"]
+
[sub_resource type="AtlasTexture" id="AtlasTexture_tscb3"]
atlas = ExtResource("1_qqm6c")
diff --git a/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn b/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn
index 22ba2ef..368fd26 100644
--- a/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn
+++ b/DungeonShooting_Godot/prefab/effect/BulletSmoke.tscn
@@ -1,8 +1,8 @@
-[gd_scene load_steps=9 format=3 uid="uid://dtr8nurmv2qtg"]
+[gd_scene load_steps=9 format=3]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/effects/Smoke.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="1"]
[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_8pe88"]
-[ext_resource type="Texture2D" uid="uid://dwa4chrugc6b1" path="res://resource/effects/Collision.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://dwa4chrugc6b1" path="res://resource/sprite/effects/Collision.png" id="2"]
[sub_resource type="CanvasItemMaterial" id="1"]
particles_animation = true
diff --git a/DungeonShooting_Godot/prefab/effect/Effect1.tscn b/DungeonShooting_Godot/prefab/effect/Effect1.tscn
index 17115a1..4cd0ba7 100644
--- a/DungeonShooting_Godot/prefab/effect/Effect1.tscn
+++ b/DungeonShooting_Godot/prefab/effect/Effect1.tscn
@@ -1,9 +1,9 @@
-[gd_scene load_steps=8 format=3 uid="uid://crx1kqqrymmdb"]
+[gd_scene load_steps=8 format=3]
[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_dxavj"]
[ext_resource type="Texture2D" uid="uid://bs1lan5uwxyfg" path="res://resource/curve/Curve1.tres" id="1_s60r7"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/effects/Smoke.png" id="2_3kyig"]
-[ext_resource type="Texture2D" uid="uid://csud4e6kc3iku" path="res://resource/effects/Effect1.png" id="3_1mceu"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="2_3kyig"]
+[ext_resource type="Texture2D" uid="uid://csud4e6kc3iku" path="res://resource/sprite/effects/Effect1.png" id="3_1mceu"]
[ext_resource type="Script" path="res://src/game/effects/Effect1.cs" id="3_ax5u4"]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_ipadv"]
diff --git a/DungeonShooting_Godot/prefab/effect/ShotFire.tscn b/DungeonShooting_Godot/prefab/effect/ShotFire.tscn
index 8c1d374..1a07305 100644
--- a/DungeonShooting_Godot/prefab/effect/ShotFire.tscn
+++ b/DungeonShooting_Godot/prefab/effect/ShotFire.tscn
@@ -1,6 +1,7 @@
-[gd_scene load_steps=4 format=2]
+[gd_scene load_steps=4 format=3]
-[ext_resource path="res://resource/effects/ShotFire.png" type="Texture2D" id=1]
+[ext_resource type="Texture2D" uid="uid://b0jsyrbk4bydt" path="res://resource/sprite/effects/ShotFire.png" id="1"]
+
[sub_resource type="Animation" id=2]
length = 0.001
diff --git a/DungeonShooting_Godot/prefab/effect/activityObject/Effect0001.tscn b/DungeonShooting_Godot/prefab/effect/activityObject/Effect0001.tscn
new file mode 100644
index 0000000..bf30d58
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/effect/activityObject/Effect0001.tscn
@@ -0,0 +1,193 @@
+[gd_scene load_steps=30 format=3 uid="uid://pr88a1phtxgb"]
+
+[ext_resource type="Script" path="res://src/game/effects/EnemyDebris.cs" id="1_jnsw0"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_b3d83"]
+[ext_resource type="Texture2D" uid="uid://d2f55lu60x64i" path="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png" id="3_ntutm"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="4_egbbr"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"]
+resource_local_to_scene = true
+shader = ExtResource("2_b3d83")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"]
+resource_local_to_scene = true
+shader = ExtResource("2_b3d83")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_cldwb"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(0, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ehtnl"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(16, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j05gd"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(32, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7el6f"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(48, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n7sw3"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(64, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_mumsm"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(80, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_gx41d"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(96, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_r4nx1"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(112, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_s8j4o"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(128, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2svrb"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(144, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_twd5t"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(160, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8w5ka"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(176, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6iumv"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(192, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_lpilf"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(208, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_n1a5a"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(224, 0, 16, 16)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_q0oeq"]
+atlas = ExtResource("3_ntutm")
+region = Rect2(240, 0, 16, 16)
+
+[sub_resource type="SpriteFrames" id="SpriteFrames_15g84"]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_cldwb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ehtnl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j05gd")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7el6f")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n7sw3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_mumsm")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_gx41d")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_r4nx1")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_s8j4o")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2svrb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_twd5t")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8w5ka")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6iumv")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_lpilf")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_n1a5a")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_q0oeq")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
+
+[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"]
+particles_animation = true
+particles_anim_h_frames = 3
+particles_anim_v_frames = 1
+particles_anim_loop = false
+
+[sub_resource type="Gradient" id="Gradient_ryemi"]
+colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255)
+
+[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"]
+gradient = SubResource("Gradient_ryemi")
+
+[sub_resource type="Curve" id="Curve_21dxk"]
+_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0]
+point_count = 3
+
+[sub_resource type="CurveTexture" id="CurveTexture_rutlp"]
+curve = SubResource("Curve_21dxk")
+
+[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"]
+particle_flag_disable_z = true
+gravity = Vector3(0, 0, 0)
+orbit_velocity_min = 0.0
+orbit_velocity_max = 0.0
+angle_max = 360.0
+scale_min = 0.4
+scale_max = 1.5
+scale_curve = SubResource("CurveTexture_rutlp")
+color = Color(0.811765, 0.0980392, 0.0980392, 0.627451)
+color_ramp = SubResource("GradientTexture1D_orgu0")
+anim_offset_max = 1.0
+
+[node name="Effect0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+script = ExtResource("1_jnsw0")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_s1mj2")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_08fn3")
+sprite_frames = SubResource("SpriteFrames_15g84")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+
+[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
+material = SubResource("CanvasItemMaterial_p3lv8")
+emitting = false
+process_material = SubResource("ParticleProcessMaterial_ku1mm")
+texture = ExtResource("4_egbbr")
+fixed_fps = 20
diff --git a/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn b/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn
index a96a14e..b19d4aa 100644
--- a/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn
+++ b/DungeonShooting_Godot/prefab/effect/activityObject/EnemyBloodEffect.tscn
@@ -1,8 +1,8 @@
-[gd_scene load_steps=5 format=3 uid="uid://dv3pstsr56ux7"]
+[gd_scene load_steps=5 format=3 uid="uid://m0s0k5nw7nbi"]
-[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_wwb7t"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/effects/Smoke.png" id="2_5rrhq"]
-[ext_resource type="Script" path="res://src/game/effects/AutoDestroyEffect.cs" id="3_cvfk3"]
+[ext_resource type="Material" uid="uid://c1chld6lkpgji" path="res://resource/material/SmokeParticleMaterial.tres" id="1_jp2tw"]
+[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/sprite/effects/Smoke.png" id="2_xg444"]
+[ext_resource type="Script" path="res://src/game/effects/AutoDestroyEffect.cs" id="3_lldtd"]
[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_emuda"]
particles_animation = true
@@ -15,11 +15,11 @@
material = SubResource("CanvasItemMaterial_emuda")
emitting = false
amount = 10
-process_material = ExtResource("1_wwb7t")
-texture = ExtResource("2_5rrhq")
+process_material = ExtResource("1_jp2tw")
+texture = ExtResource("2_xg444")
lifetime = 1.2
one_shot = true
explosiveness = 1.0
fixed_fps = 20
-script = ExtResource("3_cvfk3")
+script = ExtResource("3_lldtd")
DelayTime = 1.5
diff --git a/DungeonShooting_Godot/prefab/effect/activityObject/EnemyDebris.tscn b/DungeonShooting_Godot/prefab/effect/activityObject/EnemyDebris.tscn
deleted file mode 100644
index 58a339d..0000000
--- a/DungeonShooting_Godot/prefab/effect/activityObject/EnemyDebris.tscn
+++ /dev/null
@@ -1,191 +0,0 @@
-[gd_scene load_steps=30 format=3 uid="uid://cj47w003yql4x"]
-
-[ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="1_h7exw"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_vlp01"]
-[ext_resource type="Texture2D" uid="uid://d2f55lu60x64i" path="res://resource/effects/activityObject/Enemy0001_Debris.png" id="3_ohnrx"]
-[ext_resource type="Texture2D" uid="uid://h7hkgbwj1li" path="res://resource/effects/Smoke.png" id="4_e30nm"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_s1mj2"]
-resource_local_to_scene = true
-shader = ExtResource("2_vlp01")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_08fn3"]
-resource_local_to_scene = true
-shader = ExtResource("2_vlp01")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_hqaf2"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(0, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_b55yq"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(8, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_6ouxh"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(16, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_sfr41"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(24, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_j5qpi"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(32, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ltfhd"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(40, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_oh4q1"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(48, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ebvnk"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(56, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_lboyj"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(64, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_6qefr"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(72, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_aya5f"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(80, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_el804"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(88, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_pha71"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(96, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ps4oc"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(104, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_l8my6"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(112, 0, 8, 8)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_4jpot"]
-atlas = ExtResource("3_ohnrx")
-region = Rect2(120, 0, 8, 8)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_15g84"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_hqaf2")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_b55yq")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_6ouxh")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_sfr41")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_j5qpi")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ltfhd")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_oh4q1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ebvnk")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_lboyj")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_6qefr")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_aya5f")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_el804")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_pha71")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ps4oc")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_l8my6")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_4jpot")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
-[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_p3lv8"]
-particles_animation = true
-particles_anim_h_frames = 3
-particles_anim_v_frames = 1
-particles_anim_loop = false
-
-[sub_resource type="Gradient" id="Gradient_ryemi"]
-colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0.537255)
-
-[sub_resource type="GradientTexture1D" id="GradientTexture1D_orgu0"]
-gradient = SubResource("Gradient_ryemi")
-
-[sub_resource type="Curve" id="Curve_21dxk"]
-_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.177419, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.0272727), 0.0, 0.0, 0, 0]
-point_count = 3
-
-[sub_resource type="CurveTexture" id="CurveTexture_rutlp"]
-curve = SubResource("Curve_21dxk")
-
-[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_ku1mm"]
-particle_flag_disable_z = true
-gravity = Vector3(0, 0, 0)
-orbit_velocity_min = 0.0
-orbit_velocity_max = 0.0
-angle_max = 360.0
-scale_min = 0.4
-scale_max = 1.5
-scale_curve = SubResource("CurveTexture_rutlp")
-color = Color(0.811765, 0.0980392, 0.0980392, 0.627451)
-color_ramp = SubResource("GradientTexture1D_orgu0")
-anim_offset_max = 1.0
-
-[node name="EnemyDebris" type="Node"]
-script = ExtResource("1_h7exw")
-collision_mask = 1
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_s1mj2")
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_08fn3")
-sprite_frames = SubResource("SpriteFrames_15g84")
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-
-[node name="GPUParticles2D" type="GPUParticles2D" parent="."]
-material = SubResource("CanvasItemMaterial_p3lv8")
-emitting = false
-process_material = SubResource("ParticleProcessMaterial_ku1mm")
-texture = ExtResource("4_e30nm")
-fixed_fps = 20
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor.tscn
deleted file mode 100644
index ce49453..0000000
--- a/DungeonShooting_Godot/prefab/map/RoomDoor.tscn
+++ /dev/null
@@ -1,62 +0,0 @@
-[gd_scene load_steps=10 format=3]
-
-[ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="1_8es7a"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_d8jnk"]
-[ext_resource type="Texture2D" uid="uid://dviv44fhwvkb1" path="res://resource/sprite/map/door1_down.png" id="3_knmoy"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_x5aop"]
-resource_local_to_scene = true
-shader = ExtResource("2_d8jnk")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_f8vun"]
-resource_local_to_scene = true
-shader = ExtResource("2_d8jnk")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_wfl7i"]
-atlas = ExtResource("3_knmoy")
-region = Rect2(32, 0, 32, 32)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_j20kt"]
-atlas = ExtResource("3_knmoy")
-region = Rect2(32, 32, 16, 48)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_ugstb"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_wfl7i")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_j20kt")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_lvvwj"]
-resource_local_to_scene = true
-size = Vector2(32, 23)
-
-[node name="RoomDoor" type="Node"]
-script = ExtResource("1_8es7a")
-collision_layer = 1
-z_index = 15
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_x5aop")
-position = Vector2(0, 8)
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_f8vun")
-position = Vector2(0, -8)
-sprite_frames = SubResource("SpriteFrames_ugstb")
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, -3.5)
-shape = SubResource("RectangleShape2D_lvvwj")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn
new file mode 100644
index 0000000..6ade137
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_E.tscn
@@ -0,0 +1,42 @@
+[gd_scene load_steps=7 format=3 uid="uid://yhewdkpru0up"]
+
+[ext_resource type="Script" path="res://src/game/room/RoomDoor.cs" id="1_4c6sw"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_lwx51"]
+[ext_resource type="SpriteFrames" uid="uid://3ps6h2f54qa5" path="res://resource/spriteFrames/RoomDoor_EW.tres" id="3_pjvd8"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_yvwpk"]
+resource_local_to_scene = true
+shader = ExtResource("2_lwx51")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
+resource_local_to_scene = true
+shader = ExtResource("2_lwx51")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_opsb6"]
+resource_local_to_scene = true
+size = Vector2(14, 40)
+
+[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+script = ExtResource("1_4c6sw")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_yvwpk")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_t4ayq")
+position = Vector2(0, -8)
+sprite_frames = ExtResource("3_pjvd8")
+animation = &"closeDoor"
+autoplay = "default"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, 4)
+shape = SubResource("RectangleShape2D_opsb6")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn
new file mode 100644
index 0000000..54aa32f
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_N.tscn
@@ -0,0 +1,42 @@
+[gd_scene load_steps=7 format=3 uid="uid://cbtj6bsaqqomt"]
+
+[ext_resource type="Script" path="res://src/game/room/RoomDoor.cs" id="1_220be"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_h5ru6"]
+[ext_resource type="SpriteFrames" uid="uid://xs72aopsgpg6" path="res://resource/spriteFrames/RoomDoor_NS.tres" id="3_apluc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_yvwpk"]
+resource_local_to_scene = true
+shader = ExtResource("2_h5ru6")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
+resource_local_to_scene = true
+shader = ExtResource("2_h5ru6")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_opsb6"]
+resource_local_to_scene = true
+size = Vector2(32, 23)
+
+[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+script = ExtResource("1_220be")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_yvwpk")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_t4ayq")
+position = Vector2(0, -8)
+sprite_frames = ExtResource("3_apluc")
+animation = &"openDoor"
+autoplay = "default"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, -3.5)
+shape = SubResource("RectangleShape2D_opsb6")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn
new file mode 100644
index 0000000..e3b5afb
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_S.tscn
@@ -0,0 +1,41 @@
+[gd_scene load_steps=7 format=3 uid="uid://bvfnnqo71knb"]
+
+[ext_resource type="Script" path="res://src/game/room/RoomDoor.cs" id="1_f3qbq"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_6vvcd"]
+[ext_resource type="SpriteFrames" uid="uid://xs72aopsgpg6" path="res://resource/spriteFrames/RoomDoor_NS.tres" id="3_at5v2"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_yvwpk"]
+resource_local_to_scene = true
+shader = ExtResource("2_6vvcd")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
+resource_local_to_scene = true
+shader = ExtResource("2_6vvcd")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_opsb6"]
+resource_local_to_scene = true
+size = Vector2(32, 23)
+
+[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+script = ExtResource("1_f3qbq")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_yvwpk")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_t4ayq")
+position = Vector2(0, -8)
+sprite_frames = ExtResource("3_at5v2")
+autoplay = "default"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, -3.5)
+shape = SubResource("RectangleShape2D_opsb6")
diff --git a/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn b/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn
new file mode 100644
index 0000000..e32ebf8
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/map/RoomDoor_W.tscn
@@ -0,0 +1,41 @@
+[gd_scene load_steps=7 format=3 uid="uid://wmedlesabvr3"]
+
+[ext_resource type="Script" path="res://src/game/room/RoomDoor.cs" id="1_agux2"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_wx2w3"]
+[ext_resource type="SpriteFrames" uid="uid://3ps6h2f54qa5" path="res://resource/spriteFrames/RoomDoor_EW.tres" id="3_a2hvw"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_yvwpk"]
+resource_local_to_scene = true
+shader = ExtResource("2_wx2w3")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_t4ayq"]
+resource_local_to_scene = true
+shader = ExtResource("2_wx2w3")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_2ko2r"]
+resource_local_to_scene = true
+size = Vector2(14, 40)
+
+[node name="RoomDoor_N" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+script = ExtResource("1_agux2")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_yvwpk")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_t4ayq")
+position = Vector2(0, -8)
+sprite_frames = ExtResource("3_a2hvw")
+autoplay = "default"
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, 4)
+shape = SubResource("RectangleShape2D_2ko2r")
diff --git a/DungeonShooting_Godot/prefab/role/Enemy.tscn b/DungeonShooting_Godot/prefab/role/Enemy.tscn
deleted file mode 100644
index 04a1f50..0000000
--- a/DungeonShooting_Godot/prefab/role/Enemy.tscn
+++ /dev/null
@@ -1,158 +0,0 @@
-[gd_scene load_steps=20 format=3 uid="uid://dbrig6dq441wo"]
-
-[ext_resource type="PackedScene" uid="uid://b515ti0qinck8" path="res://prefab/role/Role.tscn" id="1_qkqsa"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_1ah5y"]
-[ext_resource type="Texture2D" uid="uid://chd2vtesap5cf" path="res://resource/sprite/role/role1.png" id="3_tqhbo"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_8vxx6"]
-resource_local_to_scene = true
-shader = ExtResource("2_1ah5y")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_k8mt5"]
-resource_local_to_scene = true
-shader = ExtResource("2_1ah5y")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_gx4d0"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(0, 0, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_da1qy"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(0, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_qr6u5"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(16, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_yxi4p"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(32, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_1g0j1"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(48, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_mqoog"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(48, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_6n45h"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(32, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_7bfvr"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(16, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_jep37"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(0, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_n0mff"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(0, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_snkia"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(16, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_l4qvj"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(32, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_yxje3"]
-atlas = ExtResource("3_tqhbo")
-region = Rect2(48, 48, 16, 24)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_m7t3e"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_gx4d0")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_da1qy")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_qr6u5")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_yxi4p")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_1g0j1")
-}],
-"loop": true,
-"name": &"idle",
-"speed": 7.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_mqoog")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_6n45h")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_7bfvr")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_jep37")
-}],
-"loop": true,
-"name": &"reverseRun",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_n0mff")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_snkia")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_l4qvj")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_yxje3")
-}],
-"loop": true,
-"name": &"run",
-"speed": 10.0
-}]
-
-[node name="Enemy" instance=ExtResource("1_qkqsa")]
-collision_layer = 16
-collision_mask = 25
-
-[node name="ShadowSprite" parent="." index="0"]
-material = SubResource("ShaderMaterial_8vxx6")
-
-[node name="AnimatedSprite" parent="." index="2"]
-material = SubResource("ShaderMaterial_k8mt5")
-sprite_frames = SubResource("SpriteFrames_m7t3e")
-frame_progress = 0.877597
-
-[node name="HurtArea" parent="." index="4"]
-visible = false
-
-[node name="ViewRay" type="RayCast2D" parent="." index="6"]
-position = Vector2(0, -8)
-enabled = false
-
-[node name="NavigationPoint" type="Marker2D" parent="." index="8"]
-position = Vector2(0, -5)
-
-[node name="NavigationAgent2D" type="NavigationAgent2D" parent="NavigationPoint" index="0"]
-path_desired_distance = 3.0
-target_desired_distance = 3.0
-radius = 20.0
diff --git a/DungeonShooting_Godot/prefab/role/Enemy0001.tscn b/DungeonShooting_Godot/prefab/role/Enemy0001.tscn
new file mode 100644
index 0000000..b40cbfa
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/role/Enemy0001.tscn
@@ -0,0 +1,50 @@
+[gd_scene load_steps=7 format=3 uid="uid://dbrig6dq441wo"]
+
+[ext_resource type="PackedScene" uid="uid://cyrcv2jdgr8cf" path="res://prefab/role/RoleTemplate.tscn" id="1_5po38"]
+[ext_resource type="Script" path="res://src/game/role/enemy/Enemy.cs" id="2_1plrq"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_x8agd"]
+[ext_resource type="SpriteFrames" uid="uid://cnctpyrn02rhd" path="res://resource/spriteFrames/Role1001.tres" id="4_qv8w5"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_8vxx6"]
+resource_local_to_scene = true
+shader = ExtResource("3_x8agd")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_k8mt5"]
+resource_local_to_scene = true
+shader = ExtResource("3_x8agd")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[node name="Enemy0001" node_paths=PackedStringArray("HurtArea", "MountPoint", "BackMountPoint", "InteractiveArea", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_5po38")]
+collision_layer = 16
+collision_mask = 25
+script = ExtResource("2_1plrq")
+HurtArea = NodePath("HurtArea")
+MountPoint = NodePath("MountPoint")
+BackMountPoint = NodePath("BackMountPoint")
+InteractiveArea = NodePath("InteractiveArea")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_8vxx6")
+
+[node name="AnimatedSprite" parent="." index="2"]
+material = SubResource("ShaderMaterial_k8mt5")
+sprite_frames = ExtResource("4_qv8w5")
+animation = &"run"
+
+[node name="ViewRay" type="RayCast2D" parent="." index="6"]
+position = Vector2(0, -8)
+enabled = false
+
+[node name="NavigationPoint" type="Marker2D" parent="." index="8"]
+position = Vector2(0, -5)
+
+[node name="NavigationAgent2D" type="NavigationAgent2D" parent="NavigationPoint" index="0"]
+path_desired_distance = 3.0
+target_desired_distance = 3.0
+radius = 20.0
diff --git a/DungeonShooting_Godot/prefab/role/Player.tscn b/DungeonShooting_Godot/prefab/role/Player.tscn
deleted file mode 100644
index 016c4b5..0000000
--- a/DungeonShooting_Godot/prefab/role/Player.tscn
+++ /dev/null
@@ -1,142 +0,0 @@
-[gd_scene load_steps=20 format=3]
-
-[ext_resource type="PackedScene" uid="uid://b515ti0qinck8" path="res://prefab/role/Role.tscn" id="1"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_nvo1u"]
-[ext_resource type="Texture2D" uid="uid://bhwhhg2dfsr26" path="res://resource/sprite/role/role2.png" id="3_55mk2"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_vejn8"]
-resource_local_to_scene = true
-shader = ExtResource("2_nvo1u")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_0gb8j"]
-resource_local_to_scene = true
-shader = ExtResource("2_nvo1u")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_tmewn"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(0, 0, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_dvg4a"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(0, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_kvuct"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(16, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_5op76"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(32, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_helyc"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(48, 24, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_67mn8"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(48, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_jeywq"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(32, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_oycx8"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(16, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_tjg1t"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(0, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_2ltxw"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(0, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_x1va1"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(16, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_ic2p5"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(32, 48, 16, 24)
-
-[sub_resource type="AtlasTexture" id="AtlasTexture_j3hdu"]
-atlas = ExtResource("3_55mk2")
-region = Rect2(48, 48, 16, 24)
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_3poqo"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_tmewn")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_dvg4a")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_kvuct")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_5op76")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_helyc")
-}],
-"loop": true,
-"name": &"idle",
-"speed": 7.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_67mn8")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_jeywq")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_oycx8")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_tjg1t")
-}],
-"loop": true,
-"name": &"reverseRun",
-"speed": 10.0
-}, {
-"frames": [{
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_2ltxw")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_x1va1")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_ic2p5")
-}, {
-"duration": 1.0,
-"texture": SubResource("AtlasTexture_j3hdu")
-}],
-"loop": true,
-"name": &"run",
-"speed": 10.0
-}]
-
-[node name="Player" instance=ExtResource("1")]
-collision_layer = 8
-collision_mask = 1
-
-[node name="ShadowSprite" parent="." index="0"]
-material = SubResource("ShaderMaterial_vejn8")
-
-[node name="AnimatedSprite" parent="." index="2"]
-material = SubResource("ShaderMaterial_0gb8j")
-sprite_frames = SubResource("SpriteFrames_3poqo")
diff --git a/DungeonShooting_Godot/prefab/role/Role.tscn b/DungeonShooting_Godot/prefab/role/Role.tscn
deleted file mode 100644
index 0b11811..0000000
--- a/DungeonShooting_Godot/prefab/role/Role.tscn
+++ /dev/null
@@ -1,67 +0,0 @@
-[gd_scene load_steps=9 format=3]
-
-[ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="1_hm41b"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_q6jwp"]
-[ext_resource type="Script" path="res://src/game/role/MountRotation.cs" id="4"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_v2kfw"]
-resource_local_to_scene = true
-shader = ExtResource("2_q6jwp")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_yif6x"]
-resource_local_to_scene = true
-shader = ExtResource("2_q6jwp")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="CircleShape2D" id="CircleShape2D_5pj80"]
-radius = 4.0
-
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_1eja2"]
-size = Vector2(10, 15)
-
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_n68nu"]
-size = Vector2(10, 16.5)
-
-[node name="Role" type="Node"]
-script = ExtResource("1_hm41b")
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_v2kfw")
-
-[node name="BackMountPoint" type="Marker2D" parent="."]
-position = Vector2(0, -10)
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_yif6x")
-position = Vector2(0, -12)
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0, -4)
-shape = SubResource("CircleShape2D_5pj80")
-
-[node name="HurtArea" type="Area2D" parent="."]
-collision_layer = 0
-collision_mask = 0
-monitoring = false
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="HurtArea"]
-position = Vector2(0, -7.5)
-shape = SubResource("RectangleShape2D_1eja2")
-
-[node name="InteractiveArea" type="Area2D" parent="."]
-visible = false
-collision_layer = 0
-collision_mask = 4
-monitorable = false
-
-[node name="Collision" type="CollisionShape2D" parent="InteractiveArea"]
-position = Vector2(0, -5)
-shape = SubResource("RectangleShape2D_n68nu")
-
-[node name="MountPoint" type="Marker2D" parent="."]
-position = Vector2(2, -4)
-script = ExtResource("4")
diff --git a/DungeonShooting_Godot/prefab/role/Role0001.tscn b/DungeonShooting_Godot/prefab/role/Role0001.tscn
new file mode 100644
index 0000000..4190ab6
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/role/Role0001.tscn
@@ -0,0 +1,37 @@
+[gd_scene load_steps=7 format=3 uid="uid://cxhrcytrx0kcf"]
+
+[ext_resource type="PackedScene" uid="uid://cyrcv2jdgr8cf" path="res://prefab/role/RoleTemplate.tscn" id="1_10c2n"]
+[ext_resource type="Script" path="res://src/game/role/Player.cs" id="2_7dmp4"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_rk4gg"]
+[ext_resource type="SpriteFrames" uid="uid://n11thtali6es" path="res://resource/spriteFrames/Role0001.tres" id="4_galcc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_lvutq"]
+resource_local_to_scene = true
+shader = ExtResource("3_rk4gg")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_5ok5s"]
+resource_local_to_scene = true
+shader = ExtResource("3_rk4gg")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[node name="Role0001" node_paths=PackedStringArray("HurtArea", "MountPoint", "BackMountPoint", "InteractiveArea", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_10c2n")]
+collision_layer = 8
+script = ExtResource("2_7dmp4")
+HurtArea = NodePath("HurtArea")
+MountPoint = NodePath("MountPoint")
+BackMountPoint = NodePath("BackMountPoint")
+InteractiveArea = NodePath("InteractiveArea")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_lvutq")
+
+[node name="AnimatedSprite" parent="." index="2"]
+material = SubResource("ShaderMaterial_5ok5s")
+sprite_frames = ExtResource("4_galcc")
+frame_progress = 0.0995217
diff --git a/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn b/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn
new file mode 100644
index 0000000..31c3ab7
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn
@@ -0,0 +1,65 @@
+[gd_scene load_steps=8 format=3 uid="uid://cyrcv2jdgr8cf"]
+
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_xk5yk"]
+[ext_resource type="Script" path="res://src/game/role/MountRotation.cs" id="2_5ddpw"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_v2kfw"]
+resource_local_to_scene = true
+shader = ExtResource("1_xk5yk")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_yif6x"]
+resource_local_to_scene = true
+shader = ExtResource("1_xk5yk")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_5pj80"]
+radius = 4.0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_1eja2"]
+size = Vector2(12, 18)
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_n68nu"]
+size = Vector2(10, 16.5)
+
+[node name="RoleTemplate" type="CharacterBody2D"]
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_v2kfw")
+
+[node name="BackMountPoint" type="Marker2D" parent="."]
+position = Vector2(0, -12)
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_yif6x")
+position = Vector2(0, -12)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+position = Vector2(0, -4)
+shape = SubResource("CircleShape2D_5pj80")
+
+[node name="HurtArea" type="Area2D" parent="."]
+collision_layer = 0
+collision_mask = 0
+monitoring = false
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="HurtArea"]
+position = Vector2(0, -9)
+shape = SubResource("RectangleShape2D_1eja2")
+
+[node name="InteractiveArea" type="Area2D" parent="."]
+visible = false
+collision_layer = 0
+collision_mask = 4
+monitorable = false
+
+[node name="Collision" type="CollisionShape2D" parent="InteractiveArea"]
+position = Vector2(0, -5)
+shape = SubResource("RectangleShape2D_n68nu")
+
+[node name="MountPoint" type="Marker2D" parent="."]
+position = Vector2(1, -6)
+script = ExtResource("2_5ddpw")
diff --git a/DungeonShooting_Godot/prefab/shell/Shell0001.tscn b/DungeonShooting_Godot/prefab/shell/Shell0001.tscn
new file mode 100644
index 0000000..1d7c32b
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/shell/Shell0001.tscn
@@ -0,0 +1,33 @@
+[gd_scene load_steps=6 format=3 uid="uid://bj4yr6ru8nhwr"]
+
+[ext_resource type="Script" path="res://src/game/activity/shell/Shell.cs" id="1_2g70c"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_tdny6"]
+[ext_resource type="SpriteFrames" uid="uid://b8gksxl7auquc" path="res://resource/spriteFrames/Shell0001.tres" id="3_ujn5y"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_px12l"]
+resource_local_to_scene = true
+shader = ExtResource("2_tdny6")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_7e6fo"]
+resource_local_to_scene = true
+shader = ExtResource("2_tdny6")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[node name="Shell0001" type="CharacterBody2D" node_paths=PackedStringArray("ShadowSprite", "AnimatedSprite", "Collision")]
+script = ExtResource("1_2g70c")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_px12l")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_7e6fo")
+sprite_frames = ExtResource("3_ujn5y")
+
+[node name="Collision" type="CollisionShape2D" parent="."]
diff --git a/DungeonShooting_Godot/prefab/ui/EditorTools.tscn b/DungeonShooting_Godot/prefab/ui/EditorTools.tscn
index ea25f16..27e37f9 100644
--- a/DungeonShooting_Godot/prefab/ui/EditorTools.tscn
+++ b/DungeonShooting_Godot/prefab/ui/EditorTools.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://kw3o772vpne"]
-[ext_resource type="Script" path="res://src/game/ui/editorTools/EditorToolsPanel.cs" id="1_pav1q"]
+[ext_resource type="Script" path="res://src/game/ui/editorTools/EditorToolsPanel.cs" id="1_43d6l"]
[node name="EditorTools" type="Control"]
layout_mode = 3
@@ -11,7 +11,7 @@
grow_vertical = 2
size_flags_horizontal = 3
size_flags_vertical = 3
-script = ExtResource("1_pav1q")
+script = ExtResource("1_43d6l")
[node name="ScrollContainer" type="ScrollContainer" parent="."]
layout_mode = 0
@@ -107,6 +107,10 @@
[node name="RoomGroupSelect" type="OptionButton" parent="ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
+item_count = 1
+selected = 0
+popup/item_0/text = "testGroup"
+popup/item_0/id = 0
[node name="Label3" type="Label" parent="ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
@@ -114,6 +118,22 @@
[node name="RoomTypeSelect" type="OptionButton" parent="ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
+item_count = 7
+selected = 0
+popup/item_0/text = "battle (战斗房间)"
+popup/item_0/id = 0
+popup/item_1/text = "inlet (起始房间)"
+popup/item_1/id = 1
+popup/item_2/text = "outlet (结束房间)"
+popup/item_2/id = 2
+popup/item_3/text = "boss (boss战房间)"
+popup/item_3/id = 3
+popup/item_4/text = "reward (奖励房间)"
+popup/item_4/id = 4
+popup/item_5/text = "shop (商店房间)"
+popup/item_5/id = 5
+popup/item_6/text = "event (事件房间)"
+popup/item_6/id = 6
[node name="Button" type="Button" parent="ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6"]
layout_mode = 2
@@ -132,6 +152,18 @@
layout_mode = 2
text = "运行"
+[node name="HBoxContainer7" type="HBoxContainer" parent="ScrollContainer/MarginContainer/VBoxContainer"]
+layout_mode = 2
+theme_override_constants/separation = 5
+
+[node name="Label" type="Label" parent="ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7"]
+layout_mode = 2
+text = "导出Excel表"
+
+[node name="Button" type="Button" parent="ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7"]
+layout_mode = 2
+text = "运行"
+
[node name="Confirm" type="ConfirmationDialog" parent="."]
initial_position = 1
size = Vector2i(200, 124)
diff --git a/DungeonShooting_Godot/prefab/ui/Loading.tscn b/DungeonShooting_Godot/prefab/ui/Loading.tscn
new file mode 100644
index 0000000..ba23836
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/Loading.tscn
@@ -0,0 +1,32 @@
+[gd_scene load_steps=2 format=3 uid="uid://da5kqq45ow5am"]
+
+[ext_resource type="Script" path="res://src/game/ui/loading/LoadingPanel.cs" id="1_x0t5x"]
+
+[node name="Loading" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_x0t5x")
+
+[node name="ColorRect" type="ColorRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0.109804, 0.0666667, 0.0901961, 1)
+
+[node name="Label" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+text = "loading..."
+horizontal_alignment = 1
+vertical_alignment = 1
diff --git a/DungeonShooting_Godot/prefab/ui/Main.tscn b/DungeonShooting_Godot/prefab/ui/Main.tscn
new file mode 100644
index 0000000..860fe85
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/Main.tscn
@@ -0,0 +1,81 @@
+[gd_scene load_steps=3 format=3 uid="uid://cd7hl6b2mn5c8"]
+
+[ext_resource type="Script" path="res://src/game/ui/main/MainPanel.cs" id="1_s44xr"]
+[ext_resource type="Theme" uid="uid://drb1ajgvcih7p" path="res://resource/theme/theme1.tres" id="2_bbd6i"]
+
+[node name="Main" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_s44xr")
+
+[node name="Title" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_top = 172.0
+offset_bottom = 405.0
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 160
+text = "Program dungeon"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="ButtonList" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 7
+anchor_left = 0.5
+anchor_top = 1.0
+anchor_right = 0.5
+anchor_bottom = 1.0
+offset_left = -96.0
+offset_top = -641.0
+offset_right = 96.0
+grow_horizontal = 2
+grow_vertical = 0
+alignment = 1
+
+[node name="Start" type="Button" parent="ButtonList"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+focus_neighbor_top = NodePath("../Exit")
+focus_neighbor_bottom = NodePath("../Setting")
+theme = ExtResource("2_bbd6i")
+text = "开始游戏
+"
+
+[node name="Setting" type="Button" parent="ButtonList"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+focus_neighbor_top = NodePath("../Start")
+focus_neighbor_bottom = NodePath("../Exit")
+theme = ExtResource("2_bbd6i")
+theme_override_font_sizes/font_size = 32
+text = "设置"
+
+[node name="Exit" type="Button" parent="ButtonList"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+focus_neighbor_top = NodePath("../Setting")
+focus_neighbor_bottom = NodePath("../Start")
+theme = ExtResource("2_bbd6i")
+text = "退出"
+
+[node name="Version" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = 3
+anchor_left = 1.0
+anchor_top = 1.0
+anchor_right = 1.0
+anchor_bottom = 1.0
+offset_left = -195.0
+offset_top = -53.0
+offset_right = -10.0
+offset_bottom = -1.0
+grow_horizontal = 0
+grow_vertical = 0
+text = "v0.01"
+horizontal_alignment = 2
diff --git a/DungeonShooting_Godot/prefab/ui/RoomUI.tscn b/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
index 22dc29c..8554aa3 100644
--- a/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
+++ b/DungeonShooting_Godot/prefab/ui/RoomUI.tscn
@@ -1,17 +1,17 @@
[gd_scene load_steps=14 format=3 uid="uid://bvpmtfupny8iu"]
-[ext_resource type="Script" path="res://src/game/ui/roomUI/RoomUIPanel.cs" id="1_u48k1"]
-[ext_resource type="Texture2D" uid="uid://k621mhhkg65f" path="res://resource/sprite/ui/mapBar.png" id="2"]
-[ext_resource type="Texture2D" uid="uid://b67i86mtqrn32" path="res://resource/sprite/ui/icon/icon_bullet.png" id="2_004n3"]
-[ext_resource type="Texture2D" uid="uid://dxstii6f4l8m0" path="res://resource/sprite/ui/keyboard/e.png" id="3_ajp3c"]
-[ext_resource type="Texture2D" uid="uid://u5ul7fu8wv1a" path="res://resource/sprite/ui/healthBar.png" id="4"]
-[ext_resource type="Texture2D" uid="uid://cukrx5yyqw86o" path="res://resource/sprite/ui/reloadBar.png" id="4_npp5n"]
-[ext_resource type="Texture2D" uid="uid://xafbhgrxmosy" path="res://resource/sprite/gun/gun4.png" id="5"]
-[ext_resource type="Texture2D" uid="uid://cx3i1nkcc4307" path="res://resource/sprite/ui/reloadBarBlock.png" id="5_t7fdk"]
-[ext_resource type="Texture2D" uid="uid://bxd75tme0v3pb" path="res://resource/sprite/ui/hpBar.png" id="6"]
-[ext_resource type="Texture2D" uid="uid://h25j6uka74tv" path="res://resource/sprite/ui/shieldBar.png" id="7"]
-[ext_resource type="Texture2D" uid="uid://djcdjrs07ighv" path="res://resource/sprite/ui/hpSlot.png" id="8"]
-[ext_resource type="Texture2D" uid="uid://dnpguajopuyd7" path="res://resource/sprite/ui/shieldSlot.png" id="9"]
+[ext_resource type="Script" path="res://src/game/ui/roomUI/RoomUIPanel.cs" id="1_tfcrp"]
+[ext_resource type="Texture2D" uid="uid://b67i86mtqrn32" path="res://resource/sprite/ui/icon/icon_bullet.png" id="2_a2ohq"]
+[ext_resource type="Texture2D" uid="uid://dxstii6f4l8m0" path="res://resource/sprite/ui/keyboard/e.png" id="3_h7n2a"]
+[ext_resource type="Texture2D" uid="uid://cukrx5yyqw86o" path="res://resource/sprite/ui/reloadBar.png" id="4_nt6mj"]
+[ext_resource type="Texture2D" uid="uid://cx3i1nkcc4307" path="res://resource/sprite/ui/reloadBarBlock.png" id="5_wob8d"]
+[ext_resource type="Texture2D" uid="uid://u5ul7fu8wv1a" path="res://resource/sprite/ui/healthBar.png" id="6_e4f48"]
+[ext_resource type="Texture2D" uid="uid://djcdjrs07ighv" path="res://resource/sprite/ui/hpSlot.png" id="7_kk5l8"]
+[ext_resource type="Texture2D" uid="uid://bxd75tme0v3pb" path="res://resource/sprite/ui/hpBar.png" id="8_j85pm"]
+[ext_resource type="Texture2D" uid="uid://dnpguajopuyd7" path="res://resource/sprite/ui/shieldSlot.png" id="9_spw0e"]
+[ext_resource type="Texture2D" uid="uid://h25j6uka74tv" path="res://resource/sprite/ui/shieldBar.png" id="10_8lm6q"]
+[ext_resource type="Texture2D" uid="uid://k621mhhkg65f" path="res://resource/sprite/ui/mapBar.png" id="11_yaqsk"]
+[ext_resource type="Texture2D" uid="uid://xafbhgrxmosy" path="res://resource/sprite/weapon/gun4.png" id="12_o2big"]
[sub_resource type="Gradient" id="1"]
colors = PackedColorArray(0.4, 0.498039, 1, 1, 0.4, 0.498039, 1, 0.313726)
@@ -23,7 +23,8 @@
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-script = ExtResource("1_u48k1")
+mouse_filter = 2
+script = ExtResource("1_tfcrp")
[node name="InteractiveTipBar" type="Node2D" parent="."]
z_index = 10
@@ -32,12 +33,12 @@
[node name="Icon" type="Sprite2D" parent="InteractiveTipBar"]
position = Vector2(0, -25)
-texture = ExtResource("2_004n3")
+texture = ExtResource("2_a2ohq")
[node name="InteractiveIcon" type="Sprite2D" parent="InteractiveTipBar"]
visible = false
position = Vector2(0, -30)
-texture = ExtResource("3_ajp3c")
+texture = ExtResource("3_h7n2a")
[node name="Line2D" type="Line2D" parent="InteractiveTipBar"]
points = PackedVector2Array(0, -17, 0, -15.0938, 0, 0)
@@ -51,10 +52,10 @@
[node name="Slot" type="Sprite2D" parent="ReloadBar"]
position = Vector2(0, -24)
-texture = ExtResource("4_npp5n")
+texture = ExtResource("4_nt6mj")
[node name="Block" type="Sprite2D" parent="ReloadBar/Slot"]
-texture = ExtResource("5_t7fdk")
+texture = ExtResource("5_wob8d")
[node name="Control" type="Control" parent="."]
anchors_preset = 0
@@ -64,13 +65,14 @@
offset_top = 20.0
offset_right = -20.0
offset_bottom = -20.0
+mouse_filter = 2
[node name="HealthBar" type="TextureRect" parent="Control"]
layout_mode = 0
offset_right = 14.0
offset_bottom = 14.0
scale = Vector2(4, 4)
-texture = ExtResource("4")
+texture = ExtResource("6_e4f48")
[node name="HpSlot" type="NinePatchRect" parent="Control/HealthBar"]
layout_mode = 0
@@ -78,7 +80,7 @@
offset_top = 1.0
offset_right = 66.0
offset_bottom = 9.0
-texture = ExtResource("8")
+texture = ExtResource("7_kk5l8")
patch_margin_left = 1
patch_margin_top = 1
patch_margin_right = 2
@@ -90,7 +92,7 @@
offset_top = 2.0
offset_right = 51.0
offset_bottom = 6.0
-texture = ExtResource("6")
+texture = ExtResource("8_j85pm")
expand_mode = 1
[node name="ShieldSlot" type="NinePatchRect" parent="Control/HealthBar"]
@@ -99,7 +101,7 @@
offset_top = 8.0
offset_right = 65.0
offset_bottom = 13.0
-texture = ExtResource("9")
+texture = ExtResource("9_spw0e")
patch_margin_left = 1
patch_margin_top = 1
patch_margin_right = 1
@@ -111,7 +113,7 @@
offset_top = 1.0
offset_right = 51.0
offset_bottom = 4.0
-texture = ExtResource("7")
+texture = ExtResource("10_8lm6q")
expand_mode = 1
[node name="MapBar" type="TextureRect" parent="Control"]
@@ -124,7 +126,7 @@
offset_bottom = 44.0
grow_horizontal = 0
scale = Vector2(4, 4)
-texture = ExtResource("2")
+texture = ExtResource("11_yaqsk")
[node name="GunBar" type="Control" parent="Control"]
anchors_preset = 0
@@ -145,7 +147,8 @@
offset_right = -66.0
offset_bottom = -66.0
scale = Vector2(4, 4)
-texture = ExtResource("5")
+texture = ExtResource("12_o2big")
+stretch_mode = 3
[node name="BulletText" type="Label" parent="Control/GunBar"]
layout_mode = 0
diff --git a/DungeonShooting_Godot/prefab/ui/Settlement.tscn b/DungeonShooting_Godot/prefab/ui/Settlement.tscn
new file mode 100644
index 0000000..a67e040
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/ui/Settlement.tscn
@@ -0,0 +1,63 @@
+[gd_scene load_steps=3 format=3 uid="uid://c8rugox2mbl3v"]
+
+[ext_resource type="Script" path="res://src/game/ui/settlement/SettlementPanel.cs" id="1_ayhkb"]
+[ext_resource type="Theme" uid="uid://drb1ajgvcih7p" path="res://resource/theme/theme1.tres" id="2_63mpy"]
+
+[node name="Settlement" type="Control"]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("1_ayhkb")
+
+[node name="Bg" type="ColorRect" parent="."]
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+color = Color(0, 0, 0, 0.27451)
+
+[node name="Title" type="Label" parent="."]
+layout_mode = 1
+anchors_preset = 10
+anchor_right = 1.0
+offset_top = 268.0
+offset_bottom = 311.0
+grow_horizontal = 2
+theme_override_font_sizes/font_size = 160
+text = "Game Over!"
+horizontal_alignment = 1
+vertical_alignment = 1
+
+[node name="ButtonList" type="VBoxContainer" parent="."]
+layout_mode = 1
+anchors_preset = 7
+anchor_left = 0.5
+anchor_top = 1.0
+anchor_right = 0.5
+anchor_bottom = 1.0
+offset_left = -96.0
+offset_top = -641.0
+offset_right = 96.0
+grow_horizontal = 2
+grow_vertical = 0
+alignment = 1
+
+[node name="Restart" type="Button" parent="ButtonList"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+focus_neighbor_top = NodePath("../ToMenu")
+theme = ExtResource("2_63mpy")
+text = "重新开始
+"
+
+[node name="ToMenu" type="Button" parent="ButtonList"]
+custom_minimum_size = Vector2(0, 50)
+layout_mode = 2
+focus_neighbor_bottom = NodePath("../Restart")
+theme = ExtResource("2_63mpy")
+text = "回到主菜单"
diff --git a/DungeonShooting_Godot/prefab/weapon/Knife.tscn b/DungeonShooting_Godot/prefab/weapon/Knife.tscn
deleted file mode 100644
index c1b92fa..0000000
--- a/DungeonShooting_Godot/prefab/weapon/Knife.tscn
+++ /dev/null
@@ -1,48 +0,0 @@
-[gd_scene load_steps=8 format=3]
-
-[ext_resource type="PackedScene" uid="uid://bcosbsgt7a7o3" path="res://prefab/weapon/Weapon.tscn" id="1_xk7sg"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_vwwhv"]
-[ext_resource type="Texture2D" uid="uid://bxhbsq0wb2yo1" path="res://resource/sprite/gun/knife1.png" id="3_s52oh"]
-[ext_resource type="PackedScene" path="res://prefab/FanCollisionShape.tscn" id="3_wdje6"]
-
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_o5ytq"]
-resource_local_to_scene = true
-shader = ExtResource("2_vwwhv")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_rtliw"]
-resource_local_to_scene = true
-shader = ExtResource("2_vwwhv")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_fbixs"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("3_s52oh")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
-[node name="Knife" instance=ExtResource("1_xk7sg")]
-
-[node name="ShadowSprite" parent="." index="0"]
-material = SubResource("ShaderMaterial_o5ytq")
-
-[node name="AnimatedSprite" parent="." index="1"]
-material = SubResource("ShaderMaterial_rtliw")
-position = Vector2(0, 0)
-sprite_frames = SubResource("SpriteFrames_fbixs")
-
-[node name="HitArea" type="Area2D" parent="." index="4"]
-monitoring = false
-monitorable = false
-
-[node name="FanCollisionShape" parent="HitArea" index="0" instance=ExtResource("3_wdje6")]
-rotation = -1.5708
-scale = Vector2(3, 3)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon.tscn
deleted file mode 100644
index 139fef6..0000000
--- a/DungeonShooting_Godot/prefab/weapon/Weapon.tscn
+++ /dev/null
@@ -1,89 +0,0 @@
-[gd_scene load_steps=9 format=3]
-
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1"]
-[ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="1_dtam7"]
-
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
-resource_local_to_scene = true
-shader = ExtResource("1")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_o36tv"]
-resource_local_to_scene = true
-shader = ExtResource("1")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
-size = Vector2(15.6, 7)
-
-[sub_resource type="Animation" id="Animation_x136i"]
-length = 0.001
-tracks/0/type = "value"
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/keys = {
-"times": PackedFloat32Array(0),
-"transitions": PackedFloat32Array(1),
-"update": 0,
-"values": [0]
-}
-
-[sub_resource type="Animation" id="Animation_3piau"]
-resource_name = "floodlight"
-length = 3.0
-loop_mode = 1
-tracks/0/type = "value"
-tracks/0/imported = false
-tracks/0/enabled = true
-tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
-tracks/0/interp = 1
-tracks/0/loop_wrap = true
-tracks/0/keys = {
-"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3),
-"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
-"update": 0,
-"values": [0, 0, 0.5, 0.5, 0]
-}
-
-[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
-_data = {
-"RESET": SubResource("Animation_x136i"),
-"floodlight": SubResource("Animation_3piau")
-}
-
-[node name="Weapon" type="Node"]
-script = ExtResource("1_dtam7")
-collision_layer = 4
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_cbiyh")
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_o36tv")
-position = Vector2(0.4, -2.6)
-scale = Vector2(0.8, 0.8)
-
-[node name="OriginPoint" type="Marker2D" parent="."]
-position = Vector2(-3.6, -1.1)
-
-[node name="ShellPoint" type="Marker2D" parent="."]
-position = Vector2(-2.6, -2.6)
-
-[node name="FirePoint" type="Marker2D" parent="."]
-position = Vector2(7.4, -1.1)
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(0.6, 0.2)
-shape = SubResource("RectangleShape2D_3p5jk")
-
-[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
-libraries = {
-"": SubResource("AnimationLibrary_trkjd")
-}
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0001.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0001.tscn
new file mode 100644
index 0000000..ef51173
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0001.tscn
@@ -0,0 +1,44 @@
+[gd_scene load_steps=7 format=3 uid="uid://c6etppq4v63xw"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_ykl0r"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="2_t56pk"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_x1q03"]
+[ext_resource type="SpriteFrames" uid="uid://5m0qs7m4er5u" path="res://resource/spriteFrames/Weapon0001.tres" id="4_d5c81"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_5bfqf"]
+resource_local_to_scene = true
+shader = ExtResource("3_x1q03")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_bj7y3"]
+resource_local_to_scene = true
+shader = ExtResource("3_x1q03")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[node name="Weapon0001" node_paths=PackedStringArray("FirePoint", "ShellPoint", "GripPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_ykl0r")]
+script = ExtResource("2_t56pk")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+GripPoint = NodePath("GripPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_5bfqf")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_bj7y3")
+sprite_frames = ExtResource("4_d5c81")
+
+[node name="ShellPoint" parent="AnimatedSprite" index="0"]
+position = Vector2(1.5, -3.5)
+
+[node name="FirePoint" parent="AnimatedSprite" index="1"]
+position = Vector2(15, -2)
+
+[node name="GripPoint" parent="." index="2"]
+position = Vector2(-5, -1)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn
new file mode 100644
index 0000000..543177a
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn
@@ -0,0 +1,95 @@
+[gd_scene load_steps=10 format=3 uid="uid://doj2eilx1xtxf"]
+
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Shotgun.cs" id="1_8kiv4"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_8nvny"]
+[ext_resource type="SpriteFrames" uid="uid://domhmo4flmlt0" path="res://resource/spriteFrames/Weapon0002.tres" id="3_4h3je"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
+resource_local_to_scene = true
+shader = ExtResource("2_8nvny")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o36tv"]
+resource_local_to_scene = true
+shader = ExtResource("2_8nvny")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
+size = Vector2(19.5, 8.75)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0]
+}
+
+[sub_resource type="Animation" id="Animation_3piau"]
+resource_name = "floodlight"
+length = 3.0
+loop_mode = 1
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3),
+"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
+"update": 0,
+"values": [0, 0, 0.5, 0.5, 0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": SubResource("Animation_3piau")
+}
+
+[node name="Weapon0002" type="CharacterBody2D" node_paths=PackedStringArray("FirePoint", "ShellPoint", "GripPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+script = ExtResource("1_8kiv4")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+GripPoint = NodePath("GripPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_cbiyh")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_o36tv")
+sprite_frames = ExtResource("3_4h3je")
+animation = &"equip"
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(-3, -2)
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(12, -2)
+
+[node name="GripPoint" type="Marker2D" parent="."]
+position = Vector2(-10, 1)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_3p5jk")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn
new file mode 100644
index 0000000..a4548d1
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn
@@ -0,0 +1,94 @@
+[gd_scene load_steps=10 format=3 uid="uid://dqy4trli5wcms"]
+
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="1_aeolk"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_4yjnk"]
+[ext_resource type="SpriteFrames" uid="uid://c7dt1uwdybn5" path="res://resource/spriteFrames/Weapon0003.tres" id="3_upkjt"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
+resource_local_to_scene = true
+shader = ExtResource("2_4yjnk")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o36tv"]
+resource_local_to_scene = true
+shader = ExtResource("2_4yjnk")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
+size = Vector2(14, 8)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0]
+}
+
+[sub_resource type="Animation" id="Animation_3piau"]
+resource_name = "floodlight"
+length = 3.0
+loop_mode = 1
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3),
+"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
+"update": 0,
+"values": [0, 0, 0.5, 0.5, 0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": SubResource("Animation_3piau")
+}
+
+[node name="Weapon0003" type="CharacterBody2D" node_paths=PackedStringArray("FirePoint", "ShellPoint", "GripPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+script = ExtResource("1_aeolk")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+GripPoint = NodePath("GripPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_cbiyh")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_o36tv")
+sprite_frames = ExtResource("3_upkjt")
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(0, -3)
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(9, -2)
+
+[node name="GripPoint" type="Marker2D" parent="."]
+position = Vector2(-4, 0)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_3p5jk")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn
new file mode 100644
index 0000000..40556be
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn
@@ -0,0 +1,47 @@
+[gd_scene load_steps=8 format=3 uid="uid://c4kckcisk7opo"]
+
+[ext_resource type="PackedScene" uid="uid://cxltmhhp4rbyk" path="res://prefab/weapon/WeaponTemplate.tscn" id="1_kg172"]
+[ext_resource type="Script" path="res://src/game/activity/weapon/knife/Knife.cs" id="2_v1wer"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="3_63s5g"]
+[ext_resource type="SpriteFrames" uid="uid://k2tktysa7j86" path="res://resource/spriteFrames/Weapon0004.tres" id="4_uymcs"]
+[ext_resource type="PackedScene" path="res://prefab/FanCollisionShape.tscn" id="5_nr15b"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o5ytq"]
+resource_local_to_scene = true
+shader = ExtResource("3_63s5g")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_rtliw"]
+resource_local_to_scene = true
+shader = ExtResource("3_63s5g")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[node name="Weapon0004" node_paths=PackedStringArray("FirePoint", "ShellPoint", "GripPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_kg172")]
+script = ExtResource("2_v1wer")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+GripPoint = NodePath("GripPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" parent="." index="0"]
+material = SubResource("ShaderMaterial_o5ytq")
+
+[node name="AnimatedSprite" parent="." index="1"]
+material = SubResource("ShaderMaterial_rtliw")
+sprite_frames = ExtResource("4_uymcs")
+
+[node name="GripPoint" parent="." index="2"]
+position = Vector2(-12, -1)
+
+[node name="HitArea" type="Area2D" parent="." index="4"]
+monitoring = false
+monitorable = false
+
+[node name="FanCollisionShape" parent="HitArea" index="0" instance=ExtResource("5_nr15b")]
+rotation = -1.5708
+scale = Vector2(3, 3)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn
new file mode 100644
index 0000000..7237343
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn
@@ -0,0 +1,94 @@
+[gd_scene load_steps=10 format=3 uid="uid://cisivapjn5rq2"]
+
+[ext_resource type="Script" path="res://src/game/activity/weapon/gun/Gun.cs" id="1_3lu3r"]
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_466gw"]
+[ext_resource type="SpriteFrames" uid="uid://djdvlmqsn8bie" path="res://resource/spriteFrames/Weapon0005.tres" id="2_m3plc"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
+resource_local_to_scene = true
+shader = ExtResource("1_466gw")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o36tv"]
+resource_local_to_scene = true
+shader = ExtResource("1_466gw")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
+size = Vector2(26, 8)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0]
+}
+
+[sub_resource type="Animation" id="Animation_3piau"]
+resource_name = "floodlight"
+length = 3.0
+loop_mode = 1
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3),
+"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
+"update": 0,
+"values": [0, 0, 0.5, 0.5, 0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": SubResource("Animation_3piau")
+}
+
+[node name="Weapon0005" type="CharacterBody2D" node_paths=PackedStringArray("FirePoint", "ShellPoint", "GripPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision")]
+collision_layer = 4
+script = ExtResource("1_3lu3r")
+FirePoint = NodePath("AnimatedSprite/FirePoint")
+ShellPoint = NodePath("AnimatedSprite/ShellPoint")
+GripPoint = NodePath("GripPoint")
+AnimationPlayer = NodePath("AnimationPlayer")
+ShadowSprite = NodePath("ShadowSprite")
+AnimatedSprite = NodePath("AnimatedSprite")
+Collision = NodePath("Collision")
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_cbiyh")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_o36tv")
+sprite_frames = ExtResource("2_m3plc")
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(-1, -3.5)
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(20, -3.5)
+
+[node name="GripPoint" type="Marker2D" parent="."]
+position = Vector2(-9, 0)
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_3p5jk")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn b/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn
new file mode 100644
index 0000000..6af9687
--- /dev/null
+++ b/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn
@@ -0,0 +1,82 @@
+[gd_scene load_steps=8 format=3 uid="uid://cxltmhhp4rbyk"]
+
+[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_3p8rg"]
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_cbiyh"]
+resource_local_to_scene = true
+shader = ExtResource("1_3p8rg")
+shader_parameter/blend = Color(0, 0, 0, 0.470588)
+shader_parameter/schedule = 1
+
+[sub_resource type="ShaderMaterial" id="ShaderMaterial_o36tv"]
+resource_local_to_scene = true
+shader = ExtResource("1_3p8rg")
+shader_parameter/blend = Color(1, 1, 1, 1)
+shader_parameter/schedule = 0
+
+[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
+size = Vector2(19.5, 8.75)
+
+[sub_resource type="Animation" id="Animation_x136i"]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0),
+"transitions": PackedFloat32Array(1),
+"update": 0,
+"values": [0]
+}
+
+[sub_resource type="Animation" id="Animation_3piau"]
+resource_name = "floodlight"
+length = 3.0
+loop_mode = 1
+tracks/0/type = "value"
+tracks/0/imported = false
+tracks/0/enabled = true
+tracks/0/path = NodePath("AnimatedSprite:material:shader_parameter/schedule")
+tracks/0/interp = 1
+tracks/0/loop_wrap = true
+tracks/0/keys = {
+"times": PackedFloat32Array(0, 2.3, 2.6, 2.7, 3),
+"transitions": PackedFloat32Array(1, 1, 1, 1, 1),
+"update": 0,
+"values": [0, 0, 0.5, 0.5, 0]
+}
+
+[sub_resource type="AnimationLibrary" id="AnimationLibrary_trkjd"]
+_data = {
+"RESET": SubResource("Animation_x136i"),
+"floodlight": SubResource("Animation_3piau")
+}
+
+[node name="WeaponTemplate" type="CharacterBody2D"]
+collision_layer = 4
+
+[node name="ShadowSprite" type="Sprite2D" parent="."]
+z_index = -1
+material = SubResource("ShaderMaterial_cbiyh")
+
+[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
+material = SubResource("ShaderMaterial_o36tv")
+
+[node name="ShellPoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(0, -2)
+
+[node name="FirePoint" type="Marker2D" parent="AnimatedSprite"]
+position = Vector2(10, -2)
+
+[node name="GripPoint" type="Marker2D" parent="."]
+
+[node name="Collision" type="CollisionShape2D" parent="."]
+shape = SubResource("RectangleShape2D_3p5jk")
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+libraries = {
+"": SubResource("AnimationLibrary_trkjd")
+}
diff --git a/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn b/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn
deleted file mode 100644
index e0b78f3..0000000
--- a/DungeonShooting_Godot/prefab/weapon/bullet/Bullet.tscn
+++ /dev/null
@@ -1,64 +0,0 @@
-[gd_scene load_steps=9 format=3]
-
-[ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="1_nwypj"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2"]
-[ext_resource type="Texture2D" uid="uid://bu0b11hiuecxy" path="res://resource/sprite/bullet/bullet.png" id="3"]
-
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_5a4f2"]
-resource_local_to_scene = true
-shader = ExtResource("2")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_o0655"]
-resource_local_to_scene = true
-shader = ExtResource("2")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_5wvmf"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("3")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_c0onq"]
-size = Vector2(44.72, 12)
-
-[sub_resource type="RectangleShape2D" id="RectangleShape2D_lcqb8"]
-size = Vector2(11, 4)
-
-[node name="Bullet" type="Node"]
-script = ExtResource("1_nwypj")
-collision_layer = 2
-collision_mask = 1
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_5a4f2")
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-modulate = Color(1.8, 1.8, 1.8, 1)
-material = SubResource("ShaderMaterial_o0655")
-sprite_frames = SubResource("SpriteFrames_5wvmf")
-
-[node name="CollisionArea" type="Area2D" parent="."]
-visible = false
-collision_layer = 0
-collision_mask = 0
-monitorable = false
-
-[node name="CollisionShape2D" type="CollisionShape2D" parent="CollisionArea"]
-position = Vector2(2.93353, 0)
-scale = Vector2(0.226586, 0.333333)
-shape = SubResource("RectangleShape2D_c0onq")
-
-[node name="Collision" type="CollisionShape2D" parent="."]
-position = Vector2(2.5, 0)
-shape = SubResource("RectangleShape2D_lcqb8")
diff --git a/DungeonShooting_Godot/prefab/weapon/shell/ShellCase.tscn b/DungeonShooting_Godot/prefab/weapon/shell/ShellCase.tscn
deleted file mode 100644
index 48d475e..0000000
--- a/DungeonShooting_Godot/prefab/weapon/shell/ShellCase.tscn
+++ /dev/null
@@ -1,41 +0,0 @@
-[gd_scene load_steps=7 format=3 uid="uid://bj4yr6ru8nhwr"]
-
-[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/shellCase.png" id="1"]
-[ext_resource type="Script" path="res://src/framework/activity/ActivityObjectTemplate.cs" id="1_nmhqm"]
-[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2"]
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_px12l"]
-resource_local_to_scene = true
-shader = ExtResource("2")
-shader_parameter/blend = Color(0, 0, 0, 0.470588)
-shader_parameter/schedule = 1
-
-[sub_resource type="ShaderMaterial" id="ShaderMaterial_7e6fo"]
-resource_local_to_scene = true
-shader = ExtResource("2")
-shader_parameter/blend = Color(1, 1, 1, 1)
-shader_parameter/schedule = 0
-
-[sub_resource type="SpriteFrames" id="SpriteFrames_4huvy"]
-animations = [{
-"frames": [{
-"duration": 1.0,
-"texture": ExtResource("1")
-}],
-"loop": true,
-"name": &"default",
-"speed": 5.0
-}]
-
-[node name="ShellCase" type="Node"]
-script = ExtResource("1_nmhqm")
-
-[node name="ShadowSprite" type="Sprite2D" parent="."]
-z_index = -1
-material = SubResource("ShaderMaterial_px12l")
-
-[node name="AnimatedSprite" type="AnimatedSprite2D" parent="."]
-material = SubResource("ShaderMaterial_7e6fo")
-sprite_frames = SubResource("SpriteFrames_4huvy")
-
-[node name="Collision" type="CollisionShape2D" parent="."]
diff --git a/DungeonShooting_Godot/project.godot b/DungeonShooting_Godot/project.godot
index d16c3b7..601f8cb 100644
--- a/DungeonShooting_Godot/project.godot
+++ b/DungeonShooting_Godot/project.godot
@@ -37,7 +37,6 @@
[gui]
theme/custom="res://resource/theme/mainTheme.tres"
-theme/custom_font="res://resource/font/cn_font_36.tres"
[importer_defaults]
@@ -110,7 +109,7 @@
}
fire={
"deadzone": 0.5,
-"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"pressed":false,"double_click":false,"script":null)
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
move_left={
@@ -145,12 +144,12 @@
}
mouse_roll_up={
"deadzone": 0.5,
-"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"pressed":false,"double_click":false,"script":null)
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":4,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
mouse_roll_down={
"deadzone": 0.5,
-"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"pressed":false,"double_click":false,"script":null)
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":5,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
interactive={
@@ -163,6 +162,16 @@
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":82,"physical_keycode":0,"key_label":0,"unicode":114,"echo":false,"script":null)
]
}
+meleeAttack={
+"deadzone": 0.5,
+"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(34.8, 12.8),"global_position":Vector2(38, 46),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
+]
+}
+roll={
+"deadzone": 0.5,
+"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":32,"physical_keycode":0,"key_label":0,"unicode":0,"echo":false,"script":null)
+]
+}
[layer_names]
@@ -172,6 +181,8 @@
2d_physics/layer_4="player"
2d_physics/layer_5="enemy"
2d_physics/layer_6="affiliation"
+2d_physics/layer_7="onHead"
+2d_physics/layer_8="In hand"
[mono]
diff --git a/DungeonShooting_Godot/resource/config/ActivityObject.json b/DungeonShooting_Godot/resource/config/ActivityObject.json
new file mode 100644
index 0000000..d44e410
--- /dev/null
+++ b/DungeonShooting_Godot/resource/config/ActivityObject.json
@@ -0,0 +1,92 @@
+[
+ {
+ "Id": "role0001",
+ "Type": 3,
+ "Prefab": "res://prefab/role/Role0001.tscn",
+ "Remark": "\u73A9\u5BB6"
+ },
+ {
+ "Id": "enemy0001",
+ "Type": 4,
+ "Prefab": "res://prefab/role/Enemy0001.tscn",
+ "Remark": "\u654C\u4EBA"
+ },
+ {
+ "Id": "weapon0001",
+ "Type": 5,
+ "Prefab": "res://prefab/weapon/Weapon0001.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "weapon0002",
+ "Type": 5,
+ "Prefab": "res://prefab/weapon/Weapon0002.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "weapon0003",
+ "Type": 5,
+ "Prefab": "res://prefab/weapon/Weapon0003.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "weapon0004",
+ "Type": 5,
+ "Prefab": "res://prefab/weapon/Weapon0004.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "weapon0005",
+ "Type": 5,
+ "Prefab": "res://prefab/weapon/Weapon0005.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "bullet0001",
+ "Type": 6,
+ "Prefab": "res://prefab/bullet/Bullet0001.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "bullet0002",
+ "Type": 6,
+ "Prefab": "res://prefab/bullet/Bullet0002.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "shell0001",
+ "Type": 7,
+ "Prefab": "res://prefab/shell/Shell0001.tscn",
+ "Remark": ""
+ },
+ {
+ "Id": "effect0001",
+ "Type": 8,
+ "Prefab": "res://prefab/effect/activityObject/Effect0001.tscn",
+ "Remark": "\u654C\u4EBA\u6B7B\u4EA1\u788E\u7247"
+ },
+ {
+ "Id": "other_door_e",
+ "Type": 9,
+ "Prefab": "res://prefab/map/RoomDoor_E.tscn",
+ "Remark": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u4E1C\u4FA7)"
+ },
+ {
+ "Id": "other_door_w",
+ "Type": 9,
+ "Prefab": "res://prefab/map/RoomDoor_W.tscn",
+ "Remark": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u897F\u4FA7)"
+ },
+ {
+ "Id": "other_door_s",
+ "Type": 9,
+ "Prefab": "res://prefab/map/RoomDoor_S.tscn",
+ "Remark": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u5357\u4FA7)"
+ },
+ {
+ "Id": "other_door_n",
+ "Type": 9,
+ "Prefab": "res://prefab/map/RoomDoor_N.tscn",
+ "Remark": "\u5730\u7262\u623F\u95F4\u7684\u95E8(\u5317\u4FA7)"
+ }
+]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/Sound.json b/DungeonShooting_Godot/resource/config/Sound.json
new file mode 100644
index 0000000..0dd2fff
--- /dev/null
+++ b/DungeonShooting_Godot/resource/config/Sound.json
@@ -0,0 +1,80 @@
+[
+ {
+ "Id": "shooting0001",
+ "Path": "res://resource/sound/sfx/Shooting0001.ogg",
+ "Volume": 1,
+ "Remark": "\u624B\u67AA"
+ },
+ {
+ "Id": "shooting0002",
+ "Path": "res://resource/sound/sfx/Shooting0002.mp3",
+ "Volume": 1,
+ "Remark": "\u6B65\u67AA(\u6D88\u97F3)"
+ },
+ {
+ "Id": "shooting0003",
+ "Path": "res://resource/sound/sfx/Shooting0003.mp3",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA"
+ },
+ {
+ "Id": "reloading0001",
+ "Path": "res://resource/sound/sfx/Reloading0001.mp3",
+ "Volume": 1,
+ "Remark": "\u624B\u67AA"
+ },
+ {
+ "Id": "reloading0002",
+ "Path": "res://resource/sound/sfx/Reloading0002.ogg",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA\u5355\u72EC\u88C5\u5F39"
+ },
+ {
+ "Id": "reloadBegin0002",
+ "Path": "res://resource/sound/sfx/Reloading_begin0002.ogg",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA"
+ },
+ {
+ "Id": "reloadFinish0002",
+ "Path": "res://resource/sound/sfx/Reloading_finish0002.ogg",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA"
+ },
+ {
+ "Id": "equip0001",
+ "Path": "res://resource/sound/sfx/Equip0001.ogg",
+ "Volume": 1,
+ "Remark": ""
+ },
+ {
+ "Id": "equip0002",
+ "Path": "res://resource/sound/sfx/Equip0002.ogg",
+ "Volume": 1,
+ "Remark": ""
+ },
+ {
+ "Id": "equip0003",
+ "Path": "res://resource/sound/sfx/Equip0003.ogg",
+ "Volume": 1,
+ "Remark": ""
+ },
+ {
+ "Id": "equip0004",
+ "Path": "res://resource/sound/sfx/Equip0004.ogg",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA"
+ },
+ {
+ "Id": "equip0005",
+ "Path": "res://resource/sound/sfx/Equip0005.ogg",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA"
+ },
+ {
+ "Id": "equip0006",
+ "Path": "res://resource/sound/sfx/Equip0006.ogg",
+ "Volume": 1,
+ "Remark": "\u9730\u5F39\u67AA"
+ }
+]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/config/Weapon.json b/DungeonShooting_Godot/resource/config/Weapon.json
new file mode 100644
index 0000000..9d5b78e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/config/Weapon.json
@@ -0,0 +1,560 @@
+[
+ {
+ "Id": "0001",
+ "WeaponId": "weapon0001",
+ "Name": "\u6B65\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 40,
+ "WeightType": 2,
+ "ContinuousShoot": true,
+ "AmmoCapacity": 30,
+ "MaxAmmoCapacity": 90,
+ "StandbyAmmoCapacity": 90,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 480,
+ "FinalFiringSpeed": 480,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 10,
+ "FinalScatteringRange": 60,
+ "ScatteringRangeAddValue": 3,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "MinDistance": 300,
+ "MaxDistance": 400,
+ "MinBacklash": 2,
+ "MaxBacklash": 4,
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 10,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0002",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "0002",
+ "AiTargetLockingTime": 0,
+ "AiBulletSpeedScale": 0,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0002",
+ "WeaponId": "",
+ "Name": "\u6B65\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 40,
+ "WeightType": 2,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 30,
+ "MaxAmmoCapacity": 90,
+ "StandbyAmmoCapacity": 30,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 3,
+ "MaxContinuousCount": 3,
+ "TriggerInterval": 3,
+ "StartFiringSpeed": 480,
+ "FinalFiringSpeed": 480,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 30,
+ "FinalScatteringRange": 60,
+ "ScatteringRangeAddValue": 3,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "MinDistance": 300,
+ "MaxDistance": 400,
+ "MinBacklash": 2,
+ "MaxBacklash": 4,
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 10,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0002",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "",
+ "AiTargetLockingTime": 0.5,
+ "AiBulletSpeedScale": 0.7,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0003",
+ "WeaponId": "weapon0002",
+ "Name": "\u9730\u5F39\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 40,
+ "WeightType": 2,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 7,
+ "MaxAmmoCapacity": 42,
+ "StandbyAmmoCapacity": 42,
+ "ReloadTime": 0.4,
+ "AloneReload": true,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0.6,
+ "AloneReloadFinishIntervalTime": 0.6,
+ "AloneReloadCanShoot": true,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 55,
+ "FinalFiringSpeed": 55,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 5,
+ "MaxFireBulletCount": 5,
+ "DelayedTime": 0,
+ "StartScatteringRange": 12,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 20,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "MinDistance": 200,
+ "MaxDistance": 250,
+ "MinBacklash": 5,
+ "MaxBacklash": 6,
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 15,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 2.5,
+ "BulletId": "bullet0002",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0003",
+ "__BeginReloadSound": "reloadBegin0002",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "reloading0002",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "reloadFinish0002",
+ "ReloadFinishSoundAdvanceTime": 0.3,
+ "__EquipSound": "equip0005",
+ "EquipSoundDelayTime": 0.4,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "0004",
+ "AiTargetLockingTime": 0,
+ "AiBulletSpeedScale": 0,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0004",
+ "WeaponId": "",
+ "Name": "\u9730\u5F39\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 40,
+ "WeightType": 2,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 7,
+ "MaxAmmoCapacity": 42,
+ "StandbyAmmoCapacity": 42,
+ "ReloadTime": 0.4,
+ "AloneReload": true,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0.6,
+ "AloneReloadFinishIntervalTime": 0.6,
+ "AloneReloadCanShoot": true,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 3.5,
+ "StartFiringSpeed": 55,
+ "FinalFiringSpeed": 55,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 5,
+ "MaxFireBulletCount": 5,
+ "DelayedTime": 0,
+ "StartScatteringRange": 12,
+ "FinalScatteringRange": 30,
+ "ScatteringRangeAddValue": 20,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "MinDistance": 200,
+ "MaxDistance": 250,
+ "MinBacklash": 5,
+ "MaxBacklash": 6,
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 15,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 2.5,
+ "BulletId": "bullet0002",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0003",
+ "__BeginReloadSound": "reloadBegin0002",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "reloading0002",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "reloadFinish0002",
+ "ReloadFinishSoundAdvanceTime": 0.3,
+ "__EquipSound": "equip0005",
+ "EquipSoundDelayTime": 0.4,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "",
+ "AiTargetLockingTime": 0.4,
+ "AiBulletSpeedScale": 0.7,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0005",
+ "WeaponId": "weapon0003",
+ "Name": "\u624B\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 20,
+ "WeightType": 1,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 12,
+ "MaxAmmoCapacity": 72,
+ "StandbyAmmoCapacity": 72,
+ "ReloadTime": 1.5,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 0.1,
+ "StartFiringSpeed": 300,
+ "FinalFiringSpeed": 300,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 5,
+ "FinalScatteringRange": 60,
+ "ScatteringRangeAddValue": 8,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "MinDistance": 250,
+ "MaxDistance": 300,
+ "MinBacklash": 3,
+ "MaxBacklash": 5,
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0001",
+ "__BeginReloadSound": "reloading0001",
+ "BeginReloadSoundDelayTime": 0.3,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "0006",
+ "AiTargetLockingTime": 0,
+ "AiBulletSpeedScale": 0,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0006",
+ "WeaponId": "",
+ "Name": "\u624B\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 20,
+ "WeightType": 1,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 12,
+ "MaxAmmoCapacity": 72,
+ "StandbyAmmoCapacity": 72,
+ "ReloadTime": 1.5,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 2,
+ "StartFiringSpeed": 300,
+ "FinalFiringSpeed": 300,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 5,
+ "FinalScatteringRange": 60,
+ "ScatteringRangeAddValue": 8,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.5,
+ "MinDistance": 250,
+ "MaxDistance": 300,
+ "MinBacklash": 3,
+ "MaxBacklash": 5,
+ "BacklashRegressionSpeed": 35,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0001",
+ "__BeginReloadSound": "reloading0001",
+ "BeginReloadSoundDelayTime": 0.3,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "",
+ "AiTargetLockingTime": 1,
+ "AiBulletSpeedScale": 0.7,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0007",
+ "WeaponId": "weapon0004",
+ "Name": "\u5200",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 40,
+ "WeightType": 2,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 180,
+ "MaxAmmoCapacity": 180,
+ "StandbyAmmoCapacity": 180,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": true,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 180,
+ "FinalFiringSpeed": 180,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 0,
+ "FinalScatteringRange": 0,
+ "ScatteringRangeAddValue": 0,
+ "ScatteringRangeBackSpeed": 0,
+ "ScatteringRangeBackDelayTime": 0,
+ "MinDistance": 35,
+ "MaxDistance": 35,
+ "MinBacklash": -8,
+ "MaxBacklash": -8,
+ "BacklashRegressionSpeed": 24,
+ "UpliftAngle": -95,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "0008",
+ "AiTargetLockingTime": 0,
+ "AiBulletSpeedScale": 0,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0008",
+ "WeaponId": "",
+ "Name": "\u5200",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 40,
+ "WeightType": 2,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 180,
+ "MaxAmmoCapacity": 180,
+ "StandbyAmmoCapacity": 180,
+ "ReloadTime": 2,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": true,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 3,
+ "StartFiringSpeed": 180,
+ "FinalFiringSpeed": 180,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 0,
+ "FinalScatteringRange": 0,
+ "ScatteringRangeAddValue": 0,
+ "ScatteringRangeBackSpeed": 0,
+ "ScatteringRangeBackDelayTime": 0,
+ "MinDistance": 35,
+ "MaxDistance": 35,
+ "MinBacklash": -8,
+ "MaxBacklash": -8,
+ "BacklashRegressionSpeed": 24,
+ "UpliftAngle": -95,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 1,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 0,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "",
+ "AiTargetLockingTime": 0.7,
+ "AiBulletSpeedScale": 0.7,
+ "AiAmmoConsumptionProbability": 0
+ },
+ {
+ "Id": "0009",
+ "WeaponId": "weapon0005",
+ "Name": "\u72D9\u51FB\u67AA",
+ "Icon": "res://resource/sprite/gun/gun4.png",
+ "Weight": 50,
+ "WeightType": 2,
+ "ContinuousShoot": false,
+ "AmmoCapacity": 10,
+ "MaxAmmoCapacity": 40,
+ "StandbyAmmoCapacity": 40,
+ "ReloadTime": 2.5,
+ "AloneReload": false,
+ "AloneReloadCount": 1,
+ "AloneReloadBeginIntervalTime": 0,
+ "AloneReloadFinishIntervalTime": 0,
+ "AloneReloadCanShoot": false,
+ "LooseShoot": false,
+ "MinChargeTime": 0,
+ "MinContinuousCount": 1,
+ "MaxContinuousCount": 1,
+ "TriggerInterval": 0,
+ "StartFiringSpeed": 45,
+ "FinalFiringSpeed": 45,
+ "FiringSpeedAddSpeed": 0,
+ "FiringSpeedBackSpeed": 0,
+ "MinFireBulletCount": 1,
+ "MaxFireBulletCount": 1,
+ "DelayedTime": 0,
+ "StartScatteringRange": 3,
+ "FinalScatteringRange": 60,
+ "ScatteringRangeAddValue": 40,
+ "ScatteringRangeBackSpeed": 40,
+ "ScatteringRangeBackDelayTime": 0.8,
+ "MinDistance": 700,
+ "MaxDistance": 900,
+ "MinBacklash": 5,
+ "MaxBacklash": 7,
+ "BacklashRegressionSpeed": 20,
+ "UpliftAngle": 20,
+ "DefaultAngle": 0,
+ "UpliftAngleRestore": 3,
+ "BulletId": "bullet0001",
+ "ThrowCollisionSize": {
+ "X": 20,
+ "Y": 15
+ },
+ "__ShootSound": "shooting0003",
+ "__BeginReloadSound": "",
+ "BeginReloadSoundDelayTime": 0,
+ "__ReloadSound": "",
+ "ReloadSoundDelayTime": 1.2,
+ "__ReloadFinishSound": "",
+ "ReloadFinishSoundAdvanceTime": 0,
+ "__EquipSound": "",
+ "EquipSoundDelayTime": 0.7,
+ "__OtherSoundMap": null,
+ "__AiUseAttribute": "",
+ "AiTargetLockingTime": 0.6,
+ "AiBulletSpeedScale": 0.7,
+ "AiAmmoConsumptionProbability": 0
+ }
+]
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/effects/Circle.png b/DungeonShooting_Godot/resource/effects/Circle.png
deleted file mode 100644
index b441812..0000000
--- a/DungeonShooting_Godot/resource/effects/Circle.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/Circle.png.import b/DungeonShooting_Godot/resource/effects/Circle.png.import
deleted file mode 100644
index 0db5db8..0000000
--- a/DungeonShooting_Godot/resource/effects/Circle.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cgptnp74ive4r"
-path="res://.godot/imported/Circle.png-768473019d8d1278c7455b04b18ad833.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/Circle.png"
-dest_files=["res://.godot/imported/Circle.png-768473019d8d1278c7455b04b18ad833.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/Collision.png b/DungeonShooting_Godot/resource/effects/Collision.png
deleted file mode 100644
index f15c822..0000000
--- a/DungeonShooting_Godot/resource/effects/Collision.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/Collision.png.import b/DungeonShooting_Godot/resource/effects/Collision.png.import
deleted file mode 100644
index 0dec77a..0000000
--- a/DungeonShooting_Godot/resource/effects/Collision.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dwa4chrugc6b1"
-path="res://.godot/imported/Collision.png-8020a497389b37f0e87e0893185bc96f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/Collision.png"
-dest_files=["res://.godot/imported/Collision.png-8020a497389b37f0e87e0893185bc96f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/Effect1.png b/DungeonShooting_Godot/resource/effects/Effect1.png
deleted file mode 100644
index 51ef9a9..0000000
--- a/DungeonShooting_Godot/resource/effects/Effect1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/Effect1.png.import b/DungeonShooting_Godot/resource/effects/Effect1.png.import
deleted file mode 100644
index f6bc5d2..0000000
--- a/DungeonShooting_Godot/resource/effects/Effect1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://csud4e6kc3iku"
-path="res://.godot/imported/Effect1.png-277a43c6763fd3e5c0967adefb26bf09.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/Effect1.png"
-dest_files=["res://.godot/imported/Effect1.png-277a43c6763fd3e5c0967adefb26bf09.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/Explosion.png b/DungeonShooting_Godot/resource/effects/Explosion.png
deleted file mode 100644
index dab1f49..0000000
--- a/DungeonShooting_Godot/resource/effects/Explosion.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/Explosion.png.import b/DungeonShooting_Godot/resource/effects/Explosion.png.import
deleted file mode 100644
index 31fef57..0000000
--- a/DungeonShooting_Godot/resource/effects/Explosion.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d8ot2wrdoe4j"
-path="res://.godot/imported/Explosion.png-34699b5100df62b592d53e9982fcc430.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/Explosion.png"
-dest_files=["res://.godot/imported/Explosion.png-34699b5100df62b592d53e9982fcc430.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/Hit.tres b/DungeonShooting_Godot/resource/effects/Hit.tres
deleted file mode 100644
index 7f0238d..0000000
--- a/DungeonShooting_Godot/resource/effects/Hit.tres
+++ /dev/null
@@ -1,15 +0,0 @@
-[gd_resource type="SpriteFrames" load_steps=6 format=2]
-
-[ext_resource path="res://resource/sprite/effect/hit/hit2.png" type="Texture2D" id=1]
-[ext_resource path="res://resource/sprite/effect/hit/hit4.png" type="Texture2D" id=2]
-[ext_resource path="res://resource/sprite/effect/hit/hit0.png" type="Texture2D" id=3]
-[ext_resource path="res://resource/sprite/effect/hit/hit3.png" type="Texture2D" id=4]
-[ext_resource path="res://resource/sprite/effect/hit/hit1.png" type="Texture2D" id=5]
-
-[resource]
-animations = [ {
-"frames": [ ExtResource( 3 ), ExtResource( 5 ), ExtResource( 1 ), ExtResource( 4 ), ExtResource( 2 ) ],
-"loop": true,
-"name": "default",
-"speed": 20.0
-} ]
diff --git a/DungeonShooting_Godot/resource/effects/KnifeHit1.tres b/DungeonShooting_Godot/resource/effects/KnifeHit1.tres
deleted file mode 100644
index a7588d2..0000000
--- a/DungeonShooting_Godot/resource/effects/KnifeHit1.tres
+++ /dev/null
@@ -1,35 +0,0 @@
-[gd_resource type="SpriteFrames" load_steps=8 format=2]
-
-[ext_resource path="res://resource/sprite/effect/KnifeHit1.png" type="Texture2D" id=1]
-
-[sub_resource type="AtlasTexture" id=1]
-atlas = ExtResource( 1 )
-region = Rect2( 0, 0, 64, 68 )
-
-[sub_resource type="AtlasTexture" id=2]
-atlas = ExtResource( 1 )
-region = Rect2( 64, 0, 64, 68 )
-
-[sub_resource type="AtlasTexture" id=3]
-atlas = ExtResource( 1 )
-region = Rect2( 128, 0, 64, 68 )
-
-[sub_resource type="AtlasTexture" id=4]
-atlas = ExtResource( 1 )
-region = Rect2( 192, 0, 64, 68 )
-
-[sub_resource type="AtlasTexture" id=5]
-atlas = ExtResource( 1 )
-region = Rect2( 256, 0, 64, 68 )
-
-[sub_resource type="AtlasTexture" id=6]
-atlas = ExtResource( 1 )
-region = Rect2( 320, 0, 64, 68 )
-
-[resource]
-animations = [ {
-"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ],
-"loop": true,
-"name": "default",
-"speed": 30.0
-} ]
diff --git a/DungeonShooting_Godot/resource/effects/ShotFire.png b/DungeonShooting_Godot/resource/effects/ShotFire.png
deleted file mode 100644
index 5c6d63a..0000000
--- a/DungeonShooting_Godot/resource/effects/ShotFire.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/ShotFire.png.import b/DungeonShooting_Godot/resource/effects/ShotFire.png.import
deleted file mode 100644
index 96e4f04..0000000
--- a/DungeonShooting_Godot/resource/effects/ShotFire.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b0jsyrbk4bydt"
-path="res://.godot/imported/ShotFire.png-452ffba8f1f5c13a9f6807c93e5409e0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/ShotFire.png"
-dest_files=["res://.godot/imported/ShotFire.png-452ffba8f1f5c13a9f6807c93e5409e0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/Smoke.png b/DungeonShooting_Godot/resource/effects/Smoke.png
deleted file mode 100644
index f358c57..0000000
--- a/DungeonShooting_Godot/resource/effects/Smoke.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/Smoke.png.import b/DungeonShooting_Godot/resource/effects/Smoke.png.import
deleted file mode 100644
index c62f456..0000000
--- a/DungeonShooting_Godot/resource/effects/Smoke.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://h7hkgbwj1li"
-path="res://.godot/imported/Smoke.png-7f6cb73c1414481cc8ba911eefd55a69.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/Smoke.png"
-dest_files=["res://.godot/imported/Smoke.png-7f6cb73c1414481cc8ba911eefd55a69.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/activityObject/Enemy0001_Debris.png b/DungeonShooting_Godot/resource/effects/activityObject/Enemy0001_Debris.png
deleted file mode 100644
index 1c4d212..0000000
--- a/DungeonShooting_Godot/resource/effects/activityObject/Enemy0001_Debris.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/activityObject/Enemy0001_Debris.png.import b/DungeonShooting_Godot/resource/effects/activityObject/Enemy0001_Debris.png.import
deleted file mode 100644
index a522847..0000000
--- a/DungeonShooting_Godot/resource/effects/activityObject/Enemy0001_Debris.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d2f55lu60x64i"
-path="res://.godot/imported/Enemy0001_Debris.png-acec55b336255e10e72d7cc4a1ba1163.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/activityObject/Enemy0001_Debris.png"
-dest_files=["res://.godot/imported/Enemy0001_Debris.png-acec55b336255e10e72d7cc4a1ba1163.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/effects/debug_arrows.png b/DungeonShooting_Godot/resource/effects/debug_arrows.png
deleted file mode 100644
index a92ff48..0000000
--- a/DungeonShooting_Godot/resource/effects/debug_arrows.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/effects/debug_arrows.png.import b/DungeonShooting_Godot/resource/effects/debug_arrows.png.import
deleted file mode 100644
index 3399c2b..0000000
--- a/DungeonShooting_Godot/resource/effects/debug_arrows.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bv0i11jk5te5u"
-path="res://.godot/imported/debug_arrows.png-de39def0e104ff1cb28ee09cfa7420c8.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/effects/debug_arrows.png"
-dest_files=["res://.godot/imported/debug_arrows.png-de39def0e104ff1cb28ee09cfa7420c8.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/font/DinkieBitmap-7pxDemo.ttf b/DungeonShooting_Godot/resource/font/DinkieBitmap-7pxDemo.ttf
new file mode 100644
index 0000000..55cbdf8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/DinkieBitmap-7pxDemo.ttf
Binary files differ
diff --git a/DungeonShooting_Godot/resource/font/DinkieBitmap-7pxDemo.ttf.import b/DungeonShooting_Godot/resource/font/DinkieBitmap-7pxDemo.ttf.import
new file mode 100644
index 0000000..2d42770
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/DinkieBitmap-7pxDemo.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://c6ro3d4a83wcm"
+path="res://.godot/imported/DinkieBitmap-7pxDemo.ttf-6bafb17be9ea4a6ad6662aafec72411d.fontdata"
+
+[deps]
+
+source_file="res://resource/font/DinkieBitmap-7pxDemo.ttf"
+dest_files=["res://.godot/imported/DinkieBitmap-7pxDemo.ttf-6bafb17be9ea4a6ad6662aafec72411d.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxDemo.ttf b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxDemo.ttf
new file mode 100644
index 0000000..aedb541
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxDemo.ttf
Binary files differ
diff --git a/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxDemo.ttf.import b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxDemo.ttf.import
new file mode 100644
index 0000000..71a2d7e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxDemo.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://xxfml3spcbee"
+path="res://.godot/imported/DinkieBitmap-9pxDemo.ttf-15ad6b126041d3ee0dea32e690612521.fontdata"
+
+[deps]
+
+source_file="res://resource/font/DinkieBitmap-9pxDemo.ttf"
+dest_files=["res://.godot/imported/DinkieBitmap-9pxDemo.ttf-15ad6b126041d3ee0dea32e690612521.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxItalicDemo.ttf b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxItalicDemo.ttf
new file mode 100644
index 0000000..e7675bb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxItalicDemo.ttf
Binary files differ
diff --git a/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxItalicDemo.ttf.import b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxItalicDemo.ttf.import
new file mode 100644
index 0000000..36f4326
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/DinkieBitmap-9pxItalicDemo.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://lqhvyvsai0w8"
+path="res://.godot/imported/DinkieBitmap-9pxItalicDemo.ttf-24f0ecfb4d0dfb2b13392a341f4c8e14.fontdata"
+
+[deps]
+
+source_file="res://resource/font/DinkieBitmap-9pxItalicDemo.ttf"
+dest_files=["res://.godot/imported/DinkieBitmap-9pxItalicDemo.ttf-24f0ecfb4d0dfb2b13392a341f4c8e14.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/DungeonShooting_Godot/resource/font/VonwaonBitmap-12px.ttf b/DungeonShooting_Godot/resource/font/VonwaonBitmap-12px.ttf
new file mode 100644
index 0000000..d337c4d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/VonwaonBitmap-12px.ttf
Binary files differ
diff --git a/DungeonShooting_Godot/resource/font/VonwaonBitmap-12px.ttf.import b/DungeonShooting_Godot/resource/font/VonwaonBitmap-12px.ttf.import
new file mode 100644
index 0000000..5bf5d21
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/VonwaonBitmap-12px.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://c7pjgpbp28igq"
+path="res://.godot/imported/VonwaonBitmap-12px.ttf-f0c6f7ea0d11709c60f005cec9d12691.fontdata"
+
+[deps]
+
+source_file="res://resource/font/VonwaonBitmap-12px.ttf"
+dest_files=["res://.godot/imported/VonwaonBitmap-12px.ttf-f0c6f7ea0d11709c60f005cec9d12691.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/DungeonShooting_Godot/resource/font/VonwaonBitmap-16px.ttf b/DungeonShooting_Godot/resource/font/VonwaonBitmap-16px.ttf
new file mode 100644
index 0000000..a956053
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/VonwaonBitmap-16px.ttf
Binary files differ
diff --git a/DungeonShooting_Godot/resource/font/VonwaonBitmap-16px.ttf.import b/DungeonShooting_Godot/resource/font/VonwaonBitmap-16px.ttf.import
new file mode 100644
index 0000000..4c35ce8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/font/VonwaonBitmap-16px.ttf.import
@@ -0,0 +1,33 @@
+[remap]
+
+importer="font_data_dynamic"
+type="FontFile"
+uid="uid://cad0in7dtweo5"
+path="res://.godot/imported/VonwaonBitmap-16px.ttf-45ba1c29e0693eadade28feaced5d034.fontdata"
+
+[deps]
+
+source_file="res://resource/font/VonwaonBitmap-16px.ttf"
+dest_files=["res://.godot/imported/VonwaonBitmap-16px.ttf-45ba1c29e0693eadade28feaced5d034.fontdata"]
+
+[params]
+
+Rendering=null
+antialiasing=1
+generate_mipmaps=false
+multichannel_signed_distance_field=false
+msdf_pixel_range=8
+msdf_size=48
+allow_system_fallback=true
+force_autohinter=false
+hinting=1
+subpixel_positioning=1
+oversampling=0.0
+Fallbacks=null
+fallbacks=[]
+Compress=null
+compress=true
+preload=[]
+language_support={}
+script_support={}
+opentype_features={}
diff --git a/DungeonShooting_Godot/resource/font/cn_font_12.tres b/DungeonShooting_Godot/resource/font/cn_font_12.tres
deleted file mode 100644
index df37088..0000000
--- a/DungeonShooting_Godot/resource/font/cn_font_12.tres
+++ /dev/null
@@ -1,9 +0,0 @@
-[gd_resource type="FontFile" load_steps=2 format=2]
-
-[ext_resource path="res://Silver.ttf" type="FontFile" id=1]
-
-[resource]
-size = 12
-extra_spacing_top = -2
-extra_spacing_bottom = -2
-font_data = ExtResource( 1 )
diff --git a/DungeonShooting_Godot/resource/font/cn_font_18.tres b/DungeonShooting_Godot/resource/font/cn_font_18.tres
deleted file mode 100644
index 8b55445..0000000
--- a/DungeonShooting_Godot/resource/font/cn_font_18.tres
+++ /dev/null
@@ -1,7 +0,0 @@
-[gd_resource type="FontFile" load_steps=2 format=2]
-
-[ext_resource path="res://Silver.ttf" type="FontFile" id=1]
-
-[resource]
-size = 18
-font_data = ExtResource( 1 )
diff --git a/DungeonShooting_Godot/resource/font/cn_font_36.tres b/DungeonShooting_Godot/resource/font/cn_font_36.tres
deleted file mode 100644
index c7f99f1..0000000
--- a/DungeonShooting_Godot/resource/font/cn_font_36.tres
+++ /dev/null
@@ -1,7 +0,0 @@
-[gd_resource type="FontFile" load_steps=2 format=2]
-
-[ext_resource path="res://Silver.ttf" type="FontFile" id=1]
-
-[resource]
-size = 36
-font_data = ExtResource( 1 )
diff --git a/DungeonShooting_Godot/resource/map/RoomConfig.json b/DungeonShooting_Godot/resource/map/RoomConfig.json
index 79c87cc..db72572 100644
--- a/DungeonShooting_Godot/resource/map/RoomConfig.json
+++ b/DungeonShooting_Godot/resource/map/RoomConfig.json
@@ -23,7 +23,12 @@
"ConfigPath": "res://resource/map/tiledata/testGroup/outlet/Room1.json"
}
],
- "BossList": [],
+ "BossList": [
+ {
+ "ScenePath": "res://resource/map/tileMaps/testGroup/boss/Room1.tscn",
+ "ConfigPath": "res://resource/map/tiledata/testGroup/boss/Room1.json"
+ }
+ ],
"RewardList": [],
"ShopList": [],
"EventList": []
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/battle/Room1.tscn b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/battle/Room1.tscn
index 5e87d4a..0c61620 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/battle/Room1.tscn
+++ b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/battle/Room1.tscn
@@ -48,7 +48,7 @@
BirthRect = Vector2i(50, 50)
[node name="EnemyMark3" type="Node2D" parent="."]
-position = Vector2(117, 74)
+position = Vector2(126, 77)
script = ExtResource("3_68nmn")
Type = 4
ItemExpression = "0001"
@@ -108,7 +108,7 @@
Altitude = 0
[node name="EnemyMark7" type="Node2D" parent="."]
-position = Vector2(3, 75)
+position = Vector2(11, 80)
script = ExtResource("3_68nmn")
Type = 4
ItemExpression = "0001"
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/boss/Room1.tscn b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/boss/Room1.tscn
new file mode 100644
index 0000000..3ce4628
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/boss/Room1.tscn
@@ -0,0 +1,59 @@
+[gd_scene load_steps=4 format=3 uid="uid://bm1820vfwqf52"]
+
+[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="1_k0vyv"]
+[ext_resource type="Script" path="res://src/framework/map/mark/EnemyMark.cs" id="3_enrje"]
+[ext_resource type="Script" path="res://src/framework/map/DungeonRoomTemplate.cs" id="dungeonRoomTemplate"]
+
+[node name="Room1" type="TileMap"]
+tile_set = ExtResource("1_k0vyv")
+format = 2
+layer_0/tile_data = PackedInt32Array(1114144, 0, 8, 1048608, 0, 8, 983072, 0, 8, 917536, 0, 8, 852000, 0, 8, 786464, 0, 8, 720928, 0, 8, 655392, 0, 8, 589856, 0, 8, 524320, 0, 8, 458784, 0, 8, 393248, 0, 8, 327712, 0, 8, 262176, 0, 8, 196640, 0, 8, 131104, 0, 8, 65568, 0, 8, 32, 0, 8, -65504, 0, 8, -131040, 0, 8, -196576, 0, 8, -262112, 0, 8, -327648, 0, 8, 1114143, 0, 8, 1048607, 0, 8, 983071, 0, 8, 917535, 0, 8, 851999, 0, 8, 786463, 0, 8, 720927, 0, 8, 655391, 0, 8, 589855, 0, 8, 524319, 0, 8, 458783, 0, 8, 393247, 0, 8, 327711, 0, 8, 262175, 0, 8, 196639, 0, 8, 131103, 0, 8, 65567, 0, 8, 31, 0, 8, -65505, 0, 8, -131041, 0, 8, -196577, 0, 8, -262113, 0, 8, -327649, 0, 8, 1114142, 0, 8, 1048606, 0, 8, 983070, 0, 8, 917534, 0, 8, 851998, 0, 8, 786462, 0, 8, 720926, 0, 8, 655390, 0, 8, 589854, 0, 8, 524318, 0, 8, 458782, 0, 8, 393246, 0, 8, 327710, 0, 8, 262174, 0, 8, 196638, 0, 8, 131102, 0, 8, 65566, 0, 8, 30, 0, 8, -65506, 0, 8, -131042, 0, 8, -196578, 0, 8, -262114, 0, 8, -327650, 0, 8, 1114141, 0, 8, 1048605, 0, 8, 983069, 0, 8, 917533, 0, 8, 851997, 0, 8, 786461, 0, 8, 720925, 0, 8, 655389, 0, 8, 589853, 0, 8, 524317, 0, 8, 458781, 0, 8, 393245, 0, 8, 327709, 0, 8, 262173, 0, 8, 196637, 0, 8, 131101, 0, 8, 65565, 0, 8, 29, 0, 8, -65507, 0, 8, -131043, 0, 8, -196579, 0, 8, -262115, 0, 8, -327651, 0, 8, 1114140, 0, 8, 1048604, 0, 8, 983068, 0, 8, 917532, 0, 8, 851996, 0, 8, 786460, 0, 8, 720924, 0, 8, 655388, 0, 8, 589852, 0, 8, 524316, 0, 8, 458780, 0, 8, 393244, 0, 8, 327708, 0, 8, 262172, 0, 8, 196636, 0, 8, 131100, 0, 8, 65564, 0, 8, 28, 0, 8, -65508, 0, 8, -131044, 0, 8, -196580, 0, 8, -262116, 0, 8, -327652, 0, 8, 1114139, 0, 8, 1048603, 0, 8, 983067, 0, 8, 917531, 0, 8, 851995, 0, 8, 786459, 0, 8, 720923, 0, 8, 655387, 0, 8, 589851, 0, 8, 524315, 0, 8, 458779, 0, 8, 393243, 0, 8, 327707, 0, 8, 262171, 0, 8, 196635, 0, 8, 131099, 0, 8, 65563, 0, 8, 27, 0, 8, -65509, 0, 8, -131045, 0, 8, -196581, 0, 8, -262117, 0, 8, -327653, 0, 8, 1114138, 0, 8, 1048602, 0, 8, 983066, 0, 8, 917530, 0, 8, 851994, 0, 8, 786458, 0, 8, 720922, 0, 8, 655386, 0, 8, 589850, 0, 8, 524314, 0, 8, 458778, 0, 8, 393242, 0, 8, 327706, 0, 8, 262170, 0, 8, 196634, 0, 8, 131098, 0, 8, 65562, 0, 8, 26, 0, 8, -65510, 0, 8, -131046, 0, 8, -196582, 0, 8, -262118, 0, 8, -327654, 0, 8, 1114137, 0, 8, 1048601, 0, 8, 983065, 0, 8, 917529, 0, 8, 851993, 0, 8, 786457, 0, 8, 720921, 0, 8, 655385, 0, 8, 589849, 0, 8, 524313, 0, 8, 458777, 0, 8, 393241, 0, 8, 327705, 0, 8, 262169, 0, 8, 196633, 0, 8, 131097, 0, 8, 65561, 0, 8, 25, 0, 8, -65511, 0, 8, -131047, 0, 8, -196583, 0, 8, -262119, 0, 8, -327655, 0, 8, 1114136, 0, 8, 1048600, 0, 8, 983064, 0, 8, 917528, 0, 8, 851992, 0, 8, 786456, 0, 8, 720920, 0, 8, 655384, 0, 8, 589848, 0, 8, 524312, 0, 8, 458776, 0, 8, 393240, 0, 8, 327704, 0, 8, 262168, 0, 8, 196632, 0, 8, 131096, 0, 8, 65560, 0, 8, 24, 0, 8, -65512, 0, 8, -131048, 0, 8, -196584, 0, 8, -262120, 0, 8, -327656, 0, 8, 1114135, 0, 8, 1048599, 0, 8, 983063, 0, 8, 917527, 0, 8, 851991, 0, 8, 786455, 0, 8, 720919, 0, 8, 655383, 0, 8, 589847, 0, 8, 524311, 0, 8, 458775, 0, 8, 393239, 0, 8, 327703, 0, 8, 262167, 0, 8, 196631, 0, 8, 131095, 0, 8, 65559, 0, 8, 23, 0, 8, -65513, 0, 8, -131049, 0, 8, -196585, 0, 8, -262121, 0, 8, -327657, 0, 8, 1114134, 0, 8, 1048598, 0, 8, 983062, 0, 8, 917526, 0, 8, 851990, 0, 8, 786454, 0, 8, 720918, 0, 8, 655382, 0, 8, 589846, 0, 8, 524310, 0, 8, 458774, 0, 8, 393238, 0, 8, 327702, 0, 8, 262166, 0, 8, 196630, 0, 8, 131094, 0, 8, 65558, 0, 8, 22, 0, 8, -65514, 0, 8, -131050, 0, 8, -196586, 0, 8, -262122, 0, 8, -327658, 0, 8, 1114133, 0, 8, 1048597, 0, 8, 983061, 0, 8, 917525, 0, 8, 851989, 0, 8, 786453, 0, 8, 720917, 0, 8, 655381, 0, 8, 589845, 0, 8, 524309, 0, 8, 458773, 0, 8, 393237, 0, 8, 327701, 0, 8, 262165, 0, 8, 196629, 0, 8, 131093, 0, 8, 65557, 0, 8, 21, 0, 8, -65515, 0, 8, -131051, 0, 8, -196587, 0, 8, -262123, 0, 8, -327659, 0, 8, 1114132, 0, 8, 1048596, 0, 8, 983060, 0, 8, 917524, 0, 8, 851988, 0, 8, 786452, 0, 8, 720916, 0, 8, 655380, 0, 8, 589844, 0, 8, 524308, 0, 8, 196628, 0, 8, 131092, 0, 8, 65556, 0, 8, 20, 0, 8, -65516, 0, 8, -131052, 0, 8, -196588, 0, 8, -262124, 0, 8, -327660, 0, 8, 1114131, 0, 8, 1048595, 0, 8, 983059, 0, 8, 917523, 0, 8, 851987, 0, 8, 786451, 0, 8, 720915, 0, 8, 655379, 0, 8, 589843, 0, 8, 524307, 0, 8, 196627, 0, 8, 131091, 0, 8, 65555, 0, 8, 19, 0, 8, -65517, 0, 8, -131053, 0, 8, -196589, 0, 8, -262125, 0, 8, -327661, 0, 8, 1114130, 0, 8, 1048594, 0, 8, 983058, 0, 8, 917522, 0, 8, 851986, 0, 8, 786450, 0, 8, 720914, 0, 8, 655378, 0, 8, 589842, 0, 8, 524306, 0, 8, 196626, 0, 8, 131090, 0, 8, 65554, 0, 8, 18, 0, 8, -65518, 0, 8, -131054, 0, 8, -196590, 0, 8, -262126, 0, 8, -327662, 0, 8, 1114129, 0, 8, 1048593, 0, 8, 983057, 0, 8, 917521, 0, 8, 851985, 0, 8, 786449, 0, 8, 720913, 0, 8, 655377, 0, 8, 589841, 0, 8, 524305, 0, 8, 196625, 0, 8, 131089, 0, 8, 65553, 0, 8, 17, 0, 8, -65519, 0, 8, -131055, 0, 8, -196591, 0, 8, -262127, 0, 8, -327663, 0, 8, 1114128, 0, 8, 1048592, 0, 8, 983056, 0, 8, 917520, 0, 8, 851984, 0, 8, 786448, 0, 8, -65520, 0, 8, -131056, 0, 8, -196592, 0, 8, -262128, 0, 8, -327664, 0, 8, 1114127, 0, 8, 1048591, 0, 8, 983055, 0, 8, 917519, 0, 8, 851983, 0, 8, 786447, 0, 8, -65521, 0, 8, -131057, 0, 8, -196593, 0, 8, -262129, 0, 8, -327665, 0, 8, 1114126, 0, 8, 1048590, 0, 8, 983054, 0, 8, 917518, 0, 8, 851982, 0, 8, 786446, 0, 8, -65522, 0, 8, -131058, 0, 8, -196594, 0, 8, -262130, 0, 8, -327666, 0, 8, 1114125, 0, 8, 1048589, 0, 8, 983053, 0, 8, 917517, 0, 8, 851981, 0, 8, 786445, 0, 8, -65523, 0, 8, -131059, 0, 8, -196595, 0, 8, -262131, 0, 8, -327667, 0, 8, 1114124, 0, 8, 1048588, 0, 8, 983052, 0, 8, 917516, 0, 8, 851980, 0, 8, 786444, 0, 8, 720908, 0, 8, 655372, 0, 8, 589836, 0, 8, 524300, 0, 8, 196620, 0, 8, 131084, 0, 8, 65548, 0, 8, 12, 0, 8, -65524, 0, 8, -131060, 0, 8, -196596, 0, 8, -262132, 0, 8, -327668, 0, 8, 1114123, 0, 8, 1048587, 0, 8, 983051, 0, 8, 917515, 0, 8, 851979, 0, 8, 786443, 0, 8, 720907, 0, 8, 655371, 0, 8, 589835, 0, 8, 524299, 0, 8, 196619, 0, 8, 131083, 0, 8, 65547, 0, 8, 11, 0, 8, -65525, 0, 8, -131061, 0, 8, -196597, 0, 8, -262133, 0, 8, -327669, 0, 8, 1114122, 0, 8, 1048586, 0, 8, 983050, 0, 8, 917514, 0, 8, 851978, 0, 8, 786442, 0, 8, 720906, 0, 8, 655370, 0, 8, 589834, 0, 8, 524298, 0, 8, 196618, 0, 8, 131082, 0, 8, 65546, 0, 8, 10, 0, 8, -65526, 0, 8, -131062, 0, 8, -196598, 0, 8, -262134, 0, 8, -327670, 0, 8, 1114121, 0, 8, 1048585, 0, 8, 983049, 0, 8, 917513, 0, 8, 851977, 0, 8, 786441, 0, 8, 720905, 0, 8, 655369, 0, 8, 589833, 0, 8, 524297, 0, 8, 196617, 0, 8, 131081, 0, 8, 65545, 0, 8, 9, 0, 8, -65527, 0, 8, -131063, 0, 8, -196599, 0, 8, -262135, 0, 8, -327671, 0, 8, 1114120, 0, 8, 1048584, 0, 8, 983048, 0, 8, 917512, 0, 8, 851976, 0, 8, 786440, 0, 8, 720904, 0, 8, 655368, 0, 8, 589832, 0, 8, 524296, 0, 8, 458760, 0, 8, 393224, 0, 8, 327688, 0, 8, 262152, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, -65528, 0, 8, -131064, 0, 8, -196600, 0, 8, -262136, 0, 8, -327672, 0, 8, 1114119, 0, 8, 1048583, 0, 8, 983047, 0, 8, 917511, 0, 8, 851975, 0, 8, 786439, 0, 8, 720903, 0, 8, 655367, 0, 8, 589831, 0, 8, 524295, 0, 8, 458759, 0, 8, 393223, 0, 8, 327687, 0, 8, 262151, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, -65529, 0, 8, -131065, 0, 8, -196601, 0, 8, -262137, 0, 8, -327673, 0, 8, 1114118, 0, 8, 1048582, 0, 8, 983046, 0, 8, 917510, 0, 8, 851974, 0, 8, 786438, 0, 8, 720902, 0, 8, 655366, 0, 8, 589830, 0, 8, 524294, 0, 8, 458758, 0, 8, 393222, 0, 8, 327686, 0, 8, 262150, 0, 8, 196614, 0, 8, 131078, 0, 8, 65542, 0, 8, 6, 0, 8, -65530, 0, 8, -131066, 0, 8, -196602, 0, 8, -262138, 0, 8, -327674, 0, 8, 1114117, 0, 8, 1048581, 0, 8, 983045, 0, 8, 917509, 0, 8, 851973, 0, 8, 786437, 0, 8, 720901, 0, 8, 655365, 0, 8, 589829, 0, 8, 524293, 0, 8, 458757, 0, 8, 393221, 0, 8, 327685, 0, 8, 262149, 0, 8, 196613, 0, 8, 131077, 0, 8, 65541, 0, 8, 5, 0, 8, -65531, 0, 8, -131067, 0, 8, -196603, 0, 8, -262139, 0, 8, -327675, 0, 8, 1114116, 0, 8, 1048580, 0, 8, 983044, 0, 8, 917508, 0, 8, 851972, 0, 8, 786436, 0, 8, 720900, 0, 8, 655364, 0, 8, 589828, 0, 8, 524292, 0, 8, 458756, 0, 8, 393220, 0, 8, 327684, 0, 8, 262148, 0, 8, 196612, 0, 8, 131076, 0, 8, 65540, 0, 8, 4, 0, 8, -65532, 0, 8, -131068, 0, 8, -196604, 0, 8, -262140, 0, 8, -327676, 0, 8, 1114115, 0, 8, 1048579, 0, 8, 983043, 0, 8, 917507, 0, 8, 851971, 0, 8, 786435, 0, 8, 720899, 0, 8, 655363, 0, 8, 589827, 0, 8, 524291, 0, 8, 458755, 0, 8, 393219, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, 65539, 0, 8, 3, 0, 8, -65533, 0, 8, -131069, 0, 8, -196605, 0, 8, -262141, 0, 8, -327677, 0, 8, 1114114, 0, 8, 1048578, 0, 8, 983042, 0, 8, 917506, 0, 8, 851970, 0, 8, 786434, 0, 8, 720898, 0, 8, 655362, 0, 8, 589826, 0, 8, 524290, 0, 8, 458754, 0, 8, 393218, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, 65538, 0, 8, 2, 0, 8, -65534, 0, 8, -131070, 0, 8, -196606, 0, 8, -262142, 0, 8, -327678, 0, 8, 1114113, 0, 8, 1048577, 0, 8, 983041, 0, 8, 917505, 0, 8, 851969, 0, 8, 786433, 0, 8, 720897, 0, 8, 655361, 0, 8, 589825, 0, 8, 524289, 0, 8, 458753, 0, 8, 393217, 0, 8, 327681, 0, 8, 262145, 0, 8, 196609, 0, 8, 131073, 0, 8, 65537, 0, 8, 1, 0, 8, -65535, 0, 8, -131071, 0, 8, -196607, 0, 8, -262143, 0, 8, -327679, 0, 8, 1114112, 0, 8, 1048576, 0, 8, 983040, 0, 8, 917504, 0, 8, 851968, 0, 8, 786432, 0, 8, 720896, 0, 8, 655360, 0, 8, 589824, 0, 8, 524288, 0, 8, 458752, 0, 8, 393216, 0, 8, 327680, 0, 8, 262144, 0, 8, 196608, 0, 8, 131072, 0, 8, 65536, 0, 8, 0, 0, 8, -65536, 0, 8, -131072, 0, 8, -196608, 0, 8, -262144, 0, 8, -327680, 0, 8, 1179647, 0, 8, 1114111, 0, 8, 1048575, 0, 8, 983039, 0, 8, 917503, 0, 8, 851967, 0, 8, 786431, 0, 8, 720895, 0, 8, 655359, 0, 8, 589823, 0, 8, 524287, 0, 8, 458751, 0, 8, 393215, 0, 8, 327679, 0, 8, 262143, 0, 8, 196607, 0, 8, 131071, 0, 8, 65535, 0, 8, -1, 0, 8, -65537, 0, 8, -131073, 0, 8, -196609, 0, 8, -262145, 0, 8, 1179646, 0, 8, 1114110, 0, 8, 1048574, 0, 8, 983038, 0, 8, 917502, 0, 8, 851966, 0, 8, 786430, 0, 8, 720894, 0, 8, 655358, 0, 8, 589822, 0, 8, 524286, 0, 8, 458750, 0, 8, 393214, 0, 8, 327678, 0, 8, 262142, 0, 8, 196606, 0, 8, 131070, 0, 8, 65534, 0, 8, -2, 0, 8, -65538, 0, 8, -131074, 0, 8, -196610, 0, 8, -262146, 0, 8, 1179645, 0, 8, 1114109, 0, 8, 1048573, 0, 8, 983037, 0, 8, 917501, 0, 8, 851965, 0, 8, 786429, 0, 8, 720893, 0, 8, 655357, 0, 8, 589821, 0, 8, 524285, 0, 8, 458749, 0, 8, 393213, 0, 8, 327677, 0, 8, 262141, 0, 8, 196605, 0, 8, 131069, 0, 8, 65533, 0, 8, -3, 0, 8, -65539, 0, 8, -131075, 0, 8, -196611, 0, 8, -262147, 0, 8, 1179644, 0, 8, 1114108, 0, 8, 1048572, 0, 8, 983036, 0, 8, 917500, 0, 8, 851964, 0, 8, 786428, 0, 8, 720892, 0, 8, 655356, 0, 8, 589820, 0, 8, 524284, 0, 8, 458748, 0, 8, 393212, 0, 8, 327676, 0, 8, 262140, 0, 8, 196604, 0, 8, 131068, 0, 8, 65532, 0, 8, -4, 0, 8, -65540, 0, 8, -131076, 0, 8, -196612, 0, 8, -262148, 0, 8, -196613, 196608, 3, -262149, 196608, 3, -327685, 196608, 4, -327684, 131072, 7, -327683, 131072, 7, -131077, 196608, 3, -65541, 196608, 3, -5, 196608, 3, 65531, 196608, 3, 131067, 196608, 3, 196603, 196608, 3, 262139, 196608, 3, 327675, 196608, 3, 393211, 196608, 3, 458747, 196608, 3, 524283, 196608, 3, 589819, 196608, 3, 655355, 196608, 3, 720891, 196608, 3, 786427, 196608, 3, 851963, 196608, 3, 917499, 196608, 3, 983035, 196608, 3, 1048571, 196608, 3, 1114107, 196608, 3, 1179643, 196608, 3, 1245181, 131072, 2, 1245180, 131072, 2, 1245179, 720896, 2, -327682, 131072, 7, 1245182, 131072, 2, -327681, 131072, 7, 1245183, 131072, 2, -393216, 131072, 7, 1179648, 131072, 2, -393215, 131072, 7, 1179649, 131072, 2, -393214, 131072, 7, 1179650, 131072, 2, -393213, 131072, 7, 1179651, 131072, 2, -393212, 131072, 7, 1179652, 131072, 2, -393211, 131072, 7, 1179653, 131072, 2, -393210, 131072, 7, 1179654, 131072, 2, -393209, 131072, 7, 1179655, 131072, 2, -393208, 131072, 7, 1179656, 131072, 2, -393207, 131072, 7, 1179657, 131072, 2, -393206, 131072, 7, 1179658, 131072, 2, -393205, 131072, 7, 1179659, 131072, 2, -393204, 131072, 7, 1179660, 131072, 2, -393203, 131072, 7, 1179661, 131072, 2, -393202, 131072, 7, 1179662, 131072, 2, -393201, 131072, 7, 1179663, 131072, 2, -393200, 131072, 7, 1179664, 131072, 2, -393199, 131072, 7, 1179665, 131072, 2, -393198, 131072, 7, 1179666, 131072, 2, -393197, 131072, 7, 1179667, 131072, 2, -393196, 131072, 7, 1179668, 131072, 2, -393195, 131072, 7, 1179669, 131072, 2, -393194, 131072, 7, 1179670, 131072, 2, -393193, 131072, 7, 1179671, 131072, 2, -393192, 131072, 7, 1179672, 131072, 2, -393191, 131072, 7, 1179673, 131072, 2, -393190, 131072, 7, 1179674, 131072, 2, -393189, 131072, 7, 1179675, 131072, 2, -393188, 131072, 7, 1179676, 131072, 2, -393187, 131072, 7, 1179677, 131072, 2, -393186, 131072, 7, 1179678, 131072, 2, -393185, 131072, 7, 1179679, 131072, 2, -393184, 131072, 7, 1179680, 131072, 2, -327647, 65536, 3, -262111, 65536, 3, -393183, 65536, 4, -196575, 65536, 3, -131039, 65536, 3, -65503, 65536, 3, 33, 65536, 3, 65569, 65536, 3, 131105, 65536, 3, 196641, 65536, 3, 262177, 65536, 3, 327713, 65536, 3, 393249, 65536, 3, 458785, 65536, 3, 524321, 65536, 3, 589857, 65536, 3, 655393, 65536, 3, 720929, 65536, 3, 786465, 65536, 3, 852001, 65536, 3, 917537, 65536, 3, 983073, 65536, 3, 1048609, 65536, 3, 1114145, 65536, 3, 1179681, 851968, 2, 196621, 65536, 3, 524301, 65536, 3, 262155, 131072, 2, 458763, 131072, 7, 262162, 131072, 2, 65552, 196608, 3, 16, 196608, 2, 131088, 196608, 3, 196624, 196608, 3, 262161, 131072, 2, 262160, 720896, 2, 262163, 131072, 2, 262164, 196608, 2, 13, 65536, 2, 14, 131072, 2, 15, 131072, 2, 262153, 65536, 2, 262154, 131072, 2, 262156, 131072, 2, 65549, 65536, 3, 131085, 65536, 3, 262157, 851968, 2, 327689, 65536, 3, 393225, 65536, 3, 458761, 65536, 7, 458762, 131072, 7, 458764, 131072, 7, 589837, 65536, 3, 458765, 65536, 4, 655373, 65536, 3, 720909, 65536, 7, 720910, 131072, 7, 720911, 131072, 7, 720912, 196608, 7, 589840, 196608, 3, 524304, 196608, 3, 458768, 196608, 4, 458769, 131072, 7, 458770, 131072, 7, 655376, 196608, 3, 458771, 131072, 7, 458772, 196608, 7, 327700, 196608, 3, 393236, 196608, 3)
+script = ExtResource("dungeonRoomTemplate")
+
+[node name="EnemyMark" type="Node2D" parent="."]
+position = Vector2(152, 15)
+script = ExtResource("3_enrje")
+Weapon1Id = "0001(ResidueAmmo:30,CurrAmmon:10)"
+Weapon2Id = "null;
+0003(ResidueAmmo:12,CurrAmmon:12)"
+Type = 4
+ItemExpression = "0001;
+null"
+Layer = 1
+Altitude = 0
+
+[node name="EnemyMark2" type="Node2D" parent="."]
+position = Vector2(148, 175)
+script = ExtResource("3_enrje")
+Weapon1Id = "0001(ResidueAmmo:30,CurrAmmon:10)"
+Weapon2Id = "null;
+0003(ResidueAmmo:12,CurrAmmon:12)"
+Type = 4
+ItemExpression = "0001;
+null"
+Layer = 1
+Altitude = 0
+
+[node name="EnemyMark3" type="Node2D" parent="."]
+position = Vector2(317, 171)
+script = ExtResource("3_enrje")
+Weapon1Id = "0001(ResidueAmmo:30,CurrAmmon:10)"
+Weapon2Id = "null;
+0003(ResidueAmmo:12,CurrAmmon:12)"
+Type = 4
+ItemExpression = "0001;
+null"
+Layer = 1
+Altitude = 0
+
+[node name="EnemyMark4" type="Node2D" parent="."]
+position = Vector2(321, 22)
+script = ExtResource("3_enrje")
+Weapon1Id = "0001(ResidueAmmo:30,CurrAmmon:10)"
+Weapon2Id = "null;
+0003(ResidueAmmo:12,CurrAmmon:12)"
+Type = 4
+ItemExpression = "0001;
+null"
+Layer = 1
+Altitude = 0
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn
index 5c2022c..7d14d13 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn
+++ b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn
@@ -1,44 +1,45 @@
[gd_scene load_steps=4 format=3 uid="uid://dmeb88jotqro6"]
-[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="1_gh7sf"]
-[ext_resource type="Script" path="res://src/framework/map/mark/ActivityMark.cs" id="3_pf56w"]
-[ext_resource type="Script" path="res://src/framework/map/DungeonRoomTemplate.cs" id="dungeonRoomTemplate"]
+[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="1_osa3n"]
+[ext_resource type="Script" path="res://src/framework/map/DungeonRoomTemplate.cs" id="2_erhdx"]
+[ext_resource type="Script" path="res://src/framework/map/mark/ActivityMark.cs" id="3_m4jrh"]
[node name="Room1" type="TileMap"]
-tile_set = ExtResource("1_gh7sf")
+tile_set = ExtResource("1_osa3n")
format = 2
layer_0/tile_data = PackedInt32Array(327689, 0, 8, 262153, 0, 8, 196617, 0, 8, 131081, 0, 8, 65545, 0, 8, 9, 0, 8, 327688, 0, 8, 262152, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, 327687, 0, 8, 262151, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, 327686, 0, 8, 262150, 0, 8, 196614, 0, 8, 131078, 0, 8, 65542, 0, 8, 6, 0, 8, 327685, 0, 8, 262149, 0, 8, 196613, 0, 8, 131077, 0, 8, 65541, 0, 8, 5, 0, 8, 327684, 0, 8, 262148, 0, 8, 196612, 0, 8, 131076, 0, 8, 65540, 0, 8, 4, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, 65539, 0, 8, 3, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, 65538, 0, 8, 2, 0, 8, 327681, 0, 8, 262145, 0, 8, 196609, 0, 8, 131073, 0, 8, 65537, 0, 8, 1, 0, 8, 327680, 0, 8, 262144, 0, 8, 196608, 0, 8, 131072, 0, 8, 65536, 0, 8, 0, 0, 8, 131071, 196608, 3, 65535, 196608, 3, -1, 196608, 4, -65536, 131072, 7, -65535, 131072, 7, 196607, 196608, 3, 262143, 196608, 3, 327679, 196608, 3, 393215, 196608, 3, 393217, 131072, 2, 393216, 131072, 2, 458751, 720896, 2, -65534, 131072, 7, 393218, 131072, 2, -65533, 131072, 7, 393219, 131072, 2, -65532, 131072, 7, 393220, 131072, 2, -65531, 131072, 7, 393221, 131072, 2, -65530, 131072, 7, 393222, 131072, 2, -65529, 131072, 7, 393223, 131072, 2, -65528, 131072, 7, 393224, 131072, 2, -65527, 131072, 7, 393225, 131072, 2, 10, 65536, 3, 65546, 65536, 3, -65526, 65536, 4, 131082, 65536, 3, 196618, 65536, 3, 262154, 65536, 3, 327690, 65536, 3, 393226, 851968, 2)
-script = ExtResource("dungeonRoomTemplate")
+script = ExtResource("2_erhdx")
[node name="Player" type="Node2D" parent="."]
position = Vector2(80, 47)
-script = ExtResource("3_pf56w")
+script = ExtResource("3_m4jrh")
Type = 1
Altitude = 0
[node name="ActivityMark" type="Node2D" parent="."]
-position = Vector2(126, 21)
-script = ExtResource("3_pf56w")
+position = Vector2(129, 22)
+script = ExtResource("3_m4jrh")
Type = 5
-ItemExpression = "0002(ResidueAmmo:15,CurrAmmon:0)"
-
-[node name="ActivityMark2" type="Node2D" parent="."]
-position = Vector2(39, 75)
-script = ExtResource("3_pf56w")
-Type = 5
-ItemExpression = "0001(ResidueAmmo:15,CurrAmmon:0)"
+ItemExpression = "0001"
WaveNumber = 2
-[node name="ActivityMark3" type="Node2D" parent="."]
-position = Vector2(128, 74)
-script = ExtResource("3_pf56w")
+[node name="ActivityMark4" type="Node2D" parent="."]
+position = Vector2(129, 68)
+script = ExtResource("3_m4jrh")
Type = 5
-ItemExpression = "0003(ResidueAmmo:12,CurrAmmon:15)"
+ItemExpression = "0002"
+WaveNumber = 2
+
+[node name="ActivityMark2" type="Node2D" parent="."]
+position = Vector2(29, 75)
+script = ExtResource("3_m4jrh")
+Type = 5
+ItemExpression = "0003
+"
WaveNumber = 3
-[node name="ActivityMark4" type="Node2D" parent="."]
-position = Vector2(39, 23)
-script = ExtResource("3_pf56w")
+[node name="ActivityMark3" type="Node2D" parent="."]
+position = Vector2(29, 22)
+script = ExtResource("3_m4jrh")
Type = 5
-ItemExpression = "0004(ResidueAmmo:15,CurrAmmon:0)"
-WaveNumber = 4
+ItemExpression = "0005"
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/outlet/Room1.tscn b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/outlet/Room1.tscn
index 2055eaf..ee24274 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/outlet/Room1.tscn
+++ b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/outlet/Room1.tscn
@@ -6,5 +6,5 @@
[node name="Room1" type="TileMap"]
tile_set = ExtResource("1_fhl21")
format = 2
-layer_0/tile_data = PackedInt32Array(327688, 0, 8, 262152, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, -65528, 0, 8, -131064, 0, 8, -196600, 0, 8, 327687, 0, 8, 262151, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, -65529, 0, 8, -131065, 0, 8, -196601, 0, 8, 327686, 0, 8, 262150, 0, 8, 196614, 0, 8, 131078, 0, 8, 65542, 0, 8, 6, 0, 8, -65530, 0, 8, -131066, 0, 8, -196602, 0, 8, 327685, 0, 8, 262149, 0, 8, 196613, 0, 8, 131077, 0, 8, 65541, 0, 8, 5, 0, 8, -65531, 0, 8, -131067, 0, 8, -196603, 0, 8, 327684, 0, 8, 262148, 0, 8, 196612, 0, 8, 131076, 0, 8, 65540, 0, 8, 4, 0, 8, -65532, 0, 8, -131068, 0, 8, -196604, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, 65539, 0, 8, 3, 0, 8, -65533, 0, 8, -131069, 0, 8, -196605, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, 65538, 0, 8, 2, 0, 8, -65534, 0, 8, -131070, 0, 8, -196606, 0, 8, 327681, 0, 8, 262145, 0, 8, 196609, 0, 8, 131073, 0, 8, 65537, 0, 8, 1, 0, 8, -65535, 0, 8, -131071, 0, 8, -196607, 0, 8, 327680, 0, 8, 262144, 0, 8, 196608, 0, 8, 131072, 0, 8, 65536, 0, 8, 0, 0, 8, -65536, 0, 8, -131072, 0, 8, -196608, 0, 8, 393215, 0, 8, 327679, 0, 8, 262143, 0, 8, 196607, 0, 8, 131071, 0, 8, 65535, 0, 8, -1, 0, 8, -65537, 0, 8, -131073, 0, 8, 393214, 0, 8, 327678, 0, 8, 262142, 0, 8, 196606, 0, 8, 131070, 0, 8, 65534, 0, 8, -2, 0, 8, -65538, 0, 8, -131074, 0, 8, 393213, 0, 8, 327677, 0, 8, 262141, 0, 8, 196605, 0, 8, 131069, 0, 8, 65533, 0, 8, -3, 0, 8, -65539, 0, 8, -131075, 0, 8, -65540, 196608, 3, -131076, 196608, 3, -196612, 196608, 4, -196611, 131072, 7, -196610, 131072, 7, -4, 196608, 3, 65532, 196608, 3, 131068, 196608, 3, 196604, 196608, 3, 262140, 196608, 3, 327676, 196608, 3, 393212, 196608, 3, 458750, 131072, 2, 458749, 131072, 2, 458748, 720896, 2, -196609, 131072, 7, 458751, 131072, 2, -262144, 131072, 7, 393216, 131072, 2, -262143, 131072, 7, 393217, 131072, 2, -262142, 131072, 7, 393218, 131072, 2, -262141, 131072, 7, 393219, 131072, 2, -262140, 131072, 7, 393220, 131072, 2, -262139, 131072, 7, 393221, 131072, 2, -262138, 131072, 7, 393222, 131072, 2, -262137, 131072, 7, 393223, 131072, 2, -262136, 131072, 7, 393224, 131072, 2, -196599, 65536, 3, -131063, 65536, 3, -262135, 65536, 4, -65527, 65536, 3, 9, 65536, 3, 65545, 65536, 3, 131081, 65536, 3, 196617, 65536, 3, 262153, 65536, 3, 327689, 65536, 3, 393225, 851968, 2)
+layer_0/tile_data = PackedInt32Array(327688, 0, 8, 262152, 0, 8, 196616, 0, 8, 131080, 0, 8, 65544, 0, 8, 8, 0, 8, -65528, 0, 8, -131064, 0, 8, -196600, 0, 8, 327687, 0, 8, 262151, 0, 8, 196615, 0, 8, 131079, 0, 8, 65543, 0, 8, 7, 0, 8, -65529, 0, 8, -131065, 0, 8, -196601, 0, 8, 327686, 0, 8, 262150, 0, 8, -65530, 0, 8, -131066, 0, 8, -196602, 0, 8, 327685, 0, 8, 262149, 0, 8, -65531, 0, 8, -131067, 0, 8, -196603, 0, 8, 327684, 0, 8, 262148, 0, 8, 196612, 0, 8, 131076, 0, 8, -65532, 0, 8, -131068, 0, 8, -196604, 0, 8, 327683, 0, 8, 262147, 0, 8, 196611, 0, 8, 131075, 0, 8, -131069, 0, 8, -196605, 0, 8, 327682, 0, 8, 262146, 0, 8, 196610, 0, 8, 131074, 0, 8, -131070, 0, 8, -196606, 0, 8, 327681, 0, 8, 262145, 0, 8, -131071, 0, 8, -196607, 0, 8, 327680, 0, 8, 262144, 0, 8, -131072, 0, 8, -196608, 0, 8, 393215, 0, 8, 327679, 0, 8, 131071, 0, 8, 65535, 0, 8, -1, 0, 8, -65537, 0, 8, -131073, 0, 8, 393214, 0, 8, 327678, 0, 8, 262142, 0, 8, 196606, 0, 8, 131070, 0, 8, 65534, 0, 8, -2, 0, 8, -65538, 0, 8, -131074, 0, 8, 393213, 0, 8, 327677, 0, 8, 262141, 0, 8, 196605, 0, 8, 131069, 0, 8, 65533, 0, 8, -3, 0, 8, -65539, 0, 8, -131075, 0, 8, -65540, 196608, 3, -131076, 196608, 3, -196612, 196608, 4, -196611, 131072, 7, -196610, 131072, 7, -4, 196608, 3, 65532, 196608, 3, 131068, 196608, 3, 196604, 196608, 3, 262140, 196608, 3, 327676, 196608, 3, 393212, 196608, 3, 458750, 0, 8, 458749, 0, 8, 458748, 196608, 3, -196609, 131072, 7, 458751, 0, 8, -262144, 131072, 7, 393216, 0, 8, -262143, 131072, 7, 393217, 0, 8, -262142, 131072, 7, 393218, 0, 8, -262141, 131072, 7, 393219, 0, 8, -262140, 131072, 7, 393220, 0, 8, -262139, 131072, 7, 393221, 0, 8, -262138, 131072, 7, 393222, 0, 8, -262137, 131072, 7, 393223, 0, 8, -262136, 131072, 7, 393224, 0, 8, -196599, 0, 8, -131063, 0, 8, -262135, 131072, 7, -65527, 0, 8, 9, 0, 8, 65545, 0, 8, 131081, 0, 8, 196617, 0, 8, 262153, 0, 8, 327689, 0, 8, 393225, 0, 8, -65533, 0, 8, -65534, 0, 8, -65535, 0, 8, -65536, 0, 8, 1, 131072, 2, 4, 131072, 2, 262143, 0, 8, 196607, 0, 8, 65536, 65536, 3, 131072, 65536, 3, 0, 65536, 2, 196608, 65536, 7, 196609, 196608, 7, 196613, 65536, 7, 196614, 196608, 7, 131073, 196608, 3, 65537, 196608, 4, 65538, 131072, 7, 65539, 131072, 7, 65540, 131072, 7, 131077, 65536, 3, 65541, 65536, 4, 2, 131072, 2, 3, 131072, 2, 5, 131072, 2, 6, 196608, 2, 65542, 196608, 3, 131078, 196608, 3, -196598, 65536, 3, -131062, 65536, 3, -262134, 65536, 4, -65526, 65536, 3, 10, 65536, 3, 65546, 65536, 3, 131082, 65536, 3, 196618, 65536, 3, 262154, 65536, 3, 327690, 65536, 3, 393226, 65536, 3, 524286, 131072, 2, 524285, 131072, 2, 524284, 720896, 2, 524287, 131072, 2, 458752, 131072, 2, 458753, 131072, 2, 458754, 131072, 2, 458755, 131072, 2, 458756, 131072, 2, 458757, 131072, 2, 458758, 131072, 2, 458759, 131072, 2, 458760, 131072, 2, 458761, 131072, 2, 458762, 851968, 2)
script = ExtResource("dungeonRoomTemplate")
diff --git a/DungeonShooting_Godot/resource/map/tiledata/testGroup/boss/Room1.json b/DungeonShooting_Godot/resource/map/tiledata/testGroup/boss/Room1.json
new file mode 100644
index 0000000..d2d0c0e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/map/tiledata/testGroup/boss/Room1.json
@@ -0,0 +1,91 @@
+{
+ "Position": {
+ "X": -5,
+ "Y": -6
+ },
+ "Size": {
+ "X": 39,
+ "Y": 25
+ },
+ "DoorAreaInfos": [],
+ "NavigationList": [
+ {
+ "Type": 0,
+ "Points": [
+ {
+ "X": -56,
+ "Y": -72
+ },
+ {
+ "X": 520,
+ "Y": -72
+ },
+ {
+ "X": 520,
+ "Y": 288
+ },
+ {
+ "X": -56,
+ "Y": 288
+ }
+ ]
+ },
+ {
+ "Type": 1,
+ "Points": [
+ {
+ "X": 200,
+ "Y": 0
+ },
+ {
+ "X": 280,
+ "Y": 0
+ },
+ {
+ "X": 280,
+ "Y": 64
+ },
+ {
+ "X": 344,
+ "Y": 64
+ },
+ {
+ "X": 344,
+ "Y": 136
+ },
+ {
+ "X": 280,
+ "Y": 136
+ },
+ {
+ "X": 280,
+ "Y": 200
+ },
+ {
+ "X": 200,
+ "Y": 200
+ },
+ {
+ "X": 200,
+ "Y": 136
+ },
+ {
+ "X": 136,
+ "Y": 136
+ },
+ {
+ "X": 136,
+ "Y": 64
+ },
+ {
+ "X": 200,
+ "Y": 64
+ }
+ ]
+ }
+ ],
+ "GroupName": "testGroup",
+ "RoomType": 3,
+ "FileName": "Room1",
+ "Weight": 100
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/map/tiledata/testGroup/outlet/Room1.json b/DungeonShooting_Godot/resource/map/tiledata/testGroup/outlet/Room1.json
index fb367d6..d69b1f8 100644
--- a/DungeonShooting_Godot/resource/map/tiledata/testGroup/outlet/Room1.json
+++ b/DungeonShooting_Godot/resource/map/tiledata/testGroup/outlet/Room1.json
@@ -4,8 +4,8 @@
"Y": -4
},
"Size": {
- "X": 14,
- "Y": 11
+ "X": 15,
+ "Y": 12
},
"DoorAreaInfos": [],
"NavigationList": [
@@ -17,16 +17,53 @@
"Y": -40
},
{
- "X": 136,
+ "X": 152,
"Y": -40
},
{
- "X": 136,
- "Y": 88
+ "X": 152,
+ "Y": 112
},
{
"X": -40,
- "Y": 88
+ "Y": 112
+ }
+ ]
+ },
+ {
+ "Type": 1,
+ "Points": [
+ {
+ "X": -8,
+ "Y": 0
+ },
+ {
+ "X": 120,
+ "Y": 0
+ },
+ {
+ "X": 120,
+ "Y": 72
+ },
+ {
+ "X": 72,
+ "Y": 72
+ },
+ {
+ "X": 72,
+ "Y": 40
+ },
+ {
+ "X": 40,
+ "Y": 40
+ },
+ {
+ "X": 40,
+ "Y": 72
+ },
+ {
+ "X": -8,
+ "Y": 72
}
]
}
diff --git a/DungeonShooting_Godot/resource/map/tileset/TileSet1.tres b/DungeonShooting_Godot/resource/map/tileset/TileSet1.tres
index a8fe7bb..5173fe2 100644
--- a/DungeonShooting_Godot/resource/map/tileset/TileSet1.tres
+++ b/DungeonShooting_Godot/resource/map/tileset/TileSet1.tres
@@ -1,9 +1,9 @@
[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://b00g22o1cqhe8"]
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1_uvtye"]
+[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1_e0f3i"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_yvgyd"]
-texture = ExtResource("1_uvtye")
+texture = ExtResource("1_e0f3i")
0:0/0 = 0
0:0/0/physics_layer_0/linear_velocity = Vector2(0, 0)
0:0/0/physics_layer_0/angular_velocity = 0.0
diff --git a/DungeonShooting_Godot/resource/map/tileset/TileSet_old.tres b/DungeonShooting_Godot/resource/map/tileset/TileSet_old.tres
index 8f15fc4..b082db6 100644
--- a/DungeonShooting_Godot/resource/map/tileset/TileSet_old.tres
+++ b/DungeonShooting_Godot/resource/map/tileset/TileSet_old.tres
@@ -1,6 +1,6 @@
[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://bn21mn0gu6jel"]
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1_vqd0o"]
+[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1_vqd0o"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_rkmbu"]
texture = ExtResource("1_vqd0o")
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0001.ogg b/DungeonShooting_Godot/resource/sound/sfx/Equip0001.ogg
new file mode 100644
index 0000000..5921758
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0001.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0001.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Equip0001.ogg.import
new file mode 100644
index 0000000..cb89324
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0001.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://dip1xa8wpxdjo"
+path="res://.godot/imported/Equip0001.ogg-0f060e55a565fb3d05f50f4d89e22394.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Equip0001.ogg"
+dest_files=["res://.godot/imported/Equip0001.ogg-0f060e55a565fb3d05f50f4d89e22394.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0002.ogg b/DungeonShooting_Godot/resource/sound/sfx/Equip0002.ogg
new file mode 100644
index 0000000..69130e6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0002.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0002.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Equip0002.ogg.import
new file mode 100644
index 0000000..cc0121d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0002.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://dkrjt31o0eucf"
+path="res://.godot/imported/Equip0002.ogg-18b2612fbdcea05574238dd2355d78e7.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Equip0002.ogg"
+dest_files=["res://.godot/imported/Equip0002.ogg-18b2612fbdcea05574238dd2355d78e7.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0003.ogg b/DungeonShooting_Godot/resource/sound/sfx/Equip0003.ogg
new file mode 100644
index 0000000..997de27
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0003.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0003.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Equip0003.ogg.import
new file mode 100644
index 0000000..b040c80
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0003.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://djrsm2nwhxcug"
+path="res://.godot/imported/Equip0003.ogg-dae81fb10e5b44c75fe894bbe95f75de.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Equip0003.ogg"
+dest_files=["res://.godot/imported/Equip0003.ogg-dae81fb10e5b44c75fe894bbe95f75de.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0004.ogg b/DungeonShooting_Godot/resource/sound/sfx/Equip0004.ogg
new file mode 100644
index 0000000..5d48d01
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0004.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0004.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Equip0004.ogg.import
new file mode 100644
index 0000000..353e29d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0004.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://lf1ylcyoem5j"
+path="res://.godot/imported/Equip0004.ogg-bde6d107d90fe969a7d4debb6f1f4268.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Equip0004.ogg"
+dest_files=["res://.godot/imported/Equip0004.ogg-bde6d107d90fe969a7d4debb6f1f4268.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0005.ogg b/DungeonShooting_Godot/resource/sound/sfx/Equip0005.ogg
new file mode 100644
index 0000000..8b80080
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0005.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0005.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Equip0005.ogg.import
new file mode 100644
index 0000000..d5f184e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0005.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://cthbancmpyj7"
+path="res://.godot/imported/Equip0005.ogg-3ca997c2676e6c9bd4391911f7d5f68c.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Equip0005.ogg"
+dest_files=["res://.godot/imported/Equip0005.ogg-3ca997c2676e6c9bd4391911f7d5f68c.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0006.ogg b/DungeonShooting_Godot/resource/sound/sfx/Equip0006.ogg
new file mode 100644
index 0000000..d33e2b6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0006.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Equip0006.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Equip0006.ogg.import
new file mode 100644
index 0000000..f77a0ca
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Equip0006.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://b8md3alwndnnd"
+path="res://.godot/imported/Equip0006.ogg-6694e0194fc473d2e74f0f21b8efe115.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Equip0006.ogg"
+dest_files=["res://.godot/imported/Equip0006.ogg-6694e0194fc473d2e74f0f21b8efe115.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Explosion0001.ogg b/DungeonShooting_Godot/resource/sound/sfx/Explosion0001.ogg
new file mode 100644
index 0000000..57a9ec2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Explosion0001.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Explosion0001.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Explosion0001.ogg.import
new file mode 100644
index 0000000..03200cf
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Explosion0001.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://dif1ehqqak60r"
+path="res://.godot/imported/Explosion0001.ogg-3998886713ed22da0f09534afefebbf4.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Explosion0001.ogg"
+dest_files=["res://.godot/imported/Explosion0001.ogg-3998886713ed22da0f09534afefebbf4.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Explosion0002.ogg b/DungeonShooting_Godot/resource/sound/sfx/Explosion0002.ogg
new file mode 100644
index 0000000..31f8f34
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Explosion0002.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Explosion0002.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Explosion0002.ogg.import
new file mode 100644
index 0000000..71af49d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Explosion0002.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://bhesqipwmgvtg"
+path="res://.godot/imported/Explosion0002.ogg-e3e0d2c66b67aa61f8a61877ec95b9be.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Explosion0002.ogg"
+dest_files=["res://.godot/imported/Explosion0002.ogg-e3e0d2c66b67aa61f8a61877ec95b9be.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Explosion0003.ogg b/DungeonShooting_Godot/resource/sound/sfx/Explosion0003.ogg
new file mode 100644
index 0000000..0edc916
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Explosion0003.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Explosion0003.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Explosion0003.ogg.import
new file mode 100644
index 0000000..3429b65
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Explosion0003.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://dbnu0nwcie1oq"
+path="res://.godot/imported/Explosion0003.ogg-2285833a7bd7d651bfa22c9d4e13ccc5.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Explosion0003.ogg"
+dest_files=["res://.godot/imported/Explosion0003.ogg-2285833a7bd7d651bfa22c9d4e13ccc5.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading0001.mp3 b/DungeonShooting_Godot/resource/sound/sfx/Reloading0001.mp3
new file mode 100644
index 0000000..586e772
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading0001.mp3
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading0001.mp3.import b/DungeonShooting_Godot/resource/sound/sfx/Reloading0001.mp3.import
new file mode 100644
index 0000000..0a49000
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading0001.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://cubladp3u8jbj"
+path="res://.godot/imported/Reloading0001.mp3-e0aa400da581f2f6ebdc337714439d82.mp3str"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Reloading0001.mp3"
+dest_files=["res://.godot/imported/Reloading0001.mp3-e0aa400da581f2f6ebdc337714439d82.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0.0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading0002.ogg b/DungeonShooting_Godot/resource/sound/sfx/Reloading0002.ogg
new file mode 100644
index 0000000..6754397
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading0002.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading0002.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Reloading0002.ogg.import
new file mode 100644
index 0000000..60bb83c
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading0002.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://c107t2g7g38l"
+path="res://.godot/imported/Reloading0002.ogg-1b8209757ee63ea95fa23f03c6f3caaa.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Reloading0002.ogg"
+dest_files=["res://.godot/imported/Reloading0002.ogg-1b8209757ee63ea95fa23f03c6f3caaa.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0001.ogg b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0001.ogg
new file mode 100644
index 0000000..801ab54
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0001.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0001.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0001.ogg.import
new file mode 100644
index 0000000..238d7bd
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0001.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://hpyer4baoptl"
+path="res://.godot/imported/Reloading_begin0001.ogg-b3c0c7d63c726e7dfdd556cc41bbecf1.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Reloading_begin0001.ogg"
+dest_files=["res://.godot/imported/Reloading_begin0001.ogg-b3c0c7d63c726e7dfdd556cc41bbecf1.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0002.ogg b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0002.ogg
new file mode 100644
index 0000000..4a62dd2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0002.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0002.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0002.ogg.import
new file mode 100644
index 0000000..87870eb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_begin0002.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://c6ab4vp7bexl7"
+path="res://.godot/imported/Reloading_begin0002.ogg-4b4a29283a1ac5b7a0e46beefca82e64.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Reloading_begin0002.ogg"
+dest_files=["res://.godot/imported/Reloading_begin0002.ogg-4b4a29283a1ac5b7a0e46beefca82e64.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0001.ogg b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0001.ogg
new file mode 100644
index 0000000..7e149a1
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0001.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0001.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0001.ogg.import
new file mode 100644
index 0000000..e31095e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0001.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://cxu23trqe00ij"
+path="res://.godot/imported/Reloading_finish0001.ogg-def829198f233ebe6b00cfbc7e4625f7.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Reloading_finish0001.ogg"
+dest_files=["res://.godot/imported/Reloading_finish0001.ogg-def829198f233ebe6b00cfbc7e4625f7.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0002.ogg b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0002.ogg
new file mode 100644
index 0000000..21fb101
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0002.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0002.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0002.ogg.import
new file mode 100644
index 0000000..39e715a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Reloading_finish0002.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://kcye7mqil5g"
+path="res://.godot/imported/Reloading_finish0002.ogg-d313924afb2617cd2ca2a5073e102977.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Reloading_finish0002.ogg"
+dest_files=["res://.godot/imported/Reloading_finish0002.ogg-d313924afb2617cd2ca2a5073e102977.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Shooting0001.ogg b/DungeonShooting_Godot/resource/sound/sfx/Shooting0001.ogg
new file mode 100644
index 0000000..dca1774
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Shooting0001.ogg
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Shooting0001.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/Shooting0001.ogg.import
new file mode 100644
index 0000000..56e3ced
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Shooting0001.ogg.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="oggvorbisstr"
+type="AudioStreamOggVorbis"
+uid="uid://bnrursvt8gg11"
+path="res://.godot/imported/Shooting0001.ogg-8050fb383c434d15397f2869fd9b4603.oggvorbisstr"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Shooting0001.ogg"
+dest_files=["res://.godot/imported/Shooting0001.ogg-8050fb383c434d15397f2869fd9b4603.oggvorbisstr"]
+
+[params]
+
+loop=false
+loop_offset=0.0
+bpm=0.0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Shooting0002.mp3 b/DungeonShooting_Godot/resource/sound/sfx/Shooting0002.mp3
new file mode 100644
index 0000000..09faa04
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Shooting0002.mp3
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Shooting0002.mp3.import b/DungeonShooting_Godot/resource/sound/sfx/Shooting0002.mp3.import
new file mode 100644
index 0000000..862df18
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Shooting0002.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://ddie4d8go1t8g"
+path="res://.godot/imported/Shooting0002.mp3-2e045b269e2ea080c15811bc4f51f16d.mp3str"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Shooting0002.mp3"
+dest_files=["res://.godot/imported/Shooting0002.mp3-2e045b269e2ea080c15811bc4f51f16d.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0.0
+bpm=0.0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Shooting0003.mp3 b/DungeonShooting_Godot/resource/sound/sfx/Shooting0003.mp3
new file mode 100644
index 0000000..06b18e6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Shooting0003.mp3
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/Shooting0003.mp3.import b/DungeonShooting_Godot/resource/sound/sfx/Shooting0003.mp3.import
new file mode 100644
index 0000000..490e5d3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sound/sfx/Shooting0003.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://j6d3n7f5rf8e"
+path="res://.godot/imported/Shooting0003.mp3-d85c5b09dcaf6f48682b5dc947b8fdd4.mp3str"
+
+[deps]
+
+source_file="res://resource/sound/sfx/Shooting0003.mp3"
+dest_files=["res://.godot/imported/Shooting0003.mp3-d85c5b09dcaf6f48682b5dc947b8fdd4.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet.ogg b/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet.ogg
deleted file mode 100644
index f5a886a..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet.ogg
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet.ogg.import b/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet.ogg.import
deleted file mode 100644
index 0d7e06a..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet.ogg.import
+++ /dev/null
@@ -1,19 +0,0 @@
-[remap]
-
-importer="oggvorbisstr"
-type="AudioStreamOggVorbis"
-uid="uid://bnrursvt8gg11"
-path="res://.godot/imported/ordinaryBullet.ogg-cfe42761de70631705f4e117ce06ad61.oggvorbisstr"
-
-[deps]
-
-source_file="res://resource/sound/sfx/ordinaryBullet.ogg"
-dest_files=["res://.godot/imported/ordinaryBullet.ogg-cfe42761de70631705f4e117ce06ad61.oggvorbisstr"]
-
-[params]
-
-loop=false
-loop_offset=0
-bpm=0
-beat_count=0
-bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet2.mp3 b/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet2.mp3
deleted file mode 100644
index 09faa04..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet2.mp3
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet2.mp3.import b/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet2.mp3.import
deleted file mode 100644
index 43ceb9a..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet2.mp3.import
+++ /dev/null
@@ -1,19 +0,0 @@
-[remap]
-
-importer="mp3"
-type="AudioStreamMP3"
-uid="uid://ddie4d8go1t8g"
-path="res://.godot/imported/ordinaryBullet2.mp3-363566e6f98fe28405c9762713f94f39.mp3str"
-
-[deps]
-
-source_file="res://resource/sound/sfx/ordinaryBullet2.mp3"
-dest_files=["res://.godot/imported/ordinaryBullet2.mp3-363566e6f98fe28405c9762713f94f39.mp3str"]
-
-[params]
-
-loop=false
-loop_offset=0
-bpm=0
-beat_count=0
-bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet3.mp3 b/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet3.mp3
deleted file mode 100644
index 06b18e6..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet3.mp3
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet3.mp3.import b/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet3.mp3.import
deleted file mode 100644
index b20f030..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/ordinaryBullet3.mp3.import
+++ /dev/null
@@ -1,19 +0,0 @@
-[remap]
-
-importer="mp3"
-type="AudioStreamMP3"
-uid="uid://j6d3n7f5rf8e"
-path="res://.godot/imported/ordinaryBullet3.mp3-071f70567ddf76a565a2dbe75703e424.mp3str"
-
-[deps]
-
-source_file="res://resource/sound/sfx/ordinaryBullet3.mp3"
-dest_files=["res://.godot/imported/ordinaryBullet3.mp3-071f70567ddf76a565a2dbe75703e424.mp3str"]
-
-[params]
-
-loop=false
-loop_offset=0
-bpm=0
-beat_count=0
-bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading.mp3 b/DungeonShooting_Godot/resource/sound/sfx/reloading.mp3
deleted file mode 100644
index 586e772..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/reloading.mp3
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sound/sfx/reloading.mp3.import b/DungeonShooting_Godot/resource/sound/sfx/reloading.mp3.import
deleted file mode 100644
index f4a33b4..0000000
--- a/DungeonShooting_Godot/resource/sound/sfx/reloading.mp3.import
+++ /dev/null
@@ -1,19 +0,0 @@
-[remap]
-
-importer="mp3"
-type="AudioStreamMP3"
-uid="uid://cubladp3u8jbj"
-path="res://.godot/imported/reloading.mp3-a718918dc3dc57c0c17a3c31a9e33c3f.mp3str"
-
-[deps]
-
-source_file="res://resource/sound/sfx/reloading.mp3"
-dest_files=["res://.godot/imported/reloading.mp3-a718918dc3dc57c0c17a3c31a9e33c3f.mp3str"]
-
-[params]
-
-loop=false
-loop_offset=0.0
-bpm=0
-beat_count=0
-bar_beats=4
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/bullet3.png b/DungeonShooting_Godot/resource/sprite/bullet/bullet3.png
new file mode 100644
index 0000000..ce0577e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/bullet3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/bullet/bullet3.png.import b/DungeonShooting_Godot/resource/sprite/bullet/bullet3.png.import
new file mode 100644
index 0000000..765caff
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/bullet/bullet3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://ctsvj4y1t538u"
+path="res://.godot/imported/bullet3.png-da66182a32c8e83b9b95206d8e836cf2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/bullet/bullet3.png"
+dest_files=["res://.godot/imported/bullet3.png-da66182a32c8e83b9b95206d8e836cf2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.aseprite b/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.aseprite
deleted file mode 100644
index be780df..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.aseprite
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.png b/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.png
deleted file mode 100644
index 83465d0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.png.import b/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.png.import
deleted file mode 100644
index 144d037..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/KnifeHit1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dx07ta0asnmuw"
-path="res://.godot/imported/KnifeHit1.png-8ec1b83e3e29bcb0e825de1a30fc9c75.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/KnifeHit1.png"
-dest_files=["res://.godot/imported/KnifeHit1.png-8ec1b83e3e29bcb0e825de1a30fc9c75.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/Trajectory.png b/DungeonShooting_Godot/resource/sprite/effect/Trajectory.png
deleted file mode 100644
index f6cd27a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/Trajectory.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/Trajectory.png.import b/DungeonShooting_Godot/resource/sprite/effect/Trajectory.png.import
deleted file mode 100644
index b01aa4e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/Trajectory.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cvcic34xnwmqn"
-path="res://.godot/imported/Trajectory.png-76c08620c3b29f4d728c82f31f8f0bb9.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/Trajectory.png"
-dest_files=["res://.godot/imported/Trajectory.png-76c08620c3b29f4d728c82f31f8f0bb9.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/fire/fire1.aseprite b/DungeonShooting_Godot/resource/sprite/effect/fire/fire1.aseprite
deleted file mode 100644
index 1c47cfe..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/fire/fire1.aseprite
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit0.png b/DungeonShooting_Godot/resource/sprite/effect/hit/hit0.png
deleted file mode 100644
index a4457f0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit0.png.import b/DungeonShooting_Godot/resource/sprite/effect/hit/hit0.png.import
deleted file mode 100644
index b40bcd5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ch8h8mwpeh8oo"
-path="res://.godot/imported/hit0.png-17276b3668c4e0cb4c107848aa290086.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/hit/hit0.png"
-dest_files=["res://.godot/imported/hit0.png-17276b3668c4e0cb4c107848aa290086.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit1.png b/DungeonShooting_Godot/resource/sprite/effect/hit/hit1.png
deleted file mode 100644
index fc1e151..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit1.png.import b/DungeonShooting_Godot/resource/sprite/effect/hit/hit1.png.import
deleted file mode 100644
index 74a206e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ep1s6vsopk4y"
-path="res://.godot/imported/hit1.png-4c89ae30862deb32de3206a28a45db55.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/hit/hit1.png"
-dest_files=["res://.godot/imported/hit1.png-4c89ae30862deb32de3206a28a45db55.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit2.png b/DungeonShooting_Godot/resource/sprite/effect/hit/hit2.png
deleted file mode 100644
index acf1526..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit2.png.import b/DungeonShooting_Godot/resource/sprite/effect/hit/hit2.png.import
deleted file mode 100644
index 0b9f33e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://q8ddt2warhfg"
-path="res://.godot/imported/hit2.png-0d34746142da1b03f2100dd624526a03.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/hit/hit2.png"
-dest_files=["res://.godot/imported/hit2.png-0d34746142da1b03f2100dd624526a03.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit3.png b/DungeonShooting_Godot/resource/sprite/effect/hit/hit3.png
deleted file mode 100644
index 272462c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit3.png.import b/DungeonShooting_Godot/resource/sprite/effect/hit/hit3.png.import
deleted file mode 100644
index e5f9a17..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c01wt1b3h6237"
-path="res://.godot/imported/hit3.png-87522b4136861ca3b16e8936be841355.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/hit/hit3.png"
-dest_files=["res://.godot/imported/hit3.png-87522b4136861ca3b16e8936be841355.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit4.png b/DungeonShooting_Godot/resource/sprite/effect/hit/hit4.png
deleted file mode 100644
index aa1f261..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/hit/hit4.png.import b/DungeonShooting_Godot/resource/sprite/effect/hit/hit4.png.import
deleted file mode 100644
index d847857..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/hit/hit4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://pa5wvjmx2xv6"
-path="res://.godot/imported/hit4.png-7d42c20b94c8395d3b41e4bc03afae84.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/hit/hit4.png"
-dest_files=["res://.godot/imported/hit4.png-7d42c20b94c8395d3b41e4bc03afae84.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_0.png
deleted file mode 100644
index ab11449..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_0.png.import
deleted file mode 100644
index 9856d42..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b5dx2x1tu0wdn"
-path="res://.godot/imported/1_0.png-bb7bd3ed0abf45a046807a3fe058263f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-bb7bd3ed0abf45a046807a3fe058263f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_1.png
deleted file mode 100644
index 27d9bc9..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_1.png.import
deleted file mode 100644
index bcce569..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bwkrastrgbvku"
-path="res://.godot/imported/1_1.png-b6db5c2dd3ecc707d28e3fc576c55857.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-b6db5c2dd3ecc707d28e3fc576c55857.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_10.png
deleted file mode 100644
index 5bf59ac..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_10.png.import
deleted file mode 100644
index 4716c66..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://l0hjyv5ws4gq"
-path="res://.godot/imported/1_10.png-149e16e190aa65abeffe2a9b41ccbefc.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-149e16e190aa65abeffe2a9b41ccbefc.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_11.png
deleted file mode 100644
index c7fd756..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_11.png.import
deleted file mode 100644
index 1627f3e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b3boij7a5nrfw"
-path="res://.godot/imported/1_11.png-ad5256b36571eacb890241a8fc28723c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-ad5256b36571eacb890241a8fc28723c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_12.png
deleted file mode 100644
index a985b72..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_12.png.import
deleted file mode 100644
index 1dbcf1d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dbom3a7wbdfud"
-path="res://.godot/imported/1_12.png-08ec92579b1502d1de6825c3b2d2449b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-08ec92579b1502d1de6825c3b2d2449b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_13.png
deleted file mode 100644
index 8131d26..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_13.png.import
deleted file mode 100644
index 6f1a233..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dvrvgwvq4uwa8"
-path="res://.godot/imported/1_13.png-b2b88924917d2a392736bbf41b66940c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-b2b88924917d2a392736bbf41b66940c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_14.png
deleted file mode 100644
index 428517c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_14.png.import
deleted file mode 100644
index 641beb5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bqf76f5dai3dw"
-path="res://.godot/imported/1_14.png-299a8dec5b87d2e1350324ca28c67ff0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-299a8dec5b87d2e1350324ca28c67ff0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_2.png
deleted file mode 100644
index fb2b237..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_2.png.import
deleted file mode 100644
index 87531fe..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://crfaw6rql22p8"
-path="res://.godot/imported/1_2.png-1291b1f38f06f2bcbfc49f715ea68565.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-1291b1f38f06f2bcbfc49f715ea68565.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_3.png
deleted file mode 100644
index 3f3e0ed..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_3.png.import
deleted file mode 100644
index d451d1b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b86rr5jmo5xio"
-path="res://.godot/imported/1_3.png-5d248fb7559fb49601c32cb56c227041.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-5d248fb7559fb49601c32cb56c227041.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_4.png
deleted file mode 100644
index 7f62d6d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_4.png.import
deleted file mode 100644
index f92f092..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://nbe0vkpr2ey0"
-path="res://.godot/imported/1_4.png-4c3e41450d51944394b15cad895b4f6e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-4c3e41450d51944394b15cad895b4f6e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_5.png
deleted file mode 100644
index 5734be6..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_5.png.import
deleted file mode 100644
index e57b0d7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://boborm6q8sdfa"
-path="res://.godot/imported/1_5.png-3fb68c238fc5236dcb56de5f2c3460a1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-3fb68c238fc5236dcb56de5f2c3460a1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_6.png
deleted file mode 100644
index 6cfb7ca..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_6.png.import
deleted file mode 100644
index 01d3111..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://1br2pjcaat2m"
-path="res://.godot/imported/1_6.png-afb4b08f7a3ff1a94fecd605fb2e5e5a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-afb4b08f7a3ff1a94fecd605fb2e5e5a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_7.png
deleted file mode 100644
index f7e17af..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_7.png.import
deleted file mode 100644
index ca2f445..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ev1baympjcuv"
-path="res://.godot/imported/1_7.png-bde2fd9a2c43bfd2832b9549ee294ad1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-bde2fd9a2c43bfd2832b9549ee294ad1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_8.png
deleted file mode 100644
index dd338cf..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_8.png.import
deleted file mode 100644
index ae7ee36..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://df6kwvaf6t5r1"
-path="res://.godot/imported/1_8.png-f363683713cc3380d31a87ab1e8b0fa0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-f363683713cc3380d31a87ab1e8b0fa0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_9.png
deleted file mode 100644
index 587662c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_9.png.import
deleted file mode 100644
index 590576b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/1/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dbe5kr02u8yqg"
-path="res://.godot/imported/1_9.png-ebab354fa60dd77aeaeef3b64c87e66a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/1/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-ebab354fa60dd77aeaeef3b64c87e66a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_0.png
deleted file mode 100644
index 804cfd5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_0.png.import
deleted file mode 100644
index e42e333..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://doq034gdmcn7u"
-path="res://.godot/imported/1_0.png-cf7c9a690a2b3339f09993e7e0b98f69.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-cf7c9a690a2b3339f09993e7e0b98f69.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_1.png
deleted file mode 100644
index 249d1ad..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_1.png.import
deleted file mode 100644
index ea6057a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://baq3nyrqi0ir2"
-path="res://.godot/imported/1_1.png-056ee531e29ce9911a1100edf8a3e8e6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-056ee531e29ce9911a1100edf8a3e8e6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_10.png
deleted file mode 100644
index faaad98..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_10.png.import
deleted file mode 100644
index b57a5e9..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dbhtp2y4cdpag"
-path="res://.godot/imported/1_10.png-5a6542ed8bd3534ffeba7fc454b20545.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-5a6542ed8bd3534ffeba7fc454b20545.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_11.png
deleted file mode 100644
index fa371e1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_11.png.import
deleted file mode 100644
index 0aadf10..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d0ob4vvrfppnt"
-path="res://.godot/imported/1_11.png-05386ab82314732a85da8747a13a776b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-05386ab82314732a85da8747a13a776b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_12.png
deleted file mode 100644
index 7ed8a33..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_12.png.import
deleted file mode 100644
index c64a861..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://332pqohifj5m"
-path="res://.godot/imported/1_12.png-ee8fe8ed6497c3cc6aec9ee87f269ae7.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-ee8fe8ed6497c3cc6aec9ee87f269ae7.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_13.png
deleted file mode 100644
index 017ad1f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_13.png.import
deleted file mode 100644
index 0b8c098..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b7lfjpk15i8d2"
-path="res://.godot/imported/1_13.png-4e8f3390eb040840f2220e2ae1571d7e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-4e8f3390eb040840f2220e2ae1571d7e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_14.png
deleted file mode 100644
index 8d9a14c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_14.png.import
deleted file mode 100644
index 6c2fd03..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://2dpuqk3k1fd7"
-path="res://.godot/imported/1_14.png-9514b9b893518030c8dd4fc3185880fe.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-9514b9b893518030c8dd4fc3185880fe.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_2.png
deleted file mode 100644
index 4f80121..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_2.png.import
deleted file mode 100644
index 0a0e016..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dmklns4ub257r"
-path="res://.godot/imported/1_2.png-8cc8f6bece2cb40b4c5da06b64df0d3d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-8cc8f6bece2cb40b4c5da06b64df0d3d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_3.png
deleted file mode 100644
index e8cda26..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_3.png.import
deleted file mode 100644
index e153c0a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://urrjam8prl0r"
-path="res://.godot/imported/1_3.png-7599c9f1d973246b2eff3980935b0c58.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-7599c9f1d973246b2eff3980935b0c58.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_4.png
deleted file mode 100644
index 6eb603f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_4.png.import
deleted file mode 100644
index bd94389..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dlt8do3evum6u"
-path="res://.godot/imported/1_4.png-1449ae9c7dd648f95f340f66110e0e32.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-1449ae9c7dd648f95f340f66110e0e32.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_5.png
deleted file mode 100644
index d426b19..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_5.png.import
deleted file mode 100644
index b06ae48..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c0lnl4adymqex"
-path="res://.godot/imported/1_5.png-d9200592719a98fee604cac161be4a44.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-d9200592719a98fee604cac161be4a44.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_6.png
deleted file mode 100644
index 5183766..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_6.png.import
deleted file mode 100644
index d317931..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cw4f7u36q2q2r"
-path="res://.godot/imported/1_6.png-5f21056d41c5c6d31f0e9588b3abddcd.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-5f21056d41c5c6d31f0e9588b3abddcd.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_7.png
deleted file mode 100644
index b0e9a25..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_7.png.import
deleted file mode 100644
index 33407ec..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d4hjbhuh13mi3"
-path="res://.godot/imported/1_7.png-0109ba36532c25a7c6c9f502d3479d1e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-0109ba36532c25a7c6c9f502d3479d1e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_8.png
deleted file mode 100644
index 1f9bb07..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_8.png.import
deleted file mode 100644
index cb6d40f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ce1x3rvk48xku"
-path="res://.godot/imported/1_8.png-759fa2a84f4a4b5dd71ac524f3fad91b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-759fa2a84f4a4b5dd71ac524f3fad91b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_9.png
deleted file mode 100644
index 977db9c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_9.png.import
deleted file mode 100644
index 7d21d57..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/2/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cn28hr34bobu5"
-path="res://.godot/imported/1_9.png-fe12402a453fbef81be104ac38918322.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/2/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-fe12402a453fbef81be104ac38918322.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_0.png
deleted file mode 100644
index 864b850..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_0.png.import
deleted file mode 100644
index 9e6786b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bapttawh2yo2n"
-path="res://.godot/imported/1_0.png-c41d32446e402c901a18a25556c0e3ee.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-c41d32446e402c901a18a25556c0e3ee.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_1.png
deleted file mode 100644
index 274c9c5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_1.png.import
deleted file mode 100644
index e66c0d7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b1jonwkhb5fmo"
-path="res://.godot/imported/1_1.png-654c03cb309a5b5be8b2f38fb453a4b8.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-654c03cb309a5b5be8b2f38fb453a4b8.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_10.png
deleted file mode 100644
index abc194f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_10.png.import
deleted file mode 100644
index 306c935..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bf2rx5lyvp5qd"
-path="res://.godot/imported/1_10.png-bc252ccd1aafafe2ec15a2e0f96735d0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-bc252ccd1aafafe2ec15a2e0f96735d0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_11.png
deleted file mode 100644
index cbce42a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_11.png.import
deleted file mode 100644
index 70c0cdb..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bv1tp2gsjgy4f"
-path="res://.godot/imported/1_11.png-affa1059b1c2784f7670cfc72e68f7de.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-affa1059b1c2784f7670cfc72e68f7de.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_12.png
deleted file mode 100644
index 1e02f4d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_12.png.import
deleted file mode 100644
index 8676e87..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c562ybdv6b71w"
-path="res://.godot/imported/1_12.png-67b55bd7e6488dda9a12bd03240fb150.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-67b55bd7e6488dda9a12bd03240fb150.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_13.png
deleted file mode 100644
index e1747f4..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_13.png.import
deleted file mode 100644
index b57a852..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c5v41tk2opbf5"
-path="res://.godot/imported/1_13.png-c44258464ead9ef1c2c7d4eff0ee930f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-c44258464ead9ef1c2c7d4eff0ee930f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_14.png
deleted file mode 100644
index d8de213..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_14.png.import
deleted file mode 100644
index d6d45dc..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://3uthl1vr2e2o"
-path="res://.godot/imported/1_14.png-77c4e7939eea51cfb5ac09e717fb1b60.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-77c4e7939eea51cfb5ac09e717fb1b60.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_2.png
deleted file mode 100644
index 1558a26..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_2.png.import
deleted file mode 100644
index 5af2b1c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b3jupcbaivrqd"
-path="res://.godot/imported/1_2.png-c50e3d8d5890c6e67ac58c95d0ed6ca8.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-c50e3d8d5890c6e67ac58c95d0ed6ca8.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_3.png
deleted file mode 100644
index 808a5b1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_3.png.import
deleted file mode 100644
index 8bd1c82..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://tuv6rcl3wakp"
-path="res://.godot/imported/1_3.png-5fa5b772cfb46df19dccbdedd406d0cf.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-5fa5b772cfb46df19dccbdedd406d0cf.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_4.png
deleted file mode 100644
index 1c7e850..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_4.png.import
deleted file mode 100644
index e530334..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bhfjxavf503pr"
-path="res://.godot/imported/1_4.png-201af51785f5e73b6c3081b2f122d330.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-201af51785f5e73b6c3081b2f122d330.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_5.png
deleted file mode 100644
index d6945f2..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_5.png.import
deleted file mode 100644
index b3a4ac2..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d2q6n5nqkf7g3"
-path="res://.godot/imported/1_5.png-1e522eaf21b05bc0c20fc57c693e76ff.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-1e522eaf21b05bc0c20fc57c693e76ff.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_6.png
deleted file mode 100644
index 65b8e6a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_6.png.import
deleted file mode 100644
index f07d2a7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://uwg5ml8gf4w7"
-path="res://.godot/imported/1_6.png-ea4417b06659fb449af812923e2b34a1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-ea4417b06659fb449af812923e2b34a1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_7.png
deleted file mode 100644
index 1f3f458..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_7.png.import
deleted file mode 100644
index 0416321..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://4hufvbxlfr18"
-path="res://.godot/imported/1_7.png-d3389092ca9f5992df202f950e12db88.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-d3389092ca9f5992df202f950e12db88.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_8.png
deleted file mode 100644
index c192980..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_8.png.import
deleted file mode 100644
index 9cdb817..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bsj40dku7y2a7"
-path="res://.godot/imported/1_8.png-f0d4275eac3b9570bc26f7350371f6c5.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-f0d4275eac3b9570bc26f7350371f6c5.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_9.png
deleted file mode 100644
index c753f81..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_9.png.import
deleted file mode 100644
index f9d41d6..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/3/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bu1dv3enlf66s"
-path="res://.godot/imported/1_9.png-0d752730bb83f36b95f74becc9093d41.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/3/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-0d752730bb83f36b95f74becc9093d41.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_0.png
deleted file mode 100644
index 3ad1492..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_0.png.import
deleted file mode 100644
index 5d7da8b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bm5iool0xw2j1"
-path="res://.godot/imported/1_0.png-d57482ab70a0082661d5eb7c947e459c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-d57482ab70a0082661d5eb7c947e459c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_1.png
deleted file mode 100644
index b632822..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_1.png.import
deleted file mode 100644
index ac6df33..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dwv6kw3qruvo5"
-path="res://.godot/imported/1_1.png-edde6cd79900adccca4ca3e0957774a4.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-edde6cd79900adccca4ca3e0957774a4.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_10.png
deleted file mode 100644
index 4cbfdaf..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_10.png.import
deleted file mode 100644
index 3b74088..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cjswq21h8a0uc"
-path="res://.godot/imported/1_10.png-26c487c18e5d50a2aadc3caa34fd7b85.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-26c487c18e5d50a2aadc3caa34fd7b85.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_11.png
deleted file mode 100644
index a5a8e61..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_11.png.import
deleted file mode 100644
index 5800982..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b3ormq0jebbkg"
-path="res://.godot/imported/1_11.png-8d1c9c016fb101b78569ed8254d8fdb9.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-8d1c9c016fb101b78569ed8254d8fdb9.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_12.png
deleted file mode 100644
index ac357d3..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_12.png.import
deleted file mode 100644
index 00ec12c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cqmjec0jp6yai"
-path="res://.godot/imported/1_12.png-b4ba9aaf3f36d9226243fb417fbce815.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-b4ba9aaf3f36d9226243fb417fbce815.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_13.png
deleted file mode 100644
index 6d6925f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_13.png.import
deleted file mode 100644
index cb84451..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://f1ta5tu0al2b"
-path="res://.godot/imported/1_13.png-0784098602d3d5efbe55a935fc627c3e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-0784098602d3d5efbe55a935fc627c3e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_14.png
deleted file mode 100644
index 2a21d5d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_14.png.import
deleted file mode 100644
index b99bd53..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bfhl0fx576rr8"
-path="res://.godot/imported/1_14.png-68495b096a09686a14641f2627c06284.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-68495b096a09686a14641f2627c06284.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_2.png
deleted file mode 100644
index 04f12c0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_2.png.import
deleted file mode 100644
index 72e8f49..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://iuh5tqcw871q"
-path="res://.godot/imported/1_2.png-940ede56a192dc2a803f3ee1486d0579.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-940ede56a192dc2a803f3ee1486d0579.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_3.png
deleted file mode 100644
index cd18891..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_3.png.import
deleted file mode 100644
index 758603a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cpim7x8gsv2re"
-path="res://.godot/imported/1_3.png-8e55e61f9b2c51f221f61b25bb14e722.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-8e55e61f9b2c51f221f61b25bb14e722.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_4.png
deleted file mode 100644
index b60141e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_4.png.import
deleted file mode 100644
index b0f7462..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://o77bwamh4giq"
-path="res://.godot/imported/1_4.png-64fb2c568028d558f105fd58975703a7.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-64fb2c568028d558f105fd58975703a7.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_5.png
deleted file mode 100644
index 1e83793..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_5.png.import
deleted file mode 100644
index 058a14d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c030pkchub71x"
-path="res://.godot/imported/1_5.png-377bf84adc25c2d5e51410cd7246e095.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-377bf84adc25c2d5e51410cd7246e095.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_6.png
deleted file mode 100644
index 385d4da..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_6.png.import
deleted file mode 100644
index 980cd9a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b4ed10blftola"
-path="res://.godot/imported/1_6.png-3a010eb996fa34be1506a64fc0f28c6f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-3a010eb996fa34be1506a64fc0f28c6f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_7.png
deleted file mode 100644
index a1712f6..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_7.png.import
deleted file mode 100644
index 3bf43e5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dumbvj047hdrb"
-path="res://.godot/imported/1_7.png-de3602636924764fc2e2278f62031b29.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-de3602636924764fc2e2278f62031b29.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_8.png
deleted file mode 100644
index 3380bf8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_8.png.import
deleted file mode 100644
index 96b185e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://iswx6n20v1qc"
-path="res://.godot/imported/1_8.png-3c7bd19a2038f375c9b156c4660a0b4c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-3c7bd19a2038f375c9b156c4660a0b4c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_9.png
deleted file mode 100644
index 40331e8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_9.png.import
deleted file mode 100644
index b9b7a3f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/4/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cf3d45x0pmqm7"
-path="res://.godot/imported/1_9.png-2ea379b01530ee7facc8441a4396f597.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/4/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-2ea379b01530ee7facc8441a4396f597.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_0.png
deleted file mode 100644
index fc5d408..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_0.png.import
deleted file mode 100644
index b54a577..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dfbu7o8nnk45w"
-path="res://.godot/imported/1_0.png-acdcb092c2a3136ef24b2f66a2bb388b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-acdcb092c2a3136ef24b2f66a2bb388b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_1.png
deleted file mode 100644
index 204f2d1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_1.png.import
deleted file mode 100644
index 0b4da2d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cvnkor87x1vyc"
-path="res://.godot/imported/1_1.png-76de21c2871c1f2c2ba91ba368271413.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-76de21c2871c1f2c2ba91ba368271413.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_10.png
deleted file mode 100644
index 2371b42..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_10.png.import
deleted file mode 100644
index 878ae32..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://8isjke2yvios"
-path="res://.godot/imported/1_10.png-d7c4a2f85b3c9d0ec494290df626378b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-d7c4a2f85b3c9d0ec494290df626378b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_11.png
deleted file mode 100644
index 639e3ca..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_11.png.import
deleted file mode 100644
index 77e67a7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dwckw1hxlryol"
-path="res://.godot/imported/1_11.png-469b78c2733f928df718e47c54d73811.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-469b78c2733f928df718e47c54d73811.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_12.png
deleted file mode 100644
index e1ce3d9..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_12.png.import
deleted file mode 100644
index 08136b9..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c7u10ewkpiuou"
-path="res://.godot/imported/1_12.png-0734650e101cbe38881ba9ef7156cb2d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-0734650e101cbe38881ba9ef7156cb2d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_13.png
deleted file mode 100644
index cf753a0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_13.png.import
deleted file mode 100644
index 7791c37..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bvmr126ck5tqh"
-path="res://.godot/imported/1_13.png-563a9fb2e822927a3601814f1b782431.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-563a9fb2e822927a3601814f1b782431.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_14.png
deleted file mode 100644
index 8528232..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_14.png.import
deleted file mode 100644
index f5127ba..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dd8m5bntu7ps5"
-path="res://.godot/imported/1_14.png-09f40e0a977ee443bbd4ddc40a827508.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-09f40e0a977ee443bbd4ddc40a827508.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_2.png
deleted file mode 100644
index 4ba3de2..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_2.png.import
deleted file mode 100644
index 9fc8916..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bk3yvoi5bvo5l"
-path="res://.godot/imported/1_2.png-d5c86ee4bc07b33af032242bb614e0ba.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-d5c86ee4bc07b33af032242bb614e0ba.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_3.png
deleted file mode 100644
index 4a4d137..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_3.png.import
deleted file mode 100644
index 146b4f8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c3u4xmluektmy"
-path="res://.godot/imported/1_3.png-93eb1b7cba37b2acffd356a9534f9924.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-93eb1b7cba37b2acffd356a9534f9924.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_4.png
deleted file mode 100644
index 5c5d887..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_4.png.import
deleted file mode 100644
index 86bd145..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://llq60qtfy0kg"
-path="res://.godot/imported/1_4.png-80cea0411223113a6d025a5ee6d0df7d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-80cea0411223113a6d025a5ee6d0df7d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_5.png
deleted file mode 100644
index 3c796e9..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_5.png.import
deleted file mode 100644
index 9ae6dca..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bmn33wnrx3g6q"
-path="res://.godot/imported/1_5.png-cf7f664f1244c7d2a9a65e7fcc5466cb.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-cf7f664f1244c7d2a9a65e7fcc5466cb.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_6.png
deleted file mode 100644
index 296976e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_6.png.import
deleted file mode 100644
index f803594..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://44j5k3ggg1p8"
-path="res://.godot/imported/1_6.png-3c5315bf04021a376a86f69a5a84ca74.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-3c5315bf04021a376a86f69a5a84ca74.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_7.png
deleted file mode 100644
index 2d98921..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_7.png.import
deleted file mode 100644
index a40cf1d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bcxjj8tbmcipv"
-path="res://.godot/imported/1_7.png-a28af4a96d4aeed3a68a80ac69f02e9d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-a28af4a96d4aeed3a68a80ac69f02e9d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_8.png
deleted file mode 100644
index e28d302..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_8.png.import
deleted file mode 100644
index 8a9520c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://carkql124mvy8"
-path="res://.godot/imported/1_8.png-bd4e477e0458db360b63faf58506b2a2.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-bd4e477e0458db360b63faf58506b2a2.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_9.png
deleted file mode 100644
index ea1c47e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_9.png.import
deleted file mode 100644
index 3b07eb3..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/5/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c554dcbkmhwda"
-path="res://.godot/imported/1_9.png-ab58993b6db5809708f39236a240c3a6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/5/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-ab58993b6db5809708f39236a240c3a6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_0.png
deleted file mode 100644
index 332b1af..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_0.png.import
deleted file mode 100644
index 08e3891..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cb8s4ve7mguqb"
-path="res://.godot/imported/1_0.png-bcf48e963494b07d4d18f4f6b889b827.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-bcf48e963494b07d4d18f4f6b889b827.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_1.png
deleted file mode 100644
index 1372512..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_1.png.import
deleted file mode 100644
index 992a1ad..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://wslm8kgy560o"
-path="res://.godot/imported/1_1.png-1b756d342591d65c38caaedfca3f53ec.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-1b756d342591d65c38caaedfca3f53ec.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_10.png
deleted file mode 100644
index 3d6ccd0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_10.png.import
deleted file mode 100644
index b380f7f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://n2wsrn1janpu"
-path="res://.godot/imported/1_10.png-0600d5513a0de54de67cb670e8b82d9b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-0600d5513a0de54de67cb670e8b82d9b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_11.png
deleted file mode 100644
index 1f224d6..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_11.png.import
deleted file mode 100644
index 54f15be..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cyj2o8ffsyquu"
-path="res://.godot/imported/1_11.png-2fb062709331ffa2b66080528ddcb74d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-2fb062709331ffa2b66080528ddcb74d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_12.png
deleted file mode 100644
index 148c0a4..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_12.png.import
deleted file mode 100644
index 279dc1c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://boos6v8hx6h6f"
-path="res://.godot/imported/1_12.png-37b6fd335029f9771889e3f85596f6cb.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-37b6fd335029f9771889e3f85596f6cb.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_13.png
deleted file mode 100644
index 6e08b07..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_13.png.import
deleted file mode 100644
index 8a239e0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c2xsn1hfvssj3"
-path="res://.godot/imported/1_13.png-ad18956352021f4c8b5bce0baed64e37.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-ad18956352021f4c8b5bce0baed64e37.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_14.png
deleted file mode 100644
index fb12b63..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_14.png.import
deleted file mode 100644
index 255d422..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://8vj5hjrh83lc"
-path="res://.godot/imported/1_14.png-39f5c533552b1401bc6149bf5a1adec8.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-39f5c533552b1401bc6149bf5a1adec8.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_2.png
deleted file mode 100644
index 7f773e2..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_2.png.import
deleted file mode 100644
index 05aa2b4..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://1oelvjoouubu"
-path="res://.godot/imported/1_2.png-429813c75900d5e9482b46b1f2115443.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-429813c75900d5e9482b46b1f2115443.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_3.png
deleted file mode 100644
index 65c787b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_3.png.import
deleted file mode 100644
index 13e68c7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://hcr17xu55i4"
-path="res://.godot/imported/1_3.png-4c78b07180538dc439d5e51a35aa22ea.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-4c78b07180538dc439d5e51a35aa22ea.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_4.png
deleted file mode 100644
index 2085cd7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_4.png.import
deleted file mode 100644
index 91e2b4b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://du5kmx31xxbi"
-path="res://.godot/imported/1_4.png-7e90abfd7c3e1bf058bdbada22509318.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-7e90abfd7c3e1bf058bdbada22509318.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_5.png
deleted file mode 100644
index 4c3f898..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_5.png.import
deleted file mode 100644
index 330452b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bbklmagkk7juu"
-path="res://.godot/imported/1_5.png-03b714942d0d46c57b7a113b167da193.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-03b714942d0d46c57b7a113b167da193.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_6.png
deleted file mode 100644
index a284592..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_6.png.import
deleted file mode 100644
index c86ce73..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ds6l24exe7ga8"
-path="res://.godot/imported/1_6.png-791c4d6ecaef174ae5ec0e967488c2c6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-791c4d6ecaef174ae5ec0e967488c2c6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_7.png
deleted file mode 100644
index c1559ba..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_7.png.import
deleted file mode 100644
index 1d0fdfc..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://p1mdy4fcsgj4"
-path="res://.godot/imported/1_7.png-0679eebcc1637d741581a298e32858b6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-0679eebcc1637d741581a298e32858b6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_8.png
deleted file mode 100644
index 14dd1cf..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_8.png.import
deleted file mode 100644
index 863d145..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://4p4lfudhwhhe"
-path="res://.godot/imported/1_8.png-ec80c95a2dd0bf7c9fd2cac59233d275.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-ec80c95a2dd0bf7c9fd2cac59233d275.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_9.png
deleted file mode 100644
index 3c857f1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_9.png.import
deleted file mode 100644
index d2d8d5b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/6/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://db3n1fd50rxh7"
-path="res://.godot/imported/1_9.png-be573e53b164f5d7d4948b44b73d2d6d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/6/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-be573e53b164f5d7d4948b44b73d2d6d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_0.png
deleted file mode 100644
index 0105748..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_0.png.import
deleted file mode 100644
index 82437aa..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ba506a63vsb3w"
-path="res://.godot/imported/1_0.png-655bfac5d978a366646117f9cb40f350.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-655bfac5d978a366646117f9cb40f350.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_1.png
deleted file mode 100644
index cb72786..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_1.png.import
deleted file mode 100644
index 1110f5b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://caoe8f3n8lgtt"
-path="res://.godot/imported/1_1.png-80690ce791039fac362662d2612012f4.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-80690ce791039fac362662d2612012f4.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_10.png
deleted file mode 100644
index 653eeb6..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_10.png.import
deleted file mode 100644
index 39ef3a6..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ch48sl2tvd4wx"
-path="res://.godot/imported/1_10.png-55f0a04a88c608a5ac07720c20c1e55d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-55f0a04a88c608a5ac07720c20c1e55d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_11.png
deleted file mode 100644
index 7c3e22f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_11.png.import
deleted file mode 100644
index ea4df6c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cssku1cp1w1du"
-path="res://.godot/imported/1_11.png-9779c36acb30a402fb8daf54b657fdd6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-9779c36acb30a402fb8daf54b657fdd6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_12.png
deleted file mode 100644
index 7afb614..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_12.png.import
deleted file mode 100644
index 93db722..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://beyueatb8fj2h"
-path="res://.godot/imported/1_12.png-a67cd29aa70458532058492f49928a8f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-a67cd29aa70458532058492f49928a8f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_13.png
deleted file mode 100644
index e2c290e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_13.png.import
deleted file mode 100644
index 53f63cb..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bm3gw83usxvk7"
-path="res://.godot/imported/1_13.png-a1530701775303cbd35468ceaee17c6f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-a1530701775303cbd35468ceaee17c6f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_14.png
deleted file mode 100644
index acf4377..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_14.png.import
deleted file mode 100644
index 446a1cf..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://csksjgpjye6ui"
-path="res://.godot/imported/1_14.png-01603787593841c60efc276cc0c7757b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-01603787593841c60efc276cc0c7757b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_2.png
deleted file mode 100644
index a701acc..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_2.png.import
deleted file mode 100644
index 351ff96..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://pusd80e716jc"
-path="res://.godot/imported/1_2.png-7e4cbe3084659d55cf909337de1416fc.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-7e4cbe3084659d55cf909337de1416fc.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_3.png
deleted file mode 100644
index c1f5062..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_3.png.import
deleted file mode 100644
index ca32963..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://befs1pcci3xdi"
-path="res://.godot/imported/1_3.png-5364701630c05a3650156423575999a5.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-5364701630c05a3650156423575999a5.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_4.png
deleted file mode 100644
index c7c4e87..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_4.png.import
deleted file mode 100644
index d8092c8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://capkp0alpq4a5"
-path="res://.godot/imported/1_4.png-30f6918d73ea2876c11bcca0b1d4320a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-30f6918d73ea2876c11bcca0b1d4320a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_5.png
deleted file mode 100644
index 063f727..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_5.png.import
deleted file mode 100644
index e975b19..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://uo7hi7xb32d4"
-path="res://.godot/imported/1_5.png-a3f0adf992d66619ee3b006c09234971.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-a3f0adf992d66619ee3b006c09234971.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_6.png
deleted file mode 100644
index d7d3f5f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_6.png.import
deleted file mode 100644
index d4f9cff..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://wlruhsj4lxwm"
-path="res://.godot/imported/1_6.png-fee4c28367320eb087f9f5fd928b7051.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-fee4c28367320eb087f9f5fd928b7051.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_7.png
deleted file mode 100644
index e719f52..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_7.png.import
deleted file mode 100644
index f0f8f2e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cxmvwyk7umlle"
-path="res://.godot/imported/1_7.png-484e2065c7fc3a4e912c6df4772ecf22.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-484e2065c7fc3a4e912c6df4772ecf22.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_8.png
deleted file mode 100644
index 7f64d25..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_8.png.import
deleted file mode 100644
index 70cf848..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://depq4xyxfjj8d"
-path="res://.godot/imported/1_8.png-8b30ec83cd55f0eb51215d8e4e652e92.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-8b30ec83cd55f0eb51215d8e4e652e92.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_9.png
deleted file mode 100644
index 64f7086..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_9.png.import
deleted file mode 100644
index 11274b1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/7/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://1irhkhrhtysi"
-path="res://.godot/imported/1_9.png-1b82e268590f96b4d2a873424931bed3.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/7/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-1b82e268590f96b4d2a873424931bed3.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_0.png
deleted file mode 100644
index ddefcb0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_0.png.import
deleted file mode 100644
index 5d9856a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bhfsy3itt65tp"
-path="res://.godot/imported/1_0.png-4999729c4a1dbaf3e7cf548dd1446d2f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-4999729c4a1dbaf3e7cf548dd1446d2f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_1.png
deleted file mode 100644
index 2c3b895..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_1.png.import
deleted file mode 100644
index 392f91b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://rpjm6y24ddw1"
-path="res://.godot/imported/1_1.png-066b8aea1db8323b1a02b0392b29ba63.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-066b8aea1db8323b1a02b0392b29ba63.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_10.png
deleted file mode 100644
index b3e7e1b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_10.png.import
deleted file mode 100644
index e87d8bf..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dq0xjmxmuqixl"
-path="res://.godot/imported/1_10.png-9df15d70e6d5360577e9cb45b5a0aac4.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-9df15d70e6d5360577e9cb45b5a0aac4.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_11.png
deleted file mode 100644
index d6282f3..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_11.png.import
deleted file mode 100644
index 33e78dc..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://p4ohyxycsdfm"
-path="res://.godot/imported/1_11.png-4a185e1f44635418f3a59a03abde4fe4.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-4a185e1f44635418f3a59a03abde4fe4.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_12.png
deleted file mode 100644
index f520c90..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_12.png.import
deleted file mode 100644
index 2a82192..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c45vhl285vmcp"
-path="res://.godot/imported/1_12.png-2fee94ebce65328fa7602a1b46a1d5b6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-2fee94ebce65328fa7602a1b46a1d5b6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_13.png
deleted file mode 100644
index 160fb71..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_13.png.import
deleted file mode 100644
index 9f96a91..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dbcwmdpwp2n5d"
-path="res://.godot/imported/1_13.png-ad5aecd78ed4b134ac977e42879ef3c9.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-ad5aecd78ed4b134ac977e42879ef3c9.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_14.png
deleted file mode 100644
index 4b71915..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_14.png.import
deleted file mode 100644
index 38825aa..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://blslvpndlghhe"
-path="res://.godot/imported/1_14.png-e41a7923fe39c47768def6d9ab0e71fc.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-e41a7923fe39c47768def6d9ab0e71fc.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_2.png
deleted file mode 100644
index d3caf33..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_2.png.import
deleted file mode 100644
index 7ed56c5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c54mqjdk4via6"
-path="res://.godot/imported/1_2.png-f5cd9a813089d10cc94e277578e382ed.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-f5cd9a813089d10cc94e277578e382ed.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_3.png
deleted file mode 100644
index af067c1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_3.png.import
deleted file mode 100644
index 2380da8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://oq8u6i6mweru"
-path="res://.godot/imported/1_3.png-fe2d5240ece29568082a2a4ebbf29467.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-fe2d5240ece29568082a2a4ebbf29467.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_4.png
deleted file mode 100644
index ca47301..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_4.png.import
deleted file mode 100644
index 534d2ed..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c47pyo65s58g3"
-path="res://.godot/imported/1_4.png-77fac48c77afe920fc5e8c4667a9a5e6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-77fac48c77afe920fc5e8c4667a9a5e6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_5.png
deleted file mode 100644
index c93412f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_5.png.import
deleted file mode 100644
index 6c0cd3b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://r0iuvsv354w8"
-path="res://.godot/imported/1_5.png-9510c64e50f9998724d489e05ad12175.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-9510c64e50f9998724d489e05ad12175.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_6.png
deleted file mode 100644
index 1650ca8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_6.png.import
deleted file mode 100644
index cf7e860..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cwlwtn6fc8fec"
-path="res://.godot/imported/1_6.png-ff86f20ff216874d1c7df7a8fbd56c56.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-ff86f20ff216874d1c7df7a8fbd56c56.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_7.png
deleted file mode 100644
index c554558..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_7.png.import
deleted file mode 100644
index 47913f9..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bvqn7lg0jurav"
-path="res://.godot/imported/1_7.png-e9f50940c8fb7d21f251eea6c224c833.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-e9f50940c8fb7d21f251eea6c224c833.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_8.png
deleted file mode 100644
index 484150c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_8.png.import
deleted file mode 100644
index 10cf96d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b2e1wonuglbkm"
-path="res://.godot/imported/1_8.png-8531f8d492433aa377fdfd9656315b17.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-8531f8d492433aa377fdfd9656315b17.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_9.png
deleted file mode 100644
index d9cb807..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_9.png.import
deleted file mode 100644
index ddb44cf..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/8/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://6jp4cdu6wvl0"
-path="res://.godot/imported/1_9.png-584c03ae6b4dd1d3f2a5c8335b48b3b6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/8/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-584c03ae6b4dd1d3f2a5c8335b48b3b6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_0.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_0.png
deleted file mode 100644
index 5be81ce..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_0.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_0.png.import
deleted file mode 100644
index 840331a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ci8ukw5kl13p6"
-path="res://.godot/imported/1_0.png-9a83d7da7ba9492e611bb8729639ce86.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_0.png"
-dest_files=["res://.godot/imported/1_0.png-9a83d7da7ba9492e611bb8729639ce86.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_1.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_1.png
deleted file mode 100644
index 359dbe5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_1.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_1.png.import
deleted file mode 100644
index 089bfd7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://tyx353krn2yv"
-path="res://.godot/imported/1_1.png-d6fb3c3cbf73d6332b80930e81baf4a2.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_1.png"
-dest_files=["res://.godot/imported/1_1.png-d6fb3c3cbf73d6332b80930e81baf4a2.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_10.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_10.png
deleted file mode 100644
index 2abe121..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_10.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_10.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_10.png.import
deleted file mode 100644
index a1e8584..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_10.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cla0gotc7xjl1"
-path="res://.godot/imported/1_10.png-1e0fc38ea56f276a6596ea912d799909.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_10.png"
-dest_files=["res://.godot/imported/1_10.png-1e0fc38ea56f276a6596ea912d799909.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_11.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_11.png
deleted file mode 100644
index ec8e611..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_11.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_11.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_11.png.import
deleted file mode 100644
index 6d19ad8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_11.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bl0h5l68ra2dl"
-path="res://.godot/imported/1_11.png-36b4b11e92120042f13c233998950243.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_11.png"
-dest_files=["res://.godot/imported/1_11.png-36b4b11e92120042f13c233998950243.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_12.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_12.png
deleted file mode 100644
index 157a88d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_12.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_12.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_12.png.import
deleted file mode 100644
index 56689f8..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_12.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dldb7lvbj5g4f"
-path="res://.godot/imported/1_12.png-2d59010b2847d1e46747397ed962cf6c.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_12.png"
-dest_files=["res://.godot/imported/1_12.png-2d59010b2847d1e46747397ed962cf6c.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_13.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_13.png
deleted file mode 100644
index b8b969c..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_13.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_13.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_13.png.import
deleted file mode 100644
index 34948a7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_13.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://1j5q17c1ct6e"
-path="res://.godot/imported/1_13.png-07b9d3cc6a5b639d24e9ff441188de99.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_13.png"
-dest_files=["res://.godot/imported/1_13.png-07b9d3cc6a5b639d24e9ff441188de99.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_14.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_14.png
deleted file mode 100644
index 6398f25..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_14.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_14.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_14.png.import
deleted file mode 100644
index 54542b0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_14.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://beho81lye8ng"
-path="res://.godot/imported/1_14.png-c506cc6551faf1d2a6e0c9a8a8139c6e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_14.png"
-dest_files=["res://.godot/imported/1_14.png-c506cc6551faf1d2a6e0c9a8a8139c6e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_2.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_2.png
deleted file mode 100644
index d349a5a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_2.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_2.png.import
deleted file mode 100644
index 7058f5d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dugovhrg1gjpe"
-path="res://.godot/imported/1_2.png-cfbc25918c3785ccc3e1e757a1decf84.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_2.png"
-dest_files=["res://.godot/imported/1_2.png-cfbc25918c3785ccc3e1e757a1decf84.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_3.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_3.png
deleted file mode 100644
index 94406ff..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_3.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_3.png.import
deleted file mode 100644
index 0fe2fd4..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://d4gfwddqtsx7n"
-path="res://.godot/imported/1_3.png-e693ff4e716e080cab370b43fe4f9ab9.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_3.png"
-dest_files=["res://.godot/imported/1_3.png-e693ff4e716e080cab370b43fe4f9ab9.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_4.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_4.png
deleted file mode 100644
index b52a335..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_4.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_4.png.import
deleted file mode 100644
index 41bc110..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dg2xs1cv1x382"
-path="res://.godot/imported/1_4.png-58c8ee11eac831f33a1c7f9f74d18972.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_4.png"
-dest_files=["res://.godot/imported/1_4.png-58c8ee11eac831f33a1c7f9f74d18972.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_5.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_5.png
deleted file mode 100644
index ce4a7c4..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_5.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_5.png.import
deleted file mode 100644
index 8477ca7..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://wei15np48lj3"
-path="res://.godot/imported/1_5.png-599e5d98b2d986ce38181943e8cf020a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_5.png"
-dest_files=["res://.godot/imported/1_5.png-599e5d98b2d986ce38181943e8cf020a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_6.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_6.png
deleted file mode 100644
index 990af37..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_6.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_6.png.import
deleted file mode 100644
index 9c0af65..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bvqh4viw2f2xu"
-path="res://.godot/imported/1_6.png-18fe0be10a98ab5920533f201691fc91.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_6.png"
-dest_files=["res://.godot/imported/1_6.png-18fe0be10a98ab5920533f201691fc91.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_7.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_7.png
deleted file mode 100644
index ed94a3a..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_7.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_7.png.import
deleted file mode 100644
index 69165a1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c20ugxf0j63oy"
-path="res://.godot/imported/1_7.png-789980e09e97078ffb5a20653b87c3b6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_7.png"
-dest_files=["res://.godot/imported/1_7.png-789980e09e97078ffb5a20653b87c3b6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_8.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_8.png
deleted file mode 100644
index 5b8bd58..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_8.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_8.png.import
deleted file mode 100644
index 253085b..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c1g1o3xm8ruww"
-path="res://.godot/imported/1_8.png-218561a4067910bbc9957620f1ca2884.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_8.png"
-dest_files=["res://.godot/imported/1_8.png-218561a4067910bbc9957620f1ca2884.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_9.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_9.png
deleted file mode 100644
index f0cdfb0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_9.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_9.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_9.png.import
deleted file mode 100644
index 2b5a23d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/9/1_9.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://buug3wn1bnauu"
-path="res://.godot/imported/1_9.png-794c37cf4fdc52c5583d7c446caa0b30.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-MiniPack/9/1_9.png"
-dest_files=["res://.godot/imported/1_9.png-794c37cf4fdc52c5583d7c446caa0b30.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/website.txt b/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/website.txt
deleted file mode 100644
index 2a02caa..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-MiniPack/website.txt
+++ /dev/null
@@ -1 +0,0 @@
-https://xyezawr.itch.io/free-pixel-effects-pack8
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png
deleted file mode 100644
index 92a0442..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png.import
deleted file mode 100644
index 8988747..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dwp0whfe6jcjy"
-path="res://.godot/imported/Effect 1 - Sprite Sheet.png-d62485e0ad4a6271cbbb86bd241745c5.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png"
-dest_files=["res://.godot/imported/Effect 1 - Sprite Sheet.png-d62485e0ad4a6271cbbb86bd241745c5.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png
deleted file mode 100644
index 22ca629..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png.import
deleted file mode 100644
index 81cc922..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://seq1w8qc84e0"
-path="res://.godot/imported/Effect 2 - Sprite Sheet.png-f18966135b9f965b23cc853e0e9cd35b.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png"
-dest_files=["res://.godot/imported/Effect 2 - Sprite Sheet.png-f18966135b9f965b23cc853e0e9cd35b.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png
deleted file mode 100644
index 26158b5..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png.import
deleted file mode 100644
index 2bc075d..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cjsqjteeo0lcp"
-path="res://.godot/imported/Effect 3 - Sprite Sheet.png-a092da7a5c5099536b1bad4970dfd831.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png"
-dest_files=["res://.godot/imported/Effect 3 - Sprite Sheet.png-a092da7a5c5099536b1bad4970dfd831.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png
deleted file mode 100644
index 4e8ebec..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png.import
deleted file mode 100644
index 7fb8302..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ci7vww2a0eiv0"
-path="res://.godot/imported/Effect 4 - Sprite Sheet.png-408c2dd5faca1f1da98ec9fe633107eb.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png"
-dest_files=["res://.godot/imported/Effect 4 - Sprite Sheet.png-408c2dd5faca1f1da98ec9fe633107eb.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png
deleted file mode 100644
index d24f9ea..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png.import
deleted file mode 100644
index 94168f4..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cgcckvcjgecut"
-path="res://.godot/imported/Effect1 Gameboy Spritesheet.png-8ecac65dcb760932ecd8c466e32ef8e6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png"
-dest_files=["res://.godot/imported/Effect1 Gameboy Spritesheet.png-8ecac65dcb760932ecd8c466e32ef8e6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png
deleted file mode 100644
index 948f427..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png.import
deleted file mode 100644
index 65bbfa1..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ddtbpg6uh33v3"
-path="res://.godot/imported/Effect3 Gameboy Spritesheet.png-68b16fa58108fc3f614e749696c38607.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png"
-dest_files=["res://.godot/imported/Effect3 Gameboy Spritesheet.png-68b16fa58108fc3f614e749696c38607.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png
deleted file mode 100644
index 7e81424..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png.import
deleted file mode 100644
index 2c94864..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://yl4w13f073vl"
-path="res://.godot/imported/Effect4 Gameboy Spritesheet.png-39492d49cc19343081c17a903b3ccad1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png"
-dest_files=["res://.godot/imported/Effect4 Gameboy Spritesheet.png-39492d49cc19343081c17a903b3ccad1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png
deleted file mode 100644
index 01a154e..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png.import b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png.import
deleted file mode 100644
index a98ec3f..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://lxmr2uqyb8s2"
-path="res://.godot/imported/Effectst2 Gameboy Spritesheet.png-cfbfb0796e6b6b4f913fc5418fe150b9.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png"
-dest_files=["res://.godot/imported/Effectst2 Gameboy Spritesheet.png-cfbfb0796e6b6b4f913fc5418fe150b9.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/website.txt b/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/website.txt
deleted file mode 100644
index 84a24d0..0000000
--- a/DungeonShooting_Godot/resource/sprite/effect/itch-io-pixel-battle-effects/website.txt
+++ /dev/null
@@ -1 +0,0 @@
-https://pimen.itch.io/pixel-battle-effects
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Circle.png b/DungeonShooting_Godot/resource/sprite/effects/Circle.png
new file mode 100644
index 0000000..b441812
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Circle.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Circle.png.import b/DungeonShooting_Godot/resource/sprite/effects/Circle.png.import
new file mode 100644
index 0000000..7b5d4f7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Circle.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cgptnp74ive4r"
+path="res://.godot/imported/Circle.png-a2c1c1644069aac7590ae57b452f8682.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/Circle.png"
+dest_files=["res://.godot/imported/Circle.png-a2c1c1644069aac7590ae57b452f8682.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Collision.png b/DungeonShooting_Godot/resource/sprite/effects/Collision.png
new file mode 100644
index 0000000..f15c822
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Collision.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Collision.png.import b/DungeonShooting_Godot/resource/sprite/effects/Collision.png.import
new file mode 100644
index 0000000..a7cddfb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Collision.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dwa4chrugc6b1"
+path="res://.godot/imported/Collision.png-c44899b0822a30bd5fe788c9b566e1c7.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/Collision.png"
+dest_files=["res://.godot/imported/Collision.png-c44899b0822a30bd5fe788c9b566e1c7.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Effect1.png b/DungeonShooting_Godot/resource/sprite/effects/Effect1.png
new file mode 100644
index 0000000..51ef9a9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Effect1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Effect1.png.import b/DungeonShooting_Godot/resource/sprite/effects/Effect1.png.import
new file mode 100644
index 0000000..73c78cc
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Effect1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://csud4e6kc3iku"
+path="res://.godot/imported/Effect1.png-851e49cafde0258e42b0cba6b7034139.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/Effect1.png"
+dest_files=["res://.godot/imported/Effect1.png-851e49cafde0258e42b0cba6b7034139.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Explosion.png b/DungeonShooting_Godot/resource/sprite/effects/Explosion.png
new file mode 100644
index 0000000..dab1f49
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Explosion.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Explosion.png.import b/DungeonShooting_Godot/resource/sprite/effects/Explosion.png.import
new file mode 100644
index 0000000..27c5b4b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Explosion.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d8ot2wrdoe4j"
+path="res://.godot/imported/Explosion.png-f6ade742e1df9fc7ae3c5f68bc2d2284.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/Explosion.png"
+dest_files=["res://.godot/imported/Explosion.png-f6ade742e1df9fc7ae3c5f68bc2d2284.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png b/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png
new file mode 100644
index 0000000..83465d0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png.import b/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png.import
new file mode 100644
index 0000000..1e10427
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/KnifeHit1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dx07ta0asnmuw"
+path="res://.godot/imported/KnifeHit1.png-6ddd3aef14cf0bb7d2f668cd41ac74d0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/KnifeHit1.png"
+dest_files=["res://.godot/imported/KnifeHit1.png-6ddd3aef14cf0bb7d2f668cd41ac74d0.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png b/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png
new file mode 100644
index 0000000..5c6d63a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png.import b/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png.import
new file mode 100644
index 0000000..6eda108
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/ShotFire.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b0jsyrbk4bydt"
+path="res://.godot/imported/ShotFire.png-19fbeb61d685dfc2c763d73aa70d548b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/ShotFire.png"
+dest_files=["res://.godot/imported/ShotFire.png-19fbeb61d685dfc2c763d73aa70d548b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Smoke.png b/DungeonShooting_Godot/resource/sprite/effects/Smoke.png
new file mode 100644
index 0000000..f358c57
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Smoke.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/Smoke.png.import b/DungeonShooting_Godot/resource/sprite/effects/Smoke.png.import
new file mode 100644
index 0000000..11eadf7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/Smoke.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://h7hkgbwj1li"
+path="res://.godot/imported/Smoke.png-6cf8f8f0055f43a859d02942814cba94.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/Smoke.png"
+dest_files=["res://.godot/imported/Smoke.png-6cf8f8f0055f43a859d02942814cba94.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/effects/debug_arrows.png b/DungeonShooting_Godot/resource/sprite/effects/debug_arrows.png
new file mode 100644
index 0000000..a92ff48
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/debug_arrows.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/effects/debug_arrows.png.import b/DungeonShooting_Godot/resource/sprite/effects/debug_arrows.png.import
new file mode 100644
index 0000000..0a070ab
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/effects/debug_arrows.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bv0i11jk5te5u"
+path="res://.godot/imported/debug_arrows.png-8070fefa9c5a4f250534aaddd14d315c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/effects/debug_arrows.png"
+dest_files=["res://.godot/imported/debug_arrows.png-8070fefa9c5a4f250534aaddd14d315c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/16x16.png b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/16x16.png
deleted file mode 100644
index 25987fc..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/16x16.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/16x16.png.import b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/16x16.png.import
deleted file mode 100644
index f96e7a9..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/16x16.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://brk1udnii78hm"
-path="res://.godot/imported/16x16.png-6e9ff775940a8533671e6598dc2d886d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/craftpix-net-248911/16x16.png"
-dest_files=["res://.godot/imported/16x16.png-6e9ff775940a8533671e6598dc2d886d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/A Note to the Dev.txt b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/A Note to the Dev.txt
deleted file mode 100644
index 6596983..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/A Note to the Dev.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-Ho ho, the title got you, huh! :)
-
-Hello, thank you for your purchase!
-
-I'm Caio, the Clockwork Raven Studios artist, owner, and i hope this product live up to your expectations, i want you to know that your interest in my projects is what makes me work on it even harder.
-
-In case if it doesn't take up too much of your time, I would like to see what you're thinking about it in the comments, in the page of the store that you purchased the product, this helps me a lot!
-
-You can also see my progress in the creation of new assets and/or make suggestions, follow my twitter here: https://twitter.com/cwrstudios
-
-If you like my work, i would recommend you to take a look at my Patreon, you get spoilers of my upcoming assets, a community and everything i already made for only $5, and for staying as a Patron you'll always receive my new assets for free!
-
-My Patreon: https://www.patreon.com/clockworkravenstudios
-
-Regards, Caio
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png
deleted file mode 100644
index 25987fc..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png.import b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png.import
deleted file mode 100644
index 89dc5e9..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bgmkr3k6dfdsw"
-path="res://.godot/imported/16x16.png-03810c2e769fb05274c12adf666f9aa1.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png"
-dest_files=["res://.godot/imported/16x16.png-03810c2e769fb05274c12adf666f9aa1.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/EsRson.gif b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/EsRson.gif
deleted file mode 100644
index 493642d..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/EsRson.gif
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/Palette/Pallete.txt b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/Palette/Pallete.txt
deleted file mode 100644
index ad6e6d8..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/Palette/Pallete.txt
+++ /dev/null
@@ -1 +0,0 @@
-This palette belongs to Kerrie Lake, and can be found and downloaded for free here: https://lospec.com/palette-list/resurrect-64
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/Rww2te.gif b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/Rww2te.gif
deleted file mode 100644
index 977edd3..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/Rww2te.gif
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/license.txt b/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/license.txt
deleted file mode 100644
index 673e1aa..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/craftpix-net-248911/license.txt
+++ /dev/null
@@ -1 +0,0 @@
-https://craftpix.net/file-licenses/
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png
deleted file mode 100644
index 26c54b7..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png.import
deleted file mode 100644
index 37b8a2e..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dj8nrd5od4fcl"
-path="res://.godot/imported/16x16 dungeon ii wall reconfig v04 spritesheet.png-912443f06cd2aff252dec097396c5d34.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png"
-dest_files=["res://.godot/imported/16x16 dungeon ii wall reconfig v04 spritesheet.png-912443f06cd2aff252dec097396c5d34.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png
deleted file mode 100644
index 4baebfb..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png.import
deleted file mode 100644
index 75f2ce4..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bqwt06ei11krp"
-path="res://.godot/imported/arrow.png-d945c13a6ca437c3e71d6adb0e3d6c2d.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png"
-dest_files=["res://.godot/imported/arrow.png-d945c13a6ca437c3e71d6adb0e3d6c2d.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png
deleted file mode 100644
index 0654ef2..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png.import
deleted file mode 100644
index 2dc8fb2..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://br2qjnk51rgr3"
-path="res://.godot/imported/bow.png-cf7ed3be40c3c132dffe693ed3eaea62.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png"
-dest_files=["res://.godot/imported/bow.png-cf7ed3be40c3c132dffe693ed3eaea62.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png
deleted file mode 100644
index a4457f0..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png.import
deleted file mode 100644
index 9e87455..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://0rl2vt3wp2u0"
-path="res://.godot/imported/hit0.png-f6ae5bf8aa634586ba35cd298657e88f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png"
-dest_files=["res://.godot/imported/hit0.png-f6ae5bf8aa634586ba35cd298657e88f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png
deleted file mode 100644
index fc1e151..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png.import
deleted file mode 100644
index 7acc467..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://buhvcxo2t0w8e"
-path="res://.godot/imported/hit1.png-dff71ff18aaf926e3783079227be8aa0.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png"
-dest_files=["res://.godot/imported/hit1.png-dff71ff18aaf926e3783079227be8aa0.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png
deleted file mode 100644
index acf1526..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png.import
deleted file mode 100644
index e6b134d..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://pe45t3xwk3oq"
-path="res://.godot/imported/hit2.png-08913f6ef3702516923e214eb44be2a2.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png"
-dest_files=["res://.godot/imported/hit2.png-08913f6ef3702516923e214eb44be2a2.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png
deleted file mode 100644
index 272462c..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png.import
deleted file mode 100644
index 397381d..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://1cipr03e74qk"
-path="res://.godot/imported/hit3.png-3e0b6dd0e6800e136aa13a83ec93ddc3.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png"
-dest_files=["res://.godot/imported/hit3.png-3e0b6dd0e6800e136aa13a83ec93ddc3.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png
deleted file mode 100644
index aa1f261..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png.import b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png.import
deleted file mode 100644
index b05e5f8..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://jnlqxbb6pk8n"
-path="res://.godot/imported/hit4.png-13aa48a76ab50428f2595b5c50c88cf3.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png"
-dest_files=["res://.godot/imported/hit4.png-13aa48a76ab50428f2595b5c50c88cf3.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/website.txt b/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/website.txt
deleted file mode 100644
index cea76c3..0000000
--- a/DungeonShooting_Godot/resource/sprite/environment/itch-io-DungeonTileset4/website.txt
+++ /dev/null
@@ -1 +0,0 @@
-https://aekae13.itch.io/16x16-dungeon-walls-reconfig
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/gun/bow.png b/DungeonShooting_Godot/resource/sprite/gun/bow.png
deleted file mode 100644
index 0654ef2..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/bow.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/bow.png.import b/DungeonShooting_Godot/resource/sprite/gun/bow.png.import
deleted file mode 100644
index aad1840..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/bow.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://b4exgoa8t0wny"
-path="res://.godot/imported/bow.png-bf9e685f71e0011b6ec8dc0a31121391.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/bow.png"
-dest_files=["res://.godot/imported/bow.png-bf9e685f71e0011b6ec8dc0a31121391.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun1.png b/DungeonShooting_Godot/resource/sprite/gun/gun1.png
deleted file mode 100644
index fc6c2ce..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun1.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun1.png.import
deleted file mode 100644
index afc58bd..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://yn8t7ovmt4gj"
-path="res://.godot/imported/gun1.png-f7bc3e27b4b477d47c7353ffb91687ea.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun1.png"
-dest_files=["res://.godot/imported/gun1.png-f7bc3e27b4b477d47c7353ffb91687ea.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun2.png b/DungeonShooting_Godot/resource/sprite/gun/gun2.png
deleted file mode 100644
index 8889f01..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun2.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun2.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun2.png.import
deleted file mode 100644
index e80698b..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun2.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://5geiuvv6hyov"
-path="res://.godot/imported/gun2.png-67d4f6125e770591468ba3ab236736ef.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun2.png"
-dest_files=["res://.godot/imported/gun2.png-67d4f6125e770591468ba3ab236736ef.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun3.png b/DungeonShooting_Godot/resource/sprite/gun/gun3.png
deleted file mode 100644
index ebccd94..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun3.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun3.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun3.png.import
deleted file mode 100644
index 623f764..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun3.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c1tnh6laf172u"
-path="res://.godot/imported/gun3.png-f2b98956d7fdf008b4a87a7be920ea12.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun3.png"
-dest_files=["res://.godot/imported/gun3.png-f2b98956d7fdf008b4a87a7be920ea12.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun4.png b/DungeonShooting_Godot/resource/sprite/gun/gun4.png
deleted file mode 100644
index d3643d2..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun4.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun4.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun4.png.import
deleted file mode 100644
index 1cee318..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun4.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://xafbhgrxmosy"
-path="res://.godot/imported/gun4.png-ba6b1c54aee277c1e95a427dbdaaddeb.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun4.png"
-dest_files=["res://.godot/imported/gun4.png-ba6b1c54aee277c1e95a427dbdaaddeb.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun5.png b/DungeonShooting_Godot/resource/sprite/gun/gun5.png
deleted file mode 100644
index 9845085..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun5.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun5.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun5.png.import
deleted file mode 100644
index 5b7b1bd..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun5.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://c2eber1v7nb4j"
-path="res://.godot/imported/gun5.png-6f355c0cd6234d52c0b85a3bec0a414e.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun5.png"
-dest_files=["res://.godot/imported/gun5.png-6f355c0cd6234d52c0b85a3bec0a414e.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun6.png b/DungeonShooting_Godot/resource/sprite/gun/gun6.png
deleted file mode 100644
index b4948f3..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun6.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun6.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun6.png.import
deleted file mode 100644
index 8e5fc99..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun6.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://rlp8f2rgxlbf"
-path="res://.godot/imported/gun6.png-0667c2b2b24159daf259f9cc3faa9fee.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun6.png"
-dest_files=["res://.godot/imported/gun6.png-0667c2b2b24159daf259f9cc3faa9fee.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun7.png b/DungeonShooting_Godot/resource/sprite/gun/gun7.png
deleted file mode 100644
index a4d1cea..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun7.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun7.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun7.png.import
deleted file mode 100644
index fd99067..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun7.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bs6ukbtcmxuiw"
-path="res://.godot/imported/gun7.png-c5124593247a40157a5388c936276859.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun7.png"
-dest_files=["res://.godot/imported/gun7.png-c5124593247a40157a5388c936276859.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun8.png b/DungeonShooting_Godot/resource/sprite/gun/gun8.png
deleted file mode 100644
index 6186597..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun8.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/gun8.png.import b/DungeonShooting_Godot/resource/sprite/gun/gun8.png.import
deleted file mode 100644
index d601047..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/gun8.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://2lcc20olyi5d"
-path="res://.godot/imported/gun8.png-ce26b9cb6654714a9891481124571c4f.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/gun8.png"
-dest_files=["res://.godot/imported/gun8.png-ce26b9cb6654714a9891481124571c4f.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/knife1.png b/DungeonShooting_Godot/resource/sprite/gun/knife1.png
deleted file mode 100644
index a75464a..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/knife1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/knife1.png.import b/DungeonShooting_Godot/resource/sprite/gun/knife1.png.import
deleted file mode 100644
index 91b8af9..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/knife1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bxhbsq0wb2yo1"
-path="res://.godot/imported/knife1.png-dd5849c94377d47ed0b17223d5f25d6a.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/knife1.png"
-dest_files=["res://.godot/imported/knife1.png-dd5849c94377d47ed0b17223d5f25d6a.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/gun/out/default.png b/DungeonShooting_Godot/resource/sprite/gun/out/default.png
deleted file mode 100644
index e806751..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/out/default.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/out/default.png.import b/DungeonShooting_Godot/resource/sprite/gun/out/default.png.import
deleted file mode 100644
index e81938b..0000000
--- a/DungeonShooting_Godot/resource/sprite/gun/out/default.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://gxnb77x23of3"
-path="res://.godot/imported/default.png-e5a685da8f657e6b9105cc7f2f935dc9.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/gun/out/default.png"
-dest_files=["res://.godot/imported/default.png-e5a685da8f657e6b9105cc7f2f935dc9.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/door1_down.png b/DungeonShooting_Godot/resource/sprite/map/door1_down.png
deleted file mode 100644
index a5014a4..0000000
--- a/DungeonShooting_Godot/resource/sprite/map/door1_down.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/door1_down.png.import b/DungeonShooting_Godot/resource/sprite/map/door1_down.png.import
deleted file mode 100644
index de95af2..0000000
--- a/DungeonShooting_Godot/resource/sprite/map/door1_down.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://dviv44fhwvkb1"
-path="res://.godot/imported/door1_down.png-59ffc0993731fd627318f9402b22d199.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/map/door1_down.png"
-dest_files=["res://.godot/imported/door1_down.png-59ffc0993731fd627318f9402b22d199.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png b/DungeonShooting_Godot/resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png
new file mode 100644
index 0000000..26c54b7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png.import b/DungeonShooting_Godot/resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png.import
new file mode 100644
index 0000000..2f22127
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dj8nrd5od4fcl"
+path="res://.godot/imported/16x16 dungeon ii wall reconfig v04 spritesheet.png-ff78c744bd80f7a90af72583d38712d5.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png"
+dest_files=["res://.godot/imported/16x16 dungeon ii wall reconfig v04 spritesheet.png-ff78c744bd80f7a90af72583d38712d5.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/map1/door1_down.png b/DungeonShooting_Godot/resource/sprite/map/map1/door1_down.png
new file mode 100644
index 0000000..faeba59
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/map1/door1_down.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/map/map1/door1_down.png.import b/DungeonShooting_Godot/resource/sprite/map/map1/door1_down.png.import
new file mode 100644
index 0000000..b7e352f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/map1/door1_down.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dviv44fhwvkb1"
+path="res://.godot/imported/door1_down.png-0738db3503e6a0f8ce04f89dbe063801.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/map/map1/door1_down.png"
+dest_files=["res://.godot/imported/door1_down.png-0738db3503e6a0f8ce04f89dbe063801.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/map/map1/website.txt b/DungeonShooting_Godot/resource/sprite/map/map1/website.txt
new file mode 100644
index 0000000..cea76c3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/map/map1/website.txt
@@ -0,0 +1 @@
+https://aekae13.itch.io/16x16-dungeon-walls-reconfig
\ No newline at end of file
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001.png b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001.png
new file mode 100644
index 0000000..f902601
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001.png.import
new file mode 100644
index 0000000..c36be94
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chd2vtesap5cf"
+path="res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0001/Enemy0001.png"
+dest_files=["res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001_Debris.png
new file mode 100644
index 0000000..60d644b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001_Debris.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001_Debris.png.import
new file mode 100644
index 0000000..d563acf
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/Enemy0001_Debris.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2f55lu60x64i"
+path="res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png"
+dest_files=["res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png
new file mode 100644
index 0000000..f902601
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import
new file mode 100644
index 0000000..c36be94
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://chd2vtesap5cf"
+path="res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0001/Enemy0001.png"
+dest_files=["res://.godot/imported/Enemy0001.png-148a38dfa95953b26d890356e8875de4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png
new file mode 100644
index 0000000..60d644b
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import
new file mode 100644
index 0000000..d563acf
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/role/enemy0001/enemy0001_Debris.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://d2f55lu60x64i"
+path="res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/role/enemy0001/Enemy0001_Debris.png"
+dest_files=["res://.godot/imported/Enemy0001_Debris.png-ac416dc79cd3c1217b27e1ef1fbe0d0b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/role1.png b/DungeonShooting_Godot/resource/sprite/role/role1.png
deleted file mode 100644
index 1418340..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/role1.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role1.png.import b/DungeonShooting_Godot/resource/sprite/role/role1.png.import
deleted file mode 100644
index a0ffc06..0000000
--- a/DungeonShooting_Godot/resource/sprite/role/role1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://chd2vtesap5cf"
-path="res://.godot/imported/role1.png-958d620452f56d0f9929cebb052b8bfc.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/role/role1.png"
-dest_files=["res://.godot/imported/role1.png-958d620452f56d0f9929cebb052b8bfc.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/role/role10.png b/DungeonShooting_Godot/resource/sprite/role/role10.png
index 6268724..a77808d 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role10.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role10.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role2.png b/DungeonShooting_Godot/resource/sprite/role/role2.png
index 60cd623..cc2133d 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role2.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role3.png b/DungeonShooting_Godot/resource/sprite/role/role3.png
index 802b0bf..3e5e98f 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role3.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role4.png b/DungeonShooting_Godot/resource/sprite/role/role4.png
index 72031be..853ef1e 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role4.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role4.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role5.png b/DungeonShooting_Godot/resource/sprite/role/role5.png
index a21325b..b0aa65d 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role5.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role5.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role6.png b/DungeonShooting_Godot/resource/sprite/role/role6.png
index 0b5d02d..2e3924a 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role6.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role6.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role7.png b/DungeonShooting_Godot/resource/sprite/role/role7.png
index a7846a4..23961ef 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role7.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role7.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role8.png b/DungeonShooting_Godot/resource/sprite/role/role8.png
index 6dc6f6b..bbfe8db 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role8.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role8.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/role/role9.png b/DungeonShooting_Godot/resource/sprite/role/role9.png
index 111f8c3..0c88e8e 100644
--- a/DungeonShooting_Godot/resource/sprite/role/role9.png
+++ b/DungeonShooting_Godot/resource/sprite/role/role9.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/Cursor.png b/DungeonShooting_Godot/resource/sprite/ui/Cursor.png
deleted file mode 100644
index 068c198..0000000
--- a/DungeonShooting_Godot/resource/sprite/ui/Cursor.png
+++ /dev/null
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/Cursor.png.import b/DungeonShooting_Godot/resource/sprite/ui/Cursor.png.import
deleted file mode 100644
index 611d10f..0000000
--- a/DungeonShooting_Godot/resource/sprite/ui/Cursor.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://ct5v768lsf6nc"
-path="res://.godot/imported/Cursor.png-8fd0f20a3d3b122868ba81366de2aaf6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://resource/sprite/ui/Cursor.png"
-dest_files=["res://.godot/imported/Cursor.png-8fd0f20a3d3b122868ba81366de2aaf6.ctex"]
-
-[params]
-
-compress/mode=0
-compress/high_quality=false
-compress/lossy_quality=0.7
-compress/hdr_compression=1
-compress/normal_map=0
-compress/channel_pack=0
-mipmaps/generate=false
-mipmaps/limit=-1
-roughness/mode=0
-roughness/src_normal=""
-process/fix_alpha_border=true
-process/premult_alpha=false
-process/normal_map_invert_y=false
-process/hdr_as_srgb=false
-process/hdr_clamp_exposure=false
-process/size_limit=0
-detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/GUI.png b/DungeonShooting_Godot/resource/sprite/ui/GUI.png
new file mode 100644
index 0000000..56475ca
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/GUI.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/GUI.png.import b/DungeonShooting_Godot/resource/sprite/ui/GUI.png.import
new file mode 100644
index 0000000..6ae4ae9
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/GUI.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5adiy3ycqyxw"
+path="res://.godot/imported/GUI.png-56ce605f877ce7100610e88d3451eb06.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/GUI.png"
+dest_files=["res://.godot/imported/GUI.png-56ce605f877ce7100610e88d3451eb06.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/ui/cursors.png b/DungeonShooting_Godot/resource/sprite/ui/cursors.png
new file mode 100644
index 0000000..b40cfe5
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/cursors.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/ui/cursors.png.import b/DungeonShooting_Godot/resource/sprite/ui/cursors.png.import
new file mode 100644
index 0000000..2460561
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/ui/cursors.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dta28v3fgkfru"
+path="res://.godot/imported/cursors.png-39228cc5284ece278357dbc1a5b6c668.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/ui/cursors.png"
+dest_files=["res://.godot/imported/cursors.png-39228cc5284ece278357dbc1a5b6c668.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/bow.png b/DungeonShooting_Godot/resource/sprite/weapon/bow.png
new file mode 100644
index 0000000..0654ef2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/bow.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/bow.png.import b/DungeonShooting_Godot/resource/sprite/weapon/bow.png.import
new file mode 100644
index 0000000..412e93d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/bow.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b4exgoa8t0wny"
+path="res://.godot/imported/bow.png-9ae685914082766e6dbcd1eaddb43b40.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/bow.png"
+dest_files=["res://.godot/imported/bow.png-9ae685914082766e6dbcd1eaddb43b40.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun1.png b/DungeonShooting_Godot/resource/sprite/weapon/gun1.png
new file mode 100644
index 0000000..fc6c2ce
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun1.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun1.png.import
new file mode 100644
index 0000000..9964bdc
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://yn8t7ovmt4gj"
+path="res://.godot/imported/gun1.png-87777518c2382cd35c967ee32bf367ad.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun1.png"
+dest_files=["res://.godot/imported/gun1.png-87777518c2382cd35c967ee32bf367ad.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun2.png b/DungeonShooting_Godot/resource/sprite/weapon/gun2.png
new file mode 100644
index 0000000..4e0b9e6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun2.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun2.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun2.png.import
new file mode 100644
index 0000000..feb8eb6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun2.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://5geiuvv6hyov"
+path="res://.godot/imported/gun2.png-78b331a2f245cfbe03b10da276435b64.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun2.png"
+dest_files=["res://.godot/imported/gun2.png-78b331a2f245cfbe03b10da276435b64.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun3.png b/DungeonShooting_Godot/resource/sprite/weapon/gun3.png
new file mode 100644
index 0000000..4f5aff6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun3.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun3.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun3.png.import
new file mode 100644
index 0000000..e5154c0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun3.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c1tnh6laf172u"
+path="res://.godot/imported/gun3.png-d2428e7c1819cfb8a78ef87505aee0a3.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun3.png"
+dest_files=["res://.godot/imported/gun3.png-d2428e7c1819cfb8a78ef87505aee0a3.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun4.png b/DungeonShooting_Godot/resource/sprite/weapon/gun4.png
new file mode 100644
index 0000000..c6b4b23
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun4.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun4.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun4.png.import
new file mode 100644
index 0000000..316b26d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun4.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xafbhgrxmosy"
+path="res://.godot/imported/gun4.png-f47ef44de364483b033f38a2d031303c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun4.png"
+dest_files=["res://.godot/imported/gun4.png-f47ef44de364483b033f38a2d031303c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun5.png b/DungeonShooting_Godot/resource/sprite/weapon/gun5.png
new file mode 100644
index 0000000..9845085
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun5.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun5.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun5.png.import
new file mode 100644
index 0000000..3e8d082
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun5.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c2eber1v7nb4j"
+path="res://.godot/imported/gun5.png-da05c9e18ddc46a7f72168cb9c25449c.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun5.png"
+dest_files=["res://.godot/imported/gun5.png-da05c9e18ddc46a7f72168cb9c25449c.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun6.png b/DungeonShooting_Godot/resource/sprite/weapon/gun6.png
new file mode 100644
index 0000000..b4948f3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun6.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun6.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun6.png.import
new file mode 100644
index 0000000..94f2abb
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun6.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://rlp8f2rgxlbf"
+path="res://.godot/imported/gun6.png-698dacce2603c9d452b55702363db8fc.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun6.png"
+dest_files=["res://.godot/imported/gun6.png-698dacce2603c9d452b55702363db8fc.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun7.png b/DungeonShooting_Godot/resource/sprite/weapon/gun7.png
new file mode 100644
index 0000000..a4d1cea
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun7.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun7.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun7.png.import
new file mode 100644
index 0000000..92fb78d
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun7.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bs6ukbtcmxuiw"
+path="res://.godot/imported/gun7.png-9068807109603150cd0529909f81d6c1.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun7.png"
+dest_files=["res://.godot/imported/gun7.png-9068807109603150cd0529909f81d6c1.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun8.png b/DungeonShooting_Godot/resource/sprite/weapon/gun8.png
new file mode 100644
index 0000000..6186597
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun8.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/gun8.png.import b/DungeonShooting_Godot/resource/sprite/weapon/gun8.png.import
new file mode 100644
index 0000000..ac3d0d8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/gun8.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://2lcc20olyi5d"
+path="res://.godot/imported/gun8.png-a936b61cfb3713c19173bfa954b35ecd.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/gun8.png"
+dest_files=["res://.godot/imported/gun8.png-a936b61cfb3713c19173bfa954b35ecd.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/knife1.png b/DungeonShooting_Godot/resource/sprite/weapon/knife1.png
new file mode 100644
index 0000000..a75464a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/knife1.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/knife1.png.import b/DungeonShooting_Godot/resource/sprite/weapon/knife1.png.import
new file mode 100644
index 0000000..e13d626
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/knife1.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bxhbsq0wb2yo1"
+path="res://.godot/imported/knife1.png-7a8e87bb9fc40c8adf95391721186a58.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/knife1.png"
+dest_files=["res://.godot/imported/knife1.png-7a8e87bb9fc40c8adf95391721186a58.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0001/Weapon0001.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0001/Weapon0001.png
new file mode 100644
index 0000000..a8d9384
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0001/Weapon0001.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0001/Weapon0001.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0001/Weapon0001.png.import
new file mode 100644
index 0000000..60991cf
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0001/Weapon0001.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://civvcowt2wklr"
+path="res://.godot/imported/Weapon0001.png-4eb27e33b168dda75d544fb56e9370b2.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0001/Weapon0001.png"
+dest_files=["res://.godot/imported/Weapon0001.png-4eb27e33b168dda75d544fb56e9370b2.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002.png
new file mode 100644
index 0000000..68a0336
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002.png.import
new file mode 100644
index 0000000..6d98fb0
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://b53kofmyan42g"
+path="res://.godot/imported/Weapon0002.png-f84831dbe20e83e0314a3a53978d34ea.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0002/Weapon0002.png"
+dest_files=["res://.godot/imported/Weapon0002.png-f84831dbe20e83e0314a3a53978d34ea.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002_reloading.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002_reloading.png
new file mode 100644
index 0000000..90b10e7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002_reloading.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002_reloading.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002_reloading.png.import
new file mode 100644
index 0000000..cf29671
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0002/Weapon0002_reloading.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cog4u2dr46anc"
+path="res://.godot/imported/Weapon0002_reloading.png-92d56562c66b85ad28fe76e3f2ed0752.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0002/Weapon0002_reloading.png"
+dest_files=["res://.godot/imported/Weapon0002_reloading.png-92d56562c66b85ad28fe76e3f2ed0752.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0003/Weapon0003.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0003/Weapon0003.png
new file mode 100644
index 0000000..3c0c458
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0003/Weapon0003.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0003/Weapon0003.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0003/Weapon0003.png.import
new file mode 100644
index 0000000..cf3d12e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0003/Weapon0003.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://clgf63extg800"
+path="res://.godot/imported/Weapon0003.png-5a0da135506f9ff0bc0591a165fe8682.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0003/Weapon0003.png"
+dest_files=["res://.godot/imported/Weapon0003.png-5a0da135506f9ff0bc0591a165fe8682.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0005/Weapon0005.png b/DungeonShooting_Godot/resource/sprite/weapon/weapon0005/Weapon0005.png
new file mode 100644
index 0000000..dd42c8a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0005/Weapon0005.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/weapon/weapon0005/Weapon0005.png.import b/DungeonShooting_Godot/resource/sprite/weapon/weapon0005/Weapon0005.png.import
new file mode 100644
index 0000000..e535ca7
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/weapon/weapon0005/Weapon0005.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://504f1r0mi33n"
+path="res://.godot/imported/Weapon0005.png-c52c1188e23836aa507447c2088105f4.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/weapon/weapon0005/Weapon0005.png"
+dest_files=["res://.godot/imported/Weapon0005.png-c52c1188e23836aa507447c2088105f4.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Bullet0001.tres b/DungeonShooting_Godot/resource/spriteFrames/Bullet0001.tres
new file mode 100644
index 0000000..6af29a8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Bullet0001.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://baoxep7vami72"]
+
+[ext_resource type="Texture2D" uid="uid://bu0b11hiuecxy" path="res://resource/sprite/bullet/bullet.png" id="1_ktu7r"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_ktu7r")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Bullet0002.tres b/DungeonShooting_Godot/resource/spriteFrames/Bullet0002.tres
new file mode 100644
index 0000000..cb31134
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Bullet0002.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://bpeodjqiy3mil"]
+
+[ext_resource type="Texture2D" uid="uid://ctsvj4y1t538u" path="res://resource/sprite/bullet/bullet3.png" id="1_53f3g"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_53f3g")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/KnifeHit1.tres b/DungeonShooting_Godot/resource/spriteFrames/KnifeHit1.tres
new file mode 100644
index 0000000..a491979
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/KnifeHit1.tres
@@ -0,0 +1,53 @@
+[gd_resource type="SpriteFrames" load_steps=8 format=3 uid="uid://dj8o7ws03bik4"]
+
+[ext_resource type="Texture2D" uid="uid://dx07ta0asnmuw" path="res://resource/sprite/effects/KnifeHit1.png" id="1_0yl3h"]
+
+[sub_resource type="AtlasTexture" id="1"]
+atlas = ExtResource("1_0yl3h")
+region = Rect2(0, 0, 64, 68)
+
+[sub_resource type="AtlasTexture" id="2"]
+atlas = ExtResource("1_0yl3h")
+region = Rect2(64, 0, 64, 68)
+
+[sub_resource type="AtlasTexture" id="3"]
+atlas = ExtResource("1_0yl3h")
+region = Rect2(128, 0, 64, 68)
+
+[sub_resource type="AtlasTexture" id="4"]
+atlas = ExtResource("1_0yl3h")
+region = Rect2(192, 0, 64, 68)
+
+[sub_resource type="AtlasTexture" id="5"]
+atlas = ExtResource("1_0yl3h")
+region = Rect2(256, 0, 64, 68)
+
+[sub_resource type="AtlasTexture" id="6"]
+atlas = ExtResource("1_0yl3h")
+region = Rect2(320, 0, 64, 68)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("1")
+}, {
+"duration": 1.0,
+"texture": SubResource("2")
+}, {
+"duration": 1.0,
+"texture": SubResource("3")
+}, {
+"duration": 1.0,
+"texture": SubResource("4")
+}, {
+"duration": 1.0,
+"texture": SubResource("5")
+}, {
+"duration": 1.0,
+"texture": SubResource("6")
+}],
+"loop": true,
+"name": &"default",
+"speed": 30.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Role0001.tres b/DungeonShooting_Godot/resource/spriteFrames/Role0001.tres
new file mode 100644
index 0000000..c813ce3
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Role0001.tres
@@ -0,0 +1,117 @@
+[gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://n11thtali6es"]
+
+[ext_resource type="Texture2D" uid="uid://bhwhhg2dfsr26" path="res://resource/sprite/role/role2.png" id="1_n8j7s"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tmewn"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(0, 0, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_dvg4a"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(0, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kvuct"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(16, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5op76"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(32, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_helyc"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(48, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_67mn8"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(48, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_jeywq"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(32, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_oycx8"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(16, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_tjg1t"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(0, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2ltxw"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(0, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_x1va1"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(16, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ic2p5"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(32, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j3hdu"]
+atlas = ExtResource("1_n8j7s")
+region = Rect2(48, 48, 16, 24)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_tmewn")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_dvg4a")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kvuct")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5op76")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_helyc")
+}],
+"loop": true,
+"name": &"idle",
+"speed": 7.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_67mn8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_jeywq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_oycx8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_tjg1t")
+}],
+"loop": true,
+"name": &"reverseRun",
+"speed": 10.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2ltxw")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_x1va1")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ic2p5")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j3hdu")
+}],
+"loop": true,
+"name": &"run",
+"speed": 10.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Role1001.tres b/DungeonShooting_Godot/resource/spriteFrames/Role1001.tres
new file mode 100644
index 0000000..1a49770
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Role1001.tres
@@ -0,0 +1,117 @@
+[gd_resource type="SpriteFrames" load_steps=15 format=3 uid="uid://cnctpyrn02rhd"]
+
+[ext_resource type="Texture2D" uid="uid://chd2vtesap5cf" path="res://resource/sprite/role/enemy0001/Enemy0001.png" id="1_5jhli"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0rmv6"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(0, 0, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3ira8"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(0, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7fx5y"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(16, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5wd43"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(32, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kbrex"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(48, 24, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_bhiip"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(0, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_41c1u"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(16, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1o2v8"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(32, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_niadr"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(48, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j73hc"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(48, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_3bgji"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(32, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_besw3"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(16, 48, 16, 24)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_350uy"]
+atlas = ExtResource("1_5jhli")
+region = Rect2(0, 48, 16, 24)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0rmv6")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3ira8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7fx5y")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5wd43")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kbrex")
+}],
+"loop": true,
+"name": &"idle",
+"speed": 7.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_bhiip")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_41c1u")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1o2v8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_niadr")
+}],
+"loop": true,
+"name": &"reverseRun",
+"speed": 10.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j73hc")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_3bgji")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_besw3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_350uy")
+}],
+"loop": true,
+"name": &"run",
+"speed": 10.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/RoomDoor_EW.tres b/DungeonShooting_Godot/resource/spriteFrames/RoomDoor_EW.tres
new file mode 100644
index 0000000..8fa6c2a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/RoomDoor_EW.tres
@@ -0,0 +1,161 @@
+[gd_resource type="SpriteFrames" load_steps=22 format=3 uid="uid://3ps6h2f54qa5"]
+
+[ext_resource type="Texture2D" uid="uid://dviv44fhwvkb1" path="res://resource/sprite/map/map1/door1_down.png" id="1_7f8h7"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5m6ya"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(144, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_kmhtl"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(128, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_umaop"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(112, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_aqex7"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(96, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hdocg"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(80, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_aiymw"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(64, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8f7dv"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(32, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_iv82l"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(16, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ycmnv"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(0, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_o7xw0"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(144, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_j8iw2"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(0, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_823if"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(16, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_7hyae"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(32, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6lhu3"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(48, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_a026j"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(64, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_wfjf7"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(80, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_rhj60"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(96, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_06y08"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(112, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_1200j"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(128, 48, 16, 48)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_mbnbx"]
+atlas = ExtResource("1_7f8h7")
+region = Rect2(144, 48, 16, 48)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5m6ya")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_kmhtl")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_umaop")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_aqex7")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hdocg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_aiymw")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8f7dv")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_iv82l")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ycmnv")
+}],
+"loop": false,
+"name": &"closeDoor",
+"speed": 20.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_o7xw0")
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_j8iw2")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_823if")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_7hyae")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6lhu3")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_a026j")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_wfjf7")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rhj60")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_06y08")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_1200j")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_mbnbx")
+}],
+"loop": false,
+"name": &"openDoor",
+"speed": 20.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/RoomDoor_NS.tres b/DungeonShooting_Godot/resource/spriteFrames/RoomDoor_NS.tres
new file mode 100644
index 0000000..48f90e2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/RoomDoor_NS.tres
@@ -0,0 +1,154 @@
+[gd_resource type="SpriteFrames" load_steps=21 format=3 uid="uid://xs72aopsgpg6"]
+
+[ext_resource type="Texture2D" uid="uid://dviv44fhwvkb1" path="res://resource/sprite/map/map1/door1_down.png" id="1_ugffo"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_77i3w"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(256, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_112lq"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(224, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_2ojr8"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(192, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_q58ag"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(160, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_ghweb"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(128, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_28y4l"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(96, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0fk5y"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(64, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_eu8jg"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(32, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_rw4x5"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_5dlkq"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(256, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_dnc85"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(0, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_8wepo"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(32, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_s2c1g"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(64, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_umj5m"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(96, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_sceep"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(128, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_0vntu"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(160, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_66ox7"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(192, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_o2uxo"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(224, 0, 32, 32)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_m6v3e"]
+atlas = ExtResource("1_ugffo")
+region = Rect2(256, 0, 32, 32)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_77i3w")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_112lq")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_2ojr8")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_q58ag")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_ghweb")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_28y4l")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0fk5y")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_eu8jg")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_rw4x5")
+}],
+"loop": false,
+"name": &"closeDoor",
+"speed": 20.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_5dlkq")
+}],
+"loop": false,
+"name": &"default",
+"speed": 20.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_dnc85")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_8wepo")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_s2c1g")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_umj5m")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_sceep")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_0vntu")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_66ox7")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_o2uxo")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_m6v3e")
+}],
+"loop": false,
+"name": &"openDoor",
+"speed": 20.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Shell0001.tres b/DungeonShooting_Godot/resource/spriteFrames/Shell0001.tres
new file mode 100644
index 0000000..5d2b5b6
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Shell0001.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://b8gksxl7auquc"]
+
+[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/shellCase.png" id="1_4nusd"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_4nusd")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Weapon0001.tres b/DungeonShooting_Godot/resource/spriteFrames/Weapon0001.tres
new file mode 100644
index 0000000..da7b2a8
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Weapon0001.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://5m0qs7m4er5u"]
+
+[ext_resource type="Texture2D" uid="uid://civvcowt2wklr" path="res://resource/sprite/weapon/weapon0001/Weapon0001.png" id="1_derf1"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_derf1")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Weapon0002.tres b/DungeonShooting_Godot/resource/spriteFrames/Weapon0002.tres
new file mode 100644
index 0000000..c3e68b2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Weapon0002.tres
@@ -0,0 +1,62 @@
+[gd_resource type="SpriteFrames" load_steps=9 format=3 uid="uid://domhmo4flmlt0"]
+
+[ext_resource type="Texture2D" uid="uid://b53kofmyan42g" path="res://resource/sprite/weapon/weapon0002/Weapon0002.png" id="1_2tglc"]
+[ext_resource type="Texture2D" uid="uid://cog4u2dr46anc" path="res://resource/sprite/weapon/weapon0002/Weapon0002_reloading.png" id="2_kr54x"]
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_b4jme"]
+atlas = ExtResource("2_kr54x")
+region = Rect2(0, 0, 36, 15)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_hhpo6"]
+atlas = ExtResource("2_kr54x")
+region = Rect2(36, 0, 36, 15)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_vicgs"]
+atlas = ExtResource("2_kr54x")
+region = Rect2(72, 0, 36, 15)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_addwe"]
+atlas = ExtResource("2_kr54x")
+region = Rect2(108, 0, 36, 15)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_6nxvp"]
+atlas = ExtResource("2_kr54x")
+region = Rect2(144, 0, 36, 15)
+
+[sub_resource type="AtlasTexture" id="AtlasTexture_p0dy6"]
+atlas = ExtResource("2_kr54x")
+region = Rect2(180, 0, 36, 15)
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_2tglc")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}, {
+"frames": [{
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_b4jme")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_hhpo6")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_vicgs")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_addwe")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_6nxvp")
+}, {
+"duration": 1.0,
+"texture": SubResource("AtlasTexture_p0dy6")
+}],
+"loop": false,
+"name": &"equip",
+"speed": 10.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Weapon0003.tres b/DungeonShooting_Godot/resource/spriteFrames/Weapon0003.tres
new file mode 100644
index 0000000..0b2c99f
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Weapon0003.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://c7dt1uwdybn5"]
+
+[ext_resource type="Texture2D" uid="uid://clgf63extg800" path="res://resource/sprite/weapon/weapon0003/Weapon0003.png" id="1_ioiy8"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_ioiy8")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Weapon0004.tres b/DungeonShooting_Godot/resource/spriteFrames/Weapon0004.tres
new file mode 100644
index 0000000..57dbe94
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Weapon0004.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://k2tktysa7j86"]
+
+[ext_resource type="Texture2D" uid="uid://bxhbsq0wb2yo1" path="res://resource/sprite/weapon/knife1.png" id="1_jb24v"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_jb24v")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/spriteFrames/Weapon0005.tres b/DungeonShooting_Godot/resource/spriteFrames/Weapon0005.tres
new file mode 100644
index 0000000..42bfa7e
--- /dev/null
+++ b/DungeonShooting_Godot/resource/spriteFrames/Weapon0005.tres
@@ -0,0 +1,14 @@
+[gd_resource type="SpriteFrames" load_steps=2 format=3 uid="uid://djdvlmqsn8bie"]
+
+[ext_resource type="Texture2D" uid="uid://504f1r0mi33n" path="res://resource/sprite/weapon/weapon0005/Weapon0005.png" id="1_85vfm"]
+
+[resource]
+animations = [{
+"frames": [{
+"duration": 1.0,
+"texture": ExtResource("1_85vfm")
+}],
+"loop": true,
+"name": &"default",
+"speed": 5.0
+}]
diff --git a/DungeonShooting_Godot/resource/theme/mainTheme.tres b/DungeonShooting_Godot/resource/theme/mainTheme.tres
index f0db64e..42c5113 100644
--- a/DungeonShooting_Godot/resource/theme/mainTheme.tres
+++ b/DungeonShooting_Godot/resource/theme/mainTheme.tres
@@ -1,6 +1,6 @@
-[gd_resource type="Theme" load_steps=78 format=3 uid="uid://cyfdqgfonv22k"]
+[gd_resource type="Theme" load_steps=78 format=3 uid="uid://ds668te2rph30"]
-[ext_resource type="FontFile" uid="uid://byrf43x8my2ym" path="res://Silver.ttf" id="1_cylyq"]
+[ext_resource type="FontFile" uid="uid://cad0in7dtweo5" path="res://resource/font/VonwaonBitmap-16px.ttf" id="1_1e6k7"]
[sub_resource type="StyleBoxFlat" id="1"]
content_margin_left = 6.0
@@ -352,7 +352,7 @@
[sub_resource type="ImageTexture" id="58"]
-[sub_resource type="Image" id="Image_151oh"]
+[sub_resource type="Image" id="Image_flhyv"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 1, 255, 255, 255, 39, 255, 255, 255, 67, 255, 255, 255, 67, 255, 255, 255, 39, 255, 255, 255, 1, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 39, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 39, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 66, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 66, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 39, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 75, 255, 255, 255, 39, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 1, 255, 255, 255, 39, 255, 255, 255, 67, 255, 255, 255, 67, 255, 255, 255, 39, 255, 255, 255, 1, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -362,7 +362,7 @@
}
[sub_resource type="ImageTexture" id="60"]
-image = SubResource("Image_151oh")
+image = SubResource("Image_flhyv")
[sub_resource type="StyleBoxTexture" id="61"]
content_margin_left = 2.0
@@ -372,7 +372,7 @@
texture = SubResource("60")
region_rect = Rect2(0, 0, 12, 12)
-[sub_resource type="Image" id="Image_ev2o0"]
+[sub_resource type="Image" id="Image_raohe"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 248, 248, 248, 0, 248, 248, 248, 164, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 164, 248, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 0, 247, 247, 247, 97, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 248, 248, 248, 186, 247, 247, 247, 97, 247, 247, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 191, 191, 191, 4, 247, 247, 247, 98, 248, 248, 248, 167, 248, 248, 248, 167, 247, 247, 247, 98, 191, 191, 191, 4, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 191, 191, 0, 247, 247, 247, 0, 248, 248, 248, 0, 248, 248, 248, 0, 247, 247, 247, 0, 191, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -382,7 +382,7 @@
}
[sub_resource type="ImageTexture" id="63"]
-image = SubResource("Image_ev2o0")
+image = SubResource("Image_raohe")
[sub_resource type="StyleBoxTexture" id="64"]
content_margin_left = 2.0
@@ -392,7 +392,7 @@
texture = SubResource("63")
region_rect = Rect2(0, 0, 12, 12)
-[sub_resource type="Image" id="Image_22as7"]
+[sub_resource type="Image" id="Image_ccid8"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 173, 173, 0, 173, 173, 173, 163, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 163, 173, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 172, 172, 0, 172, 172, 172, 96, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 173, 173, 173, 185, 172, 172, 172, 96, 172, 172, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 127, 127, 127, 4, 173, 173, 173, 97, 173, 173, 173, 166, 173, 173, 173, 166, 173, 173, 173, 97, 127, 127, 127, 4, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 127, 127, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 173, 173, 173, 0, 127, 127, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -402,7 +402,7 @@
}
[sub_resource type="ImageTexture" id="66"]
-image = SubResource("Image_22as7")
+image = SubResource("Image_ccid8")
[sub_resource type="StyleBoxTexture" id="67"]
content_margin_left = 2.0
@@ -412,7 +412,7 @@
texture = SubResource("66")
region_rect = Rect2(0, 0, 12, 12)
-[sub_resource type="Image" id="Image_xsoii"]
+[sub_resource type="Image" id="Image_vvate"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 16, 255, 255, 255, 16, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 21, 255, 255, 255, 21, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 16, 255, 255, 255, 21, 255, 255, 255, 21, 255, 255, 255, 16, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 4, 255, 255, 255, 16, 255, 255, 255, 16, 255, 255, 255, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -422,7 +422,7 @@
}
[sub_resource type="ImageTexture" id="69"]
-image = SubResource("Image_xsoii")
+image = SubResource("Image_vvate")
[sub_resource type="StyleBoxTexture" id="70"]
content_margin_left = 0.0
@@ -446,7 +446,7 @@
content_margin_right = 4.0
content_margin_bottom = 4.0
-[sub_resource type="Image" id="Image_g5uvy"]
+[sub_resource type="Image" id="Image_pxi6j"]
data = {
"data": PackedByteArray(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 228, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 228, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 18, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 17, 255, 255, 255, 186, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 191, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 187, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 187, 255, 255, 255, 229, 255, 255, 255, 188, 255, 255, 255, 18, 255, 255, 255, 19, 255, 255, 255, 188, 255, 255, 255, 229, 255, 255, 255, 186, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 17, 255, 255, 255, 185, 255, 255, 255, 229, 255, 255, 255, 189, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 189, 255, 255, 255, 229, 255, 255, 255, 185, 255, 255, 255, 17, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 76, 255, 255, 255, 229, 255, 255, 255, 190, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 190, 255, 255, 255, 229, 255, 255, 255, 76, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 77, 255, 255, 255, 19, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 77, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
"format": "RGBA8",
@@ -456,7 +456,7 @@
}
[sub_resource type="ImageTexture" id="56"]
-image = SubResource("Image_g5uvy")
+image = SubResource("Image_pxi6j")
[sub_resource type="StyleBoxFlat" id="57"]
content_margin_left = 6.0
@@ -506,8 +506,8 @@
region_rect = Rect2(0, 0, 12, 12)
[resource]
-default_font = ExtResource("1_cylyq")
-default_font_size = 36
+default_font = ExtResource("1_1e6k7")
+default_font_size = 32
Button/colors/font_color = Color(0.780392, 0.780392, 0.780392, 1)
Button/colors/font_color_disabled = Color(1, 1, 1, 0.3)
Button/colors/font_color_focus = Color(0.868235, 0.868235, 0.868235, 1)
@@ -516,7 +516,7 @@
Button/colors/icon_color_hover = Color(1.15, 1.15, 1.15, 1)
Button/colors/icon_color_pressed = Color(0.135294, 0.496079, 1.04176, 1)
Button/constants/hseparation = 2
-Button/fonts/font = ExtResource("1_cylyq")
+Button/fonts/font = ExtResource("1_1e6k7")
Button/styles/disabled = SubResource("1")
Button/styles/focus = SubResource("2")
Button/styles/hover = SubResource("3")
@@ -618,7 +618,7 @@
Label/constants/shadow_as_outline = 0
Label/constants/shadow_offset_x = 1
Label/constants/shadow_offset_y = 1
-Label/fonts/font = ExtResource("1_cylyq")
+Label/fonts/font = ExtResource("1_1e6k7")
Label/styles/normal = SubResource("54")
LineEdit/colors/clear_button_color = Color(0.780392, 0.780392, 0.780392, 1)
LineEdit/colors/clear_button_color_pressed = Color(0.117647, 0.431373, 0.905882, 1)
@@ -629,7 +629,7 @@
LineEdit/colors/read_only = Color(1, 1, 1, 0.3)
LineEdit/colors/selection_color = Color(0.117647, 0.431373, 0.905882, 0.4)
LineEdit/constants/minimum_spaces = 12
-LineEdit/fonts/font = ExtResource("1_cylyq")
+LineEdit/fonts/font = ExtResource("1_1e6k7")
LineEdit/icons/clear = SubResource("56")
LineEdit/styles/focus = SubResource("2")
LineEdit/styles/normal = SubResource("4")
diff --git a/DungeonShooting_Godot/resource/theme/theme1.tres b/DungeonShooting_Godot/resource/theme/theme1.tres
new file mode 100644
index 0000000..b7e11f2
--- /dev/null
+++ b/DungeonShooting_Godot/resource/theme/theme1.tres
@@ -0,0 +1,23 @@
+[gd_resource type="Theme" load_steps=6 format=3 uid="uid://drb1ajgvcih7p"]
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_hp72k"]
+bg_color = Color(1, 1, 1, 0)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_s1akm"]
+bg_color = Color(1, 1, 1, 0)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_d8v3b"]
+bg_color = Color(1, 1, 1, 0)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_8y7k3"]
+bg_color = Color(1, 1, 1, 0)
+
+[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_2imip"]
+bg_color = Color(1, 1, 1, 0)
+
+[resource]
+Button/styles/disabled = SubResource("StyleBoxFlat_hp72k")
+Button/styles/focus = SubResource("StyleBoxFlat_s1akm")
+Button/styles/hover = SubResource("StyleBoxFlat_d8v3b")
+Button/styles/normal = SubResource("StyleBoxFlat_8y7k3")
+Button/styles/pressed = SubResource("StyleBoxFlat_2imip")
diff --git a/DungeonShooting_Godot/scene/Main.tscn b/DungeonShooting_Godot/scene/Main.tscn
index 21417bf..aeba075 100644
--- a/DungeonShooting_Godot/scene/Main.tscn
+++ b/DungeonShooting_Godot/scene/Main.tscn
@@ -1,7 +1,7 @@
[gd_scene load_steps=5 format=3 uid="uid://lbe753cb8heb"]
-[ext_resource type="Script" path="res://src/game/GameApplication.cs" id="3"]
-[ext_resource type="Script" path="res://src/game/camera/GameCamera.cs" id="4_3gsi2"]
+[ext_resource type="Script" path="res://src/game/GameApplication.cs" id="1_mh1cq"]
+[ext_resource type="Script" path="res://src/game/camera/GameCamera.cs" id="2_2j367"]
[sub_resource type="Shader" id="1"]
code = "shader_type canvas_item;
@@ -21,7 +21,7 @@
shader_parameter/offset = Vector2(0, 0)
[node name="Main" type="Node2D" node_paths=PackedStringArray("SubViewport", "SubViewportContainer", "SceneRoot", "GlobalNodeRoot")]
-script = ExtResource("3")
+script = ExtResource("1_mh1cq")
SubViewport = NodePath("ViewCanvas/SubViewportContainer/SubViewport")
SubViewportContainer = NodePath("ViewCanvas/SubViewportContainer")
SceneRoot = NodePath("ViewCanvas/SubViewportContainer/SubViewport/SceneRoot")
@@ -49,6 +49,6 @@
process_callback = 0
limit_smoothed = true
editor_draw_drag_margin = true
-script = ExtResource("4_3gsi2")
+script = ExtResource("2_2j367")
[node name="GlobalNodeRoot" type="Node2D" parent="."]
diff --git a/DungeonShooting_Godot/scene/Room.tscn b/DungeonShooting_Godot/scene/Room.tscn
deleted file mode 100644
index cfa9de3..0000000
--- a/DungeonShooting_Godot/scene/Room.tscn
+++ /dev/null
@@ -1,53 +0,0 @@
-[gd_scene load_steps=4 format=3 uid="uid://bqf2vks5ggnsp"]
-
-[ext_resource type="Script" path="res://src/game/room/RoomManager.cs" id="1_3w1c7"]
-[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="2_30rar"]
-
-[sub_resource type="Environment" id="Environment_ji6mi"]
-background_mode = 3
-glow_enabled = true
-glow_intensity = 4.74
-
-[node name="Room" type="Node2D" node_paths=PackedStringArray("NormalLayer", "YSortLayer", "TileRoot")]
-script = ExtResource("1_3w1c7")
-NormalLayer = NodePath("NormalLayer")
-YSortLayer = NodePath("YSortLayer")
-TileRoot = NodePath("TileRoot")
-metadata/_edit_vertical_guides_ = []
-
-[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
-environment = SubResource("Environment_ji6mi")
-
-[node name="TileRoot" type="TileMap" parent="."]
-y_sort_enabled = true
-tile_set = ExtResource("2_30rar")
-format = 2
-layer_0/name = "Floor"
-layer_0/z_index = -10
-layer_1/name = "Middle"
-layer_1/enabled = true
-layer_1/modulate = Color(1, 1, 1, 1)
-layer_1/y_sort_enabled = false
-layer_1/y_sort_origin = 0
-layer_1/z_index = 0
-layer_1/tile_data = PackedInt32Array()
-layer_2/name = "Top"
-layer_2/enabled = true
-layer_2/modulate = Color(1, 1, 1, 1)
-layer_2/y_sort_enabled = false
-layer_2/y_sort_origin = 0
-layer_2/z_index = 10
-layer_2/tile_data = PackedInt32Array()
-layer_3/name = "AisleFloor"
-layer_3/enabled = true
-layer_3/modulate = Color(1, 1, 1, 1)
-layer_3/y_sort_enabled = true
-layer_3/y_sort_origin = 0
-layer_3/z_index = -10
-layer_3/tile_data = PackedInt32Array()
-
-[node name="NormalLayer" type="Node2D" parent="."]
-z_index = -1
-
-[node name="YSortLayer" type="Node2D" parent="."]
-y_sort_enabled = true
diff --git a/DungeonShooting_Godot/scene/World.tscn b/DungeonShooting_Godot/scene/World.tscn
new file mode 100644
index 0000000..6c182e2
--- /dev/null
+++ b/DungeonShooting_Godot/scene/World.tscn
@@ -0,0 +1,53 @@
+[gd_scene load_steps=4 format=3 uid="uid://bqf2vks5ggnsp"]
+
+[ext_resource type="Script" path="res://src/game/room/World.cs" id="1_kt3mm"]
+[ext_resource type="TileSet" uid="uid://b00g22o1cqhe8" path="res://resource/map/tileset/TileSet1.tres" id="2_p6iui"]
+
+[sub_resource type="Environment" id="Environment_ji6mi"]
+background_mode = 3
+glow_enabled = true
+glow_intensity = 4.74
+
+[node name="World" type="Node2D" node_paths=PackedStringArray("NormalLayer", "YSortLayer", "TileRoot")]
+script = ExtResource("1_kt3mm")
+NormalLayer = NodePath("NormalLayer")
+YSortLayer = NodePath("YSortLayer")
+TileRoot = NodePath("TileRoot")
+metadata/_edit_vertical_guides_ = []
+
+[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
+environment = SubResource("Environment_ji6mi")
+
+[node name="TileRoot" type="TileMap" parent="."]
+y_sort_enabled = true
+tile_set = ExtResource("2_p6iui")
+format = 2
+layer_0/name = "Floor"
+layer_0/z_index = -10
+layer_1/name = "Middle"
+layer_1/enabled = true
+layer_1/modulate = Color(1, 1, 1, 1)
+layer_1/y_sort_enabled = false
+layer_1/y_sort_origin = 0
+layer_1/z_index = 0
+layer_1/tile_data = PackedInt32Array()
+layer_2/name = "Top"
+layer_2/enabled = true
+layer_2/modulate = Color(1, 1, 1, 1)
+layer_2/y_sort_enabled = false
+layer_2/y_sort_origin = 0
+layer_2/z_index = 10
+layer_2/tile_data = PackedInt32Array()
+layer_3/name = "AisleFloor"
+layer_3/enabled = true
+layer_3/modulate = Color(1, 1, 1, 1)
+layer_3/y_sort_enabled = true
+layer_3/y_sort_origin = 0
+layer_3/z_index = -10
+layer_3/tile_data = PackedInt32Array()
+
+[node name="NormalLayer" type="Node2D" parent="."]
+z_index = -1
+
+[node name="YSortLayer" type="Node2D" parent="."]
+y_sort_enabled = true
diff --git a/DungeonShooting_Godot/scene/test/TestGenerateDungeon.tscn b/DungeonShooting_Godot/scene/test/TestGenerateDungeon.tscn
index 710b7e2..da0143e 100644
--- a/DungeonShooting_Godot/scene/test/TestGenerateDungeon.tscn
+++ b/DungeonShooting_Godot/scene/test/TestGenerateDungeon.tscn
@@ -1,7 +1,8 @@
[gd_scene load_steps=5 format=3 uid="uid://5bbx1u0od3jm"]
[ext_resource type="Script" path="res://src/test/TestGenerateDungeon.cs" id="1"]
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="2"]
+
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_rvg0t"]
texture = ExtResource("2")
diff --git a/DungeonShooting_Godot/scene/test/TestNavigation.tscn b/DungeonShooting_Godot/scene/test/TestNavigation.tscn
deleted file mode 100644
index 4a0bddb..0000000
--- a/DungeonShooting_Godot/scene/test/TestNavigation.tscn
+++ /dev/null
@@ -1,79 +0,0 @@
-[gd_scene load_steps=8 format=2]
-
-[ext_resource path="res://src/test/TestNavigation.cs" type="Script" id=1]
-[ext_resource path="res://icon.png" type="Texture2D" id=2]
-[ext_resource path="res://resource/sprite/environment/craftpix-net-248911/16x16.png" type="Texture2D" id=3]
-
-[sub_resource type="NavigationPolygon" id=2]
-vertices = PackedVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 )
-polygons = [ PackedInt32Array( 0, 1, 2, 3 ) ]
-
-[sub_resource type="TileSet" id=3]
-0/name = "16x16.png 0"
-0/texture = ExtResource( 3 )
-0/tex_offset = Vector2( 0, 0 )
-0/modulate = Color( 1, 1, 1, 1 )
-0/region = Rect2( 0, 0, 16, 16 )
-0/tile_mode = 0
-0/occluder_offset = Vector2( 0, 0 )
-0/navigation_offset = Vector2( 0, 0 )
-0/navigation = SubResource( 2 )
-0/shape_offset = Vector2( 0, 0 )
-0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-0/shape_one_way = false
-0/shape_one_way_margin = 0.0
-0/shapes = [ ]
-0/z_index = 0
-
-[sub_resource type="NavigationPolygon" id=4]
-vertices = PackedVector2Array( 0, 0, 16, 0, 16, 16, 0, 16 )
-polygons = [ PackedInt32Array( 0, 1, 2, 3 ) ]
-
-[sub_resource type="TileSet" id=5]
-0/name = "16x16.png 0"
-0/texture = ExtResource( 3 )
-0/tex_offset = Vector2( 0, 0 )
-0/modulate = Color( 1, 1, 1, 1 )
-0/region = Rect2( 32, 0, 16, 16 )
-0/tile_mode = 0
-0/occluder_offset = Vector2( 0, 0 )
-0/navigation_offset = Vector2( 0, 0 )
-0/navigation = SubResource( 4 )
-0/shape_offset = Vector2( 0, 0 )
-0/shape_transform = Transform2D( 1, 0, 0, 1, 0, 0 )
-0/shape_one_way = false
-0/shape_one_way_margin = 0.0
-0/shapes = [ ]
-0/z_index = 0
-
-[node name="TestNavigation" type="Node2D"]
-scale = Vector2( 4, 4 )
-script = ExtResource( 1 )
-
-[node name="Marker2D" type="Marker2D" parent="."]
-z_index = -3
-
-[node name="Node2D" type="Node2D" parent="Marker2D"]
-
-[node name="Node2D" type="Node2D" parent="Marker2D/Node2D"]
-
-[node name="TileMap" type="TileMap" parent="Marker2D/Node2D/Node2D"]
-tile_set = SubResource( 3 )
-cell_size = Vector2( 16, 16 )
-bake_navigation = true
-format = 1
-tile_data = PackedInt32Array( 131074, 0, 0, 131075, 0, 0, 131076, 0, 0, 131077, 0, 0, 131078, 0, 0, 196610, 0, 0, 196611, 0, 0, 196612, 0, 0, 196613, 0, 0, 196614, 0, 0, 262146, 0, 0, 262147, 0, 0, 262148, 0, 0, 262149, 0, 0, 262150, 0, 0, 327682, 0, 0, 327683, 0, 0, 327684, 0, 0, 327685, 0, 0, 327686, 0, 0, 327699, 0, 0, 327700, 0, 0, 327701, 0, 0, 327702, 0, 0, 327703, 0, 0, 327704, 0, 0, 327705, 0, 0, 393218, 0, 0, 393219, 0, 0, 393220, 0, 0, 393221, 0, 0, 393222, 0, 0, 393223, 0, 0, 393224, 0, 0, 393225, 0, 0, 393226, 0, 0, 393227, 0, 0, 393228, 0, 0, 393229, 0, 0, 393235, 0, 0, 393236, 0, 0, 393237, 0, 0, 393238, 0, 0, 393239, 0, 0, 393240, 0, 0, 393241, 0, 0, 458754, 0, 0, 458755, 0, 0, 458756, 0, 0, 458757, 0, 0, 458758, 0, 0, 458759, 0, 0, 458760, 0, 0, 458761, 0, 0, 458762, 0, 0, 458763, 0, 0, 458764, 0, 0, 458765, 0, 0, 458771, 0, 0, 458772, 0, 0, 458773, 0, 0, 458774, 0, 0, 458775, 0, 0, 458776, 0, 0, 458777, 0, 0, 524299, 0, 0, 524300, 0, 0, 524301, 0, 0, 524307, 0, 0, 524308, 0, 0, 524309, 0, 0, 524310, 0, 0, 524311, 0, 0, 524312, 0, 0, 524313, 0, 0, 589835, 0, 0, 589836, 0, 0, 589837, 0, 0, 589843, 0, 0, 589844, 0, 0, 589845, 0, 0, 589846, 0, 0, 589847, 0, 0, 589848, 0, 0, 589849, 0, 0, 589850, 0, 0, 589851, 0, 0, 655371, 0, 0, 655372, 0, 0, 655373, 0, 0, 655379, 0, 0, 655380, 0, 0, 655381, 0, 0, 655382, 0, 0, 655383, 0, 0, 655384, 0, 0, 655385, 0, 0, 655386, 0, 0, 655387, 0, 0, 720897, 0, 0, 720898, 0, 0, 720899, 0, 0, 720900, 0, 0, 720901, 0, 0, 720902, 0, 0, 720903, 0, 0, 720904, 0, 0, 720905, 0, 0, 720906, 0, 0, 720907, 0, 0, 720908, 0, 0, 720909, 0, 0, 720915, 0, 0, 720916, 0, 0, 720917, 0, 0, 720918, 0, 0, 720919, 0, 0, 720920, 0, 0, 720921, 0, 0, 720922, 0, 0, 720923, 0, 0, 786433, 0, 0, 786434, 0, 0, 786435, 0, 0, 786436, 0, 0, 786437, 0, 0, 786438, 0, 0, 786439, 0, 0, 786440, 0, 0, 786441, 0, 0, 786442, 0, 0, 786443, 0, 0, 786444, 0, 0, 786445, 0, 0, 786446, 0, 0, 786447, 0, 0, 786448, 0, 0, 786449, 0, 0, 786450, 0, 0, 786451, 0, 0, 786452, 0, 0, 786453, 0, 0, 786454, 0, 0, 786455, 0, 0, 786456, 0, 0, 786457, 0, 0, 786458, 0, 0, 786459, 0, 0, 851979, 0, 0, 851980, 0, 0, 851981, 0, 0, 851982, 0, 0, 851983, 0, 0, 851984, 0, 0, 851985, 0, 0, 851986, 0, 0, 851987, 0, 0, 851988, 0, 0, 851989, 0, 0, 851990, 0, 0, 851991, 0, 0, 851992, 0, 0, 851993, 0, 0, 851994, 0, 0, 851995, 0, 0, 917515, 0, 0, 917516, 0, 0, 917517, 0, 0, 917518, 0, 0, 917519, 0, 0, 917520, 0, 0, 917521, 0, 0, 917522, 0, 0, 917523, 0, 0, 917524, 0, 0, 917525, 0, 0, 917526, 0, 0, 917527, 0, 0, 917528, 0, 0, 917529, 0, 0, 917530, 0, 0, 917531, 0, 0, 983051, 0, 0, 983052, 0, 0, 983053, 0, 0, 983054, 0, 0, 983055, 0, 0, 983056, 0, 0, 983057, 0, 0, 983058, 0, 0, 983059, 0, 0, 983060, 0, 0, 983061, 0, 0, 983062, 0, 0, 983063, 0, 0, 983064, 0, 0, 983065, 0, 0, 983066, 0, 0, 983067, 0, 0 )
-
-[node name="Node2D2" type="Node2D" parent="Marker2D/Node2D"]
-
-[node name="TileMap" type="TileMap" parent="Marker2D/Node2D/Node2D2"]
-tile_set = SubResource( 5 )
-cell_size = Vector2( 16, 16 )
-bake_navigation = true
-format = 1
-tile_data = PackedInt32Array( 131088, 0, 0, 131089, 0, 0, 131090, 0, 0, 131091, 0, 0, 131092, 0, 0, 196622, 0, 0, 196623, 0, 0, 196624, 0, 0, 196628, 0, 0, 262156, 0, 0, 262157, 0, 0, 262158, 0, 0, 262164, 0, 0, 327692, 0, 0, 524302, 0, 0, 524303, 0, 0, 524304, 0, 0, 524305, 0, 0, 524306, 0, 0, 589838, 0, 0, 589839, 0, 0, 589840, 0, 0, 589841, 0, 0, 589842, 0, 0 )
-
-[node name="Sprite2D" type="Sprite2D" parent="Marker2D"]
-position = Vector2( 33, 32 )
-scale = Vector2( 0.2, 0.2 )
-texture = ExtResource( 2 )
diff --git a/DungeonShooting_Godot/scene/test/TestReadExcel.tscn b/DungeonShooting_Godot/scene/test/TestReadExcel.tscn
new file mode 100644
index 0000000..1ab48cd
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestReadExcel.tscn
@@ -0,0 +1,6 @@
+[gd_scene load_steps=2 format=3 uid="uid://deq562id5sngp"]
+
+[ext_resource type="Script" path="res://src/test/TestReadExcel.cs" id="1_y8vrr"]
+
+[node name="TestReadExcel" type="Node2D"]
+script = ExtResource("1_y8vrr")
diff --git a/DungeonShooting_Godot/scene/test/TestTileLayer.tscn b/DungeonShooting_Godot/scene/test/TestTileLayer.tscn
index 90c2b63..c9a97e3 100644
--- a/DungeonShooting_Godot/scene/test/TestTileLayer.tscn
+++ b/DungeonShooting_Godot/scene/test/TestTileLayer.tscn
@@ -1,10 +1,11 @@
[gd_scene load_steps=13 format=3 uid="uid://d1m4kunwifxax"]
-[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1"]
-[ext_resource type="Texture2D" uid="uid://chd2vtesap5cf" path="res://resource/sprite/role/role1.png" id="2"]
-[ext_resource type="Texture2D" uid="uid://5geiuvv6hyov" path="res://resource/sprite/gun/gun2.png" id="3"]
+[ext_resource type="Texture2D" uid="uid://dj8nrd5od4fcl" path="res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://chd2vtesap5cf" path="res://resource/sprite/role/enemy0001/Enemy0001.png" id="2"]
+[ext_resource type="Texture2D" uid="uid://5geiuvv6hyov" path="res://resource/sprite/weapon/gun2.png" id="3"]
[ext_resource type="Texture2D" uid="uid://dto03bc2qbhnj" path="res://resource/sprite/shell/shellCase.png" id="4"]
+
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ch2b5"]
texture = ExtResource("1")
margins = Vector2i(80, 144)
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig.cs b/DungeonShooting_Godot/src/config/ExcelConfig.cs
new file mode 100644
index 0000000..a1bd2b5
--- /dev/null
+++ b/DungeonShooting_Godot/src/config/ExcelConfig.cs
@@ -0,0 +1,168 @@
+using System;
+using System.Collections.Generic;
+using System.Text.Json;
+using Godot;
+
+namespace Config;
+
+public static partial class ExcelConfig
+{
+ ///
+ /// ActivityObject.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List ActivityObject_List { get; private set; }
+ ///
+ /// ActivityObject.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary ActivityObject_Map { get; private set; }
+
+ ///
+ /// Sound.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List Sound_List { get; private set; }
+ ///
+ /// Sound.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary Sound_Map { get; private set; }
+
+ ///
+ /// Weapon.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
+ ///
+ public static List Weapon_List { get; private set; }
+ ///
+ /// Weapon.xlsx表数据集合, 里 Map 形式存储, key 为 Id
+ ///
+ public static Dictionary Weapon_Map { get; private set; }
+
+
+ private static bool _init = false;
+ ///
+ /// 初始化所有配置表数据
+ ///
+ public static void Init()
+ {
+ if (_init) return;
+ _init = true;
+
+ _InitActivityObjectConfig();
+ _InitSoundConfig();
+ _InitWeaponConfig();
+
+ _InitWeaponRef();
+ }
+ private static void _InitActivityObjectConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/ActivityObject.json");
+ ActivityObject_List = JsonSerializer.Deserialize>(text);
+ ActivityObject_Map = new Dictionary();
+ foreach (var item in ActivityObject_List)
+ {
+ ActivityObject_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'ActivityObject'失败!");
+ }
+ }
+ private static void _InitSoundConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/Sound.json");
+ Sound_List = JsonSerializer.Deserialize>(text);
+ Sound_Map = new Dictionary();
+ foreach (var item in Sound_List)
+ {
+ Sound_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'Sound'失败!");
+ }
+ }
+ private static void _InitWeaponConfig()
+ {
+ try
+ {
+ var text = _ReadConfigAsText("res://resource/config/Weapon.json");
+ Weapon_List = new List(JsonSerializer.Deserialize>(text));
+ Weapon_Map = new Dictionary();
+ foreach (var item in Weapon_List)
+ {
+ Weapon_Map.Add(item.Id, item);
+ }
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化表'Weapon'失败!");
+ }
+ }
+
+ private static void _InitWeaponRef()
+ {
+ foreach (Ref_Weapon item in Weapon_List)
+ {
+ try
+ {
+ if (!string.IsNullOrEmpty(item.__ShootSound))
+ {
+ item.ShootSound = Sound_Map[item.__ShootSound];
+ }
+
+ if (!string.IsNullOrEmpty(item.__BeginReloadSound))
+ {
+ item.BeginReloadSound = Sound_Map[item.__BeginReloadSound];
+ }
+
+ if (!string.IsNullOrEmpty(item.__ReloadSound))
+ {
+ item.ReloadSound = Sound_Map[item.__ReloadSound];
+ }
+
+ if (!string.IsNullOrEmpty(item.__ReloadFinishSound))
+ {
+ item.ReloadFinishSound = Sound_Map[item.__ReloadFinishSound];
+ }
+
+ if (!string.IsNullOrEmpty(item.__EquipSound))
+ {
+ item.EquipSound = Sound_Map[item.__EquipSound];
+ }
+
+ if (item.__OtherSoundMap != null)
+ {
+ item.OtherSoundMap = new Dictionary();
+ foreach (var pair in item.__OtherSoundMap)
+ {
+ item.OtherSoundMap.Add(pair.Key, Sound_Map[pair.Value]);
+ }
+ }
+
+ if (!string.IsNullOrEmpty(item.__AiUseAttribute))
+ {
+ item.AiUseAttribute = Weapon_Map[item.__AiUseAttribute];
+ }
+
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ throw new Exception("初始化'Weapon'引用其他表数据失败, 当前行id: " + item.Id);
+ }
+ }
+ }
+ private static string _ReadConfigAsText(string path)
+ {
+ var file = FileAccess.Open(path, FileAccess.ModeFlags.Read);
+ var asText = file.GetAsText();
+ file.Dispose();
+ return asText;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_ActivityObject.cs b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityObject.cs
new file mode 100644
index 0000000..12e9730
--- /dev/null
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_ActivityObject.cs
@@ -0,0 +1,55 @@
+using System.Text.Json.Serialization;
+using System.Collections.Generic;
+
+namespace Config;
+
+public static partial class ExcelConfig
+{
+ public class ActivityObject
+ {
+ ///
+ /// 物体唯一id
+ /// 需要添加类型前缀
+ ///
+ [JsonInclude]
+ public string Id;
+
+ ///
+ /// Test(测试对象): 2
+ /// Role(角色): 3
+ /// Enemy(敌人): 4
+ /// Weapon(武器): 5
+ /// Bullet(子弹): 6
+ /// Shell(弹壳): 7
+ /// Effect(特效): 8
+ /// Other(其它类型): 9
+ ///
+ [JsonInclude]
+ public int Type;
+
+ ///
+ /// 物体预制场景路径, 场景根节点必须是ActivityObject子类
+ ///
+ [JsonInclude]
+ public string Prefab;
+
+ ///
+ /// 物体备注
+ ///
+ [JsonInclude]
+ public string Remark;
+
+ ///
+ /// 返回浅拷贝出的新对象
+ ///
+ public ActivityObject Clone()
+ {
+ var inst = new ActivityObject();
+ inst.Id = Id;
+ inst.Type = Type;
+ inst.Prefab = Prefab;
+ inst.Remark = Remark;
+ return inst;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_Sound.cs b/DungeonShooting_Godot/src/config/ExcelConfig_Sound.cs
new file mode 100644
index 0000000..5131c2a
--- /dev/null
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_Sound.cs
@@ -0,0 +1,47 @@
+using System.Text.Json.Serialization;
+using System.Collections.Generic;
+
+namespace Config;
+
+public static partial class ExcelConfig
+{
+ public class Sound
+ {
+ ///
+ /// 音效id
+ ///
+ [JsonInclude]
+ public string Id;
+
+ ///
+ /// 文件路径
+ ///
+ [JsonInclude]
+ public string Path;
+
+ ///
+ /// 音量(范围0 - 1)
+ ///
+ [JsonInclude]
+ public float Volume;
+
+ ///
+ /// 备注
+ ///
+ [JsonInclude]
+ public string Remark;
+
+ ///
+ /// 返回浅拷贝出的新对象
+ ///
+ public Sound Clone()
+ {
+ var inst = new Sound();
+ inst.Id = Id;
+ inst.Path = Path;
+ inst.Volume = Volume;
+ inst.Remark = Remark;
+ return inst;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs b/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs
new file mode 100644
index 0000000..ac16ffc
--- /dev/null
+++ b/DungeonShooting_Godot/src/config/ExcelConfig_Weapon.cs
@@ -0,0 +1,444 @@
+using System.Text.Json.Serialization;
+using System.Collections.Generic;
+
+namespace Config;
+
+public static partial class ExcelConfig
+{
+ public class Weapon
+ {
+ ///
+ /// 武器属性id
+ ///
+ [JsonInclude]
+ public string Id;
+
+ ///
+ /// 属性绑定武器的Id,如果是Ai使用的数据, 则填空字符串串
+ ///
+ [JsonInclude]
+ public string WeaponId;
+
+ ///
+ /// 武器显示的名称
+ ///
+ [JsonInclude]
+ public string Name;
+
+ ///
+ /// 武器的图标
+ ///
+ [JsonInclude]
+ public string Icon;
+
+ ///
+ /// 重量
+ ///
+ [JsonInclude]
+ public float Weight;
+
+ ///
+ /// 武器类型:
+ /// 1.副武器
+ /// 2.主武器
+ /// 3.重型武器
+ ///
+ [JsonInclude]
+ public byte WeightType;
+
+ ///
+ /// 是否连续发射, 如果为false, 则每次发射都需要扣动扳机
+ ///
+ [JsonInclude]
+ public bool ContinuousShoot;
+
+ ///
+ /// 弹夹容量
+ ///
+ [JsonInclude]
+ public int AmmoCapacity;
+
+ ///
+ /// 弹药容量上限
+ ///
+ [JsonInclude]
+ public int MaxAmmoCapacity;
+
+ ///
+ /// 默认起始备用弹药数量
+ ///
+ [JsonInclude]
+ public int StandbyAmmoCapacity;
+
+ ///
+ /// 装弹时间 (单位: 秒)
+ ///
+ [JsonInclude]
+ public float ReloadTime;
+
+ ///
+ /// 每粒子弹是否是单独装填, 如果是, 那么每上一发子弹的时间就是 ReloadTime, 可以做霰弹枪装填效果
+ ///
+ [JsonInclude]
+ public bool AloneReload;
+
+ ///
+ /// 单独装填时每次装填子弹数量, 必须要将 'AloneReload' 属性设置为 true
+ ///
+ [JsonInclude]
+ public int AloneReloadCount;
+
+ ///
+ /// 单独装弹模式下,从触发装弹到开始装第一发子弹中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true
+ ///
+ [JsonInclude]
+ public float AloneReloadBeginIntervalTime;
+
+ ///
+ /// 单独装弹模式下,从装完最后一发子弹到可以射击中间的间隔时间, 必须要将 'AloneReload' 属性设置为 true
+ ///
+ [JsonInclude]
+ public float AloneReloadFinishIntervalTime;
+
+ ///
+ /// 单独装填的子弹时可以立即射击, 必须要将 'AloneReload' 属性设置为 true
+ ///
+ [JsonInclude]
+ public bool AloneReloadCanShoot;
+
+ ///
+ /// 是否为松发开火, 也就是松开扳机才开火, 若要启用该属性, 必须将 'ContinuousShoot' 设置为 false
+ ///
+ [JsonInclude]
+ public bool LooseShoot;
+
+ ///
+ /// 最少需要蓄力多久才能开火, 必须将 'LooseShoot' 设置为 true
+ ///
+ [JsonInclude]
+ public float MinChargeTime;
+
+ ///
+ /// 连续发射最小次数, 仅当 ContinuousShoot 为 false 时生效
+ ///
+ [JsonInclude]
+ public int MinContinuousCount;
+
+ ///
+ /// 连续发射最大次数, 仅当 ContinuousShoot 为 false 时生效
+ ///
+ [JsonInclude]
+ public int MaxContinuousCount;
+
+ ///
+ /// 按下一次扳机后需要多长时间才能再次感应按下
+ ///
+ [JsonInclude]
+ public float TriggerInterval;
+
+ ///
+ /// 初始射速, 初始每分钟能开火次数
+ ///
+ [JsonInclude]
+ public float StartFiringSpeed;
+
+ ///
+ /// 最终射速, 最终每分钟能开火次数, 仅当 ContinuousShoot 为 true 时生效
+ ///
+ [JsonInclude]
+ public float FinalFiringSpeed;
+
+ ///
+ /// 按下扳机并开火后射速每秒增加量
+ ///
+ [JsonInclude]
+ public float FiringSpeedAddSpeed;
+
+ ///
+ /// 松开扳机后射速消散速率
+ ///
+ [JsonInclude]
+ public float FiringSpeedBackSpeed;
+
+ ///
+ /// 单次开火发射子弹最小数量
+ ///
+ [JsonInclude]
+ public int MinFireBulletCount;
+
+ ///
+ /// 单次开火发射子弹最大数量
+ ///
+ [JsonInclude]
+ public int MaxFireBulletCount;
+
+ ///
+ /// 从按下扳机到发射第一发子弹的延时时, 如果中途松开扳机, 那么延时时间会重新计算, 必须将 'LooseShoot' 设置为 false
+ ///
+ [JsonInclude]
+ public float DelayedTime;
+
+ ///
+ /// 初始散射半径
+ ///
+ [JsonInclude]
+ public float StartScatteringRange;
+
+ ///
+ /// 最终散射半径
+ ///
+ [JsonInclude]
+ public float FinalScatteringRange;
+
+ ///
+ /// 每次发射后散射增加值
+ ///
+ [JsonInclude]
+ public float ScatteringRangeAddValue;
+
+ ///
+ /// 散射值销退速率
+ ///
+ [JsonInclude]
+ public float ScatteringRangeBackSpeed;
+
+ ///
+ /// 开始销退散射值的延时时间
+ ///
+ [JsonInclude]
+ public float ScatteringRangeBackDelayTime;
+
+ ///
+ /// 子弹飞行最小距离
+ ///
+ [JsonInclude]
+ public float MinDistance;
+
+ ///
+ /// 子弹飞行最大距离
+ ///
+ [JsonInclude]
+ public float MaxDistance;
+
+ ///
+ /// 最小后坐力 (仅用于开火后武器身抖动)
+ ///
+ [JsonInclude]
+ public float MinBacklash;
+
+ ///
+ /// 最大后坐力 (仅用于开火后武器身抖动)
+ ///
+ [JsonInclude]
+ public float MaxBacklash;
+
+ ///
+ /// 后坐力偏移回归回归速度
+ ///
+ [JsonInclude]
+ public float BacklashRegressionSpeed;
+
+ ///
+ /// 开火后武器口上抬角度
+ ///
+ [JsonInclude]
+ public float UpliftAngle;
+
+ ///
+ /// 武器默认上抬角度
+ ///
+ [JsonInclude]
+ public float DefaultAngle;
+
+ ///
+ /// 开火后武器口角度恢复速度倍数
+ ///
+ [JsonInclude]
+ public float UpliftAngleRestore;
+
+ ///
+ /// 默认射出的子弹id
+ ///
+ [JsonInclude]
+ public string BulletId;
+
+ ///
+ /// 投抛状态下物体碰撞器大小
+ ///
+ [JsonInclude]
+ public SerializeVector2 ThrowCollisionSize;
+
+ ///
+ /// 射击音效
+ ///
+ public Sound ShootSound;
+
+ ///
+ /// 开始换弹音效
+ ///
+ public Sound BeginReloadSound;
+
+ ///
+ /// 开始换弹音效延时时间
+ ///
+ [JsonInclude]
+ public float BeginReloadSoundDelayTime;
+
+ ///
+ /// 换弹音效
+ ///
+ public Sound ReloadSound;
+
+ ///
+ /// 换弹音效延时时间
+ ///
+ [JsonInclude]
+ public float ReloadSoundDelayTime;
+
+ ///
+ /// 换弹结束音效
+ ///
+ public Sound ReloadFinishSound;
+
+ ///
+ /// 换弹结束音效在换弹结束前多久开始
+ /// 注意: 如果'AloneReload'为true, 那么当前属性的值应该小于'AloneReloadFinishIntervalTime'
+ ///
+ [JsonInclude]
+ public float ReloadFinishSoundAdvanceTime;
+
+ ///
+ /// 上膛音效
+ ///
+ public Sound EquipSound;
+
+ ///
+ /// 上膛音效延时时间
+ ///
+ [JsonInclude]
+ public float EquipSoundDelayTime;
+
+ ///
+ /// 其他音效
+ ///
+ public Dictionary OtherSoundMap;
+
+ ///
+ /// Ai属性
+ /// Ai 使用该武器时的武器数据, 设置该字段, 可让同一把武器在敌人和玩家手上有不同属性
+ /// 如果不填则Ai和玩家使用同一种属性
+ ///
+ public Weapon AiUseAttribute;
+
+ ///
+ /// Ai属性
+ /// 目标锁定时间, 也就是瞄准目标多久才会开火, (单位: 秒)
+ ///
+ [JsonInclude]
+ public float AiTargetLockingTime;
+
+ ///
+ /// Ai属性
+ /// Ai使用该武器发射的子弹速度缩放比
+ ///
+ [JsonInclude]
+ public float AiBulletSpeedScale;
+
+ ///
+ /// Ai属性
+ /// Ai使用该武器消耗弹药的概率, (0 - 1)
+ ///
+ [JsonInclude]
+ public float AiAmmoConsumptionProbability;
+
+ ///
+ /// 返回浅拷贝出的新对象
+ ///
+ public Weapon Clone()
+ {
+ var inst = new Weapon();
+ inst.Id = Id;
+ inst.WeaponId = WeaponId;
+ inst.Name = Name;
+ inst.Icon = Icon;
+ inst.Weight = Weight;
+ inst.WeightType = WeightType;
+ inst.ContinuousShoot = ContinuousShoot;
+ inst.AmmoCapacity = AmmoCapacity;
+ inst.MaxAmmoCapacity = MaxAmmoCapacity;
+ inst.StandbyAmmoCapacity = StandbyAmmoCapacity;
+ inst.ReloadTime = ReloadTime;
+ inst.AloneReload = AloneReload;
+ inst.AloneReloadCount = AloneReloadCount;
+ inst.AloneReloadBeginIntervalTime = AloneReloadBeginIntervalTime;
+ inst.AloneReloadFinishIntervalTime = AloneReloadFinishIntervalTime;
+ inst.AloneReloadCanShoot = AloneReloadCanShoot;
+ inst.LooseShoot = LooseShoot;
+ inst.MinChargeTime = MinChargeTime;
+ inst.MinContinuousCount = MinContinuousCount;
+ inst.MaxContinuousCount = MaxContinuousCount;
+ inst.TriggerInterval = TriggerInterval;
+ inst.StartFiringSpeed = StartFiringSpeed;
+ inst.FinalFiringSpeed = FinalFiringSpeed;
+ inst.FiringSpeedAddSpeed = FiringSpeedAddSpeed;
+ inst.FiringSpeedBackSpeed = FiringSpeedBackSpeed;
+ inst.MinFireBulletCount = MinFireBulletCount;
+ inst.MaxFireBulletCount = MaxFireBulletCount;
+ inst.DelayedTime = DelayedTime;
+ inst.StartScatteringRange = StartScatteringRange;
+ inst.FinalScatteringRange = FinalScatteringRange;
+ inst.ScatteringRangeAddValue = ScatteringRangeAddValue;
+ inst.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed;
+ inst.ScatteringRangeBackDelayTime = ScatteringRangeBackDelayTime;
+ inst.MinDistance = MinDistance;
+ inst.MaxDistance = MaxDistance;
+ inst.MinBacklash = MinBacklash;
+ inst.MaxBacklash = MaxBacklash;
+ inst.BacklashRegressionSpeed = BacklashRegressionSpeed;
+ inst.UpliftAngle = UpliftAngle;
+ inst.DefaultAngle = DefaultAngle;
+ inst.UpliftAngleRestore = UpliftAngleRestore;
+ inst.BulletId = BulletId;
+ inst.ThrowCollisionSize = ThrowCollisionSize;
+ inst.ShootSound = ShootSound;
+ inst.BeginReloadSound = BeginReloadSound;
+ inst.BeginReloadSoundDelayTime = BeginReloadSoundDelayTime;
+ inst.ReloadSound = ReloadSound;
+ inst.ReloadSoundDelayTime = ReloadSoundDelayTime;
+ inst.ReloadFinishSound = ReloadFinishSound;
+ inst.ReloadFinishSoundAdvanceTime = ReloadFinishSoundAdvanceTime;
+ inst.EquipSound = EquipSound;
+ inst.EquipSoundDelayTime = EquipSoundDelayTime;
+ inst.OtherSoundMap = OtherSoundMap;
+ inst.AiUseAttribute = AiUseAttribute;
+ inst.AiTargetLockingTime = AiTargetLockingTime;
+ inst.AiBulletSpeedScale = AiBulletSpeedScale;
+ inst.AiAmmoConsumptionProbability = AiAmmoConsumptionProbability;
+ return inst;
+ }
+ }
+ private class Ref_Weapon : Weapon
+ {
+ [JsonInclude]
+ public string __ShootSound;
+
+ [JsonInclude]
+ public string __BeginReloadSound;
+
+ [JsonInclude]
+ public string __ReloadSound;
+
+ [JsonInclude]
+ public string __ReloadFinishSound;
+
+ [JsonInclude]
+ public string __EquipSound;
+
+ [JsonInclude]
+ public Dictionary __OtherSoundMap;
+
+ [JsonInclude]
+ public string __AiUseAttribute;
+
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/SerializeVector2.cs b/DungeonShooting_Godot/src/framework/SerializeVector2.cs
deleted file mode 100644
index 4e0a888..0000000
--- a/DungeonShooting_Godot/src/framework/SerializeVector2.cs
+++ /dev/null
@@ -1,59 +0,0 @@
-
-using System.Text.Json.Serialization;
-using Godot;
-
-///
-/// 可序列化的 Vector2 对象
-///
-public class SerializeVector2
-{
- public SerializeVector2(float x, float y)
- {
- X = x;
- Y = y;
- }
-
- public SerializeVector2(Vector2 v)
- {
- X = v.X;
- Y = v.Y;
- }
-
- public SerializeVector2(Vector2I v)
- {
- X = v.X;
- Y = v.Y;
- }
-
- public SerializeVector2(SerializeVector2 v)
- {
- X = v.X;
- Y = v.Y;
- }
-
- public SerializeVector2()
- {
-
- }
-
- [JsonInclude]
- public float X { get; private set; }
- [JsonInclude]
- public float Y { get; private set; }
-
- ///
- /// 转为 Vector2
- ///
- public Vector2 AsVector2()
- {
- return new Vector2(X, Y);
- }
-
- ///
- /// 转为 Vector2I
- ///
- public Vector2I AsVector2I()
- {
- return new Vector2I((int)X, (int)Y);
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index 33060d8..49d6b0c 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -23,19 +23,28 @@
public string ItemId { get; private set; }
///
- /// 当前物体显示的精灵图像, 节点名称必须叫 "AnimatedSprite2D", 类型为 AnimatedSprite2D
+ /// 是否是静态物体, 如果为true, 则会禁用移动处理
///
- public AnimatedSprite2D AnimatedSprite { get; private set; }
+ [Export]
+ public bool IsStatic { get; set; }
///
/// 当前物体显示的阴影图像, 节点名称必须叫 "ShadowSprite", 类型为 Sprite2D
///
- public Sprite2D ShadowSprite { get; private set; }
+ [Export, ExportFillNode]
+ public Sprite2D ShadowSprite { get; set; }
+
+ ///
+ /// 当前物体显示的精灵图像, 节点名称必须叫 "AnimatedSprite2D", 类型为 AnimatedSprite2D
+ ///
+ [Export, ExportFillNode]
+ public AnimatedSprite2D AnimatedSprite { get; set; }
///
/// 当前物体碰撞器节点, 节点名称必须叫 "Collision", 类型为 CollisionShape2D
///
- public CollisionShape2D Collision { get; private set; }
+ [Export, ExportFillNode]
+ public CollisionShape2D Collision { get; set; }
///
/// 是否调用过 Destroy() 函数
@@ -57,14 +66,28 @@
///
public Vector2 BasisVelocity
{
- get => MoveController.BasisVelocity;
- set => MoveController.BasisVelocity = value;
+ get
+ {
+ if (MoveController != null)
+ {
+ return MoveController.BasisVelocity;
+ }
+
+ return Vector2.Zero;
+ }
+ set
+ {
+ if (MoveController != null)
+ {
+ MoveController.BasisVelocity = value;
+ }
+ }
}
///
/// 当前物体归属的区域, 如果为 null 代表不属于任何一个区域
///
- public AffiliationArea Affiliation
+ public AffiliationArea AffiliationArea
{
get => _affiliationArea;
set
@@ -80,7 +103,7 @@
///
/// 是否正在投抛过程中
///
- public bool IsThrowing => _fallData != null && !_isFallOver;
+ public bool IsThrowing => _throwForce != null && !_isFallOver;
///
/// 当前物体的海拔高度, 如果大于0, 则会做自由落体运动, 也就是执行投抛代码
@@ -131,10 +154,11 @@
/// 物体下坠回弹后的运动速度衰减量
///
public float BounceSpeed { get; set; } = 0.75f;
-
+
///
/// 投抛状态下物体碰撞器大小, 如果 (x, y) 都小于 0, 则默认使用 AnimatedSprite 的默认动画第一帧的大小
///
+ [Export]
public Vector2 ThrowCollisionSize { get; set; } = new Vector2(-1, -1);
///
@@ -173,6 +197,11 @@
///
public bool EnableCustomBehavior { get; set; } = true;
+ ///
+ /// 所在的 World 对象
+ ///
+ public World World { get; private set; }
+
// --------------------------------------------------------------------------------
//组件集合
@@ -192,7 +221,7 @@
private ShaderMaterial _blendShaderMaterial;
//存储投抛该物体时所产生的数据
- private ActivityFallData _fallData;
+ private ActivityFallData _fallData = new ActivityFallData();
//所在层级
private RoomLayerEnum _currLayer;
@@ -202,9 +231,7 @@
//开启的协程
private List _coroutineList;
- //模板实例
- private ActivityObjectTemplate _templateInstance;
-
+
//物体所在区域
private AffiliationArea _affiliationArea;
@@ -234,56 +261,25 @@
private static long _instanceIndex = 0;
//初始化节点
- private void _InitNode(string itemId, string scenePath)
+ private void _InitNode(string itemId, World world)
{
- //加载预制体
- var tempPrefab = ResourceManager.Load(scenePath);
- if (tempPrefab == null)
+#if TOOLS
+ if (!Engine.IsEditorHint())
{
- 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)
+ if (GetType().GetCustomAttributes(typeof(ToolAttribute), false).Length == 0)
{
- 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;
+ throw new Exception($"ActivityObject子类'{GetType().FullName}'没有加[Tool]标记!");
}
}
-
- ZIndex = _templateInstance.z_index;
- CollisionLayer = _templateInstance.collision_layer;
- CollisionMask = _templateInstance.collision_mask;
- Scale = _templateInstance.scale;
- Visible = _templateInstance.visible;
-
+#endif
+ World = world;
+ ItemId = itemId;
+ Name = GetType().Name + (_instanceIndex++);
+ _blendShaderMaterial = AnimatedSprite.Material as ShaderMaterial;
+ ShadowSprite.Visible = false;
MotionMode = MotionModeEnum.Floating;
-
MoveController = AddComponent();
-
- //临时处理, 4.0 有bug, 不能销毁模板实例, 不然关闭游戏会报错!!!
- //_templateInstance.CallDeferred(Node.MethodName.QueueFree);
-
+ MoveController.Enable = !IsStatic;
OnInit();
}
@@ -292,6 +288,38 @@
///
public sealed override void _Ready()
{
+
+ }
+
+ ///
+ /// 子类需要重写 _EnterTree() 函数, 请重写 EnterTree()
+ ///
+ public sealed override void _EnterTree()
+ {
+#if TOOLS
+ // 在工具模式下创建的 template 节点自动创建对应的必要子节点
+ if (Engine.IsEditorHint())
+ {
+ _InitNodeInEditor();
+ return;
+ }
+#endif
+ EnterTree();
+ }
+
+ ///
+ /// 子类需要重写 _ExitTree() 函数, 请重写 ExitTree()
+ ///
+ public sealed override void _ExitTree()
+ {
+#if TOOLS
+ // 在工具模式下创建的 template 节点自动创建对应的必要子节点
+ if (Engine.IsEditorHint())
+ {
+ return;
+ }
+#endif
+ ExitTree();
}
///
@@ -311,7 +339,7 @@
if (_prevAnimation != anim || _prevAnimationFrame != frame)
{
var frames = AnimatedSprite.SpriteFrames;
- if (frames.HasAnimation(anim))
+ if (frames != null && frames.HasAnimation(anim))
{
//切换阴影动画
ShadowSprite.Texture = frames.GetFrameTexture(anim, frame);
@@ -366,7 +394,12 @@
///
public Texture2D GetCurrentTexture()
{
- return AnimatedSprite.SpriteFrames.GetFrameTexture(AnimatedSprite.Name, AnimatedSprite.Frame);
+ var spriteFrames = AnimatedSprite.SpriteFrames;
+ if (spriteFrames == null)
+ {
+ return null;
+ }
+ return spriteFrames.GetFrameTexture(AnimatedSprite.Animation, AnimatedSprite.Frame);
}
///
@@ -375,6 +408,22 @@
public virtual void OnInit()
{
}
+
+ ///
+ /// 进入场景树时调用
+ ///
+ public virtual void EnterTree()
+ {
+
+ }
+
+ ///
+ /// 离开场景树时调用
+ ///
+ public virtual void ExitTree()
+ {
+
+ }
///
/// 返回是否能与其他ActivityObject互动
@@ -511,7 +560,7 @@
{
_currLayer = layer;
var parent = GetParent();
- var root = GameApplication.Instance.RoomManager.GetRoomLayer(layer);
+ var root = GameApplication.Instance.World.GetRoomLayer(layer);
if (parent != root)
{
if (parent != null)
@@ -564,15 +613,16 @@
var parent = GetParent();
if (parent == null)
{
- GameApplication.Instance.RoomManager.YSortLayer.AddChild(this);
+ GameApplication.Instance.World.YSortLayer.AddChild(this);
}
- else if (parent != GameApplication.Instance.RoomManager.YSortLayer)
+ else if (parent != GameApplication.Instance.World.YSortLayer)
{
parent.RemoveChild(this);
- GameApplication.Instance.RoomManager.YSortLayer.AddChild(this);
+ GameApplication.Instance.World.YSortLayer.AddChild(this);
}
Altitude = altitude;
+ //Position = Position + new Vector2(0, altitude);
VerticalSpeed = verticalSpeed;
ThrowRotationDegreesSpeed = rotate;
if (_throwForce != null)
@@ -583,6 +633,8 @@
_throwForce = new ExternalForce("throw");
_throwForce.Velocity = velocity;
MoveController.AddConstantForce(_throwForce);
+
+ InitThrowData();
}
///
@@ -702,6 +754,12 @@
///
public sealed override void _Process(double delta)
{
+#if TOOLS
+ if (Engine.IsEditorHint())
+ {
+ return;
+ }
+#endif
var newDelta = (float)delta;
if (EnableCustomBehavior)
{
@@ -732,42 +790,25 @@
}
else //只更新 MoveController 组件
{
- if (!MoveController.IsReady)
+ if (MoveController.Enable)
{
- MoveController.Ready();
- MoveController.IsReady = true;
+ if (!MoveController.IsReady)
+ {
+ MoveController.Ready();
+ MoveController.IsReady = true;
+ }
+
+ MoveController.Process(newDelta);
}
- MoveController.Process(newDelta);
}
}
// 下坠判定
if (Altitude > 0 || VerticalSpeed != 0)
{
- if (_fallData == null)
- {
- _fallData = new ActivityFallData();
- }
-
if (_isFallOver) // 没有处于下坠状态, 则进入下坠状态
{
- SetFallCollision();
-
- _isFallOver = false;
- _firstFall = true;
- _hasResilienceVerticalSpeed = false;
- _resilienceVerticalSpeed = 0;
-
- if (ThrowCollisionSize.X < 0 && ThrowCollisionSize.Y < 0)
- {
- _throwRectangleShape.Size = GetDefaultTexture().GetSize();
- }
- else
- {
- _throwRectangleShape.Size = ThrowCollisionSize;
- }
-
- Throw();
+ InitThrowData();
}
else
{
@@ -810,7 +851,7 @@
MoveController.ScaleAllForce(BounceSpeed);
//如果落地高度不够低, 再抛一次
- if (Bounce && (!_hasResilienceVerticalSpeed || _resilienceVerticalSpeed > 1))
+ if (Bounce && (!_hasResilienceVerticalSpeed || _resilienceVerticalSpeed > 5))
{
if (!_hasResilienceVerticalSpeed)
{
@@ -819,7 +860,14 @@
}
else
{
- _resilienceVerticalSpeed = _resilienceVerticalSpeed * BounceStrength;
+ if (_resilienceVerticalSpeed < 25)
+ {
+ _resilienceVerticalSpeed = _resilienceVerticalSpeed * BounceStrength * 0.4f;
+ }
+ else
+ {
+ _resilienceVerticalSpeed = _resilienceVerticalSpeed * BounceStrength;
+ }
}
_verticalSpeed = _resilienceVerticalSpeed;
ThrowRotationDegreesSpeed = ThrowRotationDegreesSpeed * BounceStrength;
@@ -911,6 +959,12 @@
///
public sealed override void _PhysicsProcess(double delta)
{
+#if TOOLS
+ if (Engine.IsEditorHint())
+ {
+ return;
+ }
+#endif
var newDelta = (float)delta;
if (EnableCustomBehavior)
{
@@ -941,12 +995,16 @@
}
else //只更新 MoveController 组件
{
- if (!MoveController.IsReady)
+ if (MoveController.Enable)
{
- MoveController.Ready();
- MoveController.IsReady = true;
+ if (!MoveController.IsReady)
+ {
+ MoveController.Ready();
+ MoveController.IsReady = true;
+ }
+
+ MoveController.PhysicsProcess(newDelta);
}
- MoveController.PhysicsProcess(newDelta);
}
}
@@ -958,6 +1016,12 @@
///
public sealed override void _Draw()
{
+#if TOOLS
+ if (Engine.IsEditorHint())
+ {
+ return;
+ }
+#endif
if (IsDebug)
{
DebugDraw();
@@ -993,7 +1057,8 @@
{
if (Scale.Y < 0)
{
- AnimatedSprite.GlobalPosition = GlobalPosition + new Vector2(0, -Altitude) - _fallData.OriginSpritePosition.Rotated(Rotation) * Scale.Abs();
+ var pos = new Vector2(_fallData.OriginSpritePosition.X, -_fallData.OriginSpritePosition.Y);
+ AnimatedSprite.GlobalPosition = GlobalPosition + new Vector2(0, -Altitude) - pos.Rotated(Rotation + Mathf.Pi);
}
else
{
@@ -1022,13 +1087,10 @@
arr[i].Value?.Destroy();
}
- if (Affiliation != null)
+ if (AffiliationArea != null)
{
- Affiliation.RemoveItem(this);
+ AffiliationArea.RemoveItem(this);
}
-
- //临时处理, 4.0 有bug, 不能提前销毁模板实例, 不然关闭游戏会报错!!!
- _templateInstance.QueueFree();
}
///
@@ -1063,7 +1125,7 @@
{
this.AddToActivityRoot(RoomLayerEnum.YSortLayer);
}
- else if (parent == GameApplication.Instance.RoomManager.NormalLayer)
+ else if (parent == GameApplication.Instance.World.NormalLayer)
{
parent.RemoveChild(this);
this.AddToActivityRoot(RoomLayerEnum.YSortLayer);
@@ -1103,7 +1165,7 @@
{
_throwRectangleShape = new RectangleShape2D();
}
-
+
Collision.Shape = _throwRectangleShape;
Collision.Position = Vector2.Zero;
Collision.Rotation = 0;
@@ -1149,7 +1211,7 @@
private void ThrowOver()
{
var parent = GetParent();
- var roomLayer = GameApplication.Instance.RoomManager.GetRoomLayer(_currLayer);
+ var roomLayer = GameApplication.Instance.World.GetRoomLayer(_currLayer);
if (parent != roomLayer)
{
parent.RemoveChild(this);
@@ -1160,6 +1222,28 @@
OnThrowOver();
}
+ //初始化投抛状态数据
+ private void InitThrowData()
+ {
+ SetFallCollision();
+
+ _isFallOver = false;
+ _firstFall = true;
+ _hasResilienceVerticalSpeed = false;
+ _resilienceVerticalSpeed = 0;
+
+ if (ThrowCollisionSize.X < 0 && ThrowCollisionSize.Y < 0)
+ {
+ _throwRectangleShape.Size = GetDefaultTexture().GetSize();
+ }
+ else
+ {
+ _throwRectangleShape.Size = ThrowCollisionSize;
+ }
+
+ Throw();
+ }
+
///
/// 设置标记, 用于在物体上记录自定义数据
///
@@ -1258,4 +1342,60 @@
{
ProxyCoroutineHandler.ProxyStopAllCoroutine(ref _coroutineList);
}
+
+ ///
+ /// 延时指定时间调用一个回调函数
+ ///
+ public void DelayCall(float delayTime, Action cb)
+ {
+ StartCoroutine(_DelayCall(delayTime, cb));
+ }
+
+ ///
+ /// 延时指定时间调用一个回调函数
+ ///
+ public void DelayCall(float delayTime, Action cb, T1 arg1)
+ {
+ StartCoroutine(_DelayCall(delayTime, cb, arg1));
+ }
+
+ ///
+ /// 延时指定时间调用一个回调函数
+ ///
+ public void DelayCall(float delayTime, Action cb, T1 arg1, T2 arg2)
+ {
+ StartCoroutine(_DelayCall(delayTime, cb, arg1, arg2));
+ }
+
+ ///
+ /// 延时指定时间调用一个回调函数
+ ///
+ public void DelayCall(float delayTime, Action cb, T1 arg1, T2 arg2, T3 arg3)
+ {
+ StartCoroutine(_DelayCall(delayTime, cb, arg1, arg2, arg3));
+ }
+
+ private IEnumerator _DelayCall(float delayTime, Action cb)
+ {
+ yield return new WaitForSeconds(delayTime);
+ cb();
+ }
+
+ private IEnumerator _DelayCall(float delayTime, Action cb, T1 arg1)
+ {
+ yield return new WaitForSeconds(delayTime);
+ cb(arg1);
+ }
+
+ private IEnumerator _DelayCall(float delayTime, Action cb, T1 arg1, T2 arg2)
+ {
+ yield return new WaitForSeconds(delayTime);
+ cb(arg1, arg2);
+ }
+
+ private IEnumerator _DelayCall(float delayTime, Action cb, T1 arg1, T2 arg2, T3 arg3)
+ {
+ yield return new WaitForSeconds(delayTime);
+ cb(arg1,arg2, arg3);
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs
index 30a1ce2..cea2ecc 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObjectTemplate.cs
@@ -1,122 +1,127 @@
-using Godot;
-
-///
-/// ActivityObject 节点模板对象
-///
-[Tool]
-public partial class ActivityObjectTemplate : Node
-{
- // ///
- // /// 默认放入的层级
- // ///
- // [Export] public RoomLayerEnum DefaultLayer = RoomLayerEnum.NormalLayer;
-
- ///
- /// 物体初始缩放
- ///
- [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
+// }
+// }
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs
new file mode 100644
index 0000000..f20d17c
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_EditorTool.cs
@@ -0,0 +1,170 @@
+
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using Godot;
+using UI.EditorTools;
+
+public partial class ActivityObject
+{
+ ///
+ /// 该函数只会在编辑器中调用, 用于自定义处理被 [ExportFill] 标记后自动创建的节点
+ ///
+ /// 属性名称
+ /// 节点实例
+ protected virtual void OnExportFillNode(string propertyName, Node node)
+ {
+ switch (propertyName)
+ {
+ case "ShadowSprite":
+ {
+ var sprite = (Sprite2D)node;
+ 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;
+ }
+ break;
+ case "AnimatedSprite":
+ {
+ var animatedSprite = (AnimatedSprite2D)node;
+ 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;
+ }
+ break;
+ case "Collision":
+ {
+
+ }
+ break;
+ }
+ }
+
+ private void _InitNodeInEditor()
+ {
+ 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 type = GetType();
+ var propertyInfos = type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
+ var propertyInfoList = new List();
+ foreach (var propertyInfo in propertyInfos)
+ {
+ if (propertyInfo.GetCustomAttributes(typeof(ExportFillNodeAttribute), false).Length > 0)
+ {
+ if (propertyInfo.GetCustomAttributes(typeof(ExportAttribute), false).Length == 0)
+ {
+ EditorToolsPanel.ShowConfirmInEditor("警告", $"'{type.FullName}'中字段'{propertyInfo.Name}'使用了[ExportAutoFill],\n但是并没有加上[Export], 请补上!");
+ return;
+ }
+
+ if (propertyInfo.PropertyType.IsAssignableTo(typeof(Node)))
+ {
+ if (propertyInfo.SetMethod == null)
+ {
+ EditorToolsPanel.ShowConfirmInEditor("警告", $"请为'{type.FullName}'中的'{propertyInfo.Name}'属性设置set访问器, 或者将set服务器设置成public!");
+ return;
+ }
+ propertyInfoList.Add(propertyInfo);
+ }
+ }
+ }
+
+ var tempList = new List();
+ Type tempType = null;
+ var index = -1;
+ for (int i = propertyInfoList.Count - 1; i >= 0; i--)
+ {
+ var item = propertyInfoList[i];
+ if (tempType != item.DeclaringType || i == 0)
+ {
+ if (tempType == null)
+ {
+ index = i;
+ }
+ else
+ {
+ int j;
+ if (i == 0)
+ {
+ j = i;
+ }
+ else
+ {
+ j = i + 1;
+ }
+ for (; j <= index; j++)
+ {
+ tempList.Add(propertyInfoList[j]);
+ }
+
+ index = i;
+ }
+ tempType = item.DeclaringType;
+ }
+ }
+
+ foreach (var propertyInfo in tempList)
+ {
+ var value = propertyInfo.GetValue(this);
+ if (value == null || ((Node)value).GetParent() == null)
+ {
+ var node = _FindNodeInChild(this, propertyInfo.Name, propertyInfo.PropertyType);
+ if (node == null)
+ {
+ node = (Node)Activator.CreateInstance(propertyInfo.PropertyType);
+ AddChild(node);
+ node.Name = propertyInfo.Name;
+ node.Owner = owner;
+ //自定义处理导出的节点
+ OnExportFillNode(propertyInfo.Name, node);
+ }
+ propertyInfo.SetValue(this, node);
+ }
+ }
+ }
+ }
+
+ private Node _FindNodeInChild(Node node, string name, Type type)
+ {
+ var childCount = node.GetChildCount();
+ for (int i = 0; i < childCount; i++)
+ {
+ var child = node.GetChild(i);
+ if (child.Name == name && child.GetType().IsAssignableTo(type))
+ {
+ return child;
+ }
+ else
+ {
+ var result = _FindNodeInChild(child, name, type);
+ if (result != null)
+ {
+ return result;
+ }
+ }
+ }
+
+ return null;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
new file mode 100644
index 0000000..4190405
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Init.cs
@@ -0,0 +1,66 @@
+///
+/// 根据配置表注册物体, 该类是自动生成的, 请不要手动编辑!
+///
+public partial class ActivityObject
+{
+ ///
+ /// 存放所有在表中注册的物体的id
+ ///
+ public static class Ids
+ {
+ ///
+ /// 玩家
+ ///
+ public const string Id_role0001 = "role0001";
+ ///
+ /// 敌人
+ ///
+ public const string Id_enemy0001 = "enemy0001";
+ public const string Id_weapon0001 = "weapon0001";
+ public const string Id_weapon0002 = "weapon0002";
+ public const string Id_weapon0003 = "weapon0003";
+ public const string Id_weapon0004 = "weapon0004";
+ public const string Id_weapon0005 = "weapon0005";
+ public const string Id_bullet0001 = "bullet0001";
+ public const string Id_bullet0002 = "bullet0002";
+ public const string Id_shell0001 = "shell0001";
+ ///
+ /// 敌人死亡碎片
+ ///
+ public const string Id_effect0001 = "effect0001";
+ ///
+ /// 地牢房间的门(东侧)
+ ///
+ public const string Id_other_door_e = "other_door_e";
+ ///
+ /// 地牢房间的门(西侧)
+ ///
+ public const string Id_other_door_w = "other_door_w";
+ ///
+ /// 地牢房间的门(南侧)
+ ///
+ public const string Id_other_door_s = "other_door_s";
+ ///
+ /// 地牢房间的门(北侧)
+ ///
+ public const string Id_other_door_n = "other_door_n";
+ }
+ private static void _InitRegister()
+ {
+ _activityRegisterMap.Add("role0001", "res://prefab/role/Role0001.tscn");
+ _activityRegisterMap.Add("enemy0001", "res://prefab/role/Enemy0001.tscn");
+ _activityRegisterMap.Add("weapon0001", "res://prefab/weapon/Weapon0001.tscn");
+ _activityRegisterMap.Add("weapon0002", "res://prefab/weapon/Weapon0002.tscn");
+ _activityRegisterMap.Add("weapon0003", "res://prefab/weapon/Weapon0003.tscn");
+ _activityRegisterMap.Add("weapon0004", "res://prefab/weapon/Weapon0004.tscn");
+ _activityRegisterMap.Add("weapon0005", "res://prefab/weapon/Weapon0005.tscn");
+ _activityRegisterMap.Add("bullet0001", "res://prefab/bullet/Bullet0001.tscn");
+ _activityRegisterMap.Add("bullet0002", "res://prefab/bullet/Bullet0002.tscn");
+ _activityRegisterMap.Add("shell0001", "res://prefab/shell/Shell0001.tscn");
+ _activityRegisterMap.Add("effect0001", "res://prefab/effect/activityObject/Effect0001.tscn");
+ _activityRegisterMap.Add("other_door_e", "res://prefab/map/RoomDoor_E.tscn");
+ _activityRegisterMap.Add("other_door_w", "res://prefab/map/RoomDoor_W.tscn");
+ _activityRegisterMap.Add("other_door_s", "res://prefab/map/RoomDoor_S.tscn");
+ _activityRegisterMap.Add("other_door_n", "res://prefab/map/RoomDoor_N.tscn");
+ }
+}
diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Register.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Register.cs
index 01e9f66..a08c0e6 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject_Register.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject_Register.cs
@@ -1,29 +1,14 @@
using System;
using System.Collections.Generic;
-using System.Reflection;
using Godot;
public partial class ActivityObject
{
+ //负责存放所有注册对象数据
+ private static Dictionary _activityRegisterMap = new Dictionary();
private static bool _initState = false;
- //物体注册数据
- private class RegisterActivityData
- {
- public RegisterActivityData(RegisterActivity registerActivity, Func callBack)
- {
- RegisterActivity = registerActivity;
- CallBack = callBack;
- }
-
- public RegisterActivity RegisterActivity;
- public Func CallBack;
- }
-
- //所有注册物体集合
- private static readonly Dictionary _activityRegisterMap = new();
-
///
/// 初始化调用, 开始扫描当前程序集, 并自动注册 ActivityObject 物体
///
@@ -35,47 +20,7 @@
}
_initState = true;
- //扫描当前程序集
- ScannerFromAssembly(typeof(ActivityObject).Assembly);
- }
-
- ///
- /// 扫描指定程序集, 自动注册带有 RegisterActivity 特性的类
- ///
- public static void ScannerFromAssembly(Assembly assembly)
- {
- var types = assembly.GetTypes();
- foreach (var type in types)
- {
- //注册类
- var attribute = Attribute.GetCustomAttributes(type, typeof(RegisterActivity), false);
- if (attribute.Length > 0)
- {
- if (!typeof(ActivityObject).IsAssignableFrom(type))
- {
- //不是继承自 ActivityObject
- throw new Exception($"The registered object '{type.FullName}' does not inherit the class ActivityObject.");
- }
- else if (type.IsAbstract)
- {
- //不能加到抽象类上
- throw new Exception($"'RegisterActivity' cannot be used on abstract class '{type.FullName}'.");
- }
- var attrs = (RegisterActivity[])attribute;
- foreach (var att in attrs)
- {
- //注册操作
- if (_activityRegisterMap.ContainsKey(att.ItemId))
- {
- throw new Exception($"Object ID: '{att.ItemId}' is already registered");
- }
- _activityRegisterMap.Add(att.ItemId, new RegisterActivityData(att, () =>
- {
- return (ActivityObject)Activator.CreateInstance(type);
- }));
- }
- }
- }
+ _InitRegister();
}
///
@@ -83,13 +28,19 @@
///
public static ActivityObject Create(string itemId)
{
- if (_activityRegisterMap.TryGetValue(itemId, out var item))
+ var world = GameApplication.Instance.World;
+ if (world == null)
{
- var instance = item.CallBack();
- instance._InitNode(item.RegisterActivity.ItemId, item.RegisterActivity.PrefabPath);
- item.RegisterActivity.CustomHandler(instance);
+ throw new Exception("实例化 ActivityObject 前请先调用 'GameApplication.Instance.CreateNewWorld()' 初始化 World 对象");
+ }
+
+ if (_activityRegisterMap.TryGetValue(itemId, out var path))
+ {
+ var instance = ResourceManager.LoadAndInstantiate(path);
+ instance._InitNode(itemId, world);
return instance;
}
+ GD.PrintErr("创建实例失败, 未找到id为'" + itemId + "'的物体!");
return null;
}
@@ -103,7 +54,6 @@
{
return (T)instance;
}
- GD.PrintErr("创建实例失败, 未找到id为'" + itemId + "'的物体!");
return null;
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs b/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
new file mode 100644
index 0000000..eb8676b
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/CheckInteractiveResult.cs
@@ -0,0 +1,28 @@
+
+///
+/// 检测互动返回的数据集
+///
+public class CheckInteractiveResult
+{
+ ///
+ /// 互动物体
+ ///
+ public ActivityObject Target;
+ ///
+ /// 是否可以互动
+ ///
+ public bool CanInteractive;
+ ///
+ /// 互动提示信息
+ ///
+ public string Message;
+ ///
+ /// 互动提示显示的图标
+ ///
+ public string ShowIcon;
+
+ public CheckInteractiveResult(ActivityObject target)
+ {
+ Target = target;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/ExportFillNodeAttribute.cs b/DungeonShooting_Godot/src/framework/activity/ExportFillNodeAttribute.cs
new file mode 100644
index 0000000..b7b9177
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/activity/ExportFillNodeAttribute.cs
@@ -0,0 +1,10 @@
+
+using System;
+
+///
+/// 标记类型为Node的属性, 表示当前属性如果没有赋值, 则在编辑器中自动创建子节点, 必须搭配 [Export] 使用!
+///
+[AttributeUsage(AttributeTargets.Property)]
+public class ExportFillNodeAttribute : Attribute
+{
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/RegisterActivity.cs b/DungeonShooting_Godot/src/framework/activity/RegisterActivity.cs
deleted file mode 100644
index 4782dd1..0000000
--- a/DungeonShooting_Godot/src/framework/activity/RegisterActivity.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-
-using System;
-
-///
-/// 用在 ActivityObject 子类上, 用于注册游戏中的物体, 一个类可以添加多个 [RegisterActivity] 特性, ActivityObject 会自动扫描并注册物体
-///
-[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
-public class RegisterActivity : Attribute
-{
- ///
- /// 注册物体唯一ID, 该ID不能有重复
- ///
- public string ItemId { get; protected set; }
-
- ///
- /// 模板 Prefab 的路径
- ///
- public string PrefabPath { get; protected set; }
-
- public RegisterActivity(string itemId, string prefabPath)
- {
- ItemId = itemId;
- PrefabPath = prefabPath;
- }
-
- ///
- /// 该函数在物体实例化后调用, 可用于一些自定义操作, 参数为实例对象
- ///
- public virtual void CustomHandler(ActivityObject instance)
- {
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/components/StateBase.cs b/DungeonShooting_Godot/src/framework/activity/components/StateBase.cs
index da0095a..c936b6f 100644
--- a/DungeonShooting_Godot/src/framework/activity/components/StateBase.cs
+++ b/DungeonShooting_Godot/src/framework/activity/components/StateBase.cs
@@ -77,16 +77,16 @@
///
/// 立即切换到下一个指定状态, 并且这一帧会被调用 PhysicsProcess
///
- public void ChangeState(S next, params object[] args)
+ public void ChangeStateInstant(S next, params object[] args)
{
- StateController.ChangeState(next, args);
+ StateController.ChangeStateInstant(next, args);
}
///
/// 切换到下一个指定状态, 下一帧才会调用 PhysicsProcess
///
- public void ChangeStateLate(S next, params object[] args)
+ public void ChangeState(S next, params object[] args)
{
- StateController.ChangeStateLate(next, args);
+ StateController.ChangeState(next, args);
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/activity/components/StateController.cs b/DungeonShooting_Godot/src/framework/activity/components/StateController.cs
index 59ab805..ca379b4 100644
--- a/DungeonShooting_Godot/src/framework/activity/components/StateController.cs
+++ b/DungeonShooting_Godot/src/framework/activity/components/StateController.cs
@@ -89,7 +89,7 @@
///
/// 立即切换到下一个指定状态, 并且这一帧会被调用 PhysicsProcess
///
- public void ChangeState(S next, params object[] arg)
+ public void ChangeStateInstant(S next, params object[] arg)
{
_changeState(false, next, arg);
}
@@ -97,7 +97,7 @@
///
/// 切换到下一个指定状态, 下一帧才会调用 PhysicsProcess
///
- public void ChangeStateLate(S next, params object[] arg)
+ public void ChangeState(S next, params object[] arg)
{
_changeState(true, next, arg);
}
diff --git a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
index 3f77676..f9bea2d 100644
--- a/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
+++ b/DungeonShooting_Godot/src/framework/common/NodeExtend.cs
@@ -47,6 +47,6 @@
/// 放入的层
public static void AddToActivityRoot(this Node2D node, RoomLayerEnum layer)
{
- GameApplication.Instance.RoomManager.GetRoomLayer(layer).AddChild(node);
+ GameApplication.Instance.World.GetRoomLayer(layer).AddChild(node);
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/common/Utils.cs b/DungeonShooting_Godot/src/framework/common/Utils.cs
index 36abea1..02e17d1 100644
--- a/DungeonShooting_Godot/src/framework/common/Utils.cs
+++ b/DungeonShooting_Godot/src/framework/common/Utils.cs
@@ -13,7 +13,11 @@
static Utils()
{
- _random = new Random();
+ var dateTime = DateTime.Now;
+ var num = dateTime.Year * 100000 + dateTime.Month * 100000 + dateTime.Day * 100000 + dateTime.Hour * 10000 + dateTime.Minute * 100 + dateTime.Second;
+ //_random = new Random(0);
+ _random = new Random(num);
+ GD.Print("随机种子为: ", num);
}
///
@@ -173,4 +177,12 @@
{
return str.Substring(0, 1).ToLower() + str.Substring(1);
}
+
+ ///
+ /// 字符串首字母大写
+ ///
+ public static string FirstToUpper(this string str)
+ {
+ return str.Substring(0, 1).ToUpper() + str.Substring(1);
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/generator/ExcelGenerator.cs b/DungeonShooting_Godot/src/framework/generator/ExcelGenerator.cs
new file mode 100644
index 0000000..9558609
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/generator/ExcelGenerator.cs
@@ -0,0 +1,76 @@
+using System;
+using System.IO;
+using System.Text.Json;
+using Godot;
+using Array = Godot.Collections.Array;
+
+namespace Generator;
+
+public static class ExcelGenerator
+{
+ public static void ExportExcel()
+ {
+ var arr = new Array();
+ OS.Execute("excel/DungeonShooting_ExcelTool.exe", new string[0], arr);
+ foreach (var message in arr)
+ {
+ GD.Print(message);
+ }
+
+ try
+ {
+ GeneratorActivityObjectInit();
+ GD.Print("生成'src/framework/activity/ActivityObject_Init.cs'成功!");
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr(e.ToString());
+ }
+ }
+
+ //生成初始化 ActivityObject 代码
+ private static void GeneratorActivityObjectInit()
+ {
+ var text = File.ReadAllText("resource/config/ActivityObject.json");
+ var array = JsonSerializer.Deserialize[]>(text);
+
+ var code1 = "";
+ var code2 = "";
+
+ foreach (var item in array)
+ {
+ var id = item["Id"];
+ var remark = item["Remark"] + "";
+ if (!string.IsNullOrEmpty(remark))
+ {
+ code1 += $" /// \n";
+ code1 += $" /// {remark}\n";
+ code1 += $" /// \n";
+ }
+ code1 += $" public const string Id_{id} = \"{id}\";\n";
+ code2 += $" _activityRegisterMap.Add(\"{id}\", \"{item["Prefab"]}\");\n";
+ }
+
+ var str = $"/// \n";
+ str += $"/// 根据配置表注册物体, 该类是自动生成的, 请不要手动编辑!\n";
+ str += $"/// \n";
+ str += $"public partial class ActivityObject\n";
+ str += $"{{\n";
+
+ str += $" /// \n";
+ str += $" /// 存放所有在表中注册的物体的id\n";
+ str += $" /// \n";
+ str += $" public static class Ids\n";
+ str += $" {{\n";
+ str += code1;
+ str += $" }}\n";
+
+ str += $" private static void _InitRegister()\n";
+ str += $" {{\n";
+ str += code2;
+ str += $" }}\n";
+ str += $"}}\n";
+
+ File.WriteAllText("src/framework/activity/ActivityObject_Init.cs", str);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/generator/ResourcePathGenerator.cs b/DungeonShooting_Godot/src/framework/generator/ResourcePathGenerator.cs
index 088ed07..7253865 100644
--- a/DungeonShooting_Godot/src/framework/generator/ResourcePathGenerator.cs
+++ b/DungeonShooting_Godot/src/framework/generator/ResourcePathGenerator.cs
@@ -15,12 +15,36 @@
//支持后缀
private static string[] suffix =
{
- ".png", ".jpg", ".txt", ".json", ".ini", ".tscn", ".tres", ".otf", ".gdshader", ".ogg", ".mp3", ".wav", ".svg", ".ttf", ".otf"
+ ".png",
+ ".jpg",
+ ".txt",
+ ".json",
+ ".ini",
+ ".tscn",
+ ".tres",
+ ".otf",
+ ".gdshader",
+ ".ogg",
+ ".mp3",
+ ".wav",
+ ".svg",
+ ".ttf",
+ ".otf"
};
- //排除第一层的文件夹
+ //排除的文件夹, 斜杠用: /
private static string[] exclude =
{
- ".vscode", ".idea", ".git", ".import", ".mono", "android", "addons", ".godot", ".vs"
+ ".vscode",
+ ".idea",
+ ".git",
+ ".import",
+ ".mono",
+ "android",
+ "addons",
+ ".godot",
+ ".vs",
+ "resource/map/tiledata",
+ "resource/map/tileMaps"
};
private static string resultStr = "";
@@ -36,7 +60,7 @@
try
{
resultStr = "/// \n" +
- "/// 编辑器下所有资源路径, 该类为 Automation 面板下自动生成的, 请不要手动编辑!\n" +
+ "/// 编辑器下所有资源路径, 该类为 Tools 面板下自动生成的, 请不要手动编辑!\n" +
"/// \n" +
"public class ResourcePath\n" +
"{\n";
@@ -44,22 +68,7 @@
GD.Print("更新 ResourcePath...");
var directoryInfo = new DirectoryInfo(System.Environment.CurrentDirectory);
-
- var directories = directoryInfo.GetDirectories();
- for (int i = 0; i < directories.Length; i++)
- {
- var directory = directories[i];
- if (!exclude.Contains(directory.Name))
- {
- EachDir(directory);
- }
- }
-
- var fileInfos = directoryInfo.GetFiles();
- for (var i = 0; i < fileInfos.Length; i++)
- {
- HandleFile(fileInfos[i]);
- }
+ EachDir(directoryInfo);
resultStr += "}";
File.WriteAllText(savePath, resultStr);
@@ -76,6 +85,17 @@
private static void EachDir(DirectoryInfo directoryInfos)
{
+ if (directoryInfos.FullName.Length > System.Environment.CurrentDirectory.Length)
+ {
+ var path = directoryInfos.FullName.Substring(System.Environment.CurrentDirectory.Length + 1);
+ path = path.Replace('\\', '/');
+ if (exclude.Contains(path))
+ {
+ GD.Print("扫描排除路径: " + path);
+ return;
+ }
+ }
+
var fileInfos = directoryInfos.GetFiles();
for (var i = 0; i < fileInfos.Length; i++)
{
diff --git a/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs b/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs
index 7634384..df51675 100644
--- a/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs
+++ b/DungeonShooting_Godot/src/framework/generator/UiManagerMethodsGenerator.cs
@@ -54,6 +54,30 @@
$" }}\n" +
$"\n" +
$" /// \n" +
+ $" /// 隐藏 {uiName} 的所有实例\n" +
+ $" /// \n" +
+ $" public static void Hide_{uiName}()\n" +
+ $" {{\n" +
+ $" var uiInstance = Get_{uiName}_Instance();\n" +
+ $" foreach (var uiPanel in uiInstance)\n" +
+ $" {{\n" +
+ $" uiPanel.HideUi();\n" +
+ $" }}\n" +
+ $" }}\n" +
+ $"\n" +
+ $" /// \n" +
+ $" /// 销毁 {uiName} 的所有实例\n" +
+ $" /// \n" +
+ $" public static void Dispose_{uiName}()\n" +
+ $" {{\n" +
+ $" var uiInstance = Get_{uiName}_Instance();\n" +
+ $" foreach (var uiPanel in uiInstance)\n" +
+ $" {{\n" +
+ $" uiPanel.DisposeUi();\n" +
+ $" }}\n" +
+ $" }}\n" +
+ $"\n" +
+ $" /// \n" +
$" /// 获取所有 {uiName} 的实例, 如果没有实例, 则返回一个空数组\n" +
$" /// \n" +
$" public static UI.{uiName}.{uiName}Panel[] Get_{uiName}_Instance()\n" +
diff --git a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs
index c67ac6a..6b0ae6d 100644
--- a/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs
+++ b/DungeonShooting_Godot/src/framework/map/AffiliationArea.cs
@@ -62,16 +62,16 @@
///
public void InsertItem(ActivityObject activityObject)
{
- if (activityObject.Affiliation == this)
+ if (activityObject.AffiliationArea == this)
{
return;
}
- if (activityObject.Affiliation != null)
+ if (activityObject.AffiliationArea != null)
{
_includeItems.Remove(activityObject);
}
- activityObject.Affiliation = this;
+ activityObject.AffiliationArea = this;
_includeItems.Add(activityObject);
//如果是玩家
@@ -86,11 +86,11 @@
///
public void RemoveItem(ActivityObject activityObject)
{
- if (activityObject.Affiliation == null)
+ if (activityObject.AffiliationArea == null)
{
return;
}
- activityObject.Affiliation = null;
+ activityObject.AffiliationArea = null;
_includeItems.Remove(activityObject);
}
@@ -118,6 +118,40 @@
}
return count;
}
+
+ ///
+ /// 查询所有符合条件的对象并返回
+ ///
+ /// 操作函数, 返回是否满足要求
+ public ActivityObject[] FindIncludeItems(Func handler)
+ {
+ var list = new List();
+ foreach (var activityObject in _includeItems)
+ {
+ if (handler(activityObject))
+ {
+ list.Add(activityObject);
+ }
+ }
+ return list.ToArray();
+ }
+
+ ///
+ /// 检查是否有符合条件的对象
+ ///
+ /// 操作函数, 返回是否满足要求
+ public bool ExistIncludeItem(Func handler)
+ {
+ foreach (var activityObject in _includeItems)
+ {
+ if (handler(activityObject))
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
private void OnBodyEntered(Node2D body)
{
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs b/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
new file mode 100644
index 0000000..ea26823
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/DungeonConfig.cs
@@ -0,0 +1,16 @@
+
+///
+/// 生成地牢的配置
+///
+public class DungeonConfig
+{
+ ///
+ /// 地牢组名称
+ ///
+ public string GroupName;
+
+ ///
+ /// 房间数量
+ ///
+ public int RoomCount = 20;
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs b/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
index 0d581c1..989983e 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonGenerator.cs
@@ -19,21 +19,31 @@
public RoomInfo StartRoom { get; private set; }
///
- /// 生成的房间数量
+ /// 结束房间
///
- private int _maxCount = 20;
+ public RoomInfo EndRoom { get; private set; }
+
+ ///
+ /// boss房间
+ ///
+ public List BossRoom { get; } = new List();
//用于标记地图上的坐标是否被占用
private Grid _roomGrid { get; } = new Grid();
//当前房间数量
private int _count = 0;
+ //房间id
+ private int _id;
+
+ //下一个房间类型
+ private DungeonRoomType _nextRoomType = DungeonRoomType.Battle;
//宽高
- private int _roomMinWidth = 15;
- private int _roomMaxWidth = 35;
- private int _roomMinHeight = 15;
- private int _roomMaxHeight = 30;
+ // private int _roomMinWidth = 15;
+ // private int _roomMaxWidth = 35;
+ // private int _roomMinHeight = 15;
+ // private int _roomMaxHeight = 30;
//间隔
private int _roomMinInterval = 6;
@@ -59,9 +69,10 @@
//最大尝试次数
private int _maxTryCount = 10;
+ private int _currMaxLayer = 0;
- //房间组名称
- private string _groupName;
+ //地牢配置
+ private DungeonConfig _config;
private DungeonRoomGroup _roomGroup;
//指定只能生成的房间
@@ -70,8 +81,6 @@
private enum GenerateRoomErrorCode
{
NoError,
- //房间已满
- RoomFull,
//超出区域
OutArea,
//没有合适的位置
@@ -92,26 +101,26 @@
}
#endif
- public DungeonGenerator(string groupName)
+ public DungeonGenerator(DungeonConfig config)
{
- _groupName = groupName;
- _roomGroup = GameApplication.Instance.RoomConfig[_groupName];
+ _config = config;
+ _roomGroup = GameApplication.Instance.RoomConfig[config.GroupName];
//验证该组是否满足生成地牢的条件
if (_roomGroup.InletList.Count == 0)
{
- throw new Exception("当前组'" + groupName + "'中没有起始房间, 不能生成地牢!");
+ throw new Exception("当前组'" + config.GroupName + "'中没有起始房间, 不能生成地牢!");
}
//没有指定房间
if (_designatedRoom == null || _designatedRoom.Count == 0)
{
if (_roomGroup.OutletList.Count == 0)
{
- throw new Exception("当前组'" + groupName + "'中没有结束房间, 不能生成地牢!");
+ throw new Exception("当前组'" + config.GroupName + "'中没有结束房间, 不能生成地牢!");
}
else if (_roomGroup.BattleList.Count == 0)
{
- throw new Exception("当前组'" + groupName + "'中没有战斗房间, 不能生成地牢!");
+ throw new Exception("当前组'" + config.GroupName + "'中没有战斗房间, 不能生成地牢!");
}
}
@@ -146,23 +155,114 @@
public void Generate()
{
if (StartRoom != null) return;
-
- //第一个房间
- GenerateRoom(null, 0, GetNextRoomType(), out var startRoom);
- StartRoom = startRoom;
+ CalcNextRoomType(null);
+ //用于排除上一级房间
+ var excludePrevRoom = new List();
+ //上一个房间
+ RoomInfo prevRoom = null;
+
+ var chainTryCount = 0;
+ var chainMaxTryCount = 3;
+
//如果房间数量不够, 就一直生成
- while (_count < _maxCount)
+ while (_count < _config.RoomCount || EndRoom == null)
{
- var room = Utils.RandomChoose(RoomInfos);
- var errorCode = GenerateRoom(room, Utils.RandomRangeInt(0, 3), GetNextRoomType(), out var nextRoom);
- if (errorCode == GenerateRoomErrorCode.NoError)
+ var nextRoomType = GetNextRoomType();
+
+ //上一个房间
+ RoomInfo tempPrevRoom;
+ if (nextRoomType == DungeonRoomType.Inlet)
{
- _failCount = 0;
- room.Next.Add(nextRoom);
+ tempPrevRoom = null;
+ }
+ else if (nextRoomType == DungeonRoomType.Boss)
+ {
+ tempPrevRoom = FindMaxLayerRoom(excludePrevRoom);
+ }
+ else if (nextRoomType == DungeonRoomType.Outlet)
+ {
+ tempPrevRoom = prevRoom;
+ }
+ else if (nextRoomType == DungeonRoomType.Battle)
+ {
+ if (chainTryCount < chainMaxTryCount)
+ {
+ if (prevRoom != null && prevRoom.Layer > 6) //层数太高, 下一个房间生成在低层级
+ {
+ tempPrevRoom = RoundRoomLessThanLayer(3);
+ }
+ else
+ {
+ tempPrevRoom = prevRoom;
+ }
+ }
+ else
+ {
+ tempPrevRoom = Utils.RandomChoose(RoomInfos);
+ }
}
else
{
+ tempPrevRoom = Utils.RandomChoose(RoomInfos);
+ }
+
+ //生成下一个房间
+ var errorCode = GenerateRoom(tempPrevRoom, nextRoomType, out var nextRoom);
+ if (errorCode == GenerateRoomErrorCode.NoError) //生成成功
+ {
+ _failCount = 0;
+ RoomInfos.Add(nextRoom);
+ if (nextRoomType == DungeonRoomType.Inlet)
+ {
+ StartRoom = nextRoom;
+ }
+ else if (nextRoomType == DungeonRoomType.Boss) //boss房间
+ {
+ BossRoom.Add(nextRoom);
+ excludePrevRoom.Clear();
+ }
+ else if (nextRoomType == DungeonRoomType.Outlet)
+ {
+ EndRoom = nextRoom;
+ }
+ else if (nextRoomType == DungeonRoomType.Battle)
+ {
+ chainTryCount = 0;
+ chainMaxTryCount = Utils.RandomRangeInt(1, 3);
+ }
+ prevRoom = nextRoom;
+ CalcNextRoomType(prevRoom);
+ }
+ else //生成失败
+ {
+ if (nextRoomType == DungeonRoomType.Boss)
+ {
+ //生成boss房间成功
+ excludePrevRoom.Add(tempPrevRoom);
+ if (excludePrevRoom.Count >= RoomInfos.Count)
+ {
+ //全都没找到合适的, 那就再来一遍
+ excludePrevRoom.Clear();
+ }
+ }
+ else if (nextRoomType == DungeonRoomType.Outlet)
+ {
+ //生成结束房间失败, 那么只能回滚boss房间
+ if (prevRoom != null)
+ {
+ var bossPrev = prevRoom.Prev;
+ BossRoom.Remove(prevRoom);
+ RollbackRoom(prevRoom);
+ CalcNextRoomType(bossPrev);
+ prevRoom = null;
+ }
+ }
+ else if (nextRoomType == DungeonRoomType.Battle)
+ {
+ chainTryCount++;
+ }
+
GD.Print("生成第" + (_count + 1) + "个房间失败! 失败原因: " + errorCode);
if (errorCode == GenerateRoomErrorCode.OutArea)
{
@@ -178,16 +278,17 @@
}
_roomGrid.Clear();
+ GD.Print("房间总数: " + RoomInfos.Count);
}
//生成房间
- private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoomInfo, int direction, DungeonRoomType roomType, out RoomInfo resultRoom)
+ private GenerateRoomErrorCode GenerateRoom(RoomInfo prevRoomInfo, DungeonRoomType roomType, out RoomInfo resultRoom)
{
- if (_count >= _maxCount)
- {
- resultRoom = null;
- return GenerateRoomErrorCode.RoomFull;
- }
+ // if (_count >= _config.RoomCount)
+ // {
+ // resultRoom = null;
+ // return GenerateRoomErrorCode.RoomFull;
+ // }
DungeonRoomSplit roomSplit;
//没有指定房间
@@ -209,17 +310,32 @@
roomSplit = Utils.RandomChoose(_designatedRoom);
}
- var room = new RoomInfo(_count, roomSplit);
-
+ var room = new RoomInfo(_id, roomType, roomSplit);
+
//房间大小
room.Size = new Vector2I((int)roomSplit.RoomInfo.Size.X, (int)roomSplit.RoomInfo.Size.Y);
if (prevRoomInfo != null) //表示这不是第一个房间, 就得判断当前位置下的房间是否被遮挡
{
+ room.Layer = prevRoomInfo.Layer + 1;
+ if (_currMaxLayer < room.Layer)
+ {
+ _currMaxLayer = room.Layer;
+ }
//生成的位置可能会和上一个房间对不上, 需要多次尝试
var tryCount = 0; //当前尝试次数
- for (; tryCount < _maxTryCount; tryCount++)
+ var maxTryCount = _maxTryCount; //最大尝试次数
+ if (roomType == DungeonRoomType.Outlet)
{
+ maxTryCount *= 3;
+ }
+ else if (roomType == DungeonRoomType.Boss)
+ {
+ maxTryCount *= 2;
+ }
+ for (; tryCount < maxTryCount; tryCount++)
+ {
+ var direction = Utils.RandomRangeInt(0, 3);
//房间间隔
var space = Utils.RandomRangeInt(_roomMinInterval, _roomMaxInterval);
//中心偏移
@@ -297,61 +413,142 @@
return GenerateRoomErrorCode.NoSuitableLocation;
}
}
-
- _count++;
- RoomInfos.Add(room);
- if (prevRoomInfo == null)
+ else //第一个房间
{
+ room.Layer = 0;
_roomGrid.AddRect(room.Position, room.Size, true);
}
- //下一个房间
- //0上, 1右, 2下, 3左
- var dirList = new List(new[] { 0, 1, 2, 3 });
+ if (IsParticipateCounting(room))
+ {
+ _count++;
+ }
+
+ _id++;
+ room.Prev = prevRoomInfo;
if (prevRoomInfo != null)
{
- dirList.Remove(GetReverseDirection(direction));
+ prevRoomInfo.Next.Add(room);
}
-
- //这条线有一定概率不生成下一个房间
- if (Utils.RandomRangeInt(0, 2) != 0)
- {
- while (dirList.Count > 0)
- {
- var randDir = Utils.RandomChoose(dirList);
- GenerateRoom(room, randDir, GetNextRoomType(), out var nextRoom);
- if (nextRoom == null)
- {
- break;
- }
-
- nextRoom.Prev = room;
- room.Next.Add(nextRoom);
-
- dirList.Remove(randDir);
- }
- }
-
resultRoom = room;
return GenerateRoomErrorCode.NoError;
}
- private DungeonRoomType GetNextRoomType()
+ //判断房间是否参与计数
+ private bool IsParticipateCounting(RoomInfo roomInfo)
{
- if (_count == 0) //生成第一个房间
+ return roomInfo.RoomType == DungeonRoomType.Battle || roomInfo.RoomType == DungeonRoomType.Boss;
+ }
+
+ //计算下一个房间类型
+ private void CalcNextRoomType(RoomInfo prev)
+ {
+ if (prev == null) //生成第一个房间
{
- return DungeonRoomType.Inlet;
+ _nextRoomType = DungeonRoomType.Inlet;
}
- else if (_count == _maxCount - 1) //生成最后一个房间
+ else if (_count == _config.RoomCount - 1) //最后一个房间是boss房间
{
- return DungeonRoomType.Outlet;
+ _nextRoomType = DungeonRoomType.Boss;
+ }
+ else if (_count >= _config.RoomCount) //结束房间
+ {
+ _nextRoomType = DungeonRoomType.Outlet;
+ }
+ else if (prev.RoomType == DungeonRoomType.Boss) //生成结束房间
+ {
+ _nextRoomType = DungeonRoomType.Outlet;
}
else
{
- return DungeonRoomType.Battle;
+ _nextRoomType = DungeonRoomType.Battle;
}
}
+
+ //获取下一个房间类型
+ private DungeonRoomType GetNextRoomType()
+ {
+ return _nextRoomType;
+ }
+ //回滚一个房间
+ private bool RollbackRoom(RoomInfo roomInfo)
+ {
+ if (roomInfo.Next.Count > 0)
+ {
+ GD.PrintErr("当前房间还有连接的子房间, 不能回滚!");
+ return false;
+ }
+ //退掉占用的房间区域和过道占用区域
+ _roomGrid.RemoveRect(roomInfo.Position, roomInfo.Size);
+ foreach (var rect2 in roomInfo.AisleArea)
+ {
+ _roomGrid.RemoveRect(rect2.Position, rect2.Size);
+ }
+
+ //roomInfo.Doors[0].
+ if (roomInfo.Prev != null)
+ {
+ roomInfo.Prev.Next.Remove(roomInfo);
+ }
+
+ roomInfo.Prev = null;
+ foreach (var roomInfoDoor in roomInfo.Doors)
+ {
+ var connectDoor = roomInfoDoor.ConnectDoor;
+ connectDoor.RoomInfo.Doors.Remove(connectDoor);
+ }
+
+ RoomInfos.Remove(roomInfo);
+ roomInfo.Destroy();
+
+ if (IsParticipateCounting(roomInfo))
+ {
+ _count--;
+ }
+
+ _id--;
+ return true;
+ }
+
+ ///
+ /// 寻找层级最高的房间
+ ///
+ /// 排除的房间
+ private RoomInfo FindMaxLayerRoom(List exclude)
+ {
+ RoomInfo temp = null;
+ foreach (var roomInfo in RoomInfos)
+ {
+ if (temp == null || roomInfo.Layer > temp.Layer)
+ {
+ if (exclude == null || !exclude.Contains(roomInfo))
+ {
+ temp = roomInfo;
+ }
+ }
+ }
+
+ return temp;
+ }
+
+ ///
+ /// 随机抽取层级小于 layer 的房间
+ ///
+ private RoomInfo RoundRoomLessThanLayer(int layer)
+ {
+ var list = new List();
+ foreach (var roomInfo in RoomInfos)
+ {
+ if (roomInfo.Layer < layer)
+ {
+ list.Add(roomInfo);
+ }
+ }
+
+ return Utils.RandomChoose(list);
+ }
+
///
/// 找两个房间的门
///
@@ -1016,6 +1213,7 @@
return false;
}
+ door2.RoomInfo.AisleArea.Add(new Rect2(pos, size));
_roomGrid.AddRect(pos, size, true);
return true;
}
@@ -1072,6 +1270,8 @@
return false;
}
+ door2.RoomInfo.AisleArea.Add(new Rect2(pos1, size1));
+ door2.RoomInfo.AisleArea.Add(new Rect2(pos2, size2));
_roomGrid.AddRect(pos1, size1, true);
_roomGrid.AddRect(pos2, size2, true);
return true;
diff --git a/DungeonShooting_Godot/src/framework/map/DungeonTile.cs b/DungeonShooting_Godot/src/framework/map/DungeonTile.cs
index eaabe0c..b1f513e 100644
--- a/DungeonShooting_Godot/src/framework/map/DungeonTile.cs
+++ b/DungeonShooting_Godot/src/framework/map/DungeonTile.cs
@@ -92,20 +92,21 @@
{
node.Position = roomInfo.GetWorldPosition() + (node.GlobalPosition - offset);
}
+
+ i--;
+ childCount--;
}
-
- i--;
- childCount--;
}
//物体标记
var activityMarks = tileInstance.GetMarks();
foreach (var activityMark in activityMarks)
{
+ var pos = activityMark.Position;
activityMark.GetParent().RemoveChild(activityMark);
activityMark.Owner = null;
//_tileRoot.AddChild(activityMark);
- activityMark.Position = roomInfo.GetWorldPosition() + (activityMark.GlobalPosition - offset);
+ activityMark.Position = roomInfo.GetWorldPosition() + (pos - offset);
activityMark.TileRoot = _tileRoot;
//执行预处理操作
activityMark.Pretreatment();
diff --git a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
index 02d1b4e..c086079 100644
--- a/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
+++ b/DungeonShooting_Godot/src/framework/map/RoomInfo.cs
@@ -7,9 +7,10 @@
///
public class RoomInfo : IDestroy
{
- public RoomInfo(int id, DungeonRoomSplit roomSplit)
+ public RoomInfo(int id, DungeonRoomType type, DungeonRoomSplit roomSplit)
{
Id = id;
+ RoomType = type;
RoomSplit = roomSplit;
}
@@ -19,6 +20,16 @@
public int Id;
///
+ /// 房间类型
+ ///
+ public DungeonRoomType RoomType;
+
+ ///
+ /// 层级, 也就是离初始房间间隔多少个房间
+ ///
+ public int Layer;
+
+ ///
/// 生成该房间使用的配置数据
///
public DungeonRoomSplit RoomSplit;
@@ -39,6 +50,11 @@
public List Doors = new List();
///
+ /// 连接该房间的过道占用区域信息
+ ///
+ public List AisleArea = new List();
+
+ ///
/// 下一个房间
///
public List Next = new List();
@@ -188,7 +204,7 @@
///
public void OnClearRoom()
{
- if (_currWaveIndex >= ActivityMarks.Count) //所有 mark 全部走完了
+ if (_currWaveIndex >= ActivityMarks.Count) //所有 mark 都走完了
{
IsSeclusion = false;
_currActivityMarks.Clear();
diff --git a/DungeonShooting_Godot/src/framework/map/mark/ActivityExpression.cs b/DungeonShooting_Godot/src/framework/map/mark/ActivityExpression.cs
deleted file mode 100644
index 040dd1d..0000000
--- a/DungeonShooting_Godot/src/framework/map/mark/ActivityExpression.cs
+++ /dev/null
@@ -1,10 +0,0 @@
-using System;
-
-///
-/// 用于 ActivityMark 字段上, 表示当前字段是一个表达式字段
-///
-[AttributeUsage(AttributeTargets.Field)]
-public class ActivityExpression : Attribute
-{
-
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/mark/ActivityExpressionAttribute.cs b/DungeonShooting_Godot/src/framework/map/mark/ActivityExpressionAttribute.cs
new file mode 100644
index 0000000..dc0ee12
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/map/mark/ActivityExpressionAttribute.cs
@@ -0,0 +1,10 @@
+using System;
+
+///
+/// 用于 ActivityMark 字段上, 表示当前字段是一个表达式字段
+///
+[AttributeUsage(AttributeTargets.Field)]
+public class ActivityExpressionAttribute : Attribute
+{
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs b/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs
index 7c71e58..9c91cdd 100644
--- a/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs
+++ b/DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs
@@ -80,9 +80,6 @@
private float _timer = 0;
private RoomInfo _tempRoom;
- //绘制的字体
- private static Font _drawFont;
-
//已经计算好要生成的物体
private Dictionary _currentExpression = new Dictionary();
@@ -107,7 +104,7 @@
var tempList = type.GetFields(BindingFlags.Instance | BindingFlags.Public);
foreach (var s in tempList)
{
- if (s.GetCustomAttribute() != null)
+ if (s.GetCustomAttribute() != null)
{
fieldInfos.Add(s.Name);
}
@@ -271,12 +268,8 @@
{
DrawRect(new Rect2(-BirthRect / 2, BirthRect), drawColor, false, 0.5f);
}
-
- if (_drawFont == null)
- {
- _drawFont = ResourceManager.Load(ResourcePath.Silver_ttf);
- }
- DrawString(_drawFont, new Vector2(-14, 12), WaveNumber.ToString(), HorizontalAlignment.Center, 28, 14);
+
+ DrawString(ResourceManager.DefaultFont12Px, new Vector2(-14, 12), WaveNumber.ToString(), HorizontalAlignment.Center, 28, 12);
}
}
#endif
diff --git a/DungeonShooting_Godot/src/framework/serialize/SerializeColor.cs b/DungeonShooting_Godot/src/framework/serialize/SerializeColor.cs
new file mode 100644
index 0000000..983b043
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/serialize/SerializeColor.cs
@@ -0,0 +1,48 @@
+
+
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 可序列化的 Color 对象
+///
+public class SerializeColor
+{
+ public SerializeColor(float r, float g, float b, float a)
+ {
+ R = r;
+ G = g;
+ B = b;
+ A = a;
+ }
+
+ public SerializeColor(Color color)
+ {
+ R = color.R;
+ G = color.G;
+ B = color.B;
+ A = color.A;
+ }
+
+ public SerializeColor()
+ {
+ }
+
+ [JsonInclude]
+ public float R { get; private set; }
+ [JsonInclude]
+ public float G { get; private set; }
+ [JsonInclude]
+ public float B { get; private set; }
+ [JsonInclude]
+ public float A { get; private set; }
+
+ ///
+ /// 转为 Color
+ ///
+ public Color AsColor()
+ {
+ return new Color(R, G, B, A);
+ }
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs b/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs
new file mode 100644
index 0000000..4e0a888
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/serialize/SerializeVector2.cs
@@ -0,0 +1,59 @@
+
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 可序列化的 Vector2 对象
+///
+public class SerializeVector2
+{
+ public SerializeVector2(float x, float y)
+ {
+ X = x;
+ Y = y;
+ }
+
+ public SerializeVector2(Vector2 v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+ public SerializeVector2(Vector2I v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+ public SerializeVector2(SerializeVector2 v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+ public SerializeVector2()
+ {
+
+ }
+
+ [JsonInclude]
+ public float X { get; private set; }
+ [JsonInclude]
+ public float Y { get; private set; }
+
+ ///
+ /// 转为 Vector2
+ ///
+ public Vector2 AsVector2()
+ {
+ return new Vector2(X, Y);
+ }
+
+ ///
+ /// 转为 Vector2I
+ ///
+ public Vector2I AsVector2I()
+ {
+ return new Vector2I((int)X, (int)Y);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/serialize/SerializeVector3.cs b/DungeonShooting_Godot/src/framework/serialize/SerializeVector3.cs
new file mode 100644
index 0000000..7e76a66
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/serialize/SerializeVector3.cs
@@ -0,0 +1,62 @@
+using System.Text.Json.Serialization;
+using Godot;
+
+///
+/// 可序列化的 Vector3 对象
+///
+public class SerializeVector3
+{
+ public SerializeVector3(float x, float y, float z)
+ {
+ X = x;
+ Y = y;
+ Z = z;
+ }
+
+ public SerializeVector3(Vector3 v)
+ {
+ X = v.X;
+ Y = v.Y;
+ Z = v.Z;
+ }
+
+ public SerializeVector3(Vector3I v)
+ {
+ X = v.X;
+ Y = v.Y;
+ Z = v.Z;
+ }
+
+ public SerializeVector3(SerializeVector3 v)
+ {
+ X = v.X;
+ Y = v.Y;
+ }
+
+ public SerializeVector3()
+ {
+ }
+
+ [JsonInclude]
+ public float X { get; private set; }
+ [JsonInclude]
+ public float Y { get; private set; }
+ [JsonInclude]
+ public float Z { get; private set; }
+
+ ///
+ /// 转为 Vector3
+ ///
+ public Vector3 AsVector3()
+ {
+ return new Vector3(X, Y, Z);
+ }
+
+ ///
+ /// 转为 Vector3I
+ ///
+ public Vector3I AsVector3I()
+ {
+ return new Vector3I((int)X, (int)Y, (int)Z);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/ui/UiManager.cs b/DungeonShooting_Godot/src/framework/ui/UiManager.cs
index ee32c42..a9b5a61 100644
--- a/DungeonShooting_Godot/src/framework/ui/UiManager.cs
+++ b/DungeonShooting_Godot/src/framework/ui/UiManager.cs
@@ -139,6 +139,54 @@
}
///
+ ///
+ ///
+ public static void HideUi(UiBase uiBase)
+ {
+ uiBase.HideUi();
+ }
+
+ ///
+ /// 销毁所有Ui
+ ///
+ public static void DisposeAllUi()
+ {
+ var map = new Dictionary>();
+ foreach (var item in _recordUiMap)
+ {
+ map.Add(item.Key, new List(item.Value));
+ }
+
+ foreach (var item in map)
+ {
+ foreach (var uiBase in item.Value)
+ {
+ uiBase.DisposeUi();
+ }
+ }
+ }
+
+ ///
+ /// 隐藏所有Ui
+ ///
+ public static void HideAllUi()
+ {
+ var map = new Dictionary>();
+ foreach (var item in _recordUiMap)
+ {
+ map.Add(item.Key, new List(item.Value));
+ }
+
+ foreach (var item in map)
+ {
+ foreach (var uiBase in item.Value)
+ {
+ uiBase.HideUi();
+ }
+ }
+ }
+
+ ///
/// 获取Ui实例
///
public static T[] GetUiInstance(string uiName) where T : UiBase
diff --git a/DungeonShooting_Godot/src/game/AnimatorNames.cs b/DungeonShooting_Godot/src/game/AnimatorNames.cs
new file mode 100644
index 0000000..b26f934
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/AnimatorNames.cs
@@ -0,0 +1,51 @@
+
+///
+/// 预制动画名称
+///
+public static class AnimatorNames
+{
+ ///
+ /// 默认动画
+ ///
+ public const string Default = "default";
+ ///
+ /// 静止不动
+ ///
+ public const string Idle = "idle";
+ ///
+ /// 奔跑
+ ///
+ public const string Run = "run";
+ ///
+ /// 倒退奔跑
+ ///
+ public const string ReverseRun = "reverseRun";
+ ///
+ /// 翻滚
+ ///
+ public const string Roll = "roll";
+ ///
+ /// 武器泛光动画
+ ///
+ public const string Floodlight = "floodlight";
+ ///
+ /// 开门动画
+ ///
+ public const string OpenDoor = "openDoor";
+ ///
+ /// 关门动画
+ ///
+ public const string CloseDoor = "closeDoor";
+ ///
+ /// 开火
+ ///
+ public const string Fire = "fire";
+ ///
+ /// 换弹
+ ///
+ public const string Reloading = "reloading";
+ ///
+ /// 子弹上膛
+ ///
+ public const string Equip = "equip";
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/Cursor.cs b/DungeonShooting_Godot/src/game/Cursor.cs
index 639c7cd..cbde2ae 100644
--- a/DungeonShooting_Godot/src/game/Cursor.cs
+++ b/DungeonShooting_Godot/src/game/Cursor.cs
@@ -20,6 +20,7 @@
private Sprite2D lb;
private Sprite2D rt;
private Sprite2D rb;
+ private Sprite2D finger;
public override void _Ready()
{
@@ -28,15 +29,13 @@
lb = GetNode("LB");
rt = GetNode("RT");
rb = GetNode("RB");
+ finger = GetNode("Finger");
+ SetGuiMode(true);
}
public override void _Process(double delta)
{
- if (_isGuiMode)
- {
- SetScope(0, null);
- }
- else
+ if (!_isGuiMode)
{
var targetGun = _mountRole?.Holster.ActiveWeapon;
if (targetGun != null)
@@ -58,6 +57,22 @@
public void SetGuiMode(bool flag)
{
_isGuiMode = flag;
+ if (flag) //手指
+ {
+ lt.Visible = false;
+ lb.Visible = false;
+ rt.Visible = false;
+ rb.Visible = false;
+ finger.Visible = true;
+ }
+ else //准心
+ {
+ lt.Visible = true;
+ lb.Visible = true;
+ rt.Visible = true;
+ rb.Visible = true;
+ finger.Visible = false;
+ }
}
///
@@ -95,7 +110,7 @@
var len = GlobalPosition.DistanceTo(tunPos);
if (targetGun.Attribute != null)
{
- len = Mathf.Max(0, len - targetGun.Attribute.FirePosition.X);
+ len = Mathf.Max(0, len - targetGun.FirePoint.Position.X);
}
scope = len / GameConfig.ScatteringDistance * scope;
}
diff --git a/DungeonShooting_Godot/src/game/GameApplication.cs b/DungeonShooting_Godot/src/game/GameApplication.cs
index 2c7388e..e76a4cf 100644
--- a/DungeonShooting_Godot/src/game/GameApplication.cs
+++ b/DungeonShooting_Godot/src/game/GameApplication.cs
@@ -3,6 +3,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Text.Json;
+using Config;
using Godot;
public partial class GameApplication : Node2D
@@ -47,11 +48,16 @@
public Cursor Cursor { get; private set; }
///
- /// 游戏房间
+ /// 游戏世界
///
- public RoomManager RoomManager { get; private set; }
+ public World World { get; private set; }
///
+ /// 地牢管理器
+ ///
+ public DungeonManager DungeonManager { get; private set; }
+
+ ///
/// 房间配置
///
public Dictionary RoomConfig { get; private set; }
@@ -70,6 +76,11 @@
/// 像素缩放
///
public int PixelScale { get; private set; } = 4;
+
+ ///
+ /// 地牢配置信息
+ ///
+ public DungeonConfig DungeonConfig { get; private set; }
//开启的协程
private List _coroutineList;
@@ -78,10 +89,18 @@
{
Instance = this;
+ //初始化配置表
+ ExcelConfig.Init();
+ //初始化房间配置数据
InitRoomConfig();
-
//初始化 ActivityObject
ActivityObject.InitActivity();
+ //初始化武器数据
+ Weapon.InitWeaponAttribute();
+
+ DungeonConfig = new DungeonConfig();
+ DungeonConfig.GroupName = "testGroup";
+ DungeonConfig.RoomCount = 20;
}
public override void _EnterTree()
@@ -101,24 +120,16 @@
#if TOOLS
InitDesignatedRoom();
#endif
-
//初始化ui
UiManager.Init();
-
// 初始化鼠标
- Input.MouseMode = Input.MouseModeEnum.Hidden;
- Cursor = ResourceManager.Load(ResourcePath.prefab_Cursor_tscn).Instantiate();
- var cursorLayer = new CanvasLayer();
- cursorLayer.Name = "CursorLayer";
- cursorLayer.Layer = UiManager.GetUiLayer(UiLayer.Pop).Layer + 10;
- AddChild(cursorLayer);
- cursorLayer.AddChild(Cursor);
-
- //打开ui
- UiManager.Open_RoomUI();
-
- RoomManager = ResourceManager.Load(ResourcePath.scene_Room_tscn).Instantiate();
- SceneRoot.AddChild(RoomManager);
+ InitCursor();
+ //地牢管理器
+ DungeonManager = new DungeonManager();
+ DungeonManager.Name = "DungeonManager";
+ SceneRoot.AddChild(DungeonManager);
+ //打开主菜单Ui
+ UiManager.Open_Main();
}
public override void _Process(double delta)
@@ -134,6 +145,33 @@
}
///
+ /// 创建新的 World 对象, 相当于清理房间
+ ///
+ public World CreateNewWorld()
+ {
+ if (World != null)
+ {
+ World.QueueFree();
+ }
+ World = ResourceManager.LoadAndInstantiate(ResourcePath.scene_World_tscn);
+ SceneRoot.AddChild(World);
+ return World;
+ }
+
+ ///
+ /// 销毁 World 对象, 相当于清理房间
+ ///
+ public void DestroyWorld()
+ {
+ if (World != null)
+ {
+ World.QueueFree();
+ }
+
+ World = null;
+ }
+
+ ///
/// 将 viewport 以外的全局坐标 转换成 viewport 内的全局坐标
///
public Vector2 GlobalToViewPosition(Vector2 globalPos)
@@ -218,6 +256,18 @@
SubViewportContainer.Size = s;
}
+ //初始化鼠标
+ private void InitCursor()
+ {
+ Input.MouseMode = Input.MouseModeEnum.Hidden;
+ Cursor = ResourceManager.LoadAndInstantiate(ResourcePath.prefab_Cursor_tscn);
+ var cursorLayer = new CanvasLayer();
+ cursorLayer.Name = "CursorLayer";
+ cursorLayer.Layer = UiManager.GetUiLayer(UiLayer.Pop).Layer + 10;
+ AddChild(cursorLayer);
+ cursorLayer.AddChild(Cursor);
+ }
+
#if TOOLS
//调试模式下, 指定生成哪些房间
private void InitDesignatedRoom()
diff --git a/DungeonShooting_Godot/src/game/PhysicsLayer.cs b/DungeonShooting_Godot/src/game/PhysicsLayer.cs
index 0c95b5f..118f604 100644
--- a/DungeonShooting_Godot/src/game/PhysicsLayer.cs
+++ b/DungeonShooting_Godot/src/game/PhysicsLayer.cs
@@ -31,4 +31,8 @@
/// 归属区域判断层级
///
public const uint Affiliation = 0b100000;
+ ///
+ /// 在手上
+ ///
+ public const uint InHand = 0b1000000;
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs b/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs
new file mode 100644
index 0000000..bb20329
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs
@@ -0,0 +1,96 @@
+using Godot;
+
+///
+/// 子弹类
+///
+[Tool, GlobalClass]
+public partial class Bullet : ActivityObject
+{
+ ///
+ /// 碰撞区域
+ ///
+ [Export, ExportFillNode]
+ public Area2D CollisionArea { get; set; }
+
+ ///
+ /// 发射该子弹的武器
+ ///
+ public Weapon Weapon { get; private set; }
+
+ // 最大飞行距离
+ private float MaxDistance;
+
+ // 子弹飞行速度
+ private float FlySpeed;
+
+ //当前子弹已经飞行的距离
+ private float CurrFlyDistance = 0;
+
+ public void Init(Weapon weapon, float speed, float maxDistance, Vector2 position, float rotation, uint targetLayer)
+ {
+ Weapon = weapon;
+ CollisionArea.CollisionMask = targetLayer;
+ CollisionArea.AreaEntered += OnArea2dEntered;
+
+ //只有玩家使用该武器才能获得正常速度的子弹
+ if (weapon.Master is Player)
+ {
+ FlySpeed = speed;
+ }
+ else
+ {
+ FlySpeed = speed * weapon.Attribute.AiBulletSpeedScale;
+ }
+ MaxDistance = maxDistance;
+ Position = position;
+ Rotation = rotation;
+ ShadowOffset = new Vector2(0, 5);
+
+ BasisVelocity = new Vector2(FlySpeed, 0).Rotated(Rotation);
+ }
+
+ protected override void PhysicsProcessOver(float delta)
+ {
+ //移动
+ var lastSlideCollision = GetLastSlideCollision();
+ //撞到墙
+ if (lastSlideCollision != null)
+ {
+ //创建粒子特效
+ var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletSmoke_tscn);
+ var smoke = packedScene.Instantiate();
+ smoke.GlobalPosition = lastSlideCollision.GetPosition();
+ smoke.GlobalRotation = lastSlideCollision.GetNormal().Angle();
+ smoke.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+
+ Destroy();
+ return;
+ }
+ //距离太大, 自动销毁
+ CurrFlyDistance += FlySpeed * delta;
+ if (CurrFlyDistance >= MaxDistance)
+ {
+ var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletDisappear_tscn);
+ var node = packedScene.Instantiate();
+ node.GlobalPosition = GlobalPosition;
+ node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+
+ Destroy();
+ }
+ }
+
+ private void OnArea2dEntered(Area2D other)
+ {
+ var role = other.AsActivityObject();
+ if (role != null)
+ {
+ var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletDisappear_tscn);
+ var node = packedScene.Instantiate();
+ node.GlobalPosition = GlobalPosition;
+ node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+
+ role.CallDeferred(nameof(Role.Hurt), 4, Rotation);
+ Destroy();
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/bullet/BulletAttribute.cs b/DungeonShooting_Godot/src/game/activity/bullet/BulletAttribute.cs
new file mode 100644
index 0000000..aa30af1
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/bullet/BulletAttribute.cs
@@ -0,0 +1,5 @@
+
+public class BulletAttribute
+{
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/package/Holster.cs b/DungeonShooting_Godot/src/game/activity/package/Holster.cs
new file mode 100644
index 0000000..a487f64
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/package/Holster.cs
@@ -0,0 +1,369 @@
+using System;
+using System.Collections.Generic;
+using Godot;
+
+///
+/// 角色身上的武器袋, 存储角色携带的武器
+///
+public class Holster
+{
+ ///
+ /// 归属者
+ ///
+ public Role Master { get; }
+
+ ///
+ /// 当前使用的武器对象
+ ///
+ public Weapon ActiveWeapon { get; private set; }
+
+ ///
+ /// 当前使用的武器的索引
+ ///
+ public int ActiveIndex { get; private set; } = 0;
+
+ ///
+ /// 武器袋容量
+ ///
+ public int Capacity { get; private set; } = 0;
+
+ ///
+ /// 武器插槽
+ ///
+ public Weapon[] Weapons { get; private set; }
+
+ public Holster(Role master)
+ {
+ Master = master;
+ //默认容量4
+ SetCapacity(4);
+ }
+
+ ///
+ /// 修改武器袋容量
+ ///
+ public void SetCapacity(int capacity)
+ {
+ if (capacity < 0)
+ {
+ capacity = 0;
+ }
+
+ if (capacity == Capacity)
+ {
+ return;
+ }
+
+ if (Weapons == null)
+ {
+ Weapons = new Weapon[capacity];
+ }
+ else if (Weapons.Length > capacity) //删减格子
+ {
+ var newArray = new Weapon[capacity];
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ if (i < capacity)
+ {
+ newArray[i] = Weapons[i];
+ }
+ else
+ {
+ Master.ThrowWeapon(i);
+ }
+ }
+
+ Weapons = newArray;
+ }
+ else //添加格子
+ {
+ var newArray = new Weapon[capacity];
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ newArray[i] = Weapons[i];
+ }
+ Weapons = newArray;
+ }
+ Capacity = capacity;
+
+ }
+
+ ///
+ /// 返回当前武器袋是否是空的
+ ///
+ public bool IsEmpty()
+ {
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ if (Weapons[i] != null)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ ///
+ /// 返回当前武器袋是否还有空位
+ ///
+ public bool HasVacancy()
+ {
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ if (Weapons[i] == null)
+ {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ ///
+ /// 根据索引获取武器
+ ///
+ public Weapon GetWeapon(int index)
+ {
+ if (index < 0 || index >= Weapons.Length)
+ {
+ return null;
+ }
+ return Weapons[index];
+ }
+
+ ///
+ /// 根据武器id查找武器袋中该武器所在的位置, 如果没有, 则返回 -1
+ ///
+ /// 武器id
+ public int FindWeapon(string id)
+ {
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ var item = Weapons[i];
+ if (item != null && item.ItemId == id)
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ ///
+ /// 通过回调函数查询武器在武器袋中的位置, 如果没有, 则返回 -1
+ ///
+ public int FindWeapon(Func handler)
+ {
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ var item = Weapons[i];
+ if (item != null && handler(item, i))
+ {
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ ///
+ /// 遍历所有武器
+ ///
+ public void ForEach(Action handler)
+ {
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ var item = Weapons[i];
+ if (item != null)
+ {
+ handler(item, i);
+ }
+ }
+ }
+
+ ///
+ /// 从武器袋中移除所有武器, 并返回
+ ///
+ public Weapon[] GetAndClearWeapon()
+ {
+ var weapons = new List();
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ var weapon = Weapons[i];
+ if (weapon != null)
+ {
+ weapon.GetParent().RemoveChild(weapon);
+ weapon.RemoveAt();
+ weapons.Add(weapon);
+ Weapons[i] = null;
+ }
+ }
+
+ return weapons.ToArray();
+ }
+
+ ///
+ /// 返回是否能放入武器
+ ///
+ /// 武器对象
+ public bool CanPickupWeapon(Weapon weapon)
+ {
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ var item = Weapons[i];
+ if (item == null)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ ///
+ /// 拾起武器, 存入武器袋中, 返回存放在武器袋的位置, 如果容不下这把武器, 则会返回 -1
+ ///
+ /// 武器对象
+ /// 是否立即切换到该武器, 默认 true
+ public int PickupWeapon(Weapon weapon, bool exchange = true)
+ {
+ //已经被拾起了
+ if (weapon.Master != null)
+ {
+ return -1;
+ }
+ for (var i = 0; i < Weapons.Length; i++)
+ {
+ var item = Weapons[i];
+ if (item == null)
+ {
+ weapon.Pickup();
+ Weapons[i] = weapon;
+ weapon.PickUpWeapon(Master);
+ if (exchange)
+ {
+ ExchangeByIndex(i);
+ }
+
+ return i;
+ }
+ }
+ return -1;
+ }
+
+ ///
+ /// 移除指定位置的武器, 并返回这个武器对象, 如果移除正在使用的这把武器, 则会自动切换到上一把武器
+ ///
+ /// 所在武器袋的位置索引
+ public Weapon RemoveWeapon(int index)
+ {
+ if (index < 0 || index >= Weapons.Length)
+ {
+ return null;
+ }
+ var weapon = Weapons[index];
+ if (weapon == null)
+ {
+ return null;
+ }
+ weapon.GetParent().RemoveChild(weapon);
+ Weapons[index] = null;
+
+ //如果是当前手持的武器, 就需要调用切换武器操作
+ if (index == ActiveIndex)
+ {
+ //没有其他武器了
+ if (ExchangePrev() == index)
+ {
+ ActiveIndex = 0;
+ ActiveWeapon = null;
+ }
+ }
+ weapon.RemoveAt();
+ return weapon;
+ }
+
+ ///
+ /// 切换到上一个武器
+ ///
+ public int ExchangePrev()
+ {
+ var index = ActiveIndex - 1;
+ do
+ {
+ if (index < 0)
+ {
+ index = Weapons.Length - 1;
+ }
+ if (ExchangeByIndex(index))
+ {
+ return index;
+ }
+ } while (index-- != ActiveIndex);
+ return -1;
+ }
+
+ ///
+ /// 切换到下一个武器,
+ ///
+ public int ExchangeNext()
+ {
+ var index = ActiveIndex + 1;
+ do
+ {
+ if (index >= Weapons.Length)
+ {
+ index = 0;
+ }
+ if (ExchangeByIndex(index))
+ {
+ return index;
+ }
+ }
+ while (index++ != ActiveIndex);
+ return -1;
+ }
+
+ ///
+ /// 切换到指定索引的武器
+ ///
+ public bool ExchangeByIndex(int index)
+ {
+ if (index == ActiveIndex && ActiveWeapon != null) return true;
+ if (index < 0 || index > Weapons.Length) return false;
+ var weapon = Weapons[index];
+ if (weapon == null) return false;
+
+ //将上一把武器放到背后
+ if (ActiveWeapon != null)
+ {
+ var tempParent = ActiveWeapon.GetParentOrNull();
+ if (tempParent != null)
+ {
+ tempParent.RemoveChild(ActiveWeapon);
+ Master.BackMountPoint.AddChild(ActiveWeapon);
+ Master.OnPutBackMount(ActiveWeapon, ActiveIndex);
+ ActiveWeapon.Conceal();
+ }
+ }
+
+ //更改父节点
+ var parent = weapon.GetParentOrNull();
+ if (parent == null)
+ {
+ Master.MountPoint.AddChild(weapon);
+ }
+ else if (parent != Master.MountPoint)
+ {
+ parent.RemoveChild(weapon);
+ Master.MountPoint.AddChild(weapon);
+ }
+
+ weapon.Position = Vector2.Zero;
+ weapon.Scale = Vector2.One;
+ weapon.RotationDegrees = 0;
+ weapon.Visible = true;
+ ActiveWeapon = weapon;
+ ActiveIndex = index;
+ ActiveWeapon.Active();
+ return true;
+ }
+}
diff --git a/DungeonShooting_Godot/src/game/activity/shell/Shell.cs b/DungeonShooting_Godot/src/game/activity/shell/Shell.cs
new file mode 100644
index 0000000..310ee81
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/shell/Shell.cs
@@ -0,0 +1,22 @@
+
+using Godot;
+
+///
+/// 弹壳类
+///
+[Tool, GlobalClass]
+public partial class Shell : ActivityObject
+{
+ public override void OnInit()
+ {
+ base.OnInit();
+ ShadowOffset = new Vector2(0, 1);
+ ThrowCollisionSize = new Vector2(5, 5);
+ }
+
+ protected override void OnThrowOver()
+ {
+ EnableBehavior = false;
+ Collision.QueueFree();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
new file mode 100644
index 0000000..23caa70
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
@@ -0,0 +1,1475 @@
+using Godot;
+using System;
+using System.Collections.Generic;
+using Config;
+
+///
+/// 武器的基类
+///
+public abstract partial class Weapon : ActivityObject
+{
+ ///
+ /// 开火回调事件
+ ///
+ public event Action FireEvent;
+
+ ///
+ /// 武器属性数据
+ ///
+ public ExcelConfig.Weapon Attribute => _weaponAttribute;
+ private ExcelConfig.Weapon _weaponAttribute;
+ private ExcelConfig.Weapon _playerWeaponAttribute;
+ private ExcelConfig.Weapon _aiWeaponAttribute;
+
+ ///
+ /// 武器攻击的目标阵营
+ ///
+ public CampEnum TargetCamp { get; set; }
+
+ ///
+ /// 该武器的拥有者
+ ///
+ public Role Master { get; private set; }
+
+ ///
+ /// 当前弹夹弹药剩余量
+ ///
+ public int CurrAmmo { get; private set; }
+
+ ///
+ /// 剩余弹药量(备用弹药)
+ ///
+ public int ResidueAmmo { get; private set; }
+
+ ///
+ /// 武器管的开火点
+ ///
+ [Export, ExportFillNode]
+ public Marker2D FirePoint { get; set; }
+
+ ///
+ /// 弹壳抛出的点
+ ///
+ [Export, ExportFillNode]
+ public Marker2D ShellPoint { get; set; }
+
+ ///
+ /// 武器握把位置
+ ///
+ [Export, ExportFillNode]
+ public Marker2D GripPoint { get; set; }
+
+ ///
+ /// 武器的当前散射半径
+ ///
+ public float CurrScatteringRange { get; private set; } = 0;
+
+ ///
+ /// 是否在换弹中
+ ///
+ ///
+ public bool Reloading { get; private set; } = false;
+
+ ///
+ /// 换弹进度 (从 0 到 1)
+ ///
+ public float ReloadProgress
+ {
+ get
+ {
+ if (!Reloading)
+ {
+ return 1;
+ }
+
+ if (Attribute.AloneReload)
+ {
+ //总时间
+ var total = Attribute.AloneReloadBeginIntervalTime + (Attribute.ReloadTime * Attribute.AmmoCapacity) + Attribute.AloneReloadFinishIntervalTime;
+ //当前时间
+ float current;
+ if (_aloneReloadState == 1)
+ {
+ current = (Attribute.AloneReloadBeginIntervalTime - _reloadTimer) + Attribute.ReloadTime * CurrAmmo;
+ }
+ else if (_aloneReloadState == 2)
+ {
+ current = Attribute.AloneReloadBeginIntervalTime + (Attribute.ReloadTime * (CurrAmmo + (1 - _reloadTimer / Attribute.ReloadTime)));
+ }
+ else
+ {
+ current = Attribute.AloneReloadBeginIntervalTime + (Attribute.ReloadTime * CurrAmmo) + (Attribute.AloneReloadFinishIntervalTime - _reloadTimer);
+ }
+
+ return current / total;
+ }
+
+ return 1 - _reloadTimer / Attribute.ReloadTime;
+ }
+ }
+
+ ///
+ /// 返回是否在蓄力中,
+ /// 注意, 属性仅在 Attribute.LooseShoot == false 时有正确的返回值, 否则返回 false
+ ///
+ public bool IsCharging => _looseShootFlag;
+
+ ///
+ /// 返回武器是否在武器袋中
+ ///
+ public bool IsInHolster => Master != null;
+
+ ///
+ /// 返回是否真正使用该武器
+ ///
+ public bool IsActive => Master != null && Master.Holster.ActiveWeapon == this;
+
+ ///
+ /// 动画播放器
+ ///
+ [Export, ExportFillNode]
+ public AnimationPlayer AnimationPlayer { get; set; }
+
+ ///
+ /// 是否自动播放 SpriteFrames 的动画
+ ///
+ public bool IsAutoPlaySpriteFrames { get; set; } = true;
+
+ //--------------------------------------------------------------------------------------------
+
+ //是否按下
+ private bool _triggerFlag = false;
+
+ //扳机计时器
+ private float _triggerTimer = 0;
+
+ //开火前延时时间
+ private float _delayedTime = 0;
+
+ //开火间隙时间
+ private float _fireInterval = 0;
+
+ //开火武器口角度
+ private float _fireAngle = 0;
+
+ //攻击冷却计时
+ private float _attackTimer = 0;
+
+ //攻击状态
+ private bool _attackFlag = false;
+
+ //多久没开火了
+ private float _noAttackTime = 0;
+
+ //按下的时间
+ private float _downTimer = 0;
+
+ //松开的时间
+ private float _upTimer = 0;
+
+ //连发次数
+ private float _continuousCount = 0;
+
+ //连发状态记录
+ private bool _continuousShootFlag = false;
+
+ //松开扳机是否开火
+ private bool _looseShootFlag = false;
+
+ //蓄力攻击时长
+ private float _chargeTime = 0;
+
+ //是否需要重置武器数据
+ private bool _dirtyFlag = false;
+
+ //当前后坐力导致的偏移长度
+ private float _currBacklashLength = 0;
+
+ //临时存放动画精灵位置
+ private Vector2 _tempAnimatedSpritePosition;
+
+ //换弹计时器
+ private float _reloadTimer = 0;
+
+ //单独换弹设置下的换弹状态, 0: 未换弹, 1: 装第一颗子弹之前, 2: 单独装弹中, 3: 单独装弹完成
+ private byte _aloneReloadState = 0;
+
+ //本次换弹已用时间
+ private float _reloadUseTime = 0;
+
+ //是否播放过换弹完成音效
+ private bool _playReloadFinishSoundFlag = false;
+
+ // ----------------------------------------------
+ private uint _tempLayer;
+
+ private static bool _init = false;
+ private static Dictionary _weaponAttributeMap =
+ new Dictionary();
+
+ ///
+ /// 初始化武器属性数据
+ ///
+ public static void InitWeaponAttribute()
+ {
+ if (_init)
+ {
+ return;
+ }
+
+ _init = true;
+ foreach (var weaponAttr in ExcelConfig.Weapon_List)
+ {
+ if (!string.IsNullOrEmpty(weaponAttr.WeaponId))
+ {
+ if (!_weaponAttributeMap.TryAdd(weaponAttr.WeaponId, weaponAttr))
+ {
+ GD.PrintErr("发现重复注册的武器属性: " + weaponAttr.Id);
+ }
+ }
+ }
+ }
+
+ private static ExcelConfig.Weapon _GetWeaponAttribute(string itemId)
+ {
+ if (_weaponAttributeMap.TryGetValue(itemId, out var attr))
+ {
+ return attr;
+ }
+
+ throw new Exception($"武器'{itemId}'没有在 Weapon 表中配置属性数据!");
+ }
+
+ public override void OnInit()
+ {
+ InitWeapon(_GetWeaponAttribute(ItemId));
+ AnimatedSprite.AnimationFinished += OnAnimationFinished;
+ }
+
+ ///
+ /// 初始化武器属性
+ ///
+ public void InitWeapon(ExcelConfig.Weapon attribute)
+ {
+ _playerWeaponAttribute = attribute;
+ _weaponAttribute = attribute;
+ if (attribute.AiUseAttribute != null)
+ {
+ _aiWeaponAttribute = attribute.AiUseAttribute;
+ }
+ else
+ {
+ _aiWeaponAttribute = attribute;
+ }
+
+ if (Attribute.AmmoCapacity > Attribute.MaxAmmoCapacity)
+ {
+ Attribute.AmmoCapacity = Attribute.MaxAmmoCapacity;
+ GD.PrintErr("弹夹的容量不能超过弹药上限, 武器id: " + ItemId);
+ }
+ //弹药量
+ CurrAmmo = Attribute.AmmoCapacity;
+ //剩余弹药量
+ ResidueAmmo = Mathf.Min(Attribute.StandbyAmmoCapacity + CurrAmmo, Attribute.MaxAmmoCapacity) - CurrAmmo;
+
+ ThrowCollisionSize = attribute.ThrowCollisionSize.AsVector2();
+ }
+
+ ///
+ /// 单次开火时调用的函数
+ ///
+ protected abstract void OnFire();
+
+ ///
+ /// 发射子弹时调用的函数, 每发射一枚子弹调用一次,
+ /// 如果做霰弹武器效果, 一次开火发射5枚子弹, 则该函数调用5次
+ ///
+ /// 开火时枪口旋转角度
+ protected abstract void OnShoot(float fireRotation);
+
+ ///
+ /// 当按下扳机时调用
+ ///
+ protected virtual void OnDownTrigger()
+ {
+ }
+
+ ///
+ /// 当松开扳机时调用
+ ///
+ protected virtual void OnUpTrigger()
+ {
+ }
+
+ ///
+ /// 开始蓄力时调用,
+ /// 注意, 该函数仅在 Attribute.LooseShoot == false 时才能被调用
+ ///
+ protected virtual void OnStartCharge()
+ {
+ }
+
+ ///
+ /// 当换弹时调用, 如果设置单独装弹, 则每装一次弹调用一次该函数
+ ///
+ protected virtual void OnReload()
+ {
+ }
+
+ ///
+ /// 当开始换弹时调用
+ ///
+ protected virtual void OnBeginReload()
+ {
+
+ }
+
+ ///
+ /// 当换弹完成时调用
+ ///
+ protected virtual void OnReloadFinish()
+ {
+ }
+
+ ///
+ /// 当武器被拾起时调用
+ ///
+ /// 拾起该武器的角色
+ protected virtual void OnPickUp(Role master)
+ {
+ }
+
+ ///
+ /// 当武器从武器袋中移除时调用
+ ///
+ protected virtual void OnRemove()
+ {
+ }
+
+ ///
+ /// 当武器被激活时调用, 也就是使用当武器时调用
+ ///
+ protected virtual void OnActive()
+ {
+ }
+
+ ///
+ /// 当武器被收起时调用
+ ///
+ protected virtual void OnConceal()
+ {
+ }
+
+ ///
+ /// 射击时调用, 返回消耗弹药数量, 默认为1, 如果返回为 0, 则不消耗弹药
+ ///
+ protected virtual int UseAmmoCount()
+ {
+ return 1;
+ }
+
+ public override void EnterTree()
+ {
+ base.EnterTree();
+ //收集落在地上的武器
+ if (IsInGround())
+ {
+ World.Weapon_UnclaimedWeapons.Add(this);
+ }
+ }
+
+ public override void ExitTree()
+ {
+ base.ExitTree();
+ World.Weapon_UnclaimedWeapons.Remove(this);
+ }
+
+ protected override void Process(float delta)
+ {
+ //未开火时间
+ _noAttackTime += delta;
+
+ //这把武器被扔在地上, 或者当前武器没有被使用
+ if (Master == null || Master.Holster.ActiveWeapon != this)
+ {
+ //_triggerTimer
+ _triggerTimer = _triggerTimer > 0 ? _triggerTimer - delta : 0;
+ //攻击冷却计时
+ _attackTimer = _attackTimer > 0 ? _attackTimer - delta : 0;
+ //武器的当前散射半径
+ CurrScatteringRange = Mathf.Max(CurrScatteringRange - Attribute.ScatteringRangeBackSpeed * delta,
+ Attribute.StartScatteringRange);
+ //松开扳机
+ if (_triggerFlag || _downTimer > 0)
+ {
+ UpTrigger();
+ _downTimer = 0;
+ }
+
+ _triggerFlag = false;
+
+ //重置数据
+ if (_dirtyFlag)
+ {
+ _dirtyFlag = false;
+ _aloneReloadState = 0;
+ Reloading = false;
+ _reloadTimer = 0;
+ _reloadUseTime = 0;
+ _attackFlag = false;
+ _continuousCount = 0;
+ _delayedTime = 0;
+ _upTimer = 0;
+ _looseShootFlag = false;
+ _chargeTime = 0;
+ }
+ }
+ else //正在使用中
+ {
+ _dirtyFlag = true;
+ //换弹
+ if (Reloading)
+ {
+ //换弹用时
+ _reloadUseTime += delta;
+ _reloadTimer -= delta;
+
+ if (Attribute.AloneReload) //单独装弹模式
+ {
+ switch (_aloneReloadState)
+ {
+ case 0:
+ GD.PrintErr("AloneReload状态错误!");
+ break;
+ case 1: //装第一颗子弹之前
+ {
+ if (_reloadTimer <= 0)
+ {
+ //开始装第一颗子弹
+ _aloneReloadState = 2;
+ ReloadHandler();
+ }
+ }
+ break;
+ case 2: //单独装弹中
+ {
+ if (_reloadTimer <= 0)
+ {
+ ReloadSuccess();
+ if (ResidueAmmo == 0 || CurrAmmo == Attribute.AmmoCapacity) //单独装弹完成
+ {
+ AloneReloadStateFinish();
+ if (Attribute.AloneReloadFinishIntervalTime <= 0)
+ {
+ //换弹完成
+ StopReloadState();
+ ReloadFinishHandler();
+ }
+ else
+ {
+ _reloadTimer = Attribute.AloneReloadFinishIntervalTime;
+ _aloneReloadState = 3;
+ }
+ }
+ }
+ }
+ break;
+ case 3: //单独装弹完成
+ {
+ //播放换弹完成音效
+ if (!_playReloadFinishSoundFlag && Attribute.ReloadFinishSound != null && _reloadTimer <= Attribute.ReloadFinishSoundAdvanceTime)
+ {
+ _playReloadFinishSoundFlag = true;
+ // GD.Print("播放换弹完成音效.");
+ PlayReloadFinishSound();
+ }
+
+ if (_reloadTimer <= 0)
+ {
+ //换弹完成
+ StopReloadState();
+ ReloadFinishHandler();
+ }
+ }
+ break;
+ }
+ }
+ else //普通换弹模式
+ {
+ //播放换弹完成音效
+ if (!_playReloadFinishSoundFlag && Attribute.ReloadFinishSound != null && _reloadTimer <= Attribute.ReloadFinishSoundAdvanceTime)
+ {
+ _playReloadFinishSoundFlag = true;
+ // GD.Print("播放换弹完成音效.");
+ PlayReloadFinishSound();
+ }
+
+ if (_reloadTimer <= 0)
+ {
+ ReloadSuccess();
+ }
+ }
+ }
+
+ // 攻击的计时器
+ if (_attackTimer > 0)
+ {
+ _attackTimer -= delta;
+ if (_attackTimer < 0)
+ {
+ _delayedTime += _attackTimer;
+ _attackTimer = 0;
+ //枪口默认角度
+ RotationDegrees = -Attribute.DefaultAngle;
+ }
+ }
+ else if (_delayedTime > 0) //攻击延时
+ {
+ _delayedTime -= delta;
+ if (_attackTimer < 0)
+ {
+ _delayedTime = 0;
+ }
+ }
+
+ //扳机判定
+ if (_triggerFlag)
+ {
+ if (_looseShootFlag) //蓄力时长
+ {
+ _chargeTime += delta;
+ }
+
+ _downTimer += delta;
+ if (_upTimer > 0) //第一帧按下扳机
+ {
+ DownTrigger();
+ _upTimer = 0;
+ }
+ }
+ else
+ {
+ _upTimer += delta;
+ if (_downTimer > 0) //第一帧松开扳机
+ {
+ UpTrigger();
+ _downTimer = 0;
+ }
+ }
+
+ //连发判断
+ if (!_looseShootFlag && _continuousCount > 0 && _delayedTime <= 0 && _attackTimer <= 0)
+ {
+ //连发开火
+ TriggerFire();
+ }
+
+ //散射值销退
+ if (_noAttackTime >= Attribute.ScatteringRangeBackDelayTime)
+ {
+ CurrScatteringRange = Mathf.Max(CurrScatteringRange - Attribute.ScatteringRangeBackSpeed * delta,
+ Attribute.StartScatteringRange);
+ }
+
+ _triggerTimer = _triggerTimer > 0 ? _triggerTimer - delta : 0;
+ _triggerFlag = false;
+ _attackFlag = false;
+
+ //武器身回归
+ //Position = Position.MoveToward(Vector2.Zero, Attribute.BacklashRegressionSpeed * delta).Rotated(Rotation);
+ _currBacklashLength = Mathf.MoveToward(_currBacklashLength, 0, Attribute.BacklashRegressionSpeed * delta);
+ Position = new Vector2(_currBacklashLength, 0).Rotated(Rotation);
+ if (_attackTimer > 0)
+ {
+ RotationDegrees = Mathf.Lerp(
+ _fireAngle, -Attribute.DefaultAngle,
+ Mathf.Clamp((_fireInterval - _attackTimer) * Attribute.UpliftAngleRestore / _fireInterval, 0, 1)
+ );
+ }
+ }
+ }
+
+ ///
+ /// 返回武器是否在地上
+ ///
+ ///
+ public bool IsInGround()
+ {
+ return Master == null && GetParent() == GameApplication.Instance.World.NormalLayer;
+ }
+
+ ///
+ /// 扳机函数, 调用即视为按下扳机
+ ///
+ public void Trigger()
+ {
+ //这一帧已经按过了, 不需要再按下
+ if (_triggerFlag) return;
+
+ //是否第一帧按下
+ var justDown = _downTimer == 0;
+ //是否能发射
+ var flag = false;
+ if (_continuousCount <= 0) //不能处于连发状态下
+ {
+ if (Attribute.ContinuousShoot) //自动射击
+ {
+ if (_triggerTimer > 0)
+ {
+ if (_continuousShootFlag)
+ {
+ flag = true;
+ }
+ }
+ else
+ {
+ flag = true;
+ if (_delayedTime <= 0 && _attackTimer <= 0)
+ {
+ _continuousShootFlag = true;
+ }
+ }
+ }
+ else //半自动
+ {
+ if (justDown && _triggerTimer <= 0 && _attackTimer <= 0)
+ {
+ flag = true;
+ }
+ }
+ }
+
+ if (flag)
+ {
+ var fireFlag = true; //是否能开火
+ if (Reloading) //换弹中
+ {
+ fireFlag = false;
+ if (CurrAmmo > 0 && Attribute.AloneReload && Attribute.AloneReloadCanShoot)
+ {
+ //检查是否允许停止换弹
+ if (_aloneReloadState == 2 || _aloneReloadState == 1)
+ {
+ if (Attribute.AloneReloadFinishIntervalTime <= 0)
+ {
+ //换弹完成
+ StopReloadState();
+ ReloadFinishHandler();
+ }
+ else
+ {
+ _reloadTimer = Attribute.AloneReloadFinishIntervalTime;
+ _aloneReloadState = 3;
+ }
+ }
+ }
+ }
+ else if (CurrAmmo <= 0) //子弹不够
+ {
+ fireFlag = false;
+ if (justDown)
+ {
+ //第一帧按下, 触发换弹
+ Reload();
+ }
+ }
+
+ if (fireFlag)
+ {
+ if (justDown)
+ {
+ //开火前延时
+ if (!Attribute.LooseShoot)
+ {
+ _delayedTime = Attribute.DelayedTime;
+ }
+ //扳机按下间隔
+ _triggerTimer = Attribute.TriggerInterval;
+ //连发数量
+ if (!Attribute.ContinuousShoot)
+ {
+ _continuousCount =
+ Utils.RandomRangeInt(Attribute.MinContinuousCount, Attribute.MaxContinuousCount);
+ }
+ }
+
+ if (_delayedTime <= 0 && _attackTimer <= 0)
+ {
+ if (Attribute.LooseShoot) //松发开火
+ {
+ _looseShootFlag = true;
+ OnStartCharge();
+ }
+ else
+ {
+ //开火
+ TriggerFire();
+ }
+ }
+
+ _attackFlag = true;
+ }
+
+ }
+
+ _triggerFlag = true;
+ }
+
+ ///
+ /// 返回是否按下扳机
+ ///
+ public bool IsPressTrigger()
+ {
+ return _triggerFlag;
+ }
+
+ ///
+ /// 获取本次扳机按下的时长, 单位: 秒
+ ///
+ public float GetTriggerDownTime()
+ {
+ return _downTimer;
+ }
+
+ ///
+ /// 获取扳机蓄力时长, 计算按下扳机后从可以开火到当前一共经过了多长时间, 可用于计算蓄力攻击
+ /// 注意, 该函数仅在 Attribute.LooseShoot == false 时有正确的返回值, 否则返回 0
+ ///
+ public float GetTriggerChargeTime()
+ {
+ return _chargeTime;
+ }
+
+ ///
+ /// 获取延时射击倒计时, 单位: 秒
+ ///
+ public float GetDelayedAttackTime()
+ {
+ return _delayedTime;
+ }
+
+ ///
+ /// 刚按下扳机
+ ///
+ private void DownTrigger()
+ {
+ OnDownTrigger();
+ }
+
+ ///
+ /// 刚松开扳机
+ ///
+ private void UpTrigger()
+ {
+ _continuousShootFlag = false;
+ if (_delayedTime > 0)
+ {
+ _continuousCount = 0;
+ }
+
+ //松发开火执行
+ if (_looseShootFlag)
+ {
+ _looseShootFlag = false;
+ if (_chargeTime >= Attribute.MinChargeTime) //判断蓄力是否够了
+ {
+ TriggerFire();
+ }
+ else //不能攻击
+ {
+ _continuousCount = 0;
+ }
+ _chargeTime = 0;
+ }
+
+ OnUpTrigger();
+ }
+
+ ///
+ /// 触发开火
+ ///
+ private void TriggerFire()
+ {
+ _noAttackTime = 0;
+ _continuousCount = _continuousCount > 0 ? _continuousCount - 1 : 0;
+
+ //减子弹数量
+ if (_playerWeaponAttribute != _weaponAttribute) //Ai使用该武器, 有一定概率不消耗弹药
+ {
+ if (Utils.RandomRangeFloat(0, 1) < _weaponAttribute.AiAmmoConsumptionProbability) //触发消耗弹药
+ {
+ CurrAmmo -= UseAmmoCount();
+ }
+ }
+ else
+ {
+ CurrAmmo -= UseAmmoCount();
+ }
+
+ //开火间隙
+ _fireInterval = 60 / Attribute.StartFiringSpeed;
+ //攻击冷却
+ _attackTimer += _fireInterval;
+
+ //播放开火动画
+ if (IsAutoPlaySpriteFrames)
+ {
+ PlaySpriteAnimation(AnimatorNames.Fire);
+ }
+
+ //播放射击音效
+ PlayShootSound();
+
+ //触发开火函数
+ OnFire();
+
+ //播放上膛动画
+ if (IsAutoPlaySpriteFrames)
+ {
+ if (Attribute.EquipSoundDelayTime <= 0)
+ {
+ PlaySpriteAnimation(AnimatorNames.Equip);
+ }
+ else
+ {
+ DelayCall(Attribute.EquipSoundDelayTime, PlaySpriteAnimation, AnimatorNames.Equip);
+ }
+ }
+
+ //播放上膛音效
+ PlayEquipSound();
+
+ //开火发射的子弹数量
+ var bulletCount = Utils.RandomRangeInt(Attribute.MaxFireBulletCount, Attribute.MinFireBulletCount);
+ //武器口角度
+ var angle = new Vector2(GameConfig.ScatteringDistance, CurrScatteringRange).Angle();
+
+ //先算武器口方向
+ var tempRotation = Utils.RandomRangeFloat(-angle, angle);
+ var tempAngle = Mathf.RadToDeg(tempRotation);
+
+ //开火时枪口角度
+ var fireRotation = Mathf.DegToRad(Master.MountPoint.RealRotationDegrees) + tempRotation;
+ //创建子弹
+ for (int i = 0; i < bulletCount; i++)
+ {
+ //发射子弹
+ OnShoot(fireRotation);
+ }
+
+ //开火添加散射值
+ CurrScatteringRange = Mathf.Min(CurrScatteringRange + Attribute.ScatteringRangeAddValue,
+ Attribute.FinalScatteringRange);
+ //武器的旋转角度
+ tempAngle -= Attribute.UpliftAngle;
+ RotationDegrees = tempAngle;
+ _fireAngle = tempAngle;
+
+ //武器身位置
+ var max = Mathf.Abs(Mathf.Max(Attribute.MaxBacklash, Attribute.MinBacklash));
+ _currBacklashLength = Mathf.Clamp(
+ _currBacklashLength - Utils.RandomRangeFloat(Attribute.MinBacklash, Attribute.MaxBacklash),
+ -max, max
+ );
+ Position = new Vector2(_currBacklashLength, 0).Rotated(Rotation);
+
+ if (FireEvent != null)
+ {
+ FireEvent(this);
+ }
+ }
+
+ ///
+ /// 获取武器攻击的目标层级
+ ///
+ ///
+ public uint GetAttackLayer()
+ {
+ return Master != null ? Master.AttackLayer : Role.DefaultAttackLayer;
+ }
+
+ ///
+ /// 返回弹药是否到达上限
+ ///
+ public bool IsAmmoFull()
+ {
+ return CurrAmmo + ResidueAmmo >= Attribute.MaxAmmoCapacity;
+ }
+
+ ///
+ /// 返回弹夹是否打空
+ ///
+ public bool IsAmmoEmpty()
+ {
+ return CurrAmmo == 0;
+ }
+
+ ///
+ /// 返回是否弹药耗尽
+ ///
+ public bool IsTotalAmmoEmpty()
+ {
+ return CurrAmmo + ResidueAmmo == 0;
+ }
+
+ ///
+ /// 强制修改当前弹夹弹药量
+ ///
+ public void SetCurrAmmo(int count)
+ {
+ CurrAmmo = Mathf.Clamp(count, 0, Attribute.AmmoCapacity);
+ }
+
+ ///
+ /// 强制修改备用弹药量
+ ///
+ public void SetResidueAmmo(int count)
+ {
+ ResidueAmmo = Mathf.Clamp(count, 0, Attribute.MaxAmmoCapacity - CurrAmmo);
+ }
+
+ ///
+ /// 强制修改弹药量, 优先改动备用弹药
+ ///
+ public void SetTotalAmmo(int total)
+ {
+ if (total < 0)
+ {
+ return;
+ }
+ var totalAmmo = CurrAmmo + ResidueAmmo;
+ if (totalAmmo == total)
+ {
+ return;
+ }
+
+ if (total > totalAmmo) //弹药增加
+ {
+ ResidueAmmo = Mathf.Min(total - CurrAmmo, Attribute.MaxAmmoCapacity - CurrAmmo);
+ }
+ else //弹药减少
+ {
+ if (CurrAmmo < total)
+ {
+ ResidueAmmo = total - CurrAmmo;
+ }
+ else
+ {
+ CurrAmmo = total;
+ ResidueAmmo = 0;
+ }
+ }
+ }
+
+ ///
+ /// 拾起的弹药数量, 如果到达容量上限, 则返回拾取完毕后剩余的弹药数量
+ ///
+ /// 弹药数量
+ private int PickUpAmmo(int count)
+ {
+ var num = ResidueAmmo;
+ ResidueAmmo = Mathf.Min(ResidueAmmo + count, Attribute.MaxAmmoCapacity - CurrAmmo);
+ return count - ResidueAmmo + num;
+ }
+
+ ///
+ /// 触发换弹
+ ///
+ public void Reload()
+ {
+ if (CurrAmmo < Attribute.AmmoCapacity && ResidueAmmo > 0 && !Reloading)
+ {
+ Reloading = true;
+ _playReloadFinishSoundFlag = false;
+
+ //播放开始换弹音效
+ PlayBeginReloadSound();
+
+ // GD.Print("开始换弹.");
+ //第一次换弹
+ OnBeginReload();
+
+ if (Attribute.AloneReload)
+ {
+ //单独换弹, 特殊处理
+ AloneReloadHandler();
+ }
+ else
+ {
+ //普通换弹处理
+ ReloadHandler();
+ }
+ }
+ }
+
+ //播放换弹开始音效
+ private void PlayBeginReloadSound()
+ {
+ if (Attribute.BeginReloadSound != null)
+ {
+ var position = GameApplication.Instance.ViewToGlobalPosition(GlobalPosition);
+ if (Attribute.BeginReloadSoundDelayTime <= 0)
+ {
+ SoundManager.PlaySoundEffectPosition(Attribute.BeginReloadSound.Path, position, Attribute.BeginReloadSound.Volume);
+ }
+ else
+ {
+ SoundManager.PlaySoundEffectPositionDelay(Attribute.BeginReloadSound.Path, position, Attribute.BeginReloadSoundDelayTime, Attribute.BeginReloadSound.Volume);
+ }
+ }
+ }
+
+ //播放换弹音效
+ private void PlayReloadSound()
+ {
+ if (Attribute.ReloadSound != null)
+ {
+ var position = GameApplication.Instance.ViewToGlobalPosition(GlobalPosition);
+ if (Attribute.ReloadSoundDelayTime <= 0)
+ {
+ SoundManager.PlaySoundEffectPosition(Attribute.ReloadSound.Path, position, Attribute.ReloadSound.Volume);
+ }
+ else
+ {
+ SoundManager.PlaySoundEffectPositionDelay(Attribute.ReloadSound.Path, position, Attribute.ReloadSoundDelayTime, Attribute.ReloadSound.Volume);
+ }
+ }
+ }
+
+ //播放换弹完成音效
+ private void PlayReloadFinishSound()
+ {
+ if (Attribute.ReloadFinishSound != null)
+ {
+ var position = GameApplication.Instance.ViewToGlobalPosition(GlobalPosition);
+ SoundManager.PlaySoundEffectPosition(Attribute.ReloadFinishSound.Path, position, Attribute.ReloadFinishSound.Volume);
+ }
+ }
+
+ //播放射击音效
+ private void PlayShootSound()
+ {
+ if (Attribute.ShootSound != null)
+ {
+ var position = GameApplication.Instance.ViewToGlobalPosition(GlobalPosition);
+ SoundManager.PlaySoundEffectPosition(Attribute.ShootSound.Path, position, Attribute.ShootSound.Volume);
+ }
+ }
+
+ //播放上膛音效
+ private void PlayEquipSound()
+ {
+ if (Attribute.EquipSound != null)
+ {
+ var position = GameApplication.Instance.ViewToGlobalPosition(GlobalPosition);
+ if (Attribute.EquipSoundDelayTime <= 0)
+ {
+ SoundManager.PlaySoundEffectPosition(Attribute.EquipSound.Path, position, Attribute.EquipSound.Volume);
+ }
+ else
+ {
+ SoundManager.PlaySoundEffectPositionDelay(Attribute.EquipSound.Path, position, Attribute.EquipSoundDelayTime, Attribute.EquipSound.Volume);
+ }
+ }
+ }
+
+ //单独换弹处理
+ private void AloneReloadHandler()
+ {
+ if (Attribute.AloneReloadBeginIntervalTime <= 0)
+ {
+ //开始装第一颗子弹
+ _aloneReloadState = 2;
+ ReloadHandler();
+ }
+ else
+ {
+ _aloneReloadState = 1;
+ _reloadTimer = Attribute.AloneReloadBeginIntervalTime;
+ }
+ }
+
+ //换弹处理逻辑
+ private void ReloadHandler()
+ {
+ _reloadTimer = Attribute.ReloadTime;
+
+ //播放换弹动画
+ if (IsAutoPlaySpriteFrames)
+ {
+ PlaySpriteAnimation(AnimatorNames.Reloading);
+ }
+
+ //播放换弹音效
+ PlayReloadSound();
+
+ OnReload();
+ // GD.Print("装弹.");
+ }
+
+ //换弹完成处理逻辑
+ private void ReloadFinishHandler()
+ {
+ // GD.Print("装弹完成.");
+ OnReloadFinish();
+ }
+
+ //单独装弹完成
+ private void AloneReloadStateFinish()
+ {
+ // GD.Print("单独装弹完成.");
+ }
+
+ //停止当前的换弹状态
+ private void StopReloadState()
+ {
+ _aloneReloadState = 0;
+ Reloading = false;
+ _reloadTimer = 0;
+ _reloadUseTime = 0;
+ }
+
+ ///
+ /// 换弹计时器时间到, 执行换弹操作
+ ///
+ private void ReloadSuccess()
+ {
+ if (Attribute.AloneReload) //单独装填
+ {
+ if (ResidueAmmo >= Attribute.AloneReloadCount) //剩余子弹充足
+ {
+ if (CurrAmmo + Attribute.AloneReloadCount <= Attribute.AmmoCapacity)
+ {
+ ResidueAmmo -= Attribute.AloneReloadCount;
+ CurrAmmo += Attribute.AloneReloadCount;
+ }
+ else //子弹满了
+ {
+ var num = Attribute.AmmoCapacity - CurrAmmo;
+ CurrAmmo = Attribute.AmmoCapacity;
+ ResidueAmmo -= num;
+ }
+ }
+ else if (ResidueAmmo != 0) //剩余子弹不足
+ {
+ if (ResidueAmmo + CurrAmmo <= Attribute.AmmoCapacity)
+ {
+ CurrAmmo += ResidueAmmo;
+ ResidueAmmo = 0;
+ }
+ else //子弹满了
+ {
+ var num = Attribute.AmmoCapacity - CurrAmmo;
+ CurrAmmo = Attribute.AmmoCapacity;
+ ResidueAmmo -= num;
+ }
+ }
+
+ if (ResidueAmmo != 0 && CurrAmmo != Attribute.AmmoCapacity) //继续装弹
+ {
+ ReloadHandler();
+ }
+ }
+ else //换弹结束
+ {
+ if (CurrAmmo + ResidueAmmo >= Attribute.AmmoCapacity)
+ {
+ ResidueAmmo -= Attribute.AmmoCapacity - CurrAmmo;
+ CurrAmmo = Attribute.AmmoCapacity;
+ }
+ else
+ {
+ CurrAmmo += ResidueAmmo;
+ ResidueAmmo = 0;
+ }
+
+ StopReloadState();
+ ReloadFinishHandler();
+ }
+ }
+
+ //播放动画
+ private void PlaySpriteAnimation(string name)
+ {
+ var spriteFrames = AnimatedSprite.SpriteFrames;
+ if (spriteFrames != null && spriteFrames.HasAnimation(name))
+ {
+ AnimatedSprite.Play(name);
+ }
+ }
+
+ //帧动画播放结束
+ private void OnAnimationFinished()
+ {
+ GD.Print("帧动画播放结束...");
+ AnimatedSprite.Play(AnimatorNames.Default);
+ }
+
+ public override CheckInteractiveResult CheckInteractive(ActivityObject master)
+ {
+ var result = new CheckInteractiveResult(this);
+
+ if (master is Role roleMaster) //碰到角色
+ {
+ if (Master == null)
+ {
+ var masterWeapon = roleMaster.Holster.ActiveWeapon;
+ //查找是否有同类型武器
+ var index = roleMaster.Holster.FindWeapon(ItemId);
+ if (index != -1) //如果有这个武器
+ {
+ if (CurrAmmo + ResidueAmmo != 0) //子弹不为空
+ {
+ var targetWeapon = roleMaster.Holster.GetWeapon(index);
+ if (!targetWeapon.IsAmmoFull()) //背包里面的武器子弹未满
+ {
+ //可以互动拾起弹药
+ result.CanInteractive = true;
+ result.Message = Attribute.Name;
+ result.ShowIcon = ResourcePath.resource_sprite_ui_icon_icon_bullet_png;
+ return result;
+ }
+ }
+ }
+ else //没有武器
+ {
+ if (roleMaster.Holster.CanPickupWeapon(this)) //能拾起武器
+ {
+ //可以互动, 拾起武器
+ result.CanInteractive = true;
+ result.Message = Attribute.Name;
+ result.ShowIcon = ResourcePath.resource_sprite_ui_icon_icon_pickup_png;
+ return result;
+ }
+ else if (masterWeapon != null && masterWeapon.Attribute.WeightType == Attribute.WeightType) //替换武器
+ {
+ //可以互动, 切换武器
+ result.CanInteractive = true;
+ result.Message = Attribute.Name;
+ result.ShowIcon = ResourcePath.resource_sprite_ui_icon_icon_replace_png;
+ return result;
+ }
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public override void Interactive(ActivityObject master)
+ {
+ if (master is Role roleMaster) //与role互动
+ {
+ var holster = roleMaster.Holster;
+ //查找是否有同类型武器
+ var index = holster.FindWeapon(ItemId);
+ if (index != -1) //如果有这个武器
+ {
+ if (CurrAmmo + ResidueAmmo == 0) //没有子弹了
+ {
+ return;
+ }
+
+ var weapon = holster.GetWeapon(index);
+ //子弹上限
+ var maxCount = Attribute.MaxAmmoCapacity;
+ //是否捡到子弹
+ var flag = false;
+ if (ResidueAmmo > 0 && weapon.CurrAmmo + weapon.ResidueAmmo < maxCount)
+ {
+ var count = weapon.PickUpAmmo(ResidueAmmo);
+ if (count != ResidueAmmo)
+ {
+ ResidueAmmo = count;
+ flag = true;
+ }
+ }
+
+ if (CurrAmmo > 0 && weapon.CurrAmmo + weapon.ResidueAmmo < maxCount)
+ {
+ var count = weapon.PickUpAmmo(CurrAmmo);
+ if (count != CurrAmmo)
+ {
+ CurrAmmo = count;
+ flag = true;
+ }
+ }
+
+ //播放互动效果
+ if (flag)
+ {
+ Throw(GlobalPosition, 0, Utils.RandomRangeInt(20, 50), Vector2.Zero, Utils.RandomRangeInt(-180, 180));
+ }
+ }
+ else //没有武器
+ {
+ if (holster.PickupWeapon(this) == -1)
+ {
+ //替换武器
+ roleMaster.ThrowWeapon();
+ roleMaster.PickUpWeapon(this);
+ }
+ }
+ }
+ }
+
+ ///
+ /// 获取当前武器真实的旋转角度(弧度制), 由于武器旋转时加入了旋转吸附, 所以需要通过该函数来来知道当前武器的真实旋转角度
+ ///
+ public float GetRealGlobalRotation()
+ {
+ return Mathf.DegToRad(Master.MountPoint.RealRotationDegrees) + Rotation;
+ }
+
+ ///
+ /// 触发扔掉武器抛出的效果, 并不会管武器是否在武器袋中
+ ///
+ /// 触发扔掉该武器的的角色
+ public void ThrowWeapon(Role master)
+ {
+ ThrowWeapon(master, master.GlobalPosition);
+ }
+
+ ///
+ /// 触发扔掉武器抛出的效果, 并不会管武器是否在武器袋中
+ ///
+ /// 触发扔掉该武器的的角色
+ /// 投抛起始位置
+ public void ThrowWeapon(Role master, Vector2 startPosition)
+ {
+ //阴影偏移
+ ShadowOffset = new Vector2(0, 2);
+
+ if (master.Face == FaceDirection.Left)
+ {
+ Scale *= new Vector2(1, -1);
+ }
+
+ var rotation = master.MountPoint.GlobalRotation;
+ GlobalRotation = rotation;
+
+ //继承role的移动速度
+ InheritVelocity(master);
+
+ startPosition -= GripPoint.Position.Rotated(rotation);
+ var startHeight = -master.MountPoint.Position.Y;
+ var velocity = new Vector2(20, 0).Rotated(rotation);
+ var yf = Utils.RandomRangeInt(50, 70);
+ Throw(startPosition, startHeight, yf, velocity, 0);
+ }
+
+ protected override void OnThrowStart()
+ {
+ //禁用碰撞
+ //Collision.Disabled = true;
+ AnimationPlayer.Play(AnimatorNames.Floodlight);
+ }
+
+ protected override void OnThrowOver()
+ {
+ //启用碰撞
+ //Collision.Disabled = false;
+ AnimationPlayer.Play(AnimatorNames.Floodlight);
+ }
+
+ ///
+ /// 触发拾起到 Holster, 这个函数由 Holster 对象调用
+ ///
+ public void PickUpWeapon(Role master)
+ {
+ Master = master;
+ if (master.IsAi)
+ {
+ _weaponAttribute = _aiWeaponAttribute;
+ }
+ else
+ {
+ _weaponAttribute = _playerWeaponAttribute;
+ }
+ //停止动画
+ AnimationPlayer.Stop();
+ //清除泛白效果
+ SetBlendSchedule(0);
+ ZIndex = 0;
+ //禁用碰撞
+ //Collision.Disabled = true;
+ //精灵位置
+ _tempAnimatedSpritePosition = AnimatedSprite.Position;
+ var position = GripPoint.Position;
+ AnimatedSprite.Position = new Vector2(-position.X, -position.Y);
+ //修改层级
+ _tempLayer = CollisionLayer;
+ CollisionLayer = PhysicsLayer.InHand;
+ //清除 Ai 拾起标记
+ RemoveSign(SignNames.AiFindWeaponSign);
+ OnPickUp(master);
+ }
+
+ ///
+ /// 触发从 Holster 中移除, 这个函数由 Holster 对象调用
+ ///
+ public void RemoveAt()
+ {
+ Master = null;
+ CollisionLayer = _tempLayer;
+ _weaponAttribute = _playerWeaponAttribute;
+ AnimatedSprite.Position = _tempAnimatedSpritePosition;
+ //清除 Ai 拾起标记
+ RemoveSign(SignNames.AiFindWeaponSign);
+ OnRemove();
+ }
+
+ ///
+ /// 触发启用武器
+ ///
+ public void Active()
+ {
+ //调整阴影
+ ShadowOffset = new Vector2(0, Master.GlobalPosition.Y - GlobalPosition.Y);
+ //枪口默认抬起角度
+ RotationDegrees = -Attribute.DefaultAngle;
+ ShowShadowSprite();
+ OnActive();
+ }
+
+ ///
+ /// 触发收起武器
+ ///
+ public void Conceal()
+ {
+ HideShadowSprite();
+ OnConceal();
+ }
+
+ //-------------------------- ----- 子弹相关 -----------------------------
+
+ ///
+ /// 投抛弹壳的默认实现方式, shellId为弹壳id, 不需要前缀
+ ///
+ protected ActivityObject ThrowShell(string shellId)
+ {
+ var shellPosition = Master.MountPoint.Position + ShellPoint.Position;
+ var startPos = ShellPoint.GlobalPosition;
+ var startHeight = -shellPosition.Y;
+ startPos.Y += startHeight;
+ var direction = GlobalRotationDegrees + Utils.RandomRangeInt(-30, 30) + 180;
+ var verticalSpeed = Utils.RandomRangeInt(60, 120);
+ var velocity = new Vector2(Utils.RandomRangeInt(20, 60), 0).Rotated(direction * Mathf.Pi / 180);
+ var rotate = Utils.RandomRangeInt(-720, 720);
+ var shell = Create(shellId);
+ shell.Rotation = Master.MountPoint.RealRotation;
+ shell.InheritVelocity(Master);
+ shell.Throw(startPos, startHeight, verticalSpeed, velocity, rotate);
+ return shell;
+ }
+
+ //-------------------------------- Ai相关 -----------------------------
+
+ ///
+ /// 获取 Ai 对于该武器的评分, 评分越高, 代表 Ai 会越优先选择该武器, 如果为 -1, 则表示 Ai 不会使用该武器
+ ///
+ public float GetAiScore()
+ {
+ return 1;
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/WeaponWeightType.cs b/DungeonShooting_Godot/src/game/activity/weapon/WeaponWeightType.cs
new file mode 100644
index 0000000..5528683
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/weapon/WeaponWeightType.cs
@@ -0,0 +1,19 @@
+
+///
+/// 根据重量划分的武器类型
+///
+public enum WeaponWeightType
+{
+ ///
+ /// 副武器
+ ///
+ DeputyWeapon = 1,
+ ///
+ /// 主武器
+ ///
+ MainWeapon = 2,
+ ///
+ /// 重型武器
+ ///
+ HeavyWeapon = 3
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs b/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs
new file mode 100644
index 0000000..83b94aa
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/weapon/gun/Gun.cs
@@ -0,0 +1,47 @@
+using Godot;
+
+///
+/// 普通的枪
+///
+[Tool, GlobalClass]
+public partial class Gun : Weapon
+{
+ protected override void OnReload()
+ {
+ base.OnReload();
+ }
+
+ protected override void OnFire()
+ {
+ //创建一个弹壳
+ ThrowShell(ActivityObject.Ids.Id_shell0001);
+
+ if (Master == Player.Current)
+ {
+ //创建抖动
+ GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * 2f);
+ }
+
+ //创建开火特效
+ var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_ShotFire_tscn);
+ var sprite = packedScene.Instantiate();
+ sprite.GlobalPosition = FirePoint.GlobalPosition;
+ sprite.GlobalRotation = FirePoint.GlobalRotation;
+ sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+ }
+
+ protected override void OnShoot(float fireRotation)
+ {
+ //创建子弹
+ var bullet = ActivityObject.Create(Attribute.BulletId);
+ bullet.Init(
+ this,
+ 350,
+ Utils.RandomRangeFloat(Attribute.MinDistance, Attribute.MaxDistance),
+ FirePoint.GlobalPosition,
+ fireRotation,
+ GetAttackLayer()
+ );
+ bullet.PutDown(RoomLayerEnum.YSortLayer);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/gun/Shotgun.cs b/DungeonShooting_Godot/src/game/activity/weapon/gun/Shotgun.cs
new file mode 100644
index 0000000..fc79ef3
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/weapon/gun/Shotgun.cs
@@ -0,0 +1,39 @@
+using Godot;
+
+[Tool, GlobalClass]
+public partial class Shotgun : Weapon
+{
+ protected override void OnFire()
+ {
+ //创建一个弹壳
+ ThrowShell(ActivityObject.Ids.Id_shell0001);
+
+ if (Master == Player.Current)
+ {
+ //创建抖动
+ GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * 2f);
+ }
+
+ //创建开火特效
+ var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_ShotFire_tscn);
+ var sprite = packedScene.Instantiate();
+ sprite.GlobalPosition = FirePoint.GlobalPosition;
+ sprite.GlobalRotation = FirePoint.GlobalRotation;
+ sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer);
+ }
+
+ protected override void OnShoot(float fireRotation)
+ {
+ //创建子弹
+ var bullet = ActivityObject.Create(Attribute.BulletId);
+ bullet.Init(
+ this,
+ Utils.RandomRangeInt(280, 380),
+ Utils.RandomRangeFloat(Attribute.MinDistance, Attribute.MaxDistance),
+ FirePoint.GlobalPosition,
+ fireRotation + Utils.RandomRangeFloat(Mathf.DegToRad(-10), Mathf.DegToRad(10)),
+ GetAttackLayer()
+ );
+ bullet.PutDown(RoomLayerEnum.YSortLayer);
+ }
+}
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs
new file mode 100644
index 0000000..8d97533
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/weapon/knife/Knife.cs
@@ -0,0 +1,99 @@
+
+using Godot;
+
+[Tool, GlobalClass]
+public partial class Knife : Weapon
+{
+
+ private Area2D _hitArea;
+ private int _attackIndex = 0;
+
+ public override void OnInit()
+ {
+ base.OnInit();
+
+ _hitArea = GetNode("HitArea");
+ _hitArea.Monitoring = false;
+ _hitArea.Monitorable = false;
+ _hitArea.BodyEntered += OnBodyEntered;
+ //禁用自动播放动画
+ IsAutoPlaySpriteFrames = false;
+ }
+
+ protected override void Process(float delta)
+ {
+ base.Process(delta);
+ if (IsActive)
+ {
+ //让碰撞节点与武器挂载节点位置保持一致, 而不跟着武器走
+ _hitArea.GlobalPosition = Master.MountPoint.GlobalPosition;
+ }
+ }
+
+ protected override void PhysicsProcess(float delta)
+ {
+ base.PhysicsProcess(delta);
+ //过去两个物理帧后就能关闭碰撞了
+ if (++_attackIndex >= 2)
+ {
+ _hitArea.Monitoring = false;
+ }
+ }
+
+ protected override void OnStartCharge()
+ {
+ //开始蓄力时武器角度上抬120度
+ RotationDegrees = -120;
+ }
+
+ protected override void OnFire()
+ {
+ GD.Print("近战武器攻击! 蓄力时长: " + GetTriggerChargeTime() + ", 扳机按下时长: " + GetTriggerDownTime());
+ //更新碰撞层级
+ _hitArea.CollisionMask = GetAttackLayer();
+ //启用碰撞
+ _hitArea.Monitoring = true;
+ _attackIndex = 0;
+
+ if (IsActive) //被使用
+ {
+ //播放挥刀特效
+ SpecialEffectManager.Play(
+ ResourcePath.resource_spriteFrames_KnifeHit1_tres, "default",
+ Master.MountPoint.GlobalPosition, GlobalRotation + Mathf.Pi * 0.5f, new Vector2((int)Master.Face, 1) * AnimatedSprite.Scale,
+ new Vector2(17, 4), 1
+ );
+ }
+
+
+ if (Master == Player.Current)
+ {
+ //创建抖动
+ //GameCamera.Main.ProcessDirectionalShake(Vector2.Right.Rotated(GlobalRotation - Mathf.Pi * 0.5f) * 1.5f);
+ }
+ }
+
+ protected override void OnShoot(float fireRotation)
+ {
+
+ }
+
+ protected override int UseAmmoCount()
+ {
+ //这里要做判断, 如果没有碰到敌人, 则不消耗弹药 (耐久)
+ return 0;
+ }
+
+ private void OnBodyEntered(Node2D body)
+ {
+ GD.Print("碰到物体: " + body.Name);
+ var activityObject = body.AsActivityObject();
+ if (activityObject != null)
+ {
+ if (activityObject is Role role)
+ {
+ role.CallDeferred(nameof(Role.Hurt), 10, (role.GetCenterPosition() - GlobalPosition).Angle());
+ }
+ }
+ }
+}
diff --git a/DungeonShooting_Godot/src/game/camera/GameCamera.cs b/DungeonShooting_Godot/src/game/camera/GameCamera.cs
index 993097e..3786268 100644
--- a/DungeonShooting_Godot/src/game/camera/GameCamera.cs
+++ b/DungeonShooting_Godot/src/game/camera/GameCamera.cs
@@ -70,9 +70,11 @@
// (viewportContainer.Material as ShaderMaterial)?.SetShaderParameter("offset", SubPixelPosition);
// GlobalPosition = _camPos.Round();
- if (_followTarget != null)
+
+ var world = GameApplication.Instance.World;
+ if (world != null && !world.Pause && _followTarget != null)
{
- var mousePosition = InputManager.GetViewportMousePosition();
+ var mousePosition = InputManager.CursorPosition;
var targetPosition = _followTarget.GlobalPosition;
Vector2 targetPos;
if (targetPosition.DistanceSquaredTo(mousePosition) >= (60 / 0.3f) * (60 / 0.3f))
@@ -104,7 +106,11 @@
public void SetFollowTarget(Role target)
{
_followTarget = target;
- GlobalPosition = target.GlobalPosition;
+ if (target != null)
+ {
+ _camPos = target.GlobalPosition;
+ GlobalPosition = _camPos;
+ }
}
///
@@ -152,6 +158,14 @@
}
}
+ ///
+ /// 播放玩家死亡特写镜头
+ ///
+ public void PlayPlayerDieFeatures()
+ {
+
+ }
+
//抖动调用
private void _Shake(float delta)
{
diff --git a/DungeonShooting_Godot/src/game/effects/EnemyDebris.cs b/DungeonShooting_Godot/src/game/effects/EnemyDebris.cs
index 0017f0f..0a967f2 100644
--- a/DungeonShooting_Godot/src/game/effects/EnemyDebris.cs
+++ b/DungeonShooting_Godot/src/game/effects/EnemyDebris.cs
@@ -2,7 +2,7 @@
using System.Collections;
using Godot;
-[RegisterActivity(ActivityIdPrefix.Effect + "0001", ResourcePath.prefab_effect_activityObject_EnemyDebris_tscn)]
+[Tool, GlobalClass]
public partial class EnemyDebris : ActivityObject
{
diff --git a/DungeonShooting_Godot/src/game/event/EventEnum.cs b/DungeonShooting_Godot/src/game/event/EventEnum.cs
index 4d6e2ff..cf97ec2 100644
--- a/DungeonShooting_Godot/src/game/event/EventEnum.cs
+++ b/DungeonShooting_Godot/src/game/event/EventEnum.cs
@@ -37,7 +37,11 @@
///
OnPlayerMaxShieldChange,
///
- /// 刷新玩家手持武器纹理, 参数类型为
+ /// 当玩家进入地牢时调用, 没有参数
///
- OnPlayerRefreshWeaponTexture,
+ OnEnterDungeon,
+ ///
+ /// 当玩家退出地牢时调用, 没有参数
+ ///
+ OnExitDungeon,
}
diff --git a/DungeonShooting_Godot/src/game/event/EventManager.cs b/DungeonShooting_Godot/src/game/event/EventManager.cs
index 665fe38..394db2a 100644
--- a/DungeonShooting_Godot/src/game/event/EventManager.cs
+++ b/DungeonShooting_Godot/src/game/event/EventManager.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
+using Godot;
///
/// 事件管理器
@@ -57,7 +58,14 @@
var binder = binders[i];
if (!binder.IsDiscard)
{
- binder.Callback(arg);
+ try
+ {
+ binder.Callback(arg);
+ }
+ catch (Exception e)
+ {
+ GD.PrintErr($"EventManager 派发事件: '{eventType}' 发生异常: \n" + e.Message + "\n" + e.StackTrace);
+ }
}
}
}
diff --git a/DungeonShooting_Godot/src/game/item/CheckInteractiveResult.cs b/DungeonShooting_Godot/src/game/item/CheckInteractiveResult.cs
deleted file mode 100644
index eb8676b..0000000
--- a/DungeonShooting_Godot/src/game/item/CheckInteractiveResult.cs
+++ /dev/null
@@ -1,28 +0,0 @@
-
-///
-/// 检测互动返回的数据集
-///
-public class CheckInteractiveResult
-{
- ///
- /// 互动物体
- ///
- public ActivityObject Target;
- ///
- /// 是否可以互动
- ///
- public bool CanInteractive;
- ///
- /// 互动提示信息
- ///
- public string Message;
- ///
- /// 互动提示显示的图标
- ///
- public string ShowIcon;
-
- public CheckInteractiveResult(ActivityObject target)
- {
- Target = target;
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/package/Holster.cs b/DungeonShooting_Godot/src/game/item/package/Holster.cs
deleted file mode 100644
index a487f64..0000000
--- a/DungeonShooting_Godot/src/game/item/package/Holster.cs
+++ /dev/null
@@ -1,369 +0,0 @@
-using System;
-using System.Collections.Generic;
-using Godot;
-
-///
-/// 角色身上的武器袋, 存储角色携带的武器
-///
-public class Holster
-{
- ///
- /// 归属者
- ///
- public Role Master { get; }
-
- ///
- /// 当前使用的武器对象
- ///
- public Weapon ActiveWeapon { get; private set; }
-
- ///
- /// 当前使用的武器的索引
- ///
- public int ActiveIndex { get; private set; } = 0;
-
- ///
- /// 武器袋容量
- ///
- public int Capacity { get; private set; } = 0;
-
- ///
- /// 武器插槽
- ///
- public Weapon[] Weapons { get; private set; }
-
- public Holster(Role master)
- {
- Master = master;
- //默认容量4
- SetCapacity(4);
- }
-
- ///
- /// 修改武器袋容量
- ///
- public void SetCapacity(int capacity)
- {
- if (capacity < 0)
- {
- capacity = 0;
- }
-
- if (capacity == Capacity)
- {
- return;
- }
-
- if (Weapons == null)
- {
- Weapons = new Weapon[capacity];
- }
- else if (Weapons.Length > capacity) //删减格子
- {
- var newArray = new Weapon[capacity];
- for (var i = 0; i < Weapons.Length; i++)
- {
- if (i < capacity)
- {
- newArray[i] = Weapons[i];
- }
- else
- {
- Master.ThrowWeapon(i);
- }
- }
-
- Weapons = newArray;
- }
- else //添加格子
- {
- var newArray = new Weapon[capacity];
- for (var i = 0; i < Weapons.Length; i++)
- {
- newArray[i] = Weapons[i];
- }
- Weapons = newArray;
- }
- Capacity = capacity;
-
- }
-
- ///
- /// 返回当前武器袋是否是空的
- ///
- public bool IsEmpty()
- {
- for (var i = 0; i < Weapons.Length; i++)
- {
- if (Weapons[i] != null)
- {
- return false;
- }
- }
-
- return true;
- }
-
- ///
- /// 返回当前武器袋是否还有空位
- ///
- public bool HasVacancy()
- {
- for (var i = 0; i < Weapons.Length; i++)
- {
- if (Weapons[i] == null)
- {
- return true;
- }
- }
-
- return false;
- }
-
- ///
- /// 根据索引获取武器
- ///
- public Weapon GetWeapon(int index)
- {
- if (index < 0 || index >= Weapons.Length)
- {
- return null;
- }
- return Weapons[index];
- }
-
- ///
- /// 根据武器id查找武器袋中该武器所在的位置, 如果没有, 则返回 -1
- ///
- /// 武器id
- public int FindWeapon(string id)
- {
- for (var i = 0; i < Weapons.Length; i++)
- {
- var item = Weapons[i];
- if (item != null && item.ItemId == id)
- {
- return i;
- }
- }
- return -1;
- }
-
- ///
- /// 通过回调函数查询武器在武器袋中的位置, 如果没有, 则返回 -1
- ///
- public int FindWeapon(Func handler)
- {
- for (var i = 0; i < Weapons.Length; i++)
- {
- var item = Weapons[i];
- if (item != null && handler(item, i))
- {
- return i;
- }
- }
- return -1;
- }
-
- ///
- /// 遍历所有武器
- ///
- public void ForEach(Action handler)
- {
- for (var i = 0; i < Weapons.Length; i++)
- {
- var item = Weapons[i];
- if (item != null)
- {
- handler(item, i);
- }
- }
- }
-
- ///
- /// 从武器袋中移除所有武器, 并返回
- ///
- public Weapon[] GetAndClearWeapon()
- {
- var weapons = new List();
- for (var i = 0; i < Weapons.Length; i++)
- {
- var weapon = Weapons[i];
- if (weapon != null)
- {
- weapon.GetParent().RemoveChild(weapon);
- weapon.RemoveAt();
- weapons.Add(weapon);
- Weapons[i] = null;
- }
- }
-
- return weapons.ToArray();
- }
-
- ///
- /// 返回是否能放入武器
- ///
- /// 武器对象
- public bool CanPickupWeapon(Weapon weapon)
- {
- for (var i = 0; i < Weapons.Length; i++)
- {
- var item = Weapons[i];
- if (item == null)
- {
- return true;
- }
- }
- return false;
- }
-
- ///
- /// 拾起武器, 存入武器袋中, 返回存放在武器袋的位置, 如果容不下这把武器, 则会返回 -1
- ///
- /// 武器对象
- /// 是否立即切换到该武器, 默认 true
- public int PickupWeapon(Weapon weapon, bool exchange = true)
- {
- //已经被拾起了
- if (weapon.Master != null)
- {
- return -1;
- }
- for (var i = 0; i < Weapons.Length; i++)
- {
- var item = Weapons[i];
- if (item == null)
- {
- weapon.Pickup();
- Weapons[i] = weapon;
- weapon.PickUpWeapon(Master);
- if (exchange)
- {
- ExchangeByIndex(i);
- }
-
- return i;
- }
- }
- return -1;
- }
-
- ///
- /// 移除指定位置的武器, 并返回这个武器对象, 如果移除正在使用的这把武器, 则会自动切换到上一把武器
- ///
- /// 所在武器袋的位置索引
- public Weapon RemoveWeapon(int index)
- {
- if (index < 0 || index >= Weapons.Length)
- {
- return null;
- }
- var weapon = Weapons[index];
- if (weapon == null)
- {
- return null;
- }
- weapon.GetParent().RemoveChild(weapon);
- Weapons[index] = null;
-
- //如果是当前手持的武器, 就需要调用切换武器操作
- if (index == ActiveIndex)
- {
- //没有其他武器了
- if (ExchangePrev() == index)
- {
- ActiveIndex = 0;
- ActiveWeapon = null;
- }
- }
- weapon.RemoveAt();
- return weapon;
- }
-
- ///
- /// 切换到上一个武器
- ///
- public int ExchangePrev()
- {
- var index = ActiveIndex - 1;
- do
- {
- if (index < 0)
- {
- index = Weapons.Length - 1;
- }
- if (ExchangeByIndex(index))
- {
- return index;
- }
- } while (index-- != ActiveIndex);
- return -1;
- }
-
- ///
- /// 切换到下一个武器,
- ///
- public int ExchangeNext()
- {
- var index = ActiveIndex + 1;
- do
- {
- if (index >= Weapons.Length)
- {
- index = 0;
- }
- if (ExchangeByIndex(index))
- {
- return index;
- }
- }
- while (index++ != ActiveIndex);
- return -1;
- }
-
- ///
- /// 切换到指定索引的武器
- ///
- public bool ExchangeByIndex(int index)
- {
- if (index == ActiveIndex && ActiveWeapon != null) return true;
- if (index < 0 || index > Weapons.Length) return false;
- var weapon = Weapons[index];
- if (weapon == null) return false;
-
- //将上一把武器放到背后
- if (ActiveWeapon != null)
- {
- var tempParent = ActiveWeapon.GetParentOrNull();
- if (tempParent != null)
- {
- tempParent.RemoveChild(ActiveWeapon);
- Master.BackMountPoint.AddChild(ActiveWeapon);
- Master.OnPutBackMount(ActiveWeapon, ActiveIndex);
- ActiveWeapon.Conceal();
- }
- }
-
- //更改父节点
- var parent = weapon.GetParentOrNull();
- if (parent == null)
- {
- Master.MountPoint.AddChild(weapon);
- }
- else if (parent != Master.MountPoint)
- {
- parent.RemoveChild(weapon);
- Master.MountPoint.AddChild(weapon);
- }
-
- weapon.Position = Vector2.Zero;
- weapon.Scale = Vector2.One;
- weapon.RotationDegrees = 0;
- weapon.Visible = true;
- ActiveWeapon = weapon;
- ActiveIndex = index;
- ActiveWeapon.Active();
- return true;
- }
-}
diff --git a/DungeonShooting_Godot/src/game/item/weapon/RegisterWeapon.cs b/DungeonShooting_Godot/src/game/item/weapon/RegisterWeapon.cs
deleted file mode 100644
index 0a1ca23..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/RegisterWeapon.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-
-using System;
-
-///
-/// 注册武器
-///
-public class RegisterWeapon : RegisterActivity
-{
- ///
- /// 武器属性
- ///
- private readonly WeaponAttribute _weaponAttribute;
-
- public RegisterWeapon(string itemId, Type attribute) : base(itemId, null)
- {
- _weaponAttribute = (WeaponAttribute)Activator.CreateInstance(attribute);
- if (_weaponAttribute != null) PrefabPath = _weaponAttribute.WeaponPrefab;
- }
-
- public override void CustomHandler(ActivityObject instance)
- {
- if (instance is Weapon weapon)
- {
- weapon.InitWeapon(_weaponAttribute.Clone());
- }
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/item/weapon/Weapon.cs
deleted file mode 100644
index e416aae..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/Weapon.cs
+++ /dev/null
@@ -1,1089 +0,0 @@
-using Godot;
-using System;
-using System.Collections.Generic;
-
-///
-/// 武器的基类
-///
-public abstract partial class Weapon : ActivityObject
-{
- ///
- /// 所有被扔在地上的武器
- ///
- public static readonly HashSet UnclaimedWeapons = new HashSet();
-
- ///
- /// 开火回调事件
- ///
- public event Action FireEvent;
-
- ///
- /// 武器属性数据
- ///
- public WeaponAttribute Attribute => _weaponAttribute;
-
- private WeaponAttribute _weaponAttribute;
- private WeaponAttribute _originWeaponAttribute;
-
- ///
- /// 武器攻击的目标阵营
- ///
- public CampEnum TargetCamp { get; set; }
-
- ///
- /// 该武器的拥有者
- ///
- public Role Master { get; private set; }
-
- ///
- /// 当前弹夹弹药剩余量
- ///
- public int CurrAmmo { get; private set; }
-
- ///
- /// 剩余弹药量(备用弹药)
- ///
- public int ResidueAmmo { get; private set; }
-
- ///
- /// 武器管的开火点
- ///
- public Marker2D FirePoint { get; private set; }
-
- ///
- /// 武器管的原点
- ///
- public Marker2D OriginPoint { get; private set; }
-
- ///
- /// 弹壳抛出的点
- ///
- public Marker2D ShellPoint { get; private set; }
-
- ///
- /// 武器的当前散射半径
- ///
- public float CurrScatteringRange { get; private set; } = 0;
-
- ///
- /// 是否在换弹中
- ///
- ///
- public bool Reloading { get; private set; } = false;
-
- ///
- /// 换弹计时器
- ///
- public float ReloadTimer { get; private set; } = 0;
-
- ///
- /// 换弹进度 (0 - 1)
- ///
- public float ReloadProgress
- {
- get
- {
- if (Attribute.AloneReload)
- {
- var num = 1f / Attribute.AmmoCapacity;
- return num * (Attribute.AmmoCapacity - CurrAmmo - 1) + num * (ReloadTimer / Attribute.ReloadTime);
- }
-
- return ReloadTimer / Attribute.ReloadTime;
- }
- }
-
- ///
- /// 返回是否在蓄力中,
- /// 注意, 属性仅在 Attribute.LooseShoot == false 时有正确的返回值, 否则返回 false
- ///
- public bool IsCharging => _looseShootFlag;
-
- ///
- /// 返回武器是否在武器袋中
- ///
- public bool IsInHolster => Master != null;
-
- ///
- /// 返回是否真正使用该武器
- ///
- public bool IsActive => Master != null && Master.Holster.ActiveWeapon == this;
-
- ///
- /// 动画播放器
- ///
- public AnimationPlayer AnimationPlayer { get; private set; }
-
-
- //--------------------------------------------------------------------------------------------
-
- //是否按下
- private bool _triggerFlag = false;
-
- //扳机计时器
- private float _triggerTimer = 0;
-
- //开火前延时时间
- private float _delayedTime = 0;
-
- //开火间隙时间
- private float _fireInterval = 0;
-
- //开火武器口角度
- private float _fireAngle = 0;
-
- //攻击冷却计时
- private float _attackTimer = 0;
-
- //攻击状态
- private bool _attackFlag = false;
-
- //按下的时间
- private float _downTimer = 0;
-
- //松开的时间
- private float _upTimer = 0;
-
- //连发次数
- private float _continuousCount = 0;
-
- //连发状态记录
- private bool _continuousShootFlag = false;
-
- //松开扳机是否开火
- private bool _looseShootFlag = false;
-
- //蓄力攻击时长
- private float _chargeTime = 0;
-
- //是否需要重置武器数据
- private bool _dirtyFlag = false;
-
- //当前后坐力导致的偏移长度
- private float _currBacklashLength = 0;
-
- ///
- /// 初始化武器属性
- ///
- public void InitWeapon(WeaponAttribute attribute)
- {
- _originWeaponAttribute = attribute;
- _weaponAttribute = attribute;
-
- AnimationPlayer = GetNode("AnimationPlayer");
- FirePoint = GetNode("FirePoint");
- OriginPoint = GetNode("OriginPoint");
- ShellPoint = GetNode("ShellPoint");
-
- //图标
- SetDefaultTexture(ResourceLoader.Load(Attribute.Sprite2D));
- AnimatedSprite.Position = Attribute.CenterPosition;
-
- //开火位置
- FirePoint.Position = new Vector2(Attribute.FirePosition.X, -Attribute.FirePosition.Y);
- OriginPoint.Position = new Vector2(0, -Attribute.FirePosition.Y);
-
- if (Attribute.AmmoCapacity > Attribute.MaxAmmoCapacity)
- {
- Attribute.AmmoCapacity = Attribute.MaxAmmoCapacity;
- GD.PrintErr("弹夹的容量不能超过弹药上限, 武器id: " + ItemId);
- }
- //弹药量
- CurrAmmo = Attribute.AmmoCapacity;
- //剩余弹药量
- ResidueAmmo = Mathf.Min(Attribute.StandbyAmmoCapacity + CurrAmmo, Attribute.MaxAmmoCapacity) - CurrAmmo;
-
- ThrowCollisionSize = new Vector2(20, 15);
- }
-
- ///
- /// 单次开火时调用的函数
- ///
- protected abstract void OnFire();
-
- ///
- /// 发射子弹时调用的函数, 每发射一枚子弹调用一次,
- /// 如果做霰弹武器效果, 一次开火发射5枚子弹, 则该函数调用5次
- ///
- /// 开火时枪口旋转角度
- protected abstract void OnShoot(float fireRotation);
-
- ///
- /// 当按下扳机时调用
- ///
- protected virtual void OnDownTrigger()
- {
- }
-
- ///
- /// 当松开扳机时调用
- ///
- protected virtual void OnUpTrigger()
- {
- }
-
- ///
- /// 开始蓄力时调用,
- /// 注意, 该函数仅在 Attribute.LooseShoot == false 时才能被调用
- ///
- protected virtual void OnStartCharge()
- {
- }
-
- ///
- /// 当开始换弹时调用
- ///
- protected virtual void OnReload()
- {
- }
-
- ///
- /// 当换弹完成时调用
- ///
- protected virtual void OnReloadFinish()
- {
- }
-
- ///
- /// 当武器被拾起时调用
- ///
- /// 拾起该武器的角色
- protected virtual void OnPickUp(Role master)
- {
- }
-
- ///
- /// 当武器从武器袋中移除时调用
- ///
- protected virtual void OnRemove()
- {
- }
-
- ///
- /// 当武器被激活时调用, 也就是使用当武器时调用
- ///
- protected virtual void OnActive()
- {
- }
-
- ///
- /// 当武器被收起时调用
- ///
- protected virtual void OnConceal()
- {
- }
-
- ///
- /// 射击时调用, 返回消耗弹药数量, 默认为1, 如果返回为 0, 则不消耗弹药
- ///
- protected virtual int UseAmmoCount()
- {
- return 1;
- }
-
- public override void _EnterTree()
- {
- base._EnterTree();
-
- //收集落在地上的武器
- if (IsInGround())
- {
- UnclaimedWeapons.Add(this);
- }
- }
-
- public override void _ExitTree()
- {
- base._ExitTree();
-
- UnclaimedWeapons.Remove(this);
- }
-
- protected override void Process(float delta)
- {
- //这把武器被扔在地上, 或者当前武器没有被使用
- if (Master == null || Master.Holster.ActiveWeapon != this)
- {
- //_triggerTimer
- _triggerTimer = _triggerTimer > 0 ? _triggerTimer - delta : 0;
- //攻击冷却计时
- _attackTimer = _attackTimer > 0 ? _attackTimer - delta : 0;
- //武器的当前散射半径
- CurrScatteringRange = Mathf.Max(CurrScatteringRange - Attribute.ScatteringRangeBackSpeed * delta,
- Attribute.StartScatteringRange);
- //松开扳机
- if (_triggerFlag || _downTimer > 0)
- {
- UpTrigger();
- _downTimer = 0;
- }
-
- _triggerFlag = false;
-
- //重置数据
- if (_dirtyFlag)
- {
- _dirtyFlag = false;
- Reloading = false;
- ReloadTimer = 0;
- _attackFlag = false;
- _continuousCount = 0;
- _delayedTime = 0;
- _upTimer = 0;
- _looseShootFlag = false;
- _chargeTime = 0;
- }
- }
- else //正在使用中
- {
- _dirtyFlag = true;
- //换弹
- if (Reloading)
- {
- ReloadTimer -= delta;
- if (ReloadTimer <= 0)
- {
- ReloadSuccess();
- }
- }
-
- // 攻击的计时器
- if (_attackTimer > 0)
- {
- _attackTimer -= delta;
- if (_attackTimer < 0)
- {
- _delayedTime += _attackTimer;
- _attackTimer = 0;
- //枪口默认角度
- RotationDegrees = -Attribute.DefaultAngle;
- }
- }
- else if (_delayedTime > 0) //攻击延时
- {
- _delayedTime -= delta;
- if (_attackTimer < 0)
- {
- _delayedTime = 0;
- }
- }
-
- //扳机判定
- if (_triggerFlag)
- {
- if (_looseShootFlag) //蓄力时长
- {
- _chargeTime += delta;
- }
-
- _downTimer += delta;
- if (_upTimer > 0) //第一帧按下扳机
- {
- DownTrigger();
- _upTimer = 0;
- }
- }
- else
- {
- _upTimer += delta;
- if (_downTimer > 0) //第一帧松开扳机
- {
- UpTrigger();
- _downTimer = 0;
- }
- }
-
- //连发判断
- if (!_looseShootFlag && _continuousCount > 0 && _delayedTime <= 0 && _attackTimer <= 0)
- {
- //连发开火
- TriggerFire();
- }
-
- if (!_attackFlag && _attackTimer <= 0)
- {
- CurrScatteringRange = Mathf.Max(CurrScatteringRange - Attribute.ScatteringRangeBackSpeed * delta,
- Attribute.StartScatteringRange);
- }
-
- _triggerTimer = _triggerTimer > 0 ? _triggerTimer - delta : 0;
- _triggerFlag = false;
- _attackFlag = false;
-
- //武器身回归
- //Position = Position.MoveToward(Vector2.Zero, Attribute.BacklashRegressionSpeed * delta).Rotated(Rotation);
- _currBacklashLength = Mathf.MoveToward(_currBacklashLength, 0, Attribute.BacklashRegressionSpeed * delta);
- Position = new Vector2(_currBacklashLength, 0).Rotated(Rotation);
- if (_attackTimer > 0)
- {
- RotationDegrees = Mathf.Lerp(
- _fireAngle, -Attribute.DefaultAngle,
- Mathf.Clamp((_fireInterval - _attackTimer) * Attribute.UpliftAngleRestore / _fireInterval, 0, 1)
- );
- }
- }
- }
-
- ///
- /// 返回武器是否在地上
- ///
- ///
- public bool IsInGround()
- {
- return Master == null && GetParent() == GameApplication.Instance.RoomManager.NormalLayer;
- }
-
- ///
- /// 扳机函数, 调用即视为按下扳机
- ///
- public void Trigger()
- {
- //这一帧已经按过了, 不需要再按下
- if (_triggerFlag) return;
-
- //是否第一帧按下
- var justDown = _downTimer == 0;
- //是否能发射
- var flag = false;
- if (_continuousCount <= 0) //不能处于连发状态下
- {
- if (Attribute.ContinuousShoot) //自动射击
- {
- if (_triggerTimer > 0)
- {
- if (_continuousShootFlag)
- {
- flag = true;
- }
- }
- else
- {
- flag = true;
- if (_delayedTime <= 0 && _attackTimer <= 0)
- {
- _continuousShootFlag = true;
- }
- }
- }
- else //半自动
- {
- if (justDown && _triggerTimer <= 0 && _attackTimer <= 0)
- {
- flag = true;
- }
- }
- }
-
- if (flag)
- {
- var fireFlag = true; //是否能开火
- if (Reloading) //换弹中
- {
- if (CurrAmmo > 0 && Attribute.AloneReload && Attribute.AloneReloadCanShoot) //立即停止换弹
- {
- Reloading = false;
- ReloadTimer = 0;
- }
- else
- {
- fireFlag = false;
- }
- }
- else if (CurrAmmo <= 0) //子弹不够
- {
- fireFlag = false;
- if (justDown)
- {
- //第一帧按下, 触发换弹
- Reload();
- }
- }
-
- if (fireFlag)
- {
- if (justDown)
- {
- //开火前延时
- _delayedTime = Attribute.DelayedTime;
- //扳机按下间隔
- _triggerTimer = Attribute.TriggerInterval;
- //连发数量
- if (!Attribute.ContinuousShoot)
- {
- _continuousCount =
- Utils.RandomRangeInt(Attribute.MinContinuousCount, Attribute.MaxContinuousCount);
- }
- }
-
- if (_delayedTime <= 0 && _attackTimer <= 0)
- {
- if (Attribute.LooseShoot) //松发开火
- {
- _looseShootFlag = true;
- OnStartCharge();
- }
- else
- {
- //开火
- TriggerFire();
- }
- }
-
- _attackFlag = true;
- }
-
- }
-
- _triggerFlag = true;
- }
-
- ///
- /// 返回是否按下扳机
- ///
- public bool IsPressTrigger()
- {
- return _triggerFlag;
- }
-
- ///
- /// 获取本次扳机按下的时长, 单位: 秒
- ///
- public float GetTriggerDownTime()
- {
- return _downTimer;
- }
-
- ///
- /// 获取扳机蓄力时长, 计算按下扳机后从可以开火到当前一共经过了多长时间, 可用于计算蓄力攻击
- /// 注意, 该函数仅在 Attribute.LooseShoot == false 时有正确的返回值, 否则返回 0
- ///
- public float GetTriggerChargeTime()
- {
- return _chargeTime;
- }
-
- ///
- /// 获取延时射击倒计时, 单位: 秒
- ///
- public float GetDelayedAttackTime()
- {
- return _delayedTime;
- }
-
- ///
- /// 刚按下扳机
- ///
- private void DownTrigger()
- {
- OnDownTrigger();
- }
-
- ///
- /// 刚松开扳机
- ///
- private void UpTrigger()
- {
- _continuousShootFlag = false;
- if (_delayedTime > 0)
- {
- _continuousCount = 0;
- }
-
- //松发开火执行
- if (_looseShootFlag)
- {
- _looseShootFlag = false;
- if (_chargeTime >= Attribute.MinChargeTime) //判断蓄力是否够了
- {
- TriggerFire();
- }
- else //不能攻击
- {
- _continuousCount = 0;
- }
- _chargeTime = 0;
- }
-
- OnUpTrigger();
- }
-
- ///
- /// 触发开火
- ///
- private void TriggerFire()
- {
- _continuousCount = _continuousCount > 0 ? _continuousCount - 1 : 0;
-
- //减子弹数量
- if (_originWeaponAttribute != _weaponAttribute) //Ai使用该武器, 有一定概率不消耗弹药
- {
- if (Utils.RandomRangeFloat(0, 1) < _weaponAttribute.AiAmmoConsumptionProbability) //触发消耗弹药
- {
- CurrAmmo -= UseAmmoCount();
- }
- }
- else
- {
- CurrAmmo -= UseAmmoCount();
- }
-
- //开火间隙
- _fireInterval = 60 / Attribute.StartFiringSpeed;
- //攻击冷却
- _attackTimer += _fireInterval;
-
- //触发开火函数
- OnFire();
-
- //开火发射的子弹数量
- var bulletCount = Utils.RandomRangeInt(Attribute.MaxFireBulletCount, Attribute.MinFireBulletCount);
- //武器口角度
- var angle = new Vector2(GameConfig.ScatteringDistance, CurrScatteringRange).Angle();
-
- //先算武器口方向
- var tempRotation = Utils.RandomRangeFloat(-angle, angle);
- var tempAngle = Mathf.RadToDeg(tempRotation);
-
- //开火时枪口角度
- var fireRotation = Mathf.DegToRad(Master.MountPoint.RealAngle) + tempRotation;
- //创建子弹
- for (int i = 0; i < bulletCount; i++)
- {
- //发射子弹
- OnShoot(fireRotation);
- }
-
- //当前的散射半径
- CurrScatteringRange = Mathf.Min(CurrScatteringRange + Attribute.ScatteringRangeAddValue,
- Attribute.FinalScatteringRange);
- //武器的旋转角度
- tempAngle -= Attribute.UpliftAngle;
- RotationDegrees = tempAngle;
- _fireAngle = tempAngle;
-
- //武器身位置
- var max = Mathf.Abs(Mathf.Max(Attribute.MaxBacklash, Attribute.MinBacklash));
- _currBacklashLength = Mathf.Clamp(
- _currBacklashLength - Utils.RandomRangeFloat(Attribute.MinBacklash, Attribute.MaxBacklash),
- -max, max
- );
- Position = new Vector2(_currBacklashLength, 0).Rotated(Rotation);
-
- if (FireEvent != null)
- {
- FireEvent(this);
- }
- }
-
- ///
- /// 获取武器攻击的目标层级
- ///
- ///
- public uint GetAttackLayer()
- {
- return Master != null ? Master.AttackLayer : Role.DefaultAttackLayer;
- }
-
- ///
- /// 返回弹药是否到达上限
- ///
- public bool IsAmmoFull()
- {
- return CurrAmmo + ResidueAmmo >= Attribute.MaxAmmoCapacity;
- }
-
- ///
- /// 返回弹夹是否打空
- ///
- public bool IsAmmoEmpty()
- {
- return CurrAmmo == 0;
- }
-
- ///
- /// 返回是否弹药耗尽
- ///
- public bool IsTotalAmmoEmpty()
- {
- return CurrAmmo + ResidueAmmo == 0;
- }
-
- ///
- /// 强制修改当前弹夹弹药量
- ///
- public void SetCurrAmmo(int count)
- {
- CurrAmmo = Mathf.Clamp(count, 0, Attribute.AmmoCapacity);
- }
-
- ///
- /// 强制修改备用弹药量
- ///
- public void SetResidueAmmo(int count)
- {
- ResidueAmmo = Mathf.Clamp(count, 0, Attribute.MaxAmmoCapacity - CurrAmmo);
- }
-
- ///
- /// 强制修改弹药量, 优先改动备用弹药
- ///
- public void SetTotalAmmo(int total)
- {
- if (total < 0)
- {
- return;
- }
- var totalAmmo = CurrAmmo + ResidueAmmo;
- if (totalAmmo == total)
- {
- return;
- }
-
- if (total > totalAmmo) //弹药增加
- {
- ResidueAmmo = Mathf.Min(total - CurrAmmo, Attribute.MaxAmmoCapacity - CurrAmmo);
- }
- else //弹药减少
- {
- if (CurrAmmo < total)
- {
- ResidueAmmo = total - CurrAmmo;
- }
- else
- {
- CurrAmmo = total;
- ResidueAmmo = 0;
- }
- }
- }
-
- ///
- /// 拾起的弹药数量, 如果到达容量上限, 则返回拾取完毕后剩余的弹药数量
- ///
- /// 弹药数量
- private int PickUpAmmo(int count)
- {
- var num = ResidueAmmo;
- ResidueAmmo = Mathf.Min(ResidueAmmo + count, Attribute.MaxAmmoCapacity - CurrAmmo);
- return count - ResidueAmmo + num;
- }
-
- ///
- /// 触发换弹
- ///
- public void Reload()
- {
- if (CurrAmmo < Attribute.AmmoCapacity && ResidueAmmo > 0 && !Reloading)
- {
- Reloading = true;
- ReloadTimer = Attribute.ReloadTime;
- OnReload();
- }
- }
-
- ///
- /// 换弹计时器时间到, 执行换弹操作
- ///
- private void ReloadSuccess()
- {
- if (Attribute.AloneReload) //单独装填
- {
- if (ResidueAmmo >= Attribute.AloneReloadCount) //剩余子弹充足
- {
- if (CurrAmmo + Attribute.AloneReloadCount <= Attribute.AmmoCapacity)
- {
- ResidueAmmo -= Attribute.AloneReloadCount;
- CurrAmmo += Attribute.AloneReloadCount;
- }
- else //子弹满了
- {
- var num = Attribute.AmmoCapacity - CurrAmmo;
- CurrAmmo = Attribute.AmmoCapacity;
- ResidueAmmo -= num;
- }
- }
- else if (ResidueAmmo != 0) //剩余子弹不足
- {
- if (ResidueAmmo + CurrAmmo <= Attribute.AmmoCapacity)
- {
- CurrAmmo += ResidueAmmo;
- ResidueAmmo = 0;
- }
- else //子弹满了
- {
- var num = Attribute.AmmoCapacity - CurrAmmo;
- CurrAmmo = Attribute.AmmoCapacity;
- ResidueAmmo -= num;
- }
- }
-
- if (ResidueAmmo == 0 || CurrAmmo == Attribute.AmmoCapacity) //换弹结束
- {
- Reloading = false;
- ReloadTimer = 0;
- OnReloadFinish();
- }
- else
- {
- ReloadTimer = Attribute.ReloadTime;
- OnReload();
- }
- }
- else //换弹结束
- {
- if (CurrAmmo + ResidueAmmo >= Attribute.AmmoCapacity)
- {
- ResidueAmmo -= Attribute.AmmoCapacity - CurrAmmo;
- CurrAmmo = Attribute.AmmoCapacity;
- }
- else
- {
- CurrAmmo += ResidueAmmo;
- ResidueAmmo = 0;
- }
-
- Reloading = false;
- ReloadTimer = 0;
- OnReloadFinish();
- }
- }
-
- public override CheckInteractiveResult CheckInteractive(ActivityObject master)
- {
- var result = new CheckInteractiveResult(this);
-
- if (master is Role roleMaster) //碰到角色
- {
- if (Master == null)
- {
- var masterWeapon = roleMaster.Holster.ActiveWeapon;
- //查找是否有同类型武器
- var index = roleMaster.Holster.FindWeapon(ItemId);
- if (index != -1) //如果有这个武器
- {
- if (CurrAmmo + ResidueAmmo != 0) //子弹不为空
- {
- var targetWeapon = roleMaster.Holster.GetWeapon(index);
- if (!targetWeapon.IsAmmoFull()) //背包里面的武器子弹未满
- {
- //可以互动拾起弹药
- result.CanInteractive = true;
- result.Message = Attribute.Name;
- result.ShowIcon = ResourcePath.resource_sprite_ui_icon_icon_bullet_png;
- return result;
- }
- }
- }
- else //没有武器
- {
- if (roleMaster.Holster.CanPickupWeapon(this)) //能拾起武器
- {
- //可以互动, 拾起武器
- result.CanInteractive = true;
- result.Message = Attribute.Name;
- result.ShowIcon = ResourcePath.resource_sprite_ui_icon_icon_pickup_png;
- return result;
- }
- else if (masterWeapon != null && masterWeapon.Attribute.WeightType == Attribute.WeightType) //替换武器
- {
- //可以互动, 切换武器
- result.CanInteractive = true;
- result.Message = Attribute.Name;
- result.ShowIcon = ResourcePath.resource_sprite_ui_icon_icon_replace_png;
- return result;
- }
- }
- }
- }
-
- return result;
- }
-
- public override void Interactive(ActivityObject master)
- {
- if (master is Role roleMaster) //与role互动
- {
- var holster = roleMaster.Holster;
- //查找是否有同类型武器
- var index = holster.FindWeapon(ItemId);
- if (index != -1) //如果有这个武器
- {
- if (CurrAmmo + ResidueAmmo == 0) //没有子弹了
- {
- return;
- }
-
- var weapon = holster.GetWeapon(index);
- //子弹上限
- var maxCount = Attribute.MaxAmmoCapacity;
- //是否捡到子弹
- var flag = false;
- if (ResidueAmmo > 0 && weapon.CurrAmmo + weapon.ResidueAmmo < maxCount)
- {
- var count = weapon.PickUpAmmo(ResidueAmmo);
- if (count != ResidueAmmo)
- {
- ResidueAmmo = count;
- flag = true;
- }
- }
-
- if (CurrAmmo > 0 && weapon.CurrAmmo + weapon.ResidueAmmo < maxCount)
- {
- var count = weapon.PickUpAmmo(CurrAmmo);
- if (count != CurrAmmo)
- {
- CurrAmmo = count;
- flag = true;
- }
- }
-
- //播放互动效果
- if (flag)
- {
- Throw(GlobalPosition, 0, Utils.RandomRangeInt(20, 50), Vector2.Zero, Utils.RandomRangeInt(-180, 180));
- }
- }
- else //没有武器
- {
- if (holster.PickupWeapon(this) == -1)
- {
- //替换武器
- roleMaster.ThrowWeapon();
- roleMaster.PickUpWeapon(this);
- }
- }
- }
- }
-
- ///
- /// 获取当前武器真实的旋转角度(弧度制), 由于武器旋转时加入了旋转吸附, 所以需要通过该函数来来知道当前武器的真实旋转角度
- ///
- public float GetRealGlobalRotation()
- {
- return Mathf.DegToRad(Master.MountPoint.RealAngle) + Rotation;
- }
-
- ///
- /// 触发扔掉武器抛出的效果, 并不会管武器是否在武器袋中
- ///
- /// 触发扔掉该武器的的角色
- public void ThrowWeapon(Role master)
- {
- ThrowWeapon(master, master.GlobalPosition);
- }
-
- ///
- /// 触发扔掉武器抛出的效果, 并不会管武器是否在武器袋中
- ///
- /// 触发扔掉该武器的的角色
- /// 投抛起始位置
- public void ThrowWeapon(Role master, Vector2 startPosition)
- {
- //阴影偏移
- ShadowOffset = new Vector2(0, 2);
-
- if (master.Face == FaceDirection.Left)
- {
- Scale *= new Vector2(1, -1);
- }
-
- var angle = master.MountPoint.GlobalRotationDegrees;
- GlobalRotationDegrees = angle;
-
- //继承role的移动速度
- InheritVelocity(master);
-
- var startHeight = 6;
- var direction = angle + Utils.RandomRangeInt(-20, 20);
- var velocity = new Vector2(20, 0).Rotated(direction * Mathf.Pi / 180);
- var yf = Utils.RandomRangeInt(50, 70);
- var rotate = Utils.RandomRangeInt(-90, 90);
- Throw(startPosition, startHeight, yf, velocity, rotate);
- }
-
- protected override void OnThrowStart()
- {
- //禁用碰撞
- //Collision.Disabled = true;
- AnimationPlayer.Play("floodlight");
- }
-
- protected override void OnThrowOver()
- {
- //启用碰撞
- //Collision.Disabled = false;
- AnimationPlayer.Play("floodlight");
- }
-
- ///
- /// 触发拾起
- ///
- public void PickUpWeapon(Role master)
- {
- Master = master;
- if (master.IsAi && _originWeaponAttribute.AiUseAttribute != null)
- {
- _weaponAttribute = _originWeaponAttribute.AiUseAttribute;
- }
- else
- {
- _weaponAttribute = _originWeaponAttribute;
- }
- //握把位置
- AnimatedSprite.Position = Attribute.HoldPosition;
- //停止动画
- AnimationPlayer.Stop();
- //清除泛白效果
- SetBlendSchedule(0);
- ZIndex = 0;
- //禁用碰撞
- //Collision.Disabled = true;
- //清除 Ai 拾起标记
- RemoveSign(SignNames.AiFindWeaponSign);
- OnPickUp(master);
- }
-
- ///
- /// 触发移除, 这个函数由 Holster 对象调用
- ///
- public void RemoveAt()
- {
- Master = null;
- _weaponAttribute = _originWeaponAttribute;
- AnimatedSprite.Position = Attribute.CenterPosition;
- OnRemove();
- }
-
- ///
- /// 触发启用武器
- ///
- public void Active()
- {
- //调整阴影
- ShadowOffset = new Vector2(0, Master.GlobalPosition.Y - GlobalPosition.Y);
- //枪口默认抬起角度
- RotationDegrees = -Attribute.DefaultAngle;
- ShowShadowSprite();
- OnActive();
- }
-
- ///
- /// 触发收起武器
- ///
- public void Conceal()
- {
- HideShadowSprite();
- OnConceal();
- }
-
- //-------------------------------- Ai相关 -----------------------------
-
- ///
- /// 获取 Ai 对于该武器的评分, 评分越高, 代表 Ai 会越优先选择该武器, 如果为 -1, 则表示 Ai 不会使用该武器
- ///
- public float GetAiScore()
- {
- return 1;
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs b/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs
deleted file mode 100644
index a37809a..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs
+++ /dev/null
@@ -1,252 +0,0 @@
-using System;
-using Godot;
-
-///
-/// 武器上的属性
-///
-public class WeaponAttribute
-{
- ///
- /// 武器显示的名称
- ///
- public string Name = "Gun1";
- ///
- /// 武器 Prefab, 必须继承场景 "res://prefab/weapon/Weapon.tscn"
- ///
- public string WeaponPrefab = ResourcePath.prefab_weapon_Weapon_tscn;
- ///
- /// 武器类型
- ///
- public WeaponWeightType WeightType = WeaponWeightType.MainWeapon;
- ///
- /// 武器的图片
- ///
- public string Sprite2D = ResourcePath.resource_sprite_gun_gun1_png;
- ///
- /// 是否连续发射, 如果为false, 则每次发射都需要扣动扳机
- ///
- public bool ContinuousShoot = true;
- ///
- /// 弹夹容量
- ///
- public int AmmoCapacity = 30;
- ///
- /// 弹药容量上限
- ///
- public int MaxAmmoCapacity = 120;
- ///
- /// 起始备用弹药数量
- ///
- public int StandbyAmmoCapacity = 90;
- ///
- /// 装弹时间, 单位: 秒
- ///
- public float ReloadTime = 1.5f;
- ///
- /// 每粒子弹是否是单独装填, 如果是, 那么每上一发子弹的时间就是 ReloadTime, 可以做霰弹武器装填效果
- ///
- public bool AloneReload = false;
- ///
- /// 单独装填时每次装填子弹数量, 必须要将 'AloneReload' 属性设置为 true
- ///
- public int AloneReloadCount = 1;
- ///
- /// 单独装填的子弹时可以立即射击, 必须要将 'AloneReload' 属性设置为 true
- ///
- public bool AloneReloadCanShoot = false;
- ///
- /// 是否为松发开火, 也就是松开扳机才开火, 若要启用该属性, 必须将 'ContinuousShoot' 设置为 false
- ///
- public bool LooseShoot = false;
- ///
- /// 最少需要蓄力多久才能开火, 必须将 'LooseShoot' 设置为 true
- ///
- public float MinChargeTime = 0f;
- ///
- /// 连续发射最小次数, 仅当 ContinuousShoot 为 false 时生效
- ///
- public int MinContinuousCount = 1;
- ///
- /// 连续发射最大次数, 仅当 ContinuousShoot 为 false 时生效
- ///
- public int MaxContinuousCount = 1;
- ///
- /// 按下一次扳机后需要多长时间才能再次感应按下
- ///
- public float TriggerInterval = 0;
- ///
- /// 初始射速, 初始每分钟能开火次数
- ///
- public float StartFiringSpeed = 300;
- ///
- /// 最终射速, 最终每分钟能开火次数, 仅当 ContinuousShoot 为 true 时生效
- ///
- public float FinalFiringSpeed = 300;
- ///
- /// 按下扳机并开火后射速增加速率
- ///
- public float FiringSpeedAddSpeed = 2;
- ///
- /// 松开扳机后射速消散速率
- ///
- public float FiringSpeedBackSpeed = 10;
- ///
- /// 单次开火发射子弹最小数量
- ///
- public int MinFireBulletCount = 1;
- ///
- /// 单次开火发射子弹最大数量
- ///
- public int MaxFireBulletCount = 1;
- ///
- /// 开火前延时
- ///
- public float DelayedTime = 0f;
- ///
- /// 初始散射半径
- ///
- public float StartScatteringRange = 0;
- ///
- /// 最终散射半径
- ///
- public float FinalScatteringRange = 20;
- ///
- /// 每次发射后散射增加值
- ///
- public float ScatteringRangeAddValue = 2;
- ///
- /// 松开扳机后散射销退速率
- ///
- public float ScatteringRangeBackSpeed = 10;
- ///
- /// 子弹飞行最大距离
- ///
- public float MaxDistance = 600;
- ///
- /// 子弹飞行最小距离
- ///
- public float MinDistance = 800;
- ///
- /// 武器精灵的旋转中心坐标
- ///
- public Vector2 CenterPosition = new Vector2(0, 0);
- ///
- /// 开火位置
- ///
- public Vector2 FirePosition = new Vector2(11, 0);
- ///
- /// 握把位置
- ///
- public Vector2 HoldPosition = new Vector2(4, -3);
- ///
- /// 重量
- ///
- public float Weight = 11;
- ///
- /// 最大后坐力 (仅用于开火后武器身抖动)
- ///
- public float MaxBacklash = 4;
- ///
- /// 最小后坐力 (仅用于开火后武器身抖动)
- ///
- public float MinBacklash = 2;
- ///
- /// 后坐力偏移回归回归速度
- ///
- public float BacklashRegressionSpeed = 35f;
- ///
- /// 开火后武器口上抬角度
- ///
- public float UpliftAngle = 30;
- ///
- /// 武器默认上抬角度
- ///
- public float DefaultAngle = 0;
- ///
- /// 开火后武器口角度恢复速度倍数
- ///
- public float UpliftAngleRestore = 1f;
-
- ///
- /// 克隆一份新的属性配置
- ///
- ///
- public WeaponAttribute Clone()
- {
- var attr = _Clone();
- if (AiUseAttribute != null)
- {
- attr.AiUseAttribute = AiUseAttribute._Clone();
- }
- return attr;
- }
-
- private WeaponAttribute _Clone()
- {
- var attr = new WeaponAttribute();
- attr.Name = Name;
- attr.WeaponPrefab = WeaponPrefab;
- attr.WeightType = WeightType;
- attr.Sprite2D = Sprite2D;
- attr.ContinuousShoot = ContinuousShoot;
- attr.AmmoCapacity = AmmoCapacity;
- attr.MaxAmmoCapacity = MaxAmmoCapacity;
- attr.StandbyAmmoCapacity = StandbyAmmoCapacity;
- attr.ReloadTime = ReloadTime;
- attr.AloneReload = AloneReload;
- attr.AloneReloadCount = AloneReloadCount;
- attr.AloneReloadCanShoot = AloneReloadCanShoot;
- attr.LooseShoot = LooseShoot;
- attr.MinChargeTime = MinChargeTime;
- attr.MinContinuousCount = MinContinuousCount;
- attr.MaxContinuousCount = MaxContinuousCount;
- attr.TriggerInterval = TriggerInterval;
- attr.StartFiringSpeed = StartFiringSpeed;
- attr.FinalFiringSpeed = FinalFiringSpeed;
- attr.FiringSpeedAddSpeed = FiringSpeedAddSpeed;
- attr.FiringSpeedBackSpeed = FiringSpeedBackSpeed;
- attr.MinFireBulletCount = MinFireBulletCount;
- attr.MaxFireBulletCount = MaxFireBulletCount;
- attr.DelayedTime = DelayedTime;
- attr.StartScatteringRange = StartScatteringRange;
- attr.FinalScatteringRange = FinalScatteringRange;
- attr.ScatteringRangeAddValue = ScatteringRangeAddValue;
- attr.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed;
- attr.MaxDistance = MaxDistance;
- attr.MinDistance = MinDistance;
- attr.CenterPosition = CenterPosition;
- attr.FirePosition = FirePosition;
- attr.HoldPosition = HoldPosition;
- attr.Weight = Weight;
- attr.MaxBacklash = MaxBacklash;
- attr.MinBacklash = MinBacklash;
- attr.BacklashRegressionSpeed = BacklashRegressionSpeed;
- attr.UpliftAngle = UpliftAngle;
- attr.DefaultAngle = DefaultAngle;
- attr.UpliftAngleRestore = UpliftAngleRestore;
- attr.AiTargetLockingTime = AiTargetLockingTime;
- return attr;
- }
-
- //------------------------------ Ai相关 -----------------------------
-
- ///
- /// 用于Ai, 目标锁定时间, 也就是瞄准目标多久才会开火
- ///
- public float AiTargetLockingTime = 0;
-
- ///
- /// 用于Ai, Ai使用该武器发射的子弹速度缩放比
- ///
- public float AiBulletSpeedScale = 0.7f;
-
- ///
- /// 用于Ai, Ai使用该武器消耗弹药的概率, (0 - 1)
- ///
- public float AiAmmoConsumptionProbability = 0f;
-
- ///
- /// Ai 使用该武器时的武器数据, 设置该字段, 可让同一把武器在敌人和玩家手上有不同属性
- ///
- public WeaponAttribute AiUseAttribute;
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/weapon/WeaponWeightType.cs b/DungeonShooting_Godot/src/game/item/weapon/WeaponWeightType.cs
deleted file mode 100644
index 5528683..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/WeaponWeightType.cs
+++ /dev/null
@@ -1,19 +0,0 @@
-
-///
-/// 根据重量划分的武器类型
-///
-public enum WeaponWeightType
-{
- ///
- /// 副武器
- ///
- DeputyWeapon = 1,
- ///
- /// 主武器
- ///
- MainWeapon = 2,
- ///
- /// 重型武器
- ///
- HeavyWeapon = 3
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/weapon/bullet/Bullet.cs b/DungeonShooting_Godot/src/game/item/weapon/bullet/Bullet.cs
deleted file mode 100644
index f165172..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/bullet/Bullet.cs
+++ /dev/null
@@ -1,96 +0,0 @@
-using Godot;
-
-///
-/// 子弹类
-///
-[RegisterActivity(ActivityIdPrefix.Bullet + "0001", ResourcePath.prefab_weapon_bullet_Bullet_tscn)]
-public partial class Bullet : ActivityObject
-{
- ///
- /// 碰撞区域
- ///
- public Area2D CollisionArea { get; private set; }
-
- ///
- /// 发射该子弹的武器
- ///
- public Weapon Weapon { get; private set; }
-
- // 最大飞行距离
- private float MaxDistance;
-
- // 子弹飞行速度
- private float FlySpeed;
-
- //当前子弹已经飞行的距离
- private float CurrFlyDistance = 0;
-
- public void Init(Weapon weapon, float speed, float maxDistance, Vector2 position, float rotation, uint targetLayer)
- {
- Weapon = weapon;
- CollisionArea = GetNode("CollisionArea");
- CollisionArea.CollisionMask = targetLayer;
- CollisionArea.AreaEntered += OnArea2dEntered;
-
- //只有玩家使用该武器才能获得正常速度的子弹
- if (weapon.Master is Player)
- {
- FlySpeed = speed;
- }
- else
- {
- FlySpeed = speed * weapon.Attribute.AiBulletSpeedScale;
- }
- MaxDistance = maxDistance;
- Position = position;
- Rotation = rotation;
- ShadowOffset = new Vector2(0, 5);
-
- BasisVelocity = new Vector2(FlySpeed, 0).Rotated(Rotation);
- }
-
- protected override void PhysicsProcessOver(float delta)
- {
- //移动
- var lastSlideCollision = GetLastSlideCollision();
- //撞到墙
- if (lastSlideCollision != null)
- {
- //创建粒子特效
- var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletSmoke_tscn);
- var smoke = packedScene.Instantiate();
- smoke.GlobalPosition = lastSlideCollision.GetPosition();
- smoke.GlobalRotation = lastSlideCollision.GetNormal().Angle();
- smoke.AddToActivityRoot(RoomLayerEnum.YSortLayer);
-
- Destroy();
- return;
- }
- //距离太大, 自动销毁
- CurrFlyDistance += FlySpeed * delta;
- if (CurrFlyDistance >= MaxDistance)
- {
- var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletDisappear_tscn);
- var node = packedScene.Instantiate();
- node.GlobalPosition = GlobalPosition;
- node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
-
- Destroy();
- }
- }
-
- private void OnArea2dEntered(Area2D other)
- {
- var role = other.AsActivityObject();
- if (role != null)
- {
- var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_BulletDisappear_tscn);
- var node = packedScene.Instantiate();
- node.GlobalPosition = GlobalPosition;
- node.AddToActivityRoot(RoomLayerEnum.YSortLayer);
-
- role.CallDeferred(nameof(Role.Hurt), 4, Rotation);
- Destroy();
- }
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs b/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs
deleted file mode 100644
index fa902fc..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-using Godot;
-
-///
-/// 普通的枪
-///
-[RegisterWeapon(ActivityIdPrefix.Weapon + "0001", typeof(RifleAttribute))]
-[RegisterWeapon(ActivityIdPrefix.Weapon + "0003", typeof(PistolAttribute))]
-public partial class Gun : Weapon
-{
- //步枪属性数据
- private class RifleAttribute : WeaponAttribute
- {
- public RifleAttribute()
- {
- Name = "步枪";
- Sprite2D = ResourcePath.resource_sprite_gun_gun4_png;
- Weight = 40;
- CenterPosition = new Vector2(0.4f, -2.6f);
- StartFiringSpeed = 480;
- StartScatteringRange = 30;
- FinalScatteringRange = 90;
- ScatteringRangeAddValue = 2f;
- ScatteringRangeBackSpeed = 40;
- //连发
- ContinuousShoot = true;
- AmmoCapacity = 30;
- StandbyAmmoCapacity = 30 * 3;
- MaxAmmoCapacity = 30 * 3;
- //扳机检测间隔
- TriggerInterval = 0f;
-
- //开火前延时
- DelayedTime = 0f;
- //攻击距离
- MinDistance = 300;
- MaxDistance = 400;
- //发射子弹数量
- MinFireBulletCount = 1;
- MaxFireBulletCount = 1;
- //抬起角度
- UpliftAngle = 10;
- //开火位置
- FirePosition = new Vector2(16, 2);
-
- AiUseAttribute = Clone();
- AiUseAttribute.AiTargetLockingTime = 0.5f;
- AiUseAttribute.TriggerInterval = 3f;
- AiUseAttribute.ContinuousShoot = false;
- AiUseAttribute.MinContinuousCount = 3;
- AiUseAttribute.MaxContinuousCount = 3;
- }
- }
-
- //手枪属性数据
- private class PistolAttribute : WeaponAttribute
- {
- public PistolAttribute()
- {
- Name = "手枪";
- Sprite2D = ResourcePath.resource_sprite_gun_gun3_png;
- Weight = 20;
- CenterPosition = new Vector2(0.4f, -2.6f);
- WeightType = WeaponWeightType.DeputyWeapon;
- StartFiringSpeed = 300;
- FinalFiringSpeed = 300;
- StartScatteringRange = 5;
- FinalScatteringRange = 60;
- ScatteringRangeAddValue = 8f;
- ScatteringRangeBackSpeed = 40;
- //连发
- ContinuousShoot = false;
- AmmoCapacity = 12;
- StandbyAmmoCapacity = 72;
- MaxAmmoCapacity = 72;
- //扳机检测间隔
- TriggerInterval = 0.1f;
- //连发数量
- MinContinuousCount = 1;
- MaxContinuousCount = 1;
- //开火前延时
- DelayedTime = 0f;
- //攻击距离
- MinDistance = 250;
- MaxDistance = 300;
- //发射子弹数量
- MinFireBulletCount = 1;
- MaxFireBulletCount = 1;
- //抬起角度
- UpliftAngle = 30;
- //开火位置
- FirePosition = new Vector2(10, 2);
-
- AiUseAttribute = Clone();
- AiUseAttribute.AiTargetLockingTime = 1f;
- AiUseAttribute.TriggerInterval = 2f;
- }
- }
-
- protected override void OnFire()
- {
- //创建一个弹壳
- var startPos = Master.GlobalPosition;
- var startHeight = 6;
- var direction = GlobalRotationDegrees + Utils.RandomRangeInt(-30, 30) + 180;
- var verticalSpeed = Utils.RandomRangeInt(60, 120);
- var velocity = new Vector2(Utils.RandomRangeInt(20, 60), 0).Rotated(direction * Mathf.Pi / 180);
- var rotate = Utils.RandomRangeInt(-720, 720);
- var shell = Create(ActivityIdPrefix.Shell + "0001");
- shell.InheritVelocity(Master);
- shell.Throw(startPos, startHeight, verticalSpeed, velocity, rotate);
-
- if (Master == GameApplication.Instance.RoomManager.Player)
- {
- //创建抖动
- GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * 2f);
- }
-
- //创建开火特效
- var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_ShotFire_tscn);
- var sprite = packedScene.Instantiate();
- sprite.GlobalPosition = FirePoint.GlobalPosition;
- sprite.GlobalRotation = FirePoint.GlobalRotation;
- sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer);
-
- //播放射击音效
- SoundManager.PlaySoundEffectPosition(ResourcePath.resource_sound_sfx_ordinaryBullet2_mp3, GameApplication.Instance.ViewToGlobalPosition(GlobalPosition), -8);
- }
-
- protected override void OnShoot(float fireRotation)
- {
- //创建子弹
- const string bulletId = ActivityIdPrefix.Bullet + "0001";
- var bullet = ActivityObject.Create(bulletId);
- bullet.Init(
- this,
- 350,
- Utils.RandomRangeFloat(Attribute.MinDistance, Attribute.MaxDistance),
- FirePoint.GlobalPosition,
- fireRotation,
- GetAttackLayer()
- );
- bullet.PutDown(RoomLayerEnum.YSortLayer);
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/item/weapon/gun/Shotgun.cs b/DungeonShooting_Godot/src/game/item/weapon/gun/Shotgun.cs
deleted file mode 100644
index 4ee5e6e..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/gun/Shotgun.cs
+++ /dev/null
@@ -1,108 +0,0 @@
-using Godot;
-
-[RegisterWeapon(ActivityIdPrefix.Weapon + "0002", typeof(ShotgunAttribute))]
-public partial class Shotgun : Weapon
-{
-
- private class ShotgunAttribute : WeaponAttribute
- {
- public ShotgunAttribute()
- {
- Name = "霰弹枪";
- Sprite2D = ResourcePath.resource_sprite_gun_gun2_png;
- Weight = 40;
- CenterPosition = new Vector2(0.4f, -2.6f);
- StartFiringSpeed = 400;
- StartScatteringRange = 30;
- FinalScatteringRange = 90;
- ScatteringRangeAddValue = 50f;
- ScatteringRangeBackSpeed = 50;
- //连发
- ContinuousShoot = false;
- AmmoCapacity = 7;
- StandbyAmmoCapacity = 42;
- MaxAmmoCapacity = 42;
- AloneReload = true;
- AloneReloadCanShoot = true;
- ReloadTime = 0.6f;
- //连发数量
- MinContinuousCount = 1;
- MaxContinuousCount = 1;
- //开火前延时
- DelayedTime = 0f;
- //攻击距离
- MinDistance = 200;
- MaxDistance = 250;
- //发射子弹数量
- MinFireBulletCount = 5;
- MaxFireBulletCount = 5;
- //抬起角度
- UpliftAngle = 15;
- MaxBacklash = 6;
- MinBacklash = 5;
- //开火位置
- FirePosition = new Vector2(18, 4);
-
- AiUseAttribute = Clone();
- AiUseAttribute.AiTargetLockingTime = 0.2f;
- AiUseAttribute.TriggerInterval = 3.5f;
- }
- }
-
- ///
- /// 弹壳预制体
- ///
- public PackedScene ShellPack;
-
- public override void OnInit()
- {
- base.OnInit();
- ShellPack = ResourceManager.Load(ResourcePath.prefab_weapon_shell_ShellCase_tscn);
- }
-
- protected override void OnFire()
- {
- //创建一个弹壳
- var startPos = Master.GlobalPosition;
- var startHeight = 6;
- var direction = GlobalRotationDegrees + Utils.RandomRangeInt(-30, 30) + 180;
- var verticalSpeed = Utils.RandomRangeInt(60, 120);
- var velocity = new Vector2(Utils.RandomRangeInt(20, 60), 0).Rotated(direction * Mathf.Pi / 180);
- var rotate = Utils.RandomRangeInt(-720, 720);
- var shell = Create(ActivityIdPrefix.Shell + "0001");
- shell.InheritVelocity(Master);
- shell.Throw(startPos, startHeight, verticalSpeed, velocity, rotate);
-
- if (Master == GameApplication.Instance.RoomManager.Player)
- {
- //创建抖动
- GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * 2f);
- }
-
- //创建开火特效
- var packedScene = ResourceManager.Load(ResourcePath.prefab_effect_ShotFire_tscn);
- var sprite = packedScene.Instantiate();
- sprite.GlobalPosition = FirePoint.GlobalPosition;
- sprite.GlobalRotation = FirePoint.GlobalRotation;
- sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer);
-
- //播放射击音效
- SoundManager.PlaySoundEffectPosition(ResourcePath.resource_sound_sfx_ordinaryBullet3_mp3, GameApplication.Instance.ViewToGlobalPosition(GlobalPosition), -15);
- }
-
- protected override void OnShoot(float fireRotation)
- {
- //创建子弹
- const string bulletId = ActivityIdPrefix.Bullet + "0001";
- var bullet = ActivityObject.Create(bulletId);
- bullet.Init(
- this,
- Utils.RandomRangeInt(280, 380),
- Utils.RandomRangeFloat(Attribute.MinDistance, Attribute.MaxDistance),
- FirePoint.GlobalPosition,
- fireRotation + Utils.RandomRangeFloat(-20 / 180f * Mathf.Pi, 20 / 180f * Mathf.Pi),
- GetAttackLayer()
- );
- bullet.PutDown(RoomLayerEnum.YSortLayer);
- }
-}
diff --git a/DungeonShooting_Godot/src/game/item/weapon/knife/Knife.cs b/DungeonShooting_Godot/src/game/item/weapon/knife/Knife.cs
deleted file mode 100644
index 3bd5f31..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/knife/Knife.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-
-using Godot;
-
-[RegisterWeapon(ActivityIdPrefix.Weapon + "0004", typeof(KnifeAttribute))]
-public partial class Knife : Weapon
-{
- private class KnifeAttribute : WeaponAttribute
- {
- public KnifeAttribute()
- {
- Sprite2D = ResourcePath.resource_sprite_gun_knife1_png;
- WeaponPrefab = ResourcePath.prefab_weapon_Knife_tscn;
- //攻速设置
- StartFiringSpeed = 180;
- FinalFiringSpeed = StartFiringSpeed;
- //关闭连发
- ContinuousShoot = false;
- //设置成松发开火
- LooseShoot = true;
- //弹药量, 可以理解为耐久度
- AmmoCapacity = 180;
- MaxAmmoCapacity = AmmoCapacity;
- //握把位置
- HoldPosition = new Vector2(10, 0);
- MaxDistance = MinDistance = 35;
- //后坐力改为向前, 模拟手伸长的效果
- MaxBacklash = -8;
- MinBacklash = -8;
- BacklashRegressionSpeed = 24;
- UpliftAngle = -95;
-
- //AiUseAttribute = Clone();
- //AiUseAttribute.TriggerInterval = 3f;
- }
- }
-
- private Area2D _hitArea;
- private int _attackIndex = 0;
-
- public override void OnInit()
- {
- base.OnInit();
-
- _hitArea = GetNode("HitArea");
- _hitArea.Monitoring = false;
- _hitArea.Monitorable = false;
-
- _hitArea.BodyEntered += OnBodyEntered;
- }
-
- protected override void Process(float delta)
- {
- base.Process(delta);
- if (IsActive)
- {
- //让碰撞节点与武器挂载节点位置保持一致, 而不跟着武器走
- _hitArea.GlobalPosition = Master.MountPoint.GlobalPosition;
- }
- }
-
- protected override void PhysicsProcess(float delta)
- {
- base.PhysicsProcess(delta);
- //过去两个物理帧后就能关闭碰撞了
- if (++_attackIndex >= 2)
- {
- _hitArea.Monitoring = false;
- }
- }
-
- protected override void OnStartCharge()
- {
- //开始蓄力时武器角度上抬120度
- RotationDegrees = -120;
- }
-
- protected override void OnFire()
- {
- GD.Print("近战武器攻击! 蓄力时长: " + GetTriggerChargeTime() + ", 扳机按下时长: " + GetTriggerDownTime());
- //更新碰撞层级
- _hitArea.CollisionMask = GetAttackLayer();
- //启用碰撞
- _hitArea.Monitoring = true;
- _attackIndex = 0;
-
- if (IsActive) //被使用
- {
- //播放挥刀特效
- SpecialEffectManager.Play(
- ResourcePath.resource_effects_KnifeHit1_tres, "default",
- Master.MountPoint.GlobalPosition, GlobalRotation + Mathf.Pi * 0.5f, new Vector2((int)Master.Face, 1) * AnimatedSprite.Scale,
- new Vector2(17, 4), 1
- );
- }
-
-
- if (Master == GameApplication.Instance.RoomManager.Player)
- {
- //创建抖动
- //GameCamera.Main.ProcessDirectionalShake(Vector2.Right.Rotated(GlobalRotation - Mathf.Pi * 0.5f) * 1.5f);
- }
- }
-
- protected override void OnShoot(float fireRotation)
- {
-
- }
-
- protected override int UseAmmoCount()
- {
- //这里要做判断, 如果没有碰到敌人, 则不消耗弹药 (耐久)
- return 0;
- }
-
- private void OnBodyEntered(Node2D body)
- {
- GD.Print("碰到物体: " + body.Name);
- var activityObject = body.AsActivityObject();
- if (activityObject != null)
- {
- if (activityObject is Role role)
- {
- role.CallDeferred(nameof(Role.Hurt), 10, (role.GetCenterPosition() - GlobalPosition).Angle());
- }
- }
- }
-}
diff --git a/DungeonShooting_Godot/src/game/item/weapon/shell/ShellCase.cs b/DungeonShooting_Godot/src/game/item/weapon/shell/ShellCase.cs
deleted file mode 100644
index 1966222..0000000
--- a/DungeonShooting_Godot/src/game/item/weapon/shell/ShellCase.cs
+++ /dev/null
@@ -1,22 +0,0 @@
-
-using Godot;
-
-///
-/// 弹壳类
-///
-[RegisterActivity(ActivityIdPrefix.Shell + "0001", ResourcePath.prefab_weapon_shell_ShellCase_tscn)]
-public partial class ShellCase : ActivityObject
-{
- public override void OnInit()
- {
- base.OnInit();
- ShadowOffset = new Vector2(0, 1);
- ThrowCollisionSize = new Vector2(5, 5);
- }
-
- protected override void OnThrowOver()
- {
- EnableBehavior = false;
- Collision.QueueFree();
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/manager/InputManager.cs b/DungeonShooting_Godot/src/game/manager/InputManager.cs
index fae7fc0..4119692 100644
--- a/DungeonShooting_Godot/src/game/manager/InputManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/InputManager.cs
@@ -7,20 +7,65 @@
public static class InputManager
{
///
- /// 获取鼠标在SubViewport节点下的坐标
+ /// 移动方向
///
- public static Vector2 GetViewportMousePosition()
- {
- var application = GameApplication.Instance;
- return application.GlobalToViewPosition(application.GetGlobalMousePosition());
- }
+ public static Vector2 MoveAxis { get; private set; }
+
+ ///
+ /// 鼠标在SubViewport节点下的坐标
+ ///
+ public static Vector2 CursorPosition { get; private set; }
+
+ ///
+ /// 是否按下切换武器
+ ///
+ public static bool Exchange { get; private set; }
///
+ /// 是否按钮投抛武器按钮
+ ///
+ public static bool Throw { get; private set; }
+
+ ///
+ /// 是否按钮互动按钮
+ ///
+ public static bool Interactive { get; private set; }
+
+ ///
+ /// 是否按钮换弹按钮
+ ///
+ public static bool Reload { get; private set; }
+
+ ///
+ /// 是否按钮开火按钮
+ ///
+ public static bool Fire { get; private set; }
+
+ ///
+ /// 是否按钮近战攻击按钮 (使用远程武器发起的近战攻击)
+ ///
+ public static bool MeleeAttack { get; private set; }
+
+ ///
+ /// 是否按下翻滚按钮
+ ///
+ public static bool Roll { get; private set; }
+
+ ///
/// 更新输入管理器
///
public static void Update(float delta)
{
-
+ var application = GameApplication.Instance;
+ MoveAxis = Input.GetVector("move_left", "move_right", "move_up", "move_down");
+ CursorPosition = application.GlobalToViewPosition(application.GetGlobalMousePosition());
+ Exchange = Input.IsActionJustPressed("exchange");
+ Throw = Input.IsActionJustPressed("throw");
+ Interactive = Input.IsActionJustPressed("interactive");
+ Reload = Input.IsActionJustPressed("reload");
+ Fire = Input.IsActionPressed("fire");
+ MeleeAttack = Input.IsActionPressed("meleeAttack");
+ Roll = Input.IsActionPressed("roll");
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/manager/ResourceManager.cs b/DungeonShooting_Godot/src/game/manager/ResourceManager.cs
index 41dfc21..6352e1c 100644
--- a/DungeonShooting_Godot/src/game/manager/ResourceManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/ResourceManager.cs
@@ -15,7 +15,7 @@
{
if (_shadowMaterial == null)
{
- _shadowMaterial = ResourceLoader.Load(ResourcePath.resource_material_Blend_tres);
+ _shadowMaterial = Load(ResourcePath.resource_material_Blend_tres);
}
return _shadowMaterial;
@@ -33,7 +33,7 @@
{
if (_shadowShader == null)
{
- _shadowShader = ResourceLoader.Load(ResourcePath.resource_material_Blend_tres);
+ _shadowShader = Load(ResourcePath.resource_material_Blend_tres);
}
return _shadowShader;
@@ -42,6 +42,41 @@
private static Shader _shadowShader;
+ ///
+ /// 默认字体资源, 字体大小16px
+ ///
+ public static Font DefaultFont16Px
+ {
+ get
+ {
+ if (_defaultFont16Px == null)
+ {
+ _defaultFont16Px = Load(ResourcePath.resource_font_VonwaonBitmap16px_ttf);
+ }
+
+ return _defaultFont16Px;
+ }
+ }
+ private static Font _defaultFont16Px;
+
+ ///
+ /// 默认字体资源, 字体大小12px
+ ///
+ public static Font DefaultFont12Px
+ {
+ get
+ {
+ if (_defaultFont12Px == null)
+ {
+ _defaultFont12Px = Load(ResourcePath.resource_font_VonwaonBitmap12px_ttf);
+ }
+
+ return _defaultFont12Px;
+ }
+ }
+ private static Font _defaultFont12Px;
+
+ //缓存的资源
private static readonly Dictionary CachePack = new Dictionary();
///
diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
index 299b36b..0da5ef6 100644
--- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
+++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
@@ -1,243 +1,91 @@
///
-/// 编辑器下所有资源路径, 该类为 Automation 面板下自动生成的, 请不要手动编辑!
+/// 编辑器下所有资源路径, 该类为 Tools 面板下自动生成的, 请不要手动编辑!
///
public class ResourcePath
{
+ public const string default_bus_layout_tres = "res://default_bus_layout.tres";
+ public const string default_env_tres = "res://default_env.tres";
+ public const string icon_png = "res://icon.png";
+ public const string excel_DungeonShooting_ExcelTool_deps_json = "res://excel/DungeonShooting_ExcelTool.deps.json";
+ public const string excel_DungeonShooting_ExcelTool_runtimeconfig_json = "res://excel/DungeonShooting_ExcelTool.runtimeconfig.json";
public const string prefab_Cursor_tscn = "res://prefab/Cursor.tscn";
public const string prefab_FanCollisionShape_tscn = "res://prefab/FanCollisionShape.tscn";
+ public const string prefab_bullet_Bullet0001_tscn = "res://prefab/bullet/Bullet0001.tscn";
+ public const string prefab_bullet_Bullet0002_tscn = "res://prefab/bullet/Bullet0002.tscn";
public const string prefab_effect_Blood_tscn = "res://prefab/effect/Blood.tscn";
public const string prefab_effect_BulletDisappear_tscn = "res://prefab/effect/BulletDisappear.tscn";
public const string prefab_effect_BulletSmoke_tscn = "res://prefab/effect/BulletSmoke.tscn";
public const string prefab_effect_Effect1_tscn = "res://prefab/effect/Effect1.tscn";
public const string prefab_effect_FirePart_tscn = "res://prefab/effect/FirePart.tscn";
public const string prefab_effect_ShotFire_tscn = "res://prefab/effect/ShotFire.tscn";
+ public const string prefab_effect_activityObject_Effect0001_tscn = "res://prefab/effect/activityObject/Effect0001.tscn";
public const string prefab_effect_activityObject_EnemyBloodEffect_tscn = "res://prefab/effect/activityObject/EnemyBloodEffect.tscn";
- public const string prefab_effect_activityObject_EnemyDebris_tscn = "res://prefab/effect/activityObject/EnemyDebris.tscn";
- public const string prefab_map_RoomDoor_tscn = "res://prefab/map/RoomDoor.tscn";
- public const string prefab_role_Enemy_tscn = "res://prefab/role/Enemy.tscn";
- public const string prefab_role_Player_tscn = "res://prefab/role/Player.tscn";
- public const string prefab_role_Role_tscn = "res://prefab/role/Role.tscn";
+ public const string prefab_map_RoomDoor_E_tscn = "res://prefab/map/RoomDoor_E.tscn";
+ public const string prefab_map_RoomDoor_N_tscn = "res://prefab/map/RoomDoor_N.tscn";
+ public const string prefab_map_RoomDoor_S_tscn = "res://prefab/map/RoomDoor_S.tscn";
+ public const string prefab_map_RoomDoor_W_tscn = "res://prefab/map/RoomDoor_W.tscn";
+ public const string prefab_role_Enemy0001_tscn = "res://prefab/role/Enemy0001.tscn";
+ public const string prefab_role_Role0001_tscn = "res://prefab/role/Role0001.tscn";
+ public const string prefab_role_RoleTemplate_tscn = "res://prefab/role/RoleTemplate.tscn";
+ public const string prefab_shell_Shell0001_tscn = "res://prefab/shell/Shell0001.tscn";
public const string prefab_test_MoveComponent_tscn = "res://prefab/test/MoveComponent.tscn";
public const string prefab_test_TestActivity_tscn = "res://prefab/test/TestActivity.tscn";
public const string prefab_ui_EditorTools_tscn = "res://prefab/ui/EditorTools.tscn";
+ public const string prefab_ui_Loading_tscn = "res://prefab/ui/Loading.tscn";
+ public const string prefab_ui_Main_tscn = "res://prefab/ui/Main.tscn";
public const string prefab_ui_RoomUI_tscn = "res://prefab/ui/RoomUI.tscn";
- public const string prefab_weapon_Knife_tscn = "res://prefab/weapon/Knife.tscn";
- public const string prefab_weapon_Weapon_tscn = "res://prefab/weapon/Weapon.tscn";
- public const string prefab_weapon_bullet_Bullet_tscn = "res://prefab/weapon/bullet/Bullet.tscn";
- public const string prefab_weapon_shell_ShellCase_tscn = "res://prefab/weapon/shell/ShellCase.tscn";
+ public const string prefab_ui_Settlement_tscn = "res://prefab/ui/Settlement.tscn";
+ public const string prefab_weapon_Weapon0001_tscn = "res://prefab/weapon/Weapon0001.tscn";
+ public const string prefab_weapon_Weapon0002_tscn = "res://prefab/weapon/Weapon0002.tscn";
+ public const string prefab_weapon_Weapon0003_tscn = "res://prefab/weapon/Weapon0003.tscn";
+ public const string prefab_weapon_Weapon0004_tscn = "res://prefab/weapon/Weapon0004.tscn";
+ public const string prefab_weapon_Weapon0005_tscn = "res://prefab/weapon/Weapon0005.tscn";
+ public const string prefab_weapon_WeaponTemplate_tscn = "res://prefab/weapon/WeaponTemplate.tscn";
+ public const string resource_config_ActivityObject_json = "res://resource/config/ActivityObject.json";
+ public const string resource_config_Weapon_json = "res://resource/config/Weapon.json";
public const string resource_curve_Curve1_tres = "res://resource/curve/Curve1.tres";
- public const string resource_effects_Circle_png = "res://resource/effects/Circle.png";
- public const string resource_effects_Collision_png = "res://resource/effects/Collision.png";
- public const string resource_effects_debug_arrows_png = "res://resource/effects/debug_arrows.png";
- public const string resource_effects_Effect1_png = "res://resource/effects/Effect1.png";
- public const string resource_effects_Explosion_png = "res://resource/effects/Explosion.png";
- public const string resource_effects_Hit_tres = "res://resource/effects/Hit.tres";
- public const string resource_effects_KnifeHit1_tres = "res://resource/effects/KnifeHit1.tres";
- public const string resource_effects_ShotFire_png = "res://resource/effects/ShotFire.png";
- public const string resource_effects_Smoke_png = "res://resource/effects/Smoke.png";
- public const string resource_effects_activityObject_Enemy0001_Debris_png = "res://resource/effects/activityObject/Enemy0001_Debris.png";
- public const string resource_font_cn_font_12_tres = "res://resource/font/cn_font_12.tres";
- public const string resource_font_cn_font_18_tres = "res://resource/font/cn_font_18.tres";
- public const string resource_font_cn_font_36_tres = "res://resource/font/cn_font_36.tres";
+ public const string resource_font_DinkieBitmap7pxDemo_ttf = "res://resource/font/DinkieBitmap-7pxDemo.ttf";
+ public const string resource_font_DinkieBitmap9pxDemo_ttf = "res://resource/font/DinkieBitmap-9pxDemo.ttf";
+ public const string resource_font_DinkieBitmap9pxItalicDemo_ttf = "res://resource/font/DinkieBitmap-9pxItalicDemo.ttf";
+ public const string resource_font_VonwaonBitmap12px_ttf = "res://resource/font/VonwaonBitmap-12px.ttf";
+ public const string resource_font_VonwaonBitmap16px_ttf = "res://resource/font/VonwaonBitmap-16px.ttf";
public const string resource_map_RoomConfig_json = "res://resource/map/RoomConfig.json";
- public const string resource_map_tiledata_testGroup_battle_Room8_json = "res://resource/map/tiledata/testGroup/battle/Room8.json";
- public const string resource_map_tiledata_testGroup_inlet_Room1_json = "res://resource/map/tiledata/testGroup/inlet/Room1.json";
- public const string resource_map_tiledata_testGroup_outlet_Room1_json = "res://resource/map/tiledata/testGroup/outlet/Room1.json";
- public const string resource_map_tileMaps_testGroup_battle_Room8_tscn = "res://resource/map/tileMaps/testGroup/battle/Room8.tscn";
- public const string resource_map_tileMaps_testGroup_inlet_Room1_tscn = "res://resource/map/tileMaps/testGroup/inlet/Room1.tscn";
- public const string resource_map_tileMaps_testGroup_outlet_Room1_tscn = "res://resource/map/tileMaps/testGroup/outlet/Room1.tscn";
public const string resource_map_tileset_TileSet1_tres = "res://resource/map/tileset/TileSet1.tres";
public const string resource_map_tileset_TileSet_old_tres = "res://resource/map/tileset/TileSet_old.tres";
public const string resource_material_Blend_gdshader = "res://resource/material/Blend.gdshader";
public const string resource_material_Blend_tres = "res://resource/material/Blend.tres";
public const string resource_material_SmokeParticleMaterial_tres = "res://resource/material/SmokeParticleMaterial.tres";
public const string resource_sound_bgm_Intro_ogg = "res://resource/sound/bgm/Intro.ogg";
- public const string resource_sound_sfx_ordinaryBullet_ogg = "res://resource/sound/sfx/ordinaryBullet.ogg";
- public const string resource_sound_sfx_ordinaryBullet2_mp3 = "res://resource/sound/sfx/ordinaryBullet2.mp3";
- public const string resource_sound_sfx_ordinaryBullet3_mp3 = "res://resource/sound/sfx/ordinaryBullet3.mp3";
- public const string resource_sound_sfx_reloading_mp3 = "res://resource/sound/sfx/reloading.mp3";
+ public const string resource_sound_sfx_Equip0001_ogg = "res://resource/sound/sfx/Equip0001.ogg";
+ public const string resource_sound_sfx_Equip0002_ogg = "res://resource/sound/sfx/Equip0002.ogg";
+ public const string resource_sound_sfx_Equip0003_ogg = "res://resource/sound/sfx/Equip0003.ogg";
+ public const string resource_sound_sfx_Explosion0001_ogg = "res://resource/sound/sfx/Explosion0001.ogg";
+ public const string resource_sound_sfx_Explosion0002_ogg = "res://resource/sound/sfx/Explosion0002.ogg";
+ public const string resource_sound_sfx_Explosion0003_ogg = "res://resource/sound/sfx/Explosion0003.ogg";
+ public const string resource_sound_sfx_Reloading0001_mp3 = "res://resource/sound/sfx/Reloading0001.mp3";
+ public const string resource_sound_sfx_Reloading0002_ogg = "res://resource/sound/sfx/Reloading0002.ogg";
+ public const string resource_sound_sfx_Reloading0003_ogg = "res://resource/sound/sfx/Reloading0003.ogg";
+ public const string resource_sound_sfx_Reloading0004_ogg = "res://resource/sound/sfx/Reloading0004.ogg";
+ public const string resource_sound_sfx_Reloading_begin0001_ogg = "res://resource/sound/sfx/Reloading_begin0001.ogg";
+ public const string resource_sound_sfx_Reloading_finish0001_ogg = "res://resource/sound/sfx/Reloading_finish0001.ogg";
+ public const string resource_sound_sfx_Shooting0001_ogg = "res://resource/sound/sfx/Shooting0001.ogg";
+ public const string resource_sound_sfx_Shooting0002_mp3 = "res://resource/sound/sfx/Shooting0002.mp3";
+ public const string resource_sound_sfx_Shooting0003_mp3 = "res://resource/sound/sfx/Shooting0003.mp3";
public const string resource_sprite_bullet_arrow_png = "res://resource/sprite/bullet/arrow.png";
public const string resource_sprite_bullet_bullet_png = "res://resource/sprite/bullet/bullet.png";
public const string resource_sprite_bullet_bullet2_png = "res://resource/sprite/bullet/bullet2.png";
- public const string resource_sprite_effect_KnifeHit1_png = "res://resource/sprite/effect/KnifeHit1.png";
- public const string resource_sprite_effect_Trajectory_png = "res://resource/sprite/effect/Trajectory.png";
- public const string resource_sprite_effect_hit_hit0_png = "res://resource/sprite/effect/hit/hit0.png";
- public const string resource_sprite_effect_hit_hit1_png = "res://resource/sprite/effect/hit/hit1.png";
- public const string resource_sprite_effect_hit_hit2_png = "res://resource/sprite/effect/hit/hit2.png";
- public const string resource_sprite_effect_hit_hit3_png = "res://resource/sprite/effect/hit/hit3.png";
- public const string resource_sprite_effect_hit_hit4_png = "res://resource/sprite/effect/hit/hit4.png";
- public const string resource_sprite_effect_itchioMiniPack_website_txt = "res://resource/sprite/effect/itch-io-MiniPack/website.txt";
- public const string resource_sprite_effect_itchioMiniPack_1_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_1_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/1/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_2_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/2/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_3_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/3/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_4_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/4/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_5_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/5/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_6_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/6/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_7_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/7/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_8_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/8/1_9.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_0_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_0.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_1_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_1.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_10_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_10.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_11_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_11.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_12_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_12.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_13_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_13.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_14_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_14.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_2_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_2.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_3_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_3.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_4_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_4.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_5_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_5.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_6_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_6.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_7_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_7.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_8_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_8.png";
- public const string resource_sprite_effect_itchioMiniPack_9_1_9_png = "res://resource/sprite/effect/itch-io-MiniPack/9/1_9.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect1SpriteSheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 1 - Sprite Sheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect2SpriteSheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 2 - Sprite Sheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect3SpriteSheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 3 - Sprite Sheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect4SpriteSheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect 4 - Sprite Sheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect1GameboySpritesheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect1 Gameboy Spritesheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect3GameboySpritesheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect3 Gameboy Spritesheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effect4GameboySpritesheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effect4 Gameboy Spritesheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_Effectst2GameboySpritesheet_png = "res://resource/sprite/effect/itch-io-pixel-battle-effects/Effectst2 Gameboy Spritesheet.png";
- public const string resource_sprite_effect_itchiopixelbattleeffects_website_txt = "res://resource/sprite/effect/itch-io-pixel-battle-effects/website.txt";
- public const string resource_sprite_environment_craftpixnet248911_16x16_png = "res://resource/sprite/environment/craftpix-net-248911/16x16.png";
- public const string resource_sprite_environment_craftpixnet248911_ANotetotheDev_txt = "res://resource/sprite/environment/craftpix-net-248911/A Note to the Dev.txt";
- public const string resource_sprite_environment_craftpixnet248911_license_txt = "res://resource/sprite/environment/craftpix-net-248911/license.txt";
- public const string resource_sprite_environment_craftpixnet248911_AllTileset_16x16_png = "res://resource/sprite/environment/craftpix-net-248911/All Tileset/16x16.png";
- public const string resource_sprite_environment_craftpixnet248911_Palette_Pallete_txt = "res://resource/sprite/environment/craftpix-net-248911/Palette/Pallete.txt";
- public const string resource_sprite_environment_itchioDungeonTileset4_16x16dungeoniiwallreconfigv04spritesheet_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/16x16 dungeon ii wall reconfig v04 spritesheet.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_website_txt = "res://resource/sprite/environment/itch-io-DungeonTileset4/website.txt";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_arrow_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/arrow.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_bow_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/bow.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_effect_hit0_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit0.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_effect_hit1_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit1.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_effect_hit2_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit2.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_effect_hit3_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit3.png";
- public const string resource_sprite_environment_itchioDungeonTileset4_bow_effect_hit4_png = "res://resource/sprite/environment/itch-io-DungeonTileset4/bow/effect/hit4.png";
- public const string resource_sprite_gun_bow_png = "res://resource/sprite/gun/bow.png";
- public const string resource_sprite_gun_gun1_png = "res://resource/sprite/gun/gun1.png";
- public const string resource_sprite_gun_gun2_png = "res://resource/sprite/gun/gun2.png";
- public const string resource_sprite_gun_gun3_png = "res://resource/sprite/gun/gun3.png";
- public const string resource_sprite_gun_gun4_png = "res://resource/sprite/gun/gun4.png";
- public const string resource_sprite_gun_gun5_png = "res://resource/sprite/gun/gun5.png";
- public const string resource_sprite_gun_gun6_png = "res://resource/sprite/gun/gun6.png";
- public const string resource_sprite_gun_gun7_png = "res://resource/sprite/gun/gun7.png";
- public const string resource_sprite_gun_gun8_png = "res://resource/sprite/gun/gun8.png";
- public const string resource_sprite_gun_knife1_png = "res://resource/sprite/gun/knife1.png";
- public const string resource_sprite_gun_out_default_png = "res://resource/sprite/gun/out/default.png";
- public const string resource_sprite_map_door1_down_png = "res://resource/sprite/map/door1_down.png";
- public const string resource_sprite_role_role1_png = "res://resource/sprite/role/role1.png";
+ public const string resource_sprite_bullet_bullet3_png = "res://resource/sprite/bullet/bullet3.png";
+ public const string resource_sprite_effects_Circle_png = "res://resource/sprite/effects/Circle.png";
+ public const string resource_sprite_effects_Collision_png = "res://resource/sprite/effects/Collision.png";
+ public const string resource_sprite_effects_debug_arrows_png = "res://resource/sprite/effects/debug_arrows.png";
+ public const string resource_sprite_effects_Effect1_png = "res://resource/sprite/effects/Effect1.png";
+ public const string resource_sprite_effects_Explosion_png = "res://resource/sprite/effects/Explosion.png";
+ public const string resource_sprite_effects_KnifeHit1_png = "res://resource/sprite/effects/KnifeHit1.png";
+ public const string resource_sprite_effects_ShotFire_png = "res://resource/sprite/effects/ShotFire.png";
+ public const string resource_sprite_effects_Smoke_png = "res://resource/sprite/effects/Smoke.png";
+ public const string resource_sprite_map_map1_16x16dungeoniiwallreconfigv04spritesheet_png = "res://resource/sprite/map/map1/16x16 dungeon ii wall reconfig v04 spritesheet.png";
+ public const string resource_sprite_map_map1_door1_down_png = "res://resource/sprite/map/map1/door1_down.png";
+ public const string resource_sprite_map_map1_website_txt = "res://resource/sprite/map/map1/website.txt";
public const string resource_sprite_role_role10_png = "res://resource/sprite/role/role10.png";
public const string resource_sprite_role_role2_png = "res://resource/sprite/role/role2.png";
public const string resource_sprite_role_role3_png = "res://resource/sprite/role/role3.png";
@@ -247,10 +95,13 @@
public const string resource_sprite_role_role7_png = "res://resource/sprite/role/role7.png";
public const string resource_sprite_role_role8_png = "res://resource/sprite/role/role8.png";
public const string resource_sprite_role_role9_png = "res://resource/sprite/role/role9.png";
+ public const string resource_sprite_role_enemy0001_Enemy0001_png = "res://resource/sprite/role/enemy0001/Enemy0001.png";
+ public const string resource_sprite_role_enemy0001_Enemy0001_Debris_png = "res://resource/sprite/role/enemy0001/Enemy0001_Debris.png";
public const string resource_sprite_shell_shellCase_png = "res://resource/sprite/shell/shellCase.png";
- public const string resource_sprite_ui_Cursor_png = "res://resource/sprite/ui/Cursor.png";
public const string resource_sprite_ui_CursorCenter_png = "res://resource/sprite/ui/CursorCenter.png";
+ public const string resource_sprite_ui_cursors_png = "res://resource/sprite/ui/cursors.png";
public const string resource_sprite_ui_font_bg_png = "res://resource/sprite/ui/font_bg.png";
+ public const string resource_sprite_ui_GUI_png = "res://resource/sprite/ui/GUI.png";
public const string resource_sprite_ui_healthBar_png = "res://resource/sprite/ui/healthBar.png";
public const string resource_sprite_ui_hpBar_png = "res://resource/sprite/ui/hpBar.png";
public const string resource_sprite_ui_hpSlot_png = "res://resource/sprite/ui/hpSlot.png";
@@ -265,21 +116,44 @@
public const string resource_sprite_ui_icon_icon_pickup_png = "res://resource/sprite/ui/icon/icon_pickup.png";
public const string resource_sprite_ui_icon_icon_replace_png = "res://resource/sprite/ui/icon/icon_replace.png";
public const string resource_sprite_ui_keyboard_e_png = "res://resource/sprite/ui/keyboard/e.png";
+ public const string resource_sprite_weapon_bow_png = "res://resource/sprite/weapon/bow.png";
+ public const string resource_sprite_weapon_gun1_png = "res://resource/sprite/weapon/gun1.png";
+ public const string resource_sprite_weapon_gun2_png = "res://resource/sprite/weapon/gun2.png";
+ public const string resource_sprite_weapon_gun3_png = "res://resource/sprite/weapon/gun3.png";
+ public const string resource_sprite_weapon_gun4_png = "res://resource/sprite/weapon/gun4.png";
+ public const string resource_sprite_weapon_gun5_png = "res://resource/sprite/weapon/gun5.png";
+ public const string resource_sprite_weapon_gun6_png = "res://resource/sprite/weapon/gun6.png";
+ public const string resource_sprite_weapon_gun7_png = "res://resource/sprite/weapon/gun7.png";
+ public const string resource_sprite_weapon_gun8_png = "res://resource/sprite/weapon/gun8.png";
+ public const string resource_sprite_weapon_knife1_png = "res://resource/sprite/weapon/knife1.png";
+ public const string resource_sprite_weapon_weapon0001_Weapon0001_png = "res://resource/sprite/weapon/weapon0001/Weapon0001.png";
+ public const string resource_sprite_weapon_weapon0002_Weapon0002_png = "res://resource/sprite/weapon/weapon0002/Weapon0002.png";
+ public const string resource_sprite_weapon_weapon0003_Weapon0003_png = "res://resource/sprite/weapon/weapon0003/Weapon0003.png";
+ public const string resource_sprite_weapon_weapon0005_Weapon0005_png = "res://resource/sprite/weapon/weapon0005/Weapon0005.png";
+ public const string resource_spriteFrames_Bullet0001_tres = "res://resource/spriteFrames/Bullet0001.tres";
+ public const string resource_spriteFrames_Bullet0002_tres = "res://resource/spriteFrames/Bullet0002.tres";
+ public const string resource_spriteFrames_KnifeHit1_tres = "res://resource/spriteFrames/KnifeHit1.tres";
+ public const string resource_spriteFrames_Role0001_tres = "res://resource/spriteFrames/Role0001.tres";
+ public const string resource_spriteFrames_Role1001_tres = "res://resource/spriteFrames/Role1001.tres";
+ public const string resource_spriteFrames_RoomDoor_EW_tres = "res://resource/spriteFrames/RoomDoor_EW.tres";
+ public const string resource_spriteFrames_RoomDoor_NS_tres = "res://resource/spriteFrames/RoomDoor_NS.tres";
+ public const string resource_spriteFrames_Shell0001_tres = "res://resource/spriteFrames/Shell0001.tres";
+ public const string resource_spriteFrames_Weapon0001_tres = "res://resource/spriteFrames/Weapon0001.tres";
+ public const string resource_spriteFrames_Weapon0002_tres = "res://resource/spriteFrames/Weapon0002.tres";
+ public const string resource_spriteFrames_Weapon0003_tres = "res://resource/spriteFrames/Weapon0003.tres";
+ public const string resource_spriteFrames_Weapon0004_tres = "res://resource/spriteFrames/Weapon0004.tres";
+ public const string resource_spriteFrames_Weapon0005_tres = "res://resource/spriteFrames/Weapon0005.tres";
public const string resource_theme_mainTheme_tres = "res://resource/theme/mainTheme.tres";
+ public const string resource_theme_theme1_tres = "res://resource/theme/theme1.tres";
public const string scene_EditorDemo_tscn = "res://scene/EditorDemo.tscn";
public const string scene_Main_tscn = "res://scene/Main.tscn";
- public const string scene_Room_tscn = "res://scene/Room.tscn";
+ public const string scene_World_tscn = "res://scene/World.tscn";
public const string scene_test_TestCommpont_tscn = "res://scene/test/TestCommpont.tscn";
public const string scene_test_TestExpression_tscn = "res://scene/test/TestExpression.tscn";
public const string scene_test_TestGenerateDungeon_tscn = "res://scene/test/TestGenerateDungeon.tscn";
- public const string scene_test_TestNavigation_tscn = "res://scene/test/TestNavigation.tscn";
public const string scene_test_TestNavigation2_tscn = "res://scene/test/TestNavigation2.tscn";
public const string scene_test_TestNavigationPolygon_tscn = "res://scene/test/TestNavigationPolygon.tscn";
public const string scene_test_TestNewTileMap_tscn = "res://scene/test/TestNewTileMap.tscn";
+ public const string scene_test_TestReadExcel_tscn = "res://scene/test/TestReadExcel.tscn";
public const string scene_test_TestTileLayer_tscn = "res://scene/test/TestTileLayer.tscn";
- public const string default_bus_layout_tres = "res://default_bus_layout.tres";
- public const string default_env_tres = "res://default_env.tres";
- public const string icon_png = "res://icon.png";
- public const string Silver_ttf = "res://Silver.ttf";
- public const string SourceHanSerifCNSemiBold_otf = "res://SourceHanSerifCN-SemiBold.otf";
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/manager/SoundManager.cs b/DungeonShooting_Godot/src/game/manager/SoundManager.cs
index 1b5bc35..c6e2cd7 100644
--- a/DungeonShooting_Godot/src/game/manager/SoundManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/SoundManager.cs
@@ -24,13 +24,45 @@
///
private partial class AudioPlayer2D : AudioStreamPlayer2D
{
+ private float _delayTimer = -1;
+
public override void _Ready()
{
Finished += OnPlayFinish;
}
- public void OnPlayFinish()
+ ///
+ /// 延时播放
+ ///
+ public void DelayPlay(float time)
{
+ _delayTimer = time;
+ }
+
+ ///
+ /// 停止播放, 并回收节点
+ ///
+ public void StopPlay()
+ {
+ Stop();
+ OnPlayFinish();
+ }
+
+ public override void _Process(double delta)
+ {
+ if (_delayTimer > 0)
+ {
+ _delayTimer -= (float)delta;
+ if (_delayTimer <= 0)
+ {
+ Play();
+ }
+ }
+ }
+
+ private void OnPlayFinish()
+ {
+ _delayTimer = -1;
RecycleAudioPlayer2D(this);
}
}
@@ -45,7 +77,16 @@
Finished += OnPlayFinish;
}
- public void OnPlayFinish()
+ ///
+ /// 停止播放, 并回收节点
+ ///
+ public void StopPlay()
+ {
+ Stop();
+ OnPlayFinish();
+ }
+
+ private void OnPlayFinish()
{
GetParent().RemoveChild(this);
Stream = null;
@@ -75,15 +116,15 @@
/// 添加并播放音效 用于音效
///
/// 音效文件路径
- /// 音量
- public static AudioStreamPlayer PlaySoundEffect(string soundName, float volume = 0.5f)
+ /// 音量 (0 - 1)
+ public static AudioStreamPlayer PlaySoundEffect(string soundName, float volume = 1f)
{
var sound = ResourceManager.Load(soundName);
var soundNode = GetAudioPlayerInstance();
GameApplication.Instance.GlobalNodeRoot.AddChild(soundNode);
soundNode.Stream = sound;
soundNode.Bus = Enum.GetName(typeof(BUS), 1);
- soundNode.VolumeDb = volume;
+ soundNode.VolumeDb = Mathf.LinearToDb(Mathf.Clamp(volume, 0, 1));
soundNode.Play();
return soundNode;
}
@@ -93,9 +134,9 @@
///
/// 音效文件路径
/// 发声节点所在全局坐标
- /// 音量
+ /// 音量 (0 - 1)
/// 挂载节点, 为null则挂载到房间根节点下
- public static AudioStreamPlayer2D PlaySoundEffectPosition(string soundName, Vector2 pos, float volume = 0.5f, Node2D target = null)
+ public static AudioStreamPlayer2D PlaySoundEffectPosition(string soundName, Vector2 pos, float volume = 1f, Node2D target = null)
{
var sound = ResourceManager.Load(soundName);
var soundNode = GetAudioPlayer2DInstance();
@@ -111,12 +152,41 @@
soundNode.GlobalPosition = pos;
soundNode.Stream = sound;
soundNode.Bus = Enum.GetName(typeof(BUS), 1);
- soundNode.VolumeDb = volume;
+ soundNode.VolumeDb = Mathf.LinearToDb(Mathf.Clamp(volume, 0, 1));
soundNode.Play();
return soundNode;
}
///
+ /// 在指定的节点下延时播放音效 用于音效
+ ///
+ /// 音效文件路径
+ /// 发声节点所在全局坐标
+ /// 延时时间
+ /// 音量 (0 - 1)
+ /// 挂载节点, 为null则挂载到房间根节点下
+ public static AudioStreamPlayer2D PlaySoundEffectPositionDelay(string soundName, Vector2 pos, float delayTime, float volume = 1f, Node2D target = null)
+ {
+ var sound = ResourceManager.Load(soundName);
+ var soundNode = GetAudioPlayer2DInstance();
+ if (target != null)
+ {
+ target.AddChild(soundNode);
+ }
+ else
+ {
+ GameApplication.Instance.GlobalNodeRoot.AddChild(soundNode);
+ }
+
+ soundNode.GlobalPosition = pos;
+ soundNode.Stream = sound;
+ soundNode.Bus = Enum.GetName(typeof(BUS), 1);
+ soundNode.VolumeDb = Mathf.LinearToDb(Mathf.Clamp(volume, 0, 1));
+ soundNode.DelayPlay(delayTime);
+ return soundNode;
+ }
+
+ ///
/// 获取2D音频播放节点
///
private static AudioPlayer2D GetAudioPlayer2DInstance()
diff --git a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs
index 91aaa92..431fc32 100644
--- a/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs
+++ b/DungeonShooting_Godot/src/game/manager/UiManager_Methods.cs
@@ -7,7 +7,10 @@
public static class UiName
{
public const string EditorTools = "EditorTools";
+ public const string Loading = "Loading";
+ public const string Main = "Main";
public const string RoomUI = "RoomUI";
+ public const string Settlement = "Settlement";
}
///
@@ -19,6 +22,30 @@
}
///
+ /// 隐藏 EditorTools 的所有实例
+ ///
+ public static void Hide_EditorTools()
+ {
+ var uiInstance = Get_EditorTools_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.HideUi();
+ }
+ }
+
+ ///
+ /// 销毁 EditorTools 的所有实例
+ ///
+ public static void Dispose_EditorTools()
+ {
+ var uiInstance = Get_EditorTools_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.DisposeUi();
+ }
+ }
+
+ ///
/// 获取所有 EditorTools 的实例, 如果没有实例, 则返回一个空数组
///
public static UI.EditorTools.EditorToolsPanel[] Get_EditorTools_Instance()
@@ -27,6 +54,86 @@
}
///
+ /// 打开 Loading, 并返回UI实例
+ ///
+ public static UI.Loading.LoadingPanel Open_Loading()
+ {
+ return OpenUi(UiName.Loading);
+ }
+
+ ///
+ /// 隐藏 Loading 的所有实例
+ ///
+ public static void Hide_Loading()
+ {
+ var uiInstance = Get_Loading_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.HideUi();
+ }
+ }
+
+ ///
+ /// 销毁 Loading 的所有实例
+ ///
+ public static void Dispose_Loading()
+ {
+ var uiInstance = Get_Loading_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.DisposeUi();
+ }
+ }
+
+ ///
+ /// 获取所有 Loading 的实例, 如果没有实例, 则返回一个空数组
+ ///
+ public static UI.Loading.LoadingPanel[] Get_Loading_Instance()
+ {
+ return GetUiInstance(nameof(UI.Loading.Loading));
+ }
+
+ ///
+ /// 打开 Main, 并返回UI实例
+ ///
+ public static UI.Main.MainPanel Open_Main()
+ {
+ return OpenUi(UiName.Main);
+ }
+
+ ///
+ /// 隐藏 Main 的所有实例
+ ///
+ public static void Hide_Main()
+ {
+ var uiInstance = Get_Main_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.HideUi();
+ }
+ }
+
+ ///
+ /// 销毁 Main 的所有实例
+ ///
+ public static void Dispose_Main()
+ {
+ var uiInstance = Get_Main_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.DisposeUi();
+ }
+ }
+
+ ///
+ /// 获取所有 Main 的实例, 如果没有实例, 则返回一个空数组
+ ///
+ public static UI.Main.MainPanel[] Get_Main_Instance()
+ {
+ return GetUiInstance(nameof(UI.Main.Main));
+ }
+
+ ///
/// 打开 RoomUI, 并返回UI实例
///
public static UI.RoomUI.RoomUIPanel Open_RoomUI()
@@ -35,6 +142,30 @@
}
///
+ /// 隐藏 RoomUI 的所有实例
+ ///
+ public static void Hide_RoomUI()
+ {
+ var uiInstance = Get_RoomUI_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.HideUi();
+ }
+ }
+
+ ///
+ /// 销毁 RoomUI 的所有实例
+ ///
+ public static void Dispose_RoomUI()
+ {
+ var uiInstance = Get_RoomUI_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.DisposeUi();
+ }
+ }
+
+ ///
/// 获取所有 RoomUI 的实例, 如果没有实例, 则返回一个空数组
///
public static UI.RoomUI.RoomUIPanel[] Get_RoomUI_Instance()
@@ -42,4 +173,44 @@
return GetUiInstance(nameof(UI.RoomUI.RoomUI));
}
+ ///
+ /// 打开 Settlement, 并返回UI实例
+ ///
+ public static UI.Settlement.SettlementPanel Open_Settlement()
+ {
+ return OpenUi(UiName.Settlement);
+ }
+
+ ///
+ /// 隐藏 Settlement 的所有实例
+ ///
+ public static void Hide_Settlement()
+ {
+ var uiInstance = Get_Settlement_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.HideUi();
+ }
+ }
+
+ ///
+ /// 销毁 Settlement 的所有实例
+ ///
+ public static void Dispose_Settlement()
+ {
+ var uiInstance = Get_Settlement_Instance();
+ foreach (var uiPanel in uiInstance)
+ {
+ uiPanel.DisposeUi();
+ }
+ }
+
+ ///
+ /// 获取所有 Settlement 的实例, 如果没有实例, 则返回一个空数组
+ ///
+ public static UI.Settlement.SettlementPanel[] Get_Settlement_Instance()
+ {
+ return GetUiInstance(nameof(UI.Settlement.Settlement));
+ }
+
}
diff --git a/DungeonShooting_Godot/src/game/role/AnimatorNames.cs b/DungeonShooting_Godot/src/game/role/AnimatorNames.cs
deleted file mode 100644
index 29e59cb..0000000
--- a/DungeonShooting_Godot/src/game/role/AnimatorNames.cs
+++ /dev/null
@@ -1,27 +0,0 @@
-
-///
-/// 角色身上预制动画名称
-///
-public static class AnimatorNames
-{
- ///
- /// 默认动画
- ///
- public const string Default = "default";
- ///
- /// 静止不动
- ///
- public const string Idle = "idle";
- ///
- /// 奔跑
- ///
- public const string Run = "run";
- ///
- /// 倒退奔跑
- ///
- public const string ReverseRun = "reverseRun";
- ///
- /// 翻滚
- ///
- public const string Roll = "roll";
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/role/MountRotation.cs b/DungeonShooting_Godot/src/game/role/MountRotation.cs
index 32c1e1c..e265b10 100644
--- a/DungeonShooting_Godot/src/game/role/MountRotation.cs
+++ b/DungeonShooting_Godot/src/game/role/MountRotation.cs
@@ -4,6 +4,7 @@
///
/// 用于限定 Marker2D 节点的旋转角度
///
+[Tool]
public partial class MountRotation : Marker2D
{
///
@@ -19,7 +20,12 @@
///
/// 当前节点真实的旋转角度, 角度制
///
- public float RealAngle { get; private set; }
+ public float RealRotationDegrees { get; private set; }
+
+ ///
+ /// 当前节点真实的旋转角度, 弧度制
+ ///
+ public float RealRotation => Mathf.DegToRad(RealRotationDegrees);
///
/// 设置看向的目标点
@@ -45,7 +51,7 @@
angle = Mathf.Clamp(angle, -100, 100);
}
- RealAngle = angle;
+ RealRotationDegrees = angle;
// if (Master.GlobalPosition.X >= target.X)
// {
diff --git a/DungeonShooting_Godot/src/game/role/Player.cs b/DungeonShooting_Godot/src/game/role/Player.cs
index 0946c07..66d1ace 100644
--- a/DungeonShooting_Godot/src/game/role/Player.cs
+++ b/DungeonShooting_Godot/src/game/role/Player.cs
@@ -4,13 +4,13 @@
///
/// 玩家角色基类, 所有角色都必须继承该类
///
-[RegisterActivity(ActivityIdPrefix.Role + "0001", ResourcePath.prefab_role_Player_tscn)]
+[Tool, GlobalClass]
public partial class Player : Role
{
///
/// 获取当前操作的角色
///
- public static Player Current => GameApplication.Instance.RoomManager.Player;
+ public static Player Current { get; private set; }
///
/// 移动加速度
@@ -21,6 +21,17 @@
/// 移动摩擦力
///
public float Friction { get; set; } = 800f;
+
+ ///
+ /// 设置当前操作的玩家对象
+ ///
+ public static void SetCurrentPlayer(Player player)
+ {
+ Current = player;
+ //设置相机和鼠标跟随玩家
+ GameCamera.Main.SetFollowTarget(player);
+ GameApplication.Instance.Cursor.SetMountRole(player);
+ }
public override void OnInit()
{
@@ -35,15 +46,13 @@
// MainCamera.Main.GlobalPosition = GlobalPosition;
// MainCamera.Main.ResetSmoothing();
// remoteTransform.RemotePath = remoteTransform.GetPathTo(MainCamera.Main);
-
- RefreshWeaponTexture();
MaxHp = 50;
Hp = 50;
MaxShield = 30;
Shield = 30;
- // // debug用
+ // debug用
// Acceleration = 3000;
// Friction = 3000;
// MoveSpeed = 500;
@@ -54,12 +63,16 @@
protected override void Process(float delta)
{
+ if (IsDie)
+ {
+ return;
+ }
base.Process(delta);
//脸的朝向
if (LookTarget == null)
{
var gPos = GlobalPosition;
- Vector2 mousePos = InputManager.GetViewportMousePosition();
+ Vector2 mousePos = InputManager.CursorPosition;
if (mousePos.X > gPos.X && Face == FaceDirection.Left)
{
Face = FaceDirection.Right;
@@ -72,74 +85,62 @@
MountPoint.SetLookAt(mousePos);
}
- if (Input.IsActionJustPressed("exchange")) //切换武器
+ if (InputManager.Exchange) //切换武器
{
ExchangeNext();
}
- else if (Input.IsActionJustPressed("throw")) //扔掉武器
+ else if (InputManager.Throw) //扔掉武器
{
ThrowWeapon();
+
+ // //测试用的, 所有敌人也扔掉武器
+ // if (Affiliation != null)
+ // {
+ // var enemies = Affiliation.FindIncludeItems(o =>
+ // {
+ // return o.CollisionWithMask(PhysicsLayer.Enemy);
+ // });
+ // foreach (var activityObject in enemies)
+ // {
+ // if (activityObject is Enemy enemy)
+ // {
+ // enemy.ThrowWeapon();
+ // }
+ // }
+ // }
}
- else if (Input.IsActionJustPressed("interactive")) //互动物体
+ else if (InputManager.Interactive) //互动物体
{
- var item = TriggerInteractive();
- if (item != null)
- {
- RefreshWeaponTexture();
- }
+ TriggerInteractive();
}
- else if (Input.IsActionJustPressed("reload")) //换弹
+ else if (InputManager.Reload) //换弹
{
Reload();
}
- if (Input.IsActionPressed("fire")) //开火
+ if (InputManager.Fire) //开火
{
Attack();
}
+
+ if (Input.IsKeyPressed(Key.P))
+ {
+ Hurt(1000, 0);
+ }
}
protected override void PhysicsProcess(float delta)
{
+ if (IsDie)
+ {
+ return;
+ }
+
base.PhysicsProcess(delta);
HandleMoveInput(delta);
//播放动画
PlayAnim();
}
- public override void ExchangeNext()
- {
- base.ExchangeNext();
- RefreshWeaponTexture();
- }
-
- public override void ExchangePrev()
- {
- base.ExchangePrev();
- RefreshWeaponTexture();
- }
-
- public override void ThrowWeapon(int index)
- {
- base.ThrowWeapon(index);
- RefreshWeaponTexture();
- }
-
- public override void ThrowWeapon()
- {
- base.ThrowWeapon();
- RefreshWeaponTexture();
- }
-
- public override bool PickUpWeapon(Weapon weapon, bool exchange = true)
- {
- var v = base.PickUpWeapon(weapon, exchange);
- if (v)
- {
- RefreshWeaponTexture();
- }
- return v;
- }
-
protected override void OnChangeHp(int hp)
{
//GameApplication.Instance.Ui.SetHp(hp);
@@ -170,20 +171,18 @@
EventManager.EmitEvent(EventEnum.OnPlayerMaxShieldChange, maxShield);
}
- ///
- /// 刷新 ui 上手持的物体
- ///
- private void RefreshWeaponTexture()
+ protected override void OnDie()
{
- EventManager.EmitEvent(EventEnum.OnPlayerRefreshWeaponTexture, Holster.ActiveWeapon?.GetDefaultTexture());
+ GameCamera.Main.SetFollowTarget(null);
+ UiManager.Open_Settlement();
+ //GameApplication.Instance.World.ProcessMode = ProcessModeEnum.WhenPaused;
}
//处理角色移动的输入
private void HandleMoveInput(float delta)
{
//角色移动
- // 得到输入的 vector2 getvector方法返回值已经归一化过了noemalized
- Vector2 dir = Input.GetVector("move_left", "move_right", "move_up", "move_down");
+ Vector2 dir = InputManager.MoveAxis;
// 移动. 如果移动的数值接近0(是用 摇杆可能出现 方向 可能会出现浮点),就friction的值 插值 到 0
// 如果 有输入 就以当前速度,用acceleration 插值到 对应方向 * 最大速度
if (Mathf.IsZeroApprox(dir.X))
diff --git a/DungeonShooting_Godot/src/game/role/Role.cs b/DungeonShooting_Godot/src/game/role/Role.cs
index d6ab0a4..0698454 100644
--- a/DungeonShooting_Godot/src/game/role/Role.cs
+++ b/DungeonShooting_Godot/src/game/role/Role.cs
@@ -19,7 +19,8 @@
///
/// 伤害区域
///
- public Area2D HurtArea { get; private set; }
+ [Export, ExportFillNode]
+ public Area2D HurtArea { get; set; }
///
/// 移动速度
@@ -49,16 +50,19 @@
///
/// 武器挂载点
///
- public MountRotation MountPoint { get; private set; }
+ [Export, ExportFillNode]
+ public MountRotation MountPoint { get; set; }
///
/// 背后武器的挂载点
///
- public Marker2D BackMountPoint { get; private set; }
+ [Export, ExportFillNode]
+ public Marker2D BackMountPoint { get; set; }
///
/// 互动碰撞区域
///
- public Area2D InteractiveArea { get; private set; }
+ [Export, ExportFillNode]
+ public Area2D InteractiveArea { get; set; }
///
/// 脸的朝向
@@ -214,18 +218,14 @@
{
Holster = new Holster(this);
_startScale = Scale;
- MountPoint = GetNode("MountPoint");
MountPoint.Master = this;
- BackMountPoint = GetNode("BackMountPoint");
-
- HurtArea = GetNode("HurtArea");
+
HurtArea.CollisionLayer = CollisionLayer;
HurtArea.CollisionMask = 0;
Face = FaceDirection.Right;
//连接互动物体信号
- InteractiveArea = GetNode("InteractiveArea");
InteractiveArea.BodyEntered += _OnPropsEnter;
InteractiveArea.BodyExited += _OnPropsExit;
}
@@ -323,13 +323,13 @@
//身上的武器的所属区域也得跟着变
Holster.ForEach((weapon, i) =>
{
- if (Affiliation != null)
+ if (AffiliationArea != null)
{
- Affiliation.InsertItem(weapon);
+ AffiliationArea.InsertItem(weapon);
}
- else if (weapon.Affiliation != null)
+ else if (weapon.AffiliationArea != null)
{
- weapon.Affiliation.RemoveItem(weapon);
+ weapon.AffiliationArea.RemoveItem(weapon);
}
});
}
@@ -443,11 +443,15 @@
return;
}
- var temp = new Vector2(weapon.Attribute.HoldPosition.X, 0);
- var pos = weapon.GlobalPosition + temp.Rotated(weapon.GlobalRotation);
+ var temp = weapon.AnimatedSprite.Position;
+ if (Face == FaceDirection.Left)
+ {
+ temp.Y = -temp.Y;
+ }
+ var pos = GlobalPosition + temp.Rotated(weapon.GlobalRotation);
Holster.RemoveWeapon(index);
//播放抛出效果
- weapon.ThrowWeapon(this, pos);
+ weapon.ThrowWeapon(this, GlobalPosition);
}
///
@@ -560,7 +564,7 @@
///
private void _OnPropsEnter(Node2D other)
{
- if (other is ActivityObject propObject)
+ if (other is ActivityObject propObject && !propObject.CollisionWithMask(PhysicsLayer.InHand))
{
if (!_interactiveItemList.Contains(propObject))
{
diff --git a/DungeonShooting_Godot/src/game/role/enemy/Enemy.cs b/DungeonShooting_Godot/src/game/role/enemy/Enemy.cs
index 57e8bd8..72735b9 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/Enemy.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/Enemy.cs
@@ -11,36 +11,15 @@
#endregion
-using System.Collections.Generic;
using Godot;
///
/// 基础敌人
///
-[RegisterActivity(ActivityIdPrefix.Enemy + "0001", ResourcePath.prefab_role_Enemy_tscn)]
+[Tool, GlobalClass]
public partial class Enemy : Role
{
///
- /// 公共属性, 是否找到目标, 如果找到目标, 则与目标同房间的所有敌人都会知道目标的位置
- ///
- public static bool IsFindTarget { get; private set; }
-
- ///
- /// 公共属性, 在哪个区域找到的目标, 所有该区域下的敌人都会知道目标的位置
- ///
- public static HashSet FindTargetAffiliationSet { get; } = new HashSet();
-
- ///
- /// 公共属性, 找到的目标的位置, 如果目标在视野内, 则一直更新
- ///
- public static Vector2 FindTargetPosition { get; private set; }
-
- ///
- /// 记录所有存活的敌人
- ///
- private static readonly List _enemieList = new List();
-
- ///
/// 敌人身上的状态机控制器
///
public StateController StateController { get; private set; }
@@ -111,21 +90,22 @@
StateController.Register(new AiFindAmmoState());
//默认状态
- StateController.ChangeState(AiStateEnum.AiNormal);
+ StateController.ChangeStateInstant(AiStateEnum.AiNormal);
}
- public override void _EnterTree()
+ public override void EnterTree()
{
- if (!_enemieList.Contains(this))
+ base.EnterTree();
+ if (!World.Enemy_InstanceList.Contains(this))
{
- _enemieList.Add(this);
+ World.Enemy_InstanceList.Add(this);
}
}
- public override void _ExitTree()
+ public override void ExitTree()
{
- base._ExitTree();
- _enemieList.Remove(this);
+ base.ExitTree();
+ World.Enemy_InstanceList.Remove(this);
}
protected override void OnDie()
@@ -147,7 +127,7 @@
var count = Utils.RandomRangeInt(3, 6);
for (var i = 0; i < count; i++)
{
- var debris = Create(ActivityIdPrefix.Effect + "0001");
+ var debris = Create(Ids.Id_effect0001);
debris.PutDown(effPos, RoomLayerEnum.NormalLayer);
debris.InheritVelocity(this);
}
@@ -182,7 +162,7 @@
var state = StateController.CurrState;
if (state == AiStateEnum.AiNormal || state == AiStateEnum.AiProbe || state == AiStateEnum.AiLeaveFor)
{
- StateController.ChangeStateLate(AiStateEnum.AiTailAfter);
+ StateController.ChangeState(AiStateEnum.AiTailAfter);
}
}
@@ -191,10 +171,10 @@
///
public bool CheckUsableWeaponInUnclaimed()
{
- foreach (var unclaimedWeapon in Weapon.UnclaimedWeapons)
+ foreach (var unclaimedWeapon in World.Weapon_UnclaimedWeapons)
{
//判断是否能拾起武器, 条件: 相同的房间
- if (unclaimedWeapon.Affiliation == Affiliation)
+ if (unclaimedWeapon.AffiliationArea == AffiliationArea)
{
if (!unclaimedWeapon.IsTotalAmmoEmpty())
{
@@ -231,10 +211,10 @@
{
Weapon target = null;
var position = Position;
- foreach (var weapon in Weapon.UnclaimedWeapons)
+ foreach (var weapon in World.Weapon_UnclaimedWeapons)
{
//判断是否能拾起武器, 条件: 相同的房间, 或者当前房间目前没有战斗, 或者不在战斗房间
- if (weapon.Affiliation == Affiliation)
+ if (weapon.AffiliationArea == AffiliationArea)
{
//还有弹药
if (!weapon.IsTotalAmmoEmpty())
@@ -283,7 +263,7 @@
///
public bool CanChangeLeaveFor()
{
- if (!IsFindTarget)
+ if (!World.Enemy_IsFindTarget)
{
return false;
}
@@ -292,35 +272,11 @@
if (currState == AiStateEnum.AiNormal || currState == AiStateEnum.AiProbe)
{
//判断是否在同一个房间内
- return FindTargetAffiliationSet.Contains(Affiliation);
+ return World.Enemy_FindTargetAffiliationSet.Contains(AffiliationArea);
}
return false;
}
-
- ///
- /// 更新敌人视野
- ///
- public static void UpdateEnemiesView()
- {
- IsFindTarget = false;
- FindTargetAffiliationSet.Clear();
- for (var i = 0; i < _enemieList.Count; i++)
- {
- var enemy = _enemieList[i];
- var state = enemy.StateController.CurrState;
- if (state == AiStateEnum.AiFollowUp || state == AiStateEnum.AiSurround) //目标在视野内
- {
- if (!IsFindTarget)
- {
- IsFindTarget = true;
- FindTargetPosition = Player.Current.GetCenterPosition();
- FindTargetAffiliationSet.Add(Player.Current.Affiliation);
- }
- FindTargetAffiliationSet.Add(enemy.Affiliation);
- }
- }
- }
///
/// Ai触发的攻击
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiFindAmmoState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiFindAmmoState.cs
index bc00378..9cfb3c6 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiFindAmmoState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiFindAmmoState.cs
@@ -25,7 +25,7 @@
if (args.Length == 0)
{
GD.PrintErr("进入 AiStateEnum.AiFindAmmo 状态必须要把目标武器当成参数传过来");
- ChangeStateLate(prev);
+ ChangeState(prev);
return;
}
@@ -42,7 +42,7 @@
{
if (!Master.IsAllWeaponTotalAmmoEmpty()) //已经有弹药了
{
- ChangeStateLate(GetNextState());
+ ChangeState(GetNextState());
return;
}
@@ -70,12 +70,12 @@
if (_target == null) //也没有其他可用的武器了
{
- ChangeStateLate(GetNextState());
+ ChangeState(GetNextState());
}
}
else if (_target.Master == Master) //已经被自己拾起
{
- ChangeStateLate(GetNextState());
+ ChangeState(GetNextState());
}
else if (_target.Master != null) //武器已经被其他角色拾起!
{
@@ -84,7 +84,7 @@
if (_target == null) //也没有其他可用的武器了
{
- ChangeStateLate(GetNextState());
+ ChangeState(GetNextState());
}
}
else
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiFollowUpState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiFollowUpState.cs
index fd6850a..725ddcb 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiFollowUpState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiFollowUpState.cs
@@ -35,13 +35,13 @@
var targetWeapon = Master.FindTargetWeapon();
if (targetWeapon != null)
{
- ChangeStateLate(AiStateEnum.AiFindAmmo, targetWeapon);
+ ChangeState(AiStateEnum.AiFindAmmo, targetWeapon);
return;
}
else
{
//切换到随机移动状态
- ChangeStateLate(AiStateEnum.AiSurround);
+ ChangeState(AiStateEnum.AiSurround);
}
}
@@ -108,19 +108,19 @@
//距离够近, 可以切换到环绕模式
if (Master.GlobalPosition.DistanceSquaredTo(playerPos) <= Mathf.Pow(weapon.Attribute.MinDistance, 2) * 0.7f)
{
- ChangeStateLate(AiStateEnum.AiSurround);
+ ChangeState(AiStateEnum.AiSurround);
}
}
}
else
{
- ChangeStateLate(AiStateEnum.AiTailAfter);
+ ChangeState(AiStateEnum.AiTailAfter);
}
}
public override void DebugDraw()
{
- var playerPos = GameApplication.Instance.RoomManager.Player.GetCenterPosition();
+ var playerPos = Player.Current.GetCenterPosition();
Master.DrawLine(new Vector2(0, -8), Master.ToLocal(playerPos), Colors.Red);
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs
index 7823d03..8185484 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiLeaveForState.cs
@@ -16,13 +16,13 @@
public override void Enter(AiStateEnum prev, params object[] args)
{
- if (Enemy.IsFindTarget)
+ if (Master.World.Enemy_IsFindTarget)
{
- Master.NavigationAgent2D.TargetPosition = Enemy.FindTargetPosition;
+ Master.NavigationAgent2D.TargetPosition = Master.World.Enemy_FindTargetPosition;
}
else
{
- ChangeStateLate(prev);
+ ChangeState(prev);
return;
}
@@ -33,7 +33,7 @@
var targetWeapon = Master.FindTargetWeapon();
if (targetWeapon != null)
{
- ChangeStateLate(AiStateEnum.AiFindAmmo, targetWeapon);
+ ChangeState(AiStateEnum.AiFindAmmo, targetWeapon);
}
}
}
@@ -47,7 +47,7 @@
{
//每隔一段时间秒更改目标位置
_navigationUpdateTimer = _navigationInterval;
- Master.NavigationAgent2D.TargetPosition = Enemy.FindTargetPosition;
+ Master.NavigationAgent2D.TargetPosition = Master.World.Enemy_FindTargetPosition;
}
else
{
@@ -58,7 +58,7 @@
{
//计算移动
var nextPos = Master.NavigationAgent2D.GetNextPathPosition();
- Master.LookTargetPosition(Enemy.FindTargetPosition);
+ Master.LookTargetPosition(Master.World.Enemy_FindTargetPosition);
Master.AnimatedSprite.Play(AnimatorNames.Run);
Master.BasisVelocity = (nextPos - Master.GlobalPosition - Master.NavigationPoint.Position).Normalized() *
Master.MoveSpeed;
@@ -68,7 +68,7 @@
Master.BasisVelocity = Vector2.Zero;
}
- var playerPos = GameApplication.Instance.RoomManager.Player.GetCenterPosition();
+ var playerPos = Player.Current.GetCenterPosition();
//检测玩家是否在视野内, 如果在, 则切换到 AiTargetInView 状态
if (Master.IsInTailAfterViewRange(playerPos))
{
@@ -77,7 +77,7 @@
//关闭射线检测
Master.TestViewRayCastOver();
//切换成发现目标状态
- ChangeStateLate(AiStateEnum.AiFollowUp);
+ ChangeState(AiStateEnum.AiFollowUp);
return;
}
else
@@ -90,7 +90,7 @@
//移动到目标掉了, 还没发现目标
if (Master.NavigationAgent2D.IsNavigationFinished())
{
- ChangeStateLate(AiStateEnum.AiNormal);
+ ChangeState(AiStateEnum.AiNormal);
}
}
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs
index d0f9b01..299abf0 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiNormalState.cs
@@ -49,19 +49,19 @@
//其他敌人发现玩家
if (Master.CanChangeLeaveFor())
{
- ChangeStateLate(AiStateEnum.AiLeaveFor);
+ ChangeState(AiStateEnum.AiLeaveFor);
return;
}
if (_isFindPlayer) //已经找到玩家了
{
//现临时处理, 直接切换状态
- ChangeStateLate(AiStateEnum.AiTailAfter);
+ ChangeState(AiStateEnum.AiTailAfter);
}
else //没有找到玩家
{
//检测玩家
- var player = GameApplication.Instance.RoomManager.Player;
+ var player = Player.Current;
//玩家中心点坐标
var playerPos = player.GetCenterPosition();
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiProbeState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiProbeState.cs
index ddbaeb5..1015095 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiProbeState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiProbeState.cs
@@ -13,7 +13,7 @@
//其他敌人发现玩家
if (Master.CanChangeLeaveFor())
{
- ChangeStateLate(AiStateEnum.AiLeaveFor);
+ ChangeState(AiStateEnum.AiLeaveFor);
return;
}
}
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiSurroundState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiSurroundState.cs
index 64a42f6..29ce5a7 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiSurroundState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiSurroundState.cs
@@ -47,7 +47,7 @@
var targetWeapon = Master.FindTargetWeapon();
if (targetWeapon != null)
{
- ChangeStateLate(AiStateEnum.AiFindAmmo, targetWeapon);
+ ChangeState(AiStateEnum.AiFindAmmo, targetWeapon);
return;
}
}
@@ -142,7 +142,7 @@
var position = Master.GlobalPosition;
if (position.DistanceSquaredTo(playerPos) > Mathf.Pow(Master.GetWeaponRange(0.7f), 2)) //玩家离开正常射击范围
{
- ChangeStateLate(AiStateEnum.AiFollowUp);
+ ChangeState(AiStateEnum.AiFollowUp);
}
else
{
@@ -154,7 +154,7 @@
}
else //目标离开视野
{
- ChangeStateLate(AiStateEnum.AiTailAfter);
+ ChangeState(AiStateEnum.AiTailAfter);
}
}
diff --git a/DungeonShooting_Godot/src/game/role/enemy/state/AiTailAfterState.cs b/DungeonShooting_Godot/src/game/role/enemy/state/AiTailAfterState.cs
index f965f41..87d018e 100644
--- a/DungeonShooting_Godot/src/game/role/enemy/state/AiTailAfterState.cs
+++ b/DungeonShooting_Godot/src/game/role/enemy/state/AiTailAfterState.cs
@@ -35,7 +35,7 @@
var targetWeapon = Master.FindTargetWeapon();
if (targetWeapon != null)
{
- ChangeStateLate(AiStateEnum.AiFindAmmo, targetWeapon);
+ ChangeState(AiStateEnum.AiFindAmmo, targetWeapon);
}
}
}
@@ -44,7 +44,7 @@
{
//这个状态下不会有攻击事件, 所以没必要每一帧检查是否弹药耗尽
- var playerPos = GameApplication.Instance.RoomManager.Player.GetCenterPosition();
+ var playerPos = Player.Current.GetCenterPosition();
//更新玩家位置
if (_navigationUpdateTimer <= 0)
@@ -81,7 +81,7 @@
//关闭射线检测
Master.TestViewRayCastOver();
//切换成发现目标状态
- ChangeStateLate(AiStateEnum.AiFollowUp);
+ ChangeState(AiStateEnum.AiFollowUp);
return;
}
else
@@ -101,7 +101,7 @@
{
if (_viewTimer > 10) //10秒
{
- ChangeStateLate(AiStateEnum.AiNormal);
+ ChangeState(AiStateEnum.AiNormal);
}
else
{
@@ -112,7 +112,7 @@
public override void DebugDraw()
{
- var playerPos = GameApplication.Instance.RoomManager.Player.GetCenterPosition();
+ var playerPos = Player.Current.GetCenterPosition();
if (_isInViewRange)
{
Master.DrawLine(new Vector2(0, -8), Master.ToLocal(playerPos), Colors.Orange);
diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs
new file mode 100644
index 0000000..244e1e7
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs
@@ -0,0 +1,473 @@
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using Config;
+using Godot;
+
+///
+/// 地牢管理器
+///
+public partial class DungeonManager : Node2D
+{
+ ///
+ /// 起始房间
+ ///
+ public RoomInfo StartRoom => _dungeonGenerator?.StartRoom;
+
+ ///
+ /// 当前玩家所在的房间
+ ///
+ public RoomInfo ActiveRoom => Player.Current?.AffiliationArea?.RoomInfo;
+
+ ///
+ /// 当前玩家所在的区域
+ ///
+ public AffiliationArea ActiveAffiliationArea => Player.Current?.AffiliationArea;
+
+ ///
+ /// 是否在地牢里
+ ///
+ public bool IsInDungeon { get; private set; }
+
+ private DungeonConfig _config;
+ private DungeonTile _dungeonTile;
+ private AutoTileConfig _autoTileConfig;
+ private DungeonGenerator _dungeonGenerator;
+ //房间内所有静态导航网格数据
+ private List _roomStaticNavigationList;
+ private World _world;
+
+ //用于检查房间敌人的计时器
+ private int _affiliationIndex = 0;
+ private float _checkEnemyTimer = 0;
+
+
+ public DungeonManager()
+ {
+ //绑定事件
+ EventManager.AddEventListener(EventEnum.OnPlayerFirstEnterRoom, OnPlayerFirstEnterRoom);
+ EventManager.AddEventListener(EventEnum.OnPlayerEnterRoom, OnPlayerEnterRoom);
+ }
+
+ ///
+ /// 加载地牢
+ ///
+ public void LoadDungeon(DungeonConfig config, Action finish = null)
+ {
+ _config = config;
+ GameApplication.Instance.StartCoroutine(RunLoadDungeonCoroutine(finish));
+ }
+
+ ///
+ /// 退出地牢
+ ///
+ public void ExitDungeon(Action finish = null)
+ {
+ IsInDungeon = false;
+ GameApplication.Instance.StartCoroutine(RunExitDungeonCoroutine(finish));
+ }
+
+ public override void _PhysicsProcess(double delta)
+ {
+ if (IsInDungeon)
+ {
+ _checkEnemyTimer += (float)delta;
+ if (_checkEnemyTimer >= 1)
+ {
+ _checkEnemyTimer %= 1;
+ //检查房间内的敌人存活状况
+ OnCheckEnemy();
+ }
+ }
+ }
+
+ public override void _Process(double delta)
+ {
+ if (IsInDungeon)
+ {
+ UpdateEnemiesView();
+ if (GameApplication.Instance.Debug)
+ {
+ QueueRedraw();
+ }
+ }
+ }
+
+ //执行加载地牢协程
+ private IEnumerator RunLoadDungeonCoroutine(Action finish)
+ {
+ //打开 loading UI
+ UiManager.Open_Loading();
+ yield return 0;
+ //创建世界场景
+ _world = GameApplication.Instance.CreateNewWorld();
+ yield return new WaitForFixedProcess(10);
+ //生成地牢房间
+ _dungeonGenerator = new DungeonGenerator(_config);
+ _dungeonGenerator.Generate();
+ yield return 0;
+
+ //填充地牢
+ _autoTileConfig = new AutoTileConfig();
+ _dungeonTile = new DungeonTile(_world.TileRoot);
+ _dungeonTile.AutoFillRoomTile(_autoTileConfig, _dungeonGenerator.StartRoom);
+ yield return 0;
+
+ //生成寻路网格, 这一步操作只生成过道的导航
+ _dungeonTile.GenerateNavigationPolygon(GameConfig.AisleFloorMapLayer);
+ yield return 0;
+ //挂载过道导航区域
+ _dungeonTile.MountNavigationPolygon(_world.TileRoot);
+ yield return 0;
+ //过道导航区域数据
+ _roomStaticNavigationList = new List();
+ _roomStaticNavigationList.AddRange(_dungeonTile.GetPolygonData());
+ yield return 0;
+ //门导航区域数据
+ _roomStaticNavigationList.AddRange(_dungeonTile.GetConnectDoorPolygonData());
+ yield return new WaitForFixedProcess(10);
+ //初始化所有房间
+ _dungeonGenerator.EachRoom(InitRoom);
+ yield return new WaitForFixedProcess(10);
+
+ //播放bgm
+ //SoundManager.PlayMusic(ResourcePath.resource_sound_bgm_Intro_ogg, -17f);
+
+ //初始房间创建玩家标记
+ var playerBirthMark = StartRoom.ActivityMarks.FirstOrDefault(mark => mark.Type == ActivityIdPrefix.ActivityPrefixType.Player);
+ //创建玩家
+ var player = ActivityObject.Create(ActivityObject.Ids.Id_role0001);
+ if (playerBirthMark != null)
+ {
+ //player.Position = new Vector2(50, 50);
+ player.Position = playerBirthMark.Position;
+ }
+ player.Name = "Player";
+ player.PutDown(RoomLayerEnum.YSortLayer);
+ Player.SetCurrentPlayer(player);
+
+ //玩家手上添加武器
+ //player.PickUpWeapon(ActivityObject.Create(ActivityObject.Ids.Id_weapon0001));
+ // var weapon = ActivityObject.Create(ActivityObject.Ids.Id_weapon0001);
+ // weapon.PutDown(player.Position, RoomLayerEnum.NormalLayer);
+ // var weapon2 = ActivityObject.Create(ActivityObject.Ids.Id_weapon0002);
+ // weapon2.PutDown(player.Position, RoomLayerEnum.NormalLayer);
+ // var weapon3 = ActivityObject.Create(ActivityObject.Ids.Id_weapon0003);
+ // weapon3.PutDown(player.Position, RoomLayerEnum.NormalLayer);
+ // var weapon4 = ActivityObject.Create(ActivityObject.Ids.Id_weapon0004);
+ // weapon4.PutDown(player.Position, RoomLayerEnum.NormalLayer);
+
+ GameApplication.Instance.Cursor.SetGuiMode(false);
+ yield return 0;
+
+ //打开游戏中的ui
+ var roomUi = UiManager.Open_RoomUI();
+ roomUi.InitData(player);
+ //派发进入地牢事件
+ EventManager.EmitEvent(EventEnum.OnEnterDungeon);
+
+ IsInDungeon = true;
+ yield return 0;
+ //关闭 loading UI
+ UiManager.Dispose_Loading();
+ if (finish != null)
+ {
+ finish();
+ }
+ }
+
+ private IEnumerator RunExitDungeonCoroutine(Action finish)
+ {
+ //打开 loading UI
+ UiManager.Open_Loading();
+ yield return 0;
+ _world.Pause = true;
+ yield return 0;
+ _dungeonGenerator.EachRoom(DisposeRoomInfo);
+ yield return 0;
+ _dungeonTile = null;
+ _autoTileConfig = null;
+ _dungeonGenerator = null;
+ _roomStaticNavigationList.Clear();
+ _roomStaticNavigationList = null;
+
+ UiManager.Hide_RoomUI();
+ yield return new WaitForFixedProcess(10);
+ Player.SetCurrentPlayer(null);
+ _world = null;
+ GameApplication.Instance.DestroyWorld();
+ yield return new WaitForFixedProcess(10);
+ //鼠标还原
+ GameApplication.Instance.Cursor.SetGuiMode(false);
+ //派发退出地牢事件
+ EventManager.EmitEvent(EventEnum.OnExitDungeon);
+ yield return 0;
+ //关闭 loading UI
+ UiManager.Dispose_Loading();
+ if (finish != null)
+ {
+ finish();
+ }
+ }
+
+ // 初始化房间
+ private void InitRoom(RoomInfo roomInfo)
+ {
+ //挂载房间导航区域
+ MountNavFromRoomInfo(roomInfo);
+ //创建门
+ CreateDoor(roomInfo);
+ //创建房间归属区域
+ CreateRoomAisleAffiliation(roomInfo);
+ }
+
+ //挂载房间导航区域
+ private void MountNavFromRoomInfo(RoomInfo roomInfo)
+ {
+ var polygonArray = roomInfo.RoomSplit.RoomInfo.NavigationList.ToArray();
+ var polygon = new NavigationPolygon();
+ var offset = roomInfo.GetOffsetPosition();
+ for (var i = 0; i < polygonArray.Length; i++)
+ {
+ var navigationPolygonData = polygonArray[i];
+ var polygonPointArray = navigationPolygonData.ConvertPointsToVector2Array();
+ //这里的位置需要加上房间位置
+ for (var j = 0; j < polygonPointArray.Length; j++)
+ {
+ polygonPointArray[j] = polygonPointArray[j] + roomInfo.GetWorldPosition() - offset;
+ }
+ polygon.AddOutline(polygonPointArray);
+
+ var points = new List();
+ for (var j = 0; j < polygonPointArray.Length; j++)
+ {
+ points.Add(new SerializeVector2(polygonPointArray[j]));
+ }
+
+ //存入汇总列表
+ _roomStaticNavigationList.Add(new NavigationPolygonData(navigationPolygonData.Type, points));
+ }
+ polygon.MakePolygonsFromOutlines();
+ var navigationPolygon = new NavigationRegion2D();
+ navigationPolygon.Name = "NavigationRegion" + (GetChildCount() + 1);
+ navigationPolygon.NavigationPolygon = polygon;
+ _world.TileRoot.AddChild(navigationPolygon);
+ }
+
+ //创建门
+ private void CreateDoor(RoomInfo roomInfo)
+ {
+ foreach (var doorInfo in roomInfo.Doors)
+ {
+ RoomDoor door;
+ switch (doorInfo.Direction)
+ {
+ case DoorDirection.E:
+ door = ActivityObject.Create(ActivityObject.Ids.Id_other_door_e);
+ door.Position = (doorInfo.OriginPosition + new Vector2(0.5f, 2)) * GameConfig.TileCellSize;
+ door.ZIndex = GameConfig.TopMapLayer;
+ break;
+ case DoorDirection.W:
+ door = ActivityObject.Create(ActivityObject.Ids.Id_other_door_w);
+ door.Position = (doorInfo.OriginPosition + new Vector2(-0.5f, 2)) * GameConfig.TileCellSize;
+ door.ZIndex = GameConfig.TopMapLayer;
+ break;
+ case DoorDirection.S:
+ door = ActivityObject.Create(ActivityObject.Ids.Id_other_door_s);
+ door.Position = (doorInfo.OriginPosition + new Vector2(2f, 1.5f)) * GameConfig.TileCellSize;
+ door.ZIndex = GameConfig.TopMapLayer;
+ break;
+ case DoorDirection.N:
+ door = ActivityObject.Create(ActivityObject.Ids.Id_other_door_n);
+ door.Position = (doorInfo.OriginPosition + new Vector2(2f, -0.5f)) * GameConfig.TileCellSize;
+ door.ZIndex = GameConfig.MiddleMapLayer;
+ break;
+ default:
+ return;
+ }
+ doorInfo.Door = door;
+ door.Init(doorInfo);
+ door.PutDown(RoomLayerEnum.NormalLayer, false);
+ }
+ }
+
+ //创建房间归属区域
+ private void CreateRoomAisleAffiliation(RoomInfo roomInfo)
+ {
+ var affiliation = new AffiliationArea();
+ affiliation.Name = "AffiliationArea" + (_affiliationIndex++);
+ affiliation.Init(roomInfo, new Rect2(
+ roomInfo.GetWorldPosition() + new Vector2(GameConfig.TileCellSize, GameConfig.TileCellSize),
+ (roomInfo.Size - new Vector2I(2, 2)) * GameConfig.TileCellSize));
+
+ roomInfo.Affiliation = affiliation;
+ _world.AddChild(affiliation);
+ }
+
+ ///
+ /// 玩家第一次进入某个房间回调
+ ///
+ private void OnPlayerFirstEnterRoom(object o)
+ {
+ var room = (RoomInfo)o;
+ room.BeReady();
+ //如果关门了, 那么房间外的敌人就会丢失目标
+ if (room.IsSeclusion)
+ {
+ var playerAffiliationArea = Player.Current.AffiliationArea;
+ foreach (var enemy in _world.Enemy_InstanceList)
+ {
+ //不与玩家处于同一个房间
+ if (enemy.AffiliationArea != playerAffiliationArea)
+ {
+ if (enemy.StateController.CurrState != AiStateEnum.AiNormal)
+ {
+ enemy.StateController.ChangeState(AiStateEnum.AiNormal);
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ /// 玩家进入某个房间回调
+ ///
+ private void OnPlayerEnterRoom(object o)
+ {
+ }
+
+ ///
+ /// 检测当前房间敌人是否已经消灭干净, 应当每秒执行一次
+ ///
+ private void OnCheckEnemy()
+ {
+ var activeRoom = ActiveRoom;
+ if (activeRoom != null)// && //activeRoom.IsSeclusion)
+ {
+ if (activeRoom.IsSeclusion) //房间处于关上状态
+ {
+ if (activeRoom.IsCurrWaveOver()) //所有标记执行完成
+ {
+ //是否有存活的敌人
+ var flag = ActiveAffiliationArea.ExistIncludeItem(
+ activityObject => activityObject.CollisionWithMask(PhysicsLayer.Enemy)
+ );
+ //GD.Print("当前房间存活数量: " + count);
+ if (!flag)
+ {
+ activeRoom.OnClearRoom();
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ /// 更新敌人视野
+ ///
+ private void UpdateEnemiesView()
+ {
+ _world.Enemy_IsFindTarget = false;
+ _world.Enemy_FindTargetAffiliationSet.Clear();
+ for (var i = 0; i < _world.Enemy_InstanceList.Count; i++)
+ {
+ var enemy = _world.Enemy_InstanceList[i];
+ var state = enemy.StateController.CurrState;
+ if (state == AiStateEnum.AiFollowUp || state == AiStateEnum.AiSurround) //目标在视野内
+ {
+ if (!_world.Enemy_IsFindTarget)
+ {
+ _world.Enemy_IsFindTarget = true;
+ _world.Enemy_FindTargetPosition = Player.Current.GetCenterPosition();
+ _world.Enemy_FindTargetAffiliationSet.Add(Player.Current.AffiliationArea);
+ }
+ _world.Enemy_FindTargetAffiliationSet.Add(enemy.AffiliationArea);
+ }
+ }
+ }
+
+ private void DisposeRoomInfo(RoomInfo roomInfo)
+ {
+ foreach (var activityMark in roomInfo.ActivityMarks)
+ {
+ activityMark.QueueFree();
+ }
+ roomInfo.ActivityMarks.Clear();
+ }
+
+ public override void _Draw()
+ {
+ if (GameApplication.Instance.Debug)
+ {
+ if (_dungeonTile != null)
+ {
+ //绘制ai寻路区域
+ Utils.DrawNavigationPolygon(this, _roomStaticNavigationList.ToArray());
+ }
+ //绘制房间区域
+ // if (_dungeonGenerator != null)
+ // {
+ // DrawRoomInfo(StartRoom);
+ // }
+ //绘制边缘线
+
+ }
+ }
+
+ //绘制房间区域, debug 用
+ private void DrawRoomInfo(RoomInfo room)
+ {
+ var cellSize = _world.TileRoot.CellQuadrantSize;
+ var pos1 = (room.Position + room.Size / 2) * cellSize;
+
+ //绘制下一个房间
+ foreach (var nextRoom in room.Next)
+ {
+ var pos2 = (nextRoom.Position + nextRoom.Size / 2) * cellSize;
+ DrawLine(pos1, pos2, Colors.Red);
+ DrawRoomInfo(nextRoom);
+ }
+
+ DrawString(ResourceManager.DefaultFont16Px, pos1 - new Vector2I(0, 10), "Id: " + room.Id.ToString());
+ DrawString(ResourceManager.DefaultFont16Px, pos1 + new Vector2I(0, 10), "Layer: " + room.Layer.ToString());
+
+ //绘制门
+ foreach (var roomDoor in room.Doors)
+ {
+ var originPos = roomDoor.OriginPosition * cellSize;
+ switch (roomDoor.Direction)
+ {
+ case DoorDirection.E:
+ DrawLine(originPos, originPos + new Vector2(3, 0) * cellSize, Colors.Yellow);
+ DrawLine(originPos + new Vector2(0, 4) * cellSize, originPos + new Vector2(3, 4) * cellSize,
+ Colors.Yellow);
+ break;
+ case DoorDirection.W:
+ DrawLine(originPos, originPos - new Vector2(3, 0) * cellSize, Colors.Yellow);
+ DrawLine(originPos + new Vector2(0, 4) * cellSize, originPos - new Vector2(3, -4) * cellSize,
+ Colors.Yellow);
+ break;
+ case DoorDirection.S:
+ DrawLine(originPos, originPos + new Vector2(0, 3) * cellSize, Colors.Yellow);
+ DrawLine(originPos + new Vector2(4, 0) * cellSize, originPos + new Vector2(4, 3) * cellSize,
+ Colors.Yellow);
+ break;
+ case DoorDirection.N:
+ DrawLine(originPos, originPos - new Vector2(0, 3) * cellSize, Colors.Yellow);
+ DrawLine(originPos + new Vector2(4, 0) * cellSize, originPos - new Vector2(-4, 3) * cellSize,
+ Colors.Yellow);
+ break;
+ }
+
+ //绘制房间区域
+ DrawRect(new Rect2(room.Position * cellSize, room.Size * cellSize), Colors.Blue, false);
+
+ if (roomDoor.HasCross && roomDoor.RoomInfo.Id < roomDoor.ConnectRoom.Id)
+ {
+ DrawRect(new Rect2(roomDoor.Cross * cellSize, new Vector2(cellSize * 4, cellSize * 4)), Colors.Yellow, false);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/room/RoomDoor.cs b/DungeonShooting_Godot/src/game/room/RoomDoor.cs
index 634e709..86f06b9 100644
--- a/DungeonShooting_Godot/src/game/room/RoomDoor.cs
+++ b/DungeonShooting_Godot/src/game/room/RoomDoor.cs
@@ -4,7 +4,7 @@
///
/// 房间的门, 门有两种状态, 打开和关闭
///
-[RegisterActivity(ActivityIdPrefix.Other + "0001", ResourcePath.prefab_map_RoomDoor_tscn)]
+[Tool, GlobalClass]
public partial class RoomDoor : ActivityObject
{
///
@@ -18,6 +18,12 @@
public bool IsClose { get; private set; }
private RoomDoorInfo _door;
+ private bool waitDisabledCollision = false;
+
+ public override void OnInit()
+ {
+ AnimatedSprite.AnimationFinished += OnAnimationFinished;
+ }
///
/// 初始化调用
@@ -25,32 +31,8 @@
public void Init(RoomDoorInfo doorInfo)
{
_door = doorInfo;
- OpenDoor();
-
- switch (doorInfo.Direction)
- {
- case DoorDirection.E:
- AnimatedSprite.Frame = 1;
- AnimatedSprite.Position = new Vector2(0, -8);
- Collision.Position = Vector2.Zero;
- var collisionShape = (RectangleShape2D)Collision.Shape;
- collisionShape.Size = new Vector2(14, 32);
- break;
- case DoorDirection.W:
- AnimatedSprite.Frame = 1;
- AnimatedSprite.Position = new Vector2(0, -8);
- Collision.Position = Vector2.Zero;
- var collisionShape2 = (RectangleShape2D)Collision.Shape;
- collisionShape2.Size = new Vector2(14, 32);
- break;
- case DoorDirection.S:
- AnimatedSprite.Position = new Vector2(0, -8);
- break;
- case DoorDirection.N:
- ZIndex = GameConfig.MiddleMapLayer;
- AnimatedSprite.Position = new Vector2(0, -8);
- break;
- }
+ IsClose = false;
+ OpenDoorHandler();
}
///
@@ -59,14 +41,11 @@
public void OpenDoor()
{
IsClose = false;
- Visible = false;
- Collision.Disabled = true;
- if (_door.Navigation != null)
+ //Visible = false;
+ waitDisabledCollision = true;
+ if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.OpenDoor))
{
- _door.Navigation.OpenNavigationNode.Enabled = true;
- _door.Navigation.OpenNavigationNode.Visible = true;
- _door.Navigation.CloseNavigationNode.Enabled = false;
- _door.Navigation.CloseNavigationNode.Visible = false;
+ AnimatedSprite.Play(AnimatorNames.OpenDoor);
}
}
@@ -76,7 +55,7 @@
public void CloseDoor()
{
IsClose = true;
- Visible = true;
+ //Visible = true;
Collision.Disabled = false;
if (_door.Navigation != null)
{
@@ -85,5 +64,45 @@
_door.Navigation.CloseNavigationNode.Enabled = true;
_door.Navigation.CloseNavigationNode.Visible = true;
}
+
+ if (AnimatedSprite.SpriteFrames.HasAnimation(AnimatorNames.CloseDoor))
+ {
+ AnimatedSprite.Play(AnimatorNames.CloseDoor);
+ }
+ //调整门的层级
+ switch (Direction)
+ {
+ case DoorDirection.E:
+ case DoorDirection.W:
+ case DoorDirection.S:
+ ZIndex = GameConfig.TopMapLayer;
+ break;
+ case DoorDirection.N:
+ ZIndex = GameConfig.MiddleMapLayer;
+ break;
+ }
+ }
+
+ private void OnAnimationFinished()
+ {
+ if (!IsClose && waitDisabledCollision) //开门动画播放完成
+ {
+ waitDisabledCollision = false;
+ OpenDoorHandler();
+ }
+ }
+
+ private void OpenDoorHandler()
+ {
+ Collision.Disabled = true;
+ if (_door.Navigation != null)
+ {
+ _door.Navigation.OpenNavigationNode.Enabled = true;
+ _door.Navigation.OpenNavigationNode.Visible = true;
+ _door.Navigation.CloseNavigationNode.Enabled = false;
+ _door.Navigation.CloseNavigationNode.Visible = false;
+ }
+ //调整门的层级
+ ZIndex = GameConfig.FloorMapLayer;
}
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/room/RoomManager.cs b/DungeonShooting_Godot/src/game/room/RoomManager.cs
deleted file mode 100644
index daf7a79..0000000
--- a/DungeonShooting_Godot/src/game/room/RoomManager.cs
+++ /dev/null
@@ -1,358 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using Godot;
-
-///
-/// 房间管理器
-///
-public partial class RoomManager : Node2D
-{
- ///
- /// //对象根节点
- ///
- [Export] public Node2D NormalLayer;
-
- ///
- /// 对象根节点, 带y轴排序功能
- ///
- [Export] public Node2D YSortLayer;
-
- ///
- /// 地图根节点
- ///
- [Export] public TileMap TileRoot;
-
- ///
- /// 玩家对象
- ///
- public Player Player { get; private set; }
-
- ///
- /// 起始房间
- ///
- public RoomInfo StartRoom => _dungeonGenerator.StartRoom;
-
- ///
- /// 当前玩家所在的房间
- ///
- public RoomInfo ActiveRoom => Player?.Affiliation?.RoomInfo;
-
- ///
- /// 当前玩家所在的区域
- ///
- public AffiliationArea ActiveAffiliation => Player?.Affiliation;
-
- private DungeonTile _dungeonTile;
- private AutoTileConfig _autoTileConfig;
-
- private Font _font;
- private DungeonGenerator _dungeonGenerator;
-
- private int _affiliationIndex = 0;
-
- private float _checkEnemyTimer = 0;
-
- //房间内所有静态导航网格数据
- private static List _roomStaticNavigationList = new List();
-
- public override void _Ready()
- {
- TileRoot.YSortEnabled = false;
-
- _font = ResourceManager.Load(ResourcePath.resource_font_cn_font_36_tres);
-
- //绑定事件
- EventManager.AddEventListener(EventEnum.OnPlayerFirstEnterRoom, OnPlayerFirstEnterRoom);
- EventManager.AddEventListener(EventEnum.OnPlayerEnterRoom, OnPlayerEnterRoom);
-
- var nowTicks = DateTime.Now.Ticks;
- //生成地牢房间
- _dungeonGenerator = new DungeonGenerator("testGroup");
- _dungeonGenerator.Generate();
-
- //填充地牢
- _autoTileConfig = new AutoTileConfig();
- _dungeonTile = new DungeonTile(TileRoot);
- _dungeonTile.AutoFillRoomTile(_autoTileConfig, _dungeonGenerator.StartRoom);
-
- //生成寻路网格, 这一步操作只生成过道的导航
- _dungeonTile.GenerateNavigationPolygon(GameConfig.AisleFloorMapLayer);
- //挂载过道导航区域
- _dungeonTile.MountNavigationPolygon(this);
- //过道导航区域数据
- _roomStaticNavigationList.AddRange(_dungeonTile.GetPolygonData());
- //门导航区域数据
- _roomStaticNavigationList.AddRange(_dungeonTile.GetConnectDoorPolygonData());
- //初始化所有房间
- _dungeonGenerator.EachRoom(InitRoom);
-
- GD.Print("生成地牢用时: " + (DateTime.Now.Ticks - nowTicks) / 10000 + "毫秒");
-
- //播放bgm
- //SoundManager.PlayMusic(ResourcePath.resource_sound_bgm_Intro_ogg, -17f);
-
- //初始房间创建玩家标记
- var playerBirthMark = StartRoom.ActivityMarks.FirstOrDefault(mark => mark.Type == ActivityIdPrefix.ActivityPrefixType.Player);
- //创建玩家
- Player = ActivityObject.Create(ActivityIdPrefix.Role + "0001");
- if (playerBirthMark != null)
- {
- Player.Position = playerBirthMark.Position;
- }
- Player.Name = "Player";
- Player.PutDown(RoomLayerEnum.YSortLayer);
- Player.PickUpWeapon(ActivityObject.Create(ActivityIdPrefix.Weapon + "0001"));
-
- // var weapon = ActivityObject.Create(ActivityIdPrefix.Test + "0001");
- // weapon.PutDown(new Vector2(200, 200), RoomLayerEnum.NormalLayer);
- // //weapon.Altitude = 50;
-
- // for (int i = 0; i < 10; i++)
- // {
- // var enemy = ActivityObject.Create(ActivityIdPrefix.Enemy + "0001");
- // enemy.PutDown(new Vector2(100 + i * 20, 100), RoomLayerEnum.YSortLayer);
- // enemy.PickUpWeapon(ActivityObject.Create(ActivityIdPrefix.Weapon + Utils.RandomChoose("0001", "0002", "0003")));
- // }
-
- //相机跟随玩家
- GameCamera.Main.SetFollowTarget(Player);
-
- //修改鼠标指针
- var cursor = GameApplication.Instance.Cursor;
- cursor.SetGuiMode(false);
- cursor.SetMountRole(Player);
- }
-
- public override void _PhysicsProcess(double delta)
- {
- _checkEnemyTimer += (float)delta;
- if (_checkEnemyTimer >= 1)
- {
- _checkEnemyTimer %= 1;
- //检查房间内的敌人存活状况
- OnCheckEnemy();
- }
- }
-
- ///
- /// 获取指定层级根节点
- ///
- public Node2D GetRoomLayer(RoomLayerEnum layerEnum)
- {
- switch (layerEnum)
- {
- case RoomLayerEnum.NormalLayer:
- return NormalLayer;
- case RoomLayerEnum.YSortLayer:
- return YSortLayer;
- }
-
- return null;
- }
-
- public override void _Process(double delta)
- {
- Enemy.UpdateEnemiesView();
- if (GameApplication.Instance.Debug)
- {
- QueueRedraw();
- }
- }
-
- public override void _Draw()
- {
- if (GameApplication.Instance.Debug)
- {
- if (_dungeonTile != null)
- {
- //绘制ai寻路区域
- Utils.DrawNavigationPolygon(this, _roomStaticNavigationList.ToArray());
- }
- //绘制房间区域
- //DrawRoomInfo(_generateDungeon.StartRoom);
- }
- }
-
- // 初始化房间
- private void InitRoom(RoomInfo roomInfo)
- {
- //挂载房间导航区域
- MountNavFromRoomInfo(roomInfo);
- //创建门
- CreateDoor(roomInfo);
-
- //创建房间归属区域
- CreateRoomAisleAffiliation(roomInfo);
- }
-
- //挂载房间导航区域
- private void MountNavFromRoomInfo(RoomInfo roomInfo)
- {
- var polygonArray = roomInfo.RoomSplit.RoomInfo.NavigationList.ToArray();
- var polygon = new NavigationPolygon();
- var offset = roomInfo.GetOffsetPosition();
- for (var i = 0; i < polygonArray.Length; i++)
- {
- var navigationPolygonData = polygonArray[i];
- var polygonPointArray = navigationPolygonData.ConvertPointsToVector2Array();
- //这里的位置需要加上房间位置
- for (var j = 0; j < polygonPointArray.Length; j++)
- {
- polygonPointArray[j] = polygonPointArray[j] + roomInfo.GetWorldPosition() - offset;
- }
- polygon.AddOutline(polygonPointArray);
-
- var points = new List();
- for (var j = 0; j < polygonPointArray.Length; j++)
- {
- points.Add(new SerializeVector2(polygonPointArray[j]));
- }
-
- //存入汇总列表
- _roomStaticNavigationList.Add(new NavigationPolygonData(navigationPolygonData.Type, points));
- }
- polygon.MakePolygonsFromOutlines();
- var navigationPolygon = new NavigationRegion2D();
- navigationPolygon.Name = "NavigationRegion" + (GetChildCount() + 1);
- navigationPolygon.NavigationPolygon = polygon;
- AddChild(navigationPolygon);
- }
-
- //创建门
- private void CreateDoor(RoomInfo roomInfo)
- {
- foreach (var doorInfo in roomInfo.Doors)
- {
- var door = ActivityObject.Create(ActivityIdPrefix.Other + "0001");
- doorInfo.Door = door;
- Vector2 offset;
- switch (doorInfo.Direction)
- {
- case DoorDirection.E:
- offset = new Vector2(0.5f, 2);
- break;
- case DoorDirection.W:
- offset = new Vector2(-0.5f, 2);
- break;
- case DoorDirection.S:
- offset = new Vector2(2f, 1.5f);
- break;
- case DoorDirection.N:
- offset = new Vector2(2f, -0.5f);
- break;
- default: offset = new Vector2();
- break;
- }
- door.Position = (doorInfo.OriginPosition + offset) * GameConfig.TileCellSize;
- door.Init(doorInfo);
- door.PutDown(RoomLayerEnum.NormalLayer, false);
- }
- }
-
- //创建房间归属区域
- private void CreateRoomAisleAffiliation(RoomInfo roomInfo)
- {
- var affiliation = new AffiliationArea();
- affiliation.Name = "AffiliationArea" + (_affiliationIndex++);
- affiliation.Init(roomInfo, new Rect2(
- roomInfo.GetWorldPosition() + new Vector2(GameConfig.TileCellSize, GameConfig.TileCellSize),
- (roomInfo.Size - new Vector2I(2, 2)) * GameConfig.TileCellSize));
-
- roomInfo.Affiliation = affiliation;
- TileRoot.AddChild(affiliation);
- }
-
- ///
- /// 玩家第一次进入某个房间回调
- ///
- private void OnPlayerFirstEnterRoom(object o)
- {
- var room = (RoomInfo)o;
- room.BeReady();
- }
-
- ///
- /// 玩家进入某个房间回调
- ///
- private void OnPlayerEnterRoom(object o)
- {
- }
-
- ///
- /// 检测当前房间敌人是否已经消灭干净, 应当每秒执行一次
- ///
- private void OnCheckEnemy()
- {
- var activeRoom = ActiveRoom;
- if (activeRoom != null)// && //activeRoom.IsSeclusion)
- {
- if (activeRoom.IsCurrWaveOver()) //所有标记执行完成
- {
- //存活敌人数量
- var count = ActiveAffiliation.FindIncludeItemsCount(
- activityObject => activityObject.CollisionWithMask(PhysicsLayer.Enemy)
- );
- GD.Print("当前房间存活数量: " + count);
- if (count == 0)
- {
- activeRoom.OnClearRoom();
- }
- }
- }
- }
-
- //绘制房间区域, debug 用
- private void DrawRoomInfo(RoomInfo room)
- {
- var cellSize = TileRoot.CellQuadrantSize;
- var pos1 = (room.Position + room.Size / 2) * cellSize;
-
- //绘制下一个房间
- foreach (var nextRoom in room.Next)
- {
- var pos2 = (nextRoom.Position + nextRoom.Size / 2) * cellSize;
- DrawLine(pos1, pos2, Colors.Red);
- DrawRoomInfo(nextRoom);
- }
-
- DrawString(_font, pos1, room.Id.ToString());
-
- //绘制门
- foreach (var roomDoor in room.Doors)
- {
- var originPos = roomDoor.OriginPosition * cellSize;
- switch (roomDoor.Direction)
- {
- case DoorDirection.E:
- DrawLine(originPos, originPos + new Vector2(3, 0) * cellSize, Colors.Yellow);
- DrawLine(originPos + new Vector2(0, 4) * cellSize, originPos + new Vector2(3, 4) * cellSize,
- Colors.Yellow);
- break;
- case DoorDirection.W:
- DrawLine(originPos, originPos - new Vector2(3, 0) * cellSize, Colors.Yellow);
- DrawLine(originPos + new Vector2(0, 4) * cellSize, originPos - new Vector2(3, -4) * cellSize,
- Colors.Yellow);
- break;
- case DoorDirection.S:
- DrawLine(originPos, originPos + new Vector2(0, 3) * cellSize, Colors.Yellow);
- DrawLine(originPos + new Vector2(4, 0) * cellSize, originPos + new Vector2(4, 3) * cellSize,
- Colors.Yellow);
- break;
- case DoorDirection.N:
- DrawLine(originPos, originPos - new Vector2(0, 3) * cellSize, Colors.Yellow);
- DrawLine(originPos + new Vector2(4, 0) * cellSize, originPos - new Vector2(-4, 3) * cellSize,
- Colors.Yellow);
- break;
- }
-
- //绘制房间区域
- DrawRect(new Rect2(room.Position * cellSize, room.Size * cellSize), Colors.Blue, false);
-
- if (roomDoor.HasCross && roomDoor.RoomInfo.Id < roomDoor.ConnectRoom.Id)
- {
- DrawRect(new Rect2(roomDoor.Cross * cellSize, new Vector2(cellSize * 4, cellSize * 4)), Colors.Yellow, false);
- }
- }
- }
-}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/room/SceneManager.cs b/DungeonShooting_Godot/src/game/room/SceneManager.cs
new file mode 100644
index 0000000..9ebf743
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/room/SceneManager.cs
@@ -0,0 +1,19 @@
+
+using Godot;
+
+///
+/// 场景管理器
+///
+public static class SceneManager
+{
+
+ ///
+ /// 加载场景
+ ///
+ /// 场景路径
+ public static void LoadScene(string path)
+ {
+ //var packedScene = ResourceManager.Load(ResourcePath.scene_Room_tscn).Instantiate();
+ //SceneRoot.AddChild(RoomManager);
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/room/World.cs b/DungeonShooting_Godot/src/game/room/World.cs
new file mode 100644
index 0000000..cb6810d
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/room/World.cs
@@ -0,0 +1,95 @@
+using System.Collections.Generic;
+using Godot;
+
+///
+/// 游戏世界
+///
+public partial class World : Node2D
+{
+ ///
+ /// //对象根节点
+ ///
+ [Export] public Node2D NormalLayer;
+
+ ///
+ /// 对象根节点, 带y轴排序功能
+ ///
+ [Export] public Node2D YSortLayer;
+
+ ///
+ /// 地图根节点
+ ///
+ [Export] public TileMap TileRoot;
+
+ ///
+ /// 是否暂停
+ ///
+ public bool Pause
+ {
+ get => _pause;
+ set
+ {
+ if (_pause != value)
+ {
+ _pause = value;
+ if (value)
+ {
+ ProcessMode = ProcessModeEnum.WhenPaused;
+ }
+ else
+ {
+ ProcessMode = ProcessModeEnum.Inherit;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 所有被扔在地上的武器
+ ///
+ public HashSet Weapon_UnclaimedWeapons { get; } = new HashSet();
+
+ ///
+ /// 记录所有存活的敌人
+ ///
+ public List Enemy_InstanceList { get; } = new List();
+
+ ///
+ /// 公共属性, 敌人是否找到目标, 如果找到目标, 则与目标同房间的所有敌人都会知道目标的位置
+ ///
+ public bool Enemy_IsFindTarget { get; set; }
+
+ ///
+ /// 公共属性, 敌人在哪个区域找到的目标, 所有该区域下的敌人都会知道目标的位置
+ ///
+ public HashSet Enemy_FindTargetAffiliationSet { get; } = new HashSet();
+
+ ///
+ /// 公共属性, 敌人找到的目标的位置, 如果目标在视野内, 则一直更新
+ ///
+ public Vector2 Enemy_FindTargetPosition { get; set; }
+
+ private bool _pause = false;
+
+ public override void _Ready()
+ {
+ TileRoot.YSortEnabled = false;
+ }
+
+ ///
+ /// 获取指定层级根节点
+ ///
+ public Node2D GetRoomLayer(RoomLayerEnum layerEnum)
+ {
+ switch (layerEnum)
+ {
+ case RoomLayerEnum.NormalLayer:
+ return NormalLayer;
+ case RoomLayerEnum.YSortLayer:
+ return YSortLayer;
+ }
+
+ return null;
+ }
+
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/ui/editorTools/EditorTools.cs b/DungeonShooting_Godot/src/game/ui/editorTools/EditorTools.cs
index a33e0f6..99124ab 100644
--- a/DungeonShooting_Godot/src/game/ui/editorTools/EditorTools.cs
+++ b/DungeonShooting_Godot/src/game/ui/editorTools/EditorTools.cs
@@ -500,6 +500,59 @@
}
///
+ /// 类型: , 路径: EditorTools.ScrollContainer.MarginContainer.VBoxContainer.HBoxContainer7.Label
+ ///
+ public class UiNode6_Label : IUiNode
+ {
+ public UiNode6_Label(Godot.Label node) : base(node) { }
+ public override UiNode6_Label Clone() => new ((Godot.Label)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: EditorTools.ScrollContainer.MarginContainer.VBoxContainer.HBoxContainer7.Button
+ ///
+ public class UiNode6_Button : IUiNode
+ {
+ public UiNode6_Button(Godot.Button node) : base(node) { }
+ public override UiNode6_Button Clone() => new ((Godot.Button)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: EditorTools.ScrollContainer.MarginContainer.VBoxContainer.HBoxContainer7
+ ///
+ public class UiNode_HBoxContainer7 : IUiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorTools.ScrollContainer.MarginContainer.VBoxContainer.Label
+ ///
+ public UiNode6_Label L_Label
+ {
+ get
+ {
+ if (_L_Label == null) _L_Label = new UiNode6_Label(Instance.GetNodeOrNull("Label"));
+ return _L_Label;
+ }
+ }
+ private UiNode6_Label _L_Label;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorTools.ScrollContainer.MarginContainer.VBoxContainer.Button
+ ///
+ public UiNode6_Button L_Button
+ {
+ get
+ {
+ if (_L_Button == null) _L_Button = new UiNode6_Button(Instance.GetNodeOrNull("Button"));
+ return _L_Button;
+ }
+ }
+ private UiNode6_Button _L_Button;
+
+ public UiNode_HBoxContainer7(Godot.HBoxContainer node) : base(node) { }
+ public override UiNode_HBoxContainer7 Clone() => new ((Godot.HBoxContainer)Instance.Duplicate());
+ }
+
+ ///
/// 类型: , 路径: EditorTools.ScrollContainer.MarginContainer.VBoxContainer
///
public class UiNode_VBoxContainer : IUiNode
@@ -582,6 +635,19 @@
}
private UiNode_HBoxContainer2 _L_HBoxContainer2;
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: EditorTools.ScrollContainer.MarginContainer.HBoxContainer7
+ ///
+ public UiNode_HBoxContainer7 L_HBoxContainer7
+ {
+ get
+ {
+ if (_L_HBoxContainer7 == null) _L_HBoxContainer7 = new UiNode_HBoxContainer7(Instance.GetNodeOrNull("HBoxContainer7"));
+ return _L_HBoxContainer7;
+ }
+ }
+ private UiNode_HBoxContainer7 _L_HBoxContainer7;
+
public UiNode_VBoxContainer(Godot.VBoxContainer node) : base(node) { }
public override UiNode_VBoxContainer Clone() => new ((Godot.VBoxContainer)Instance.Duplicate());
}
diff --git a/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs b/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs
index 5cf3487..0589080 100644
--- a/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/editorTools/EditorToolsPanel.cs
@@ -54,6 +54,8 @@
container.L_HBoxContainer5.L_Button.Instance.Pressed += GenerateUiManagerMethods;
//创建地牢房间
container.L_HBoxContainer6.L_Button.Instance.Pressed += GenerateDungeonRoom;
+ //导出excel表
+ container.L_HBoxContainer7.L_Button.Instance.Pressed += ExportExcel;
}
public override void OnHideUi()
@@ -73,6 +75,7 @@
container.L_HBoxContainer3.L_Button.Instance.Pressed -= OnCreateUI;
container.L_HBoxContainer5.L_Button.Instance.Pressed -= GenerateUiManagerMethods;
container.L_HBoxContainer6.L_Button.Instance.Pressed -= GenerateDungeonRoom;
+ container.L_HBoxContainer7.L_Button.Instance.Pressed -= ExportExcel;
}
public override void Process(float delta)
@@ -381,4 +384,37 @@
}
});
}
+
+ ///
+ /// 导出excel表
+ ///
+ private void ExportExcel()
+ {
+ ExcelGenerator.ExportExcel();
+ ShowTips("提示", "已启动导表程序, 注意查看控制台信息!");
+ }
+
+ ///
+ /// 在编辑器中打开一个提示窗口
+ ///
+ public static void ShowTipsInEditor(string title, string message, Action onClose)
+ {
+ var editorToolsInstance = UiManager.Get_EditorTools_Instance();
+ if (editorToolsInstance.Length > 0)
+ {
+ editorToolsInstance[0].ShowTips(title, message, onClose);
+ }
+ }
+
+ ///
+ /// 在编辑器中打开一个询问窗口
+ ///
+ public static void ShowConfirmInEditor(string title, string message, Action onClose = null)
+ {
+ var editorToolsInstance = UiManager.Get_EditorTools_Instance();
+ if (editorToolsInstance.Length > 0)
+ {
+ editorToolsInstance[0].ShowConfirm(title, message, onClose);
+ }
+ }
}
diff --git a/DungeonShooting_Godot/src/game/ui/loading/Loading.cs b/DungeonShooting_Godot/src/game/ui/loading/Loading.cs
new file mode 100644
index 0000000..22bfc38
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/loading/Loading.cs
@@ -0,0 +1,57 @@
+namespace UI.Loading;
+
+///
+/// Ui代码, 该类是根据ui场景自动生成的, 请不要手动编辑该类, 以免造成代码丢失
+///
+public abstract partial class Loading : UiBase
+{
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Loading.ColorRect
+ ///
+ public UiNode_ColorRect L_ColorRect
+ {
+ get
+ {
+ if (_L_ColorRect == null) _L_ColorRect = new UiNode_ColorRect(GetNodeOrNull("ColorRect"));
+ return _L_ColorRect;
+ }
+ }
+ private UiNode_ColorRect _L_ColorRect;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Loading.Label
+ ///
+ public UiNode_Label L_Label
+ {
+ get
+ {
+ if (_L_Label == null) _L_Label = new UiNode_Label(GetNodeOrNull("Label"));
+ return _L_Label;
+ }
+ }
+ private UiNode_Label _L_Label;
+
+
+ public Loading() : base(nameof(Loading))
+ {
+ }
+
+ ///
+ /// 类型: , 路径: Loading.ColorRect
+ ///
+ public class UiNode_ColorRect : IUiNode
+ {
+ public UiNode_ColorRect(Godot.ColorRect node) : base(node) { }
+ public override UiNode_ColorRect Clone() => new ((Godot.ColorRect)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Loading.Label
+ ///
+ public class UiNode_Label : IUiNode
+ {
+ public UiNode_Label(Godot.Label node) : base(node) { }
+ public override UiNode_Label Clone() => new ((Godot.Label)Instance.Duplicate());
+ }
+
+}
diff --git a/DungeonShooting_Godot/src/game/ui/loading/LoadingPanel.cs b/DungeonShooting_Godot/src/game/ui/loading/LoadingPanel.cs
new file mode 100644
index 0000000..bb317f7
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/loading/LoadingPanel.cs
@@ -0,0 +1,18 @@
+using Godot;
+
+namespace UI.Loading;
+
+public partial class LoadingPanel : Loading
+{
+
+ public override void OnShowUi()
+ {
+
+ }
+
+ public override void OnHideUi()
+ {
+
+ }
+
+}
diff --git a/DungeonShooting_Godot/src/game/ui/main/Main.cs b/DungeonShooting_Godot/src/game/ui/main/Main.cs
new file mode 100644
index 0000000..0c77b81
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/main/Main.cs
@@ -0,0 +1,145 @@
+namespace UI.Main;
+
+///
+/// Ui代码, 该类是根据ui场景自动生成的, 请不要手动编辑该类, 以免造成代码丢失
+///
+public abstract partial class Main : UiBase
+{
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Main.Title
+ ///
+ public UiNode_Title L_Title
+ {
+ get
+ {
+ if (_L_Title == null) _L_Title = new UiNode_Title(GetNodeOrNull("Title"));
+ return _L_Title;
+ }
+ }
+ private UiNode_Title _L_Title;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Main.ButtonList
+ ///
+ public UiNode_ButtonList L_ButtonList
+ {
+ get
+ {
+ if (_L_ButtonList == null) _L_ButtonList = new UiNode_ButtonList(GetNodeOrNull("ButtonList"));
+ return _L_ButtonList;
+ }
+ }
+ private UiNode_ButtonList _L_ButtonList;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Main.Version
+ ///
+ public UiNode_Version L_Version
+ {
+ get
+ {
+ if (_L_Version == null) _L_Version = new UiNode_Version(GetNodeOrNull("Version"));
+ return _L_Version;
+ }
+ }
+ private UiNode_Version _L_Version;
+
+
+ public Main() : base(nameof(Main))
+ {
+ }
+
+ ///
+ /// 类型: , 路径: Main.Title
+ ///
+ public class UiNode_Title : IUiNode
+ {
+ public UiNode_Title(Godot.Label node) : base(node) { }
+ public override UiNode_Title Clone() => new ((Godot.Label)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Main.ButtonList.Start
+ ///
+ public class UiNode_Start : IUiNode
+ {
+ public UiNode_Start(Godot.Button node) : base(node) { }
+ public override UiNode_Start Clone() => new ((Godot.Button)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Main.ButtonList.Setting
+ ///
+ public class UiNode_Setting : IUiNode
+ {
+ public UiNode_Setting(Godot.Button node) : base(node) { }
+ public override UiNode_Setting Clone() => new ((Godot.Button)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Main.ButtonList.Exit
+ ///
+ public class UiNode_Exit : IUiNode
+ {
+ public UiNode_Exit(Godot.Button node) : base(node) { }
+ public override UiNode_Exit Clone() => new ((Godot.Button)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Main.ButtonList
+ ///
+ public class UiNode_ButtonList : IUiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Main.Start
+ ///
+ public UiNode_Start L_Start
+ {
+ get
+ {
+ if (_L_Start == null) _L_Start = new UiNode_Start(Instance.GetNodeOrNull("Start"));
+ return _L_Start;
+ }
+ }
+ private UiNode_Start _L_Start;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Main.Setting
+ ///
+ public UiNode_Setting L_Setting
+ {
+ get
+ {
+ if (_L_Setting == null) _L_Setting = new UiNode_Setting(Instance.GetNodeOrNull("Setting"));
+ return _L_Setting;
+ }
+ }
+ private UiNode_Setting _L_Setting;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Main.Exit
+ ///
+ public UiNode_Exit L_Exit
+ {
+ get
+ {
+ if (_L_Exit == null) _L_Exit = new UiNode_Exit(Instance.GetNodeOrNull("Exit"));
+ return _L_Exit;
+ }
+ }
+ private UiNode_Exit _L_Exit;
+
+ public UiNode_ButtonList(Godot.VBoxContainer node) : base(node) { }
+ public override UiNode_ButtonList Clone() => new ((Godot.VBoxContainer)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Main.Version
+ ///
+ public class UiNode_Version : IUiNode
+ {
+ public UiNode_Version(Godot.Label node) : base(node) { }
+ public override UiNode_Version Clone() => new ((Godot.Label)Instance.Duplicate());
+ }
+
+}
diff --git a/DungeonShooting_Godot/src/game/ui/main/MainPanel.cs b/DungeonShooting_Godot/src/game/ui/main/MainPanel.cs
new file mode 100644
index 0000000..0c0b36b
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/main/MainPanel.cs
@@ -0,0 +1,33 @@
+using Godot;
+
+namespace UI.Main;
+
+public partial class MainPanel : Main
+{
+
+ public override void OnShowUi()
+ {
+ L_ButtonList.L_Start.Instance.Pressed += OnStartGameClick;
+ L_ButtonList.L_Exit.Instance.Pressed += OnExitClick;
+ }
+
+ public override void OnHideUi()
+ {
+ L_ButtonList.L_Start.Instance.Pressed -= OnStartGameClick;
+ L_ButtonList.L_Exit.Instance.Pressed -= OnExitClick;
+ }
+
+
+ //点击开始游戏
+ private void OnStartGameClick()
+ {
+ GameApplication.Instance.DungeonManager.LoadDungeon(GameApplication.Instance.DungeonConfig);
+ HideUi();
+ }
+
+ //退出游戏
+ private void OnExitClick()
+ {
+ GetTree().Quit();
+ }
+}
diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/GunBar.cs b/DungeonShooting_Godot/src/game/ui/roomUI/GunBar.cs
index d20845b..7484999 100644
--- a/DungeonShooting_Godot/src/game/ui/roomUI/GunBar.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomUI/GunBar.cs
@@ -5,7 +5,6 @@
public class GunBar
{
private RoomUI.UiNode_GunBar _gunBar;
- private EventBinder _binder;
private int _prevAmmo = -1;
private int _prevResidue = -1;
@@ -17,12 +16,10 @@
public void OnShow()
{
- _binder = EventManager.AddEventListener(EventEnum.OnPlayerRefreshWeaponTexture, OnPlayerRefreshWeaponTexture);
}
public void OnHide()
{
- _binder.RemoveEventListener();
}
public void Process(float delta)
@@ -30,8 +27,13 @@
var weapon = Player.Current?.Holster.ActiveWeapon;
if (weapon != null)
{
+ SetWeaponTexture(weapon.GetCurrentTexture());
SetWeaponAmmunition(weapon.CurrAmmo, weapon.ResidueAmmo);
}
+ else
+ {
+ SetWeaponTexture(null);
+ }
}
///
@@ -67,16 +69,4 @@
_prevResidue = total;
}
}
-
- private void OnPlayerRefreshWeaponTexture(object o)
- {
- if (o == null)
- {
- SetWeaponTexture(null);
- }
- else
- {
- SetWeaponTexture((Texture2D)o);
- }
- }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/ReloadBar.cs b/DungeonShooting_Godot/src/game/ui/roomUI/ReloadBar.cs
index 5cbaf58..1292394 100644
--- a/DungeonShooting_Godot/src/game/ui/roomUI/ReloadBar.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomUI/ReloadBar.cs
@@ -58,7 +58,7 @@
var player = Player.Current;
if (player.Holster.ActiveWeapon != null && player.Holster.ActiveWeapon.Reloading)
{
- ShowBar(player.GlobalPosition, 1 - player.Holster.ActiveWeapon.ReloadProgress);
+ ShowBar(player.GlobalPosition, player.Holster.ActiveWeapon.ReloadProgress);
}
else
{
diff --git a/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs b/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs
index cbf1e66..795c3e7 100644
--- a/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs
+++ b/DungeonShooting_Godot/src/game/ui/roomUI/RoomUIPanel.cs
@@ -38,6 +38,14 @@
_gunBar.OnHide();
}
+ public void InitData(Player player)
+ {
+ _healthBar.SetMaxHp(player.MaxHp);
+ _healthBar.SetHp(player.Hp);
+ _healthBar.SetMaxShield(player.MaxShield);
+ _healthBar.SetShield(player.Shield);
+ }
+
public override void Process(float delta)
{
_gunBar.Process(delta);
diff --git a/DungeonShooting_Godot/src/game/ui/settlement/Settlement.cs b/DungeonShooting_Godot/src/game/ui/settlement/Settlement.cs
new file mode 100644
index 0000000..e61f5ca
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/settlement/Settlement.cs
@@ -0,0 +1,123 @@
+namespace UI.Settlement;
+
+///
+/// Ui代码, 该类是根据ui场景自动生成的, 请不要手动编辑该类, 以免造成代码丢失
+///
+public abstract partial class Settlement : UiBase
+{
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Settlement.Bg
+ ///
+ public UiNode_Bg L_Bg
+ {
+ get
+ {
+ if (_L_Bg == null) _L_Bg = new UiNode_Bg(GetNodeOrNull("Bg"));
+ return _L_Bg;
+ }
+ }
+ private UiNode_Bg _L_Bg;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Settlement.Title
+ ///
+ public UiNode_Title L_Title
+ {
+ get
+ {
+ if (_L_Title == null) _L_Title = new UiNode_Title(GetNodeOrNull("Title"));
+ return _L_Title;
+ }
+ }
+ private UiNode_Title _L_Title;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Settlement.ButtonList
+ ///
+ public UiNode_ButtonList L_ButtonList
+ {
+ get
+ {
+ if (_L_ButtonList == null) _L_ButtonList = new UiNode_ButtonList(GetNodeOrNull("ButtonList"));
+ return _L_ButtonList;
+ }
+ }
+ private UiNode_ButtonList _L_ButtonList;
+
+
+ public Settlement() : base(nameof(Settlement))
+ {
+ }
+
+ ///
+ /// 类型: , 路径: Settlement.Bg
+ ///
+ public class UiNode_Bg : IUiNode
+ {
+ public UiNode_Bg(Godot.ColorRect node) : base(node) { }
+ public override UiNode_Bg Clone() => new ((Godot.ColorRect)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Settlement.Title
+ ///
+ public class UiNode_Title : IUiNode
+ {
+ public UiNode_Title(Godot.Label node) : base(node) { }
+ public override UiNode_Title Clone() => new ((Godot.Label)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Settlement.ButtonList.Restart
+ ///
+ public class UiNode_Restart : IUiNode
+ {
+ public UiNode_Restart(Godot.Button node) : base(node) { }
+ public override UiNode_Restart Clone() => new ((Godot.Button)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Settlement.ButtonList.ToMenu
+ ///
+ public class UiNode_ToMenu : IUiNode
+ {
+ public UiNode_ToMenu(Godot.Button node) : base(node) { }
+ public override UiNode_ToMenu Clone() => new ((Godot.Button)Instance.Duplicate());
+ }
+
+ ///
+ /// 类型: , 路径: Settlement.ButtonList
+ ///
+ public class UiNode_ButtonList : IUiNode
+ {
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Settlement.Restart
+ ///
+ public UiNode_Restart L_Restart
+ {
+ get
+ {
+ if (_L_Restart == null) _L_Restart = new UiNode_Restart(Instance.GetNodeOrNull("Restart"));
+ return _L_Restart;
+ }
+ }
+ private UiNode_Restart _L_Restart;
+
+ ///
+ /// 使用 Instance 属性获取当前节点实例对象, 节点类型: , 节点路径: Settlement.ToMenu
+ ///
+ public UiNode_ToMenu L_ToMenu
+ {
+ get
+ {
+ if (_L_ToMenu == null) _L_ToMenu = new UiNode_ToMenu(Instance.GetNodeOrNull("ToMenu"));
+ return _L_ToMenu;
+ }
+ }
+ private UiNode_ToMenu _L_ToMenu;
+
+ public UiNode_ButtonList(Godot.VBoxContainer node) : base(node) { }
+ public override UiNode_ButtonList Clone() => new ((Godot.VBoxContainer)Instance.Duplicate());
+ }
+
+}
diff --git a/DungeonShooting_Godot/src/game/ui/settlement/SettlementPanel.cs b/DungeonShooting_Godot/src/game/ui/settlement/SettlementPanel.cs
new file mode 100644
index 0000000..33ffc6d
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/ui/settlement/SettlementPanel.cs
@@ -0,0 +1,39 @@
+using Godot;
+
+namespace UI.Settlement;
+
+public partial class SettlementPanel : Settlement
+{
+
+ public override void OnShowUi()
+ {
+ L_ButtonList.L_Restart.Instance.Pressed += OnRestartClick;
+ L_ButtonList.L_ToMenu.Instance.Pressed += OnToMenuClick;
+ }
+
+ public override void OnHideUi()
+ {
+ L_ButtonList.L_Restart.Instance.Pressed -= OnRestartClick;
+ L_ButtonList.L_ToMenu.Instance.Pressed -= OnToMenuClick;
+ }
+
+ private void OnRestartClick()
+ {
+ //GD.Print("重新开始还没做...");
+ HideUi();
+ GameApplication.Instance.DungeonManager.ExitDungeon(() =>
+ {
+ GameApplication.Instance.DungeonManager.LoadDungeon(GameApplication.Instance.DungeonConfig);
+ });
+ }
+
+ private void OnToMenuClick()
+ {
+ HideUi();
+ GameApplication.Instance.DungeonManager.ExitDungeon(() =>
+ {
+ UiManager.Open_Main();
+ });
+ }
+
+}
diff --git a/DungeonShooting_Godot/src/test/TestActivity.cs b/DungeonShooting_Godot/src/test/TestActivity.cs
index ef47a9e..f541b73 100644
--- a/DungeonShooting_Godot/src/test/TestActivity.cs
+++ b/DungeonShooting_Godot/src/test/TestActivity.cs
@@ -1,6 +1,5 @@
using Godot;
-[RegisterActivity(ActivityIdPrefix.Test + "0001", ResourcePath.prefab_test_TestActivity_tscn)]
public partial class TestActivity : ActivityObject
{
public override void OnInit()
diff --git a/DungeonShooting_Godot/src/test/TestReadExcel.cs b/DungeonShooting_Godot/src/test/TestReadExcel.cs
new file mode 100644
index 0000000..eee0656
--- /dev/null
+++ b/DungeonShooting_Godot/src/test/TestReadExcel.cs
@@ -0,0 +1,50 @@
+using Godot;
+using System;
+using System.IO;
+// using NPOI.SS.UserModel;
+// using NPOI.XSSF.UserModel;
+
+public partial class TestReadExcel : Node2D
+{
+ public override void _Ready()
+ {
+ // string sourceFile = @"excel/Weapon.xlsx";
+ //
+ // IWorkbook workbook = new XSSFWorkbook(sourceFile);
+ // ISheet sheet1 = workbook.GetSheet("Sheet1");
+ //
+ // int columnCount = -1;
+ // foreach (IRow row in sheet1)
+ // {
+ // foreach (var cell in row)
+ // {
+ // if (columnCount >= 0 && cell.ColumnIndex >= columnCount)
+ // {
+ // break;
+ // }
+ // var value = cell.StringCellValue;
+ // if (string.IsNullOrEmpty(value))
+ // {
+ // if (columnCount < 0)
+ // {
+ // columnCount = cell.ColumnIndex;
+ // break;
+ // }
+ // else if (cell.ColumnIndex == 0)
+ // {
+ // break;
+ // }
+ // }
+ // GD.Print("row: " + row.RowNum + " , Column: " + cell.ColumnIndex + ", value: " + cell.StringCellValue);
+ // }
+ // }
+ // workbook.Close();
+ // sheet1.CreateRow(0).CreateCell(0).SetCellValue(1);
+ // sheet1.CreateRow(1).CreateCell(0).SetCellValue(2);
+ // sheet1.CreateRow(2).CreateCell(0).SetCellValue(3);
+ //
+ // FileStream fs = new FileStream(targetFile, FileMode.Create);
+ // workbook.Write(fs, true);
+ // workbook.Close();
+ }
+}