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(); + } +}