diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn
index 0942b19..e13a152 100644
--- a/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0002.tscn
@@ -9,12 +9,20 @@
shader = ExtResource("2_8nvny")
shader_parameter/blend = Color(0, 0, 0, 0.470588)
shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
size = Vector2(19.5, 8.75)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn
index 18e0dd4..6e9552e 100644
--- a/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0003.tscn
@@ -4,18 +4,25 @@
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_4yjnk"]
[ext_resource type="SpriteFrames" uid="uid://c7dt1uwdybn5" path="res://resource/spriteFrames/weapon/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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
size = Vector2(14, 8)
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn
index dde6dec..fde40cb 100644
--- a/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0004.tscn
@@ -6,18 +6,25 @@
[ext_resource type="SpriteFrames" uid="uid://k2tktysa7j86" path="res://resource/spriteFrames/weapon/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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[node name="Weapon0004" node_paths=PackedStringArray("FirePoint", "ShellPoint", "GripPoint", "AnimationPlayer", "ShadowSprite", "AnimatedSprite", "Collision") instance=ExtResource("1_kg172")]
script = ExtResource("2_v1wer")
diff --git a/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn b/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn
index f9f1911..506fd5c 100644
--- a/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/Weapon0005.tscn
@@ -4,18 +4,25 @@
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="1_466gw"]
[ext_resource type="SpriteFrames" uid="uid://djdvlmqsn8bie" path="res://resource/spriteFrames/weapon/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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
size = Vector2(26, 8)
diff --git a/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn b/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn
index 254e507..25e1d6a 100644
--- a/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/WeaponTemplate.tscn
@@ -7,12 +7,20 @@
shader = ExtResource("1_3p8rg")
shader_parameter/blend = Color(0, 0, 0, 0.470588)
shader_parameter/schedule = 1.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[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.0
+shader_parameter/modulate = Color(1, 1, 1, 1)
+shader_parameter/show_outline = true
+shader_parameter/outline_color = Color(0, 0, 0, 1)
+shader_parameter/outline_rainbow = false
[sub_resource type="RectangleShape2D" id="RectangleShape2D_3p5jk"]
size = Vector2(19.5, 8.75)
@@ -80,3 +88,10 @@
libraries = {
"": SubResource("AnimationLibrary_trkjd")
}
+
+[node name="MeleeAttackArea" type="Area2D" parent="."]
+collision_layer = 0
+collision_mask = 0
+monitorable = false
+
+[node name="MeleeAttackCollision" type="CollisionPolygon2D" parent="MeleeAttackArea"]
diff --git a/DungeonShooting_Godot/scene/test/TestCreateSector.tscn b/DungeonShooting_Godot/scene/test/TestCreateSector.tscn
new file mode 100644
index 0000000..795fc2e
--- /dev/null
+++ b/DungeonShooting_Godot/scene/test/TestCreateSector.tscn
@@ -0,0 +1,22 @@
+[gd_scene load_steps=4 format=3 uid="uid://d4axmwaqk1f55"]
+
+[ext_resource type="Script" path="res://src/test/TestCreateSector.cs" id="1_ieqp4"]
+[ext_resource type="Texture2D" uid="uid://uhhfgdhpk7i4" path="res://icon.png" id="2_73jok"]
+
+[sub_resource type="CircleShape2D" id="CircleShape2D_42m3w"]
+
+[node name="TestCreateSector" type="Node2D"]
+script = ExtResource("1_ieqp4")
+
+[node name="Area2D" type="Area2D" parent="."]
+position = Vector2(959, 505)
+
+[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="Area2D"]
+
+[node name="Sprite2D" type="Sprite2D" parent="Area2D/CollisionPolygon2D"]
+texture = ExtResource("2_73jok")
+
+[node name="Area2D2" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D2"]
+shape = SubResource("CircleShape2D_42m3w")
diff --git a/DungeonShooting_Godot/src/framework/common/Utils.cs b/DungeonShooting_Godot/src/framework/common/Utils.cs
index 762dad8..b6c9f4d 100644
--- a/DungeonShooting_Godot/src/framework/common/Utils.cs
+++ b/DungeonShooting_Godot/src/framework/common/Utils.cs
@@ -211,4 +211,43 @@
return range[0];
}
+
+ ///
+ /// 创建扇形多边形区域数据, 返回坐标点
+ ///
+ /// 中心角度, 角度制
+ /// 扇形半径
+ /// 扇形开口角度, 角度制
+ /// 扇形弧度边的数量
+ /// 整体偏移坐标, 默认0
+ public static Vector2[] CreateSectorPolygon(float centerAngle, float radius, float range, uint edgesCount, Vector2? offset = null)
+ {
+ var point = new Vector2[edgesCount + 2];
+ var edgesAngle = range / edgesCount;
+ var startAngle = centerAngle - range * 0.5f;
+ var temp = new Vector2(radius, 0);
+
+ for (var i = 0; i <= edgesCount; i++)
+ {
+ if (offset == null)
+ {
+ point[i] = temp.Rotated(Mathf.DegToRad(startAngle + edgesAngle * i));
+ }
+ else
+ {
+ point[i] = temp.Rotated(Mathf.DegToRad(startAngle + edgesAngle * i)) + offset.Value;
+ }
+ }
+
+ if (offset == null)
+ {
+ point[point.Length - 1] = Vector2.Zero;
+ }
+ else
+ {
+ point[point.Length - 1] = offset.Value;
+ }
+
+ return point;
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/test/TestCreateSector.cs b/DungeonShooting_Godot/src/test/TestCreateSector.cs
new file mode 100644
index 0000000..72b6418
--- /dev/null
+++ b/DungeonShooting_Godot/src/test/TestCreateSector.cs
@@ -0,0 +1,24 @@
+using Godot;
+using System;
+
+public partial class TestCreateSector : Node2D
+{
+
+ private CollisionPolygon2D _polygon2D;
+
+ public override void _Ready()
+ {
+ GetNode("Area2D").AreaEntered += area =>
+ {
+ GD.Print("areaEnter: " + area.Name);
+ };
+
+ _polygon2D = GetNode("Area2D/CollisionPolygon2D");
+ _polygon2D.Polygon = Utils.CreateSectorPolygon(90, 350, 160, 10);
+ }
+
+ public override void _Process(double delta)
+ {
+ GetNode("Area2D2").GlobalPosition = GetGlobalMousePosition();
+ }
+}