处理角色上下文菜单

master
lightyears 2 years ago
parent 50b099265d
commit bc7a7e1c8b
Signed by: lightyears
GPG Key ID: 98D80DDF26D4F2F9

@ -0,0 +1,21 @@
namespace CMSGame
{
public partial class BattleActionMenu : VBoxContainer
{
public VBoxContainer DynamicActions;
public Button ItemActionButton;
public Button SkillActionButton;
public Button CommandActionButton;
public override void _Ready()
{
this.GetUniqueNode(ref ItemActionButton, nameof(ItemActionButton));
this.GetUniqueNode(ref DynamicActions, nameof(DynamicActions));
this.GetUniqueNode(ref SkillActionButton, nameof(SkillActionButton));
this.GetUniqueNode(ref CommandActionButton, nameof(CommandActionButton));
}
}
}

@ -0,0 +1,32 @@
[gd_scene load_steps=2 format=3 uid="uid://bktklsml5d0jg"]
[ext_resource type="Script" path="res://Components/BattleActionMenu.cs" id="1_0bfmk"]
[node name="BattleActionMenu" type="VBoxContainer"]
anchors_preset = 4
anchor_top = 0.5
anchor_bottom = 0.5
offset_top = -15.5
offset_right = 40.0
offset_bottom = 15.5
grow_vertical = 2
script = ExtResource("1_0bfmk")
[node name="ItemActionButton" type="Button" parent="."]
unique_name_in_owner = true
layout_mode = 2
text = "物品"
[node name="DynamicActions" type="VBoxContainer" parent="."]
unique_name_in_owner = true
layout_mode = 2
[node name="SkillActionButton" type="Button" parent="."]
unique_name_in_owner = true
layout_mode = 2
text = "技能"
[node name="CommandActionButton" type="Button" parent="."]
unique_name_in_owner = true
layout_mode = 2
text = "指挥"

@ -0,0 +1,49 @@
namespace CMSGame
{
public partial class BattleHUD : Control
{
public Vector2 LastMousePressedPosition;
public Label BattleTimeLabel;
public Popup PauseMenuPopup;
public Popup SettingsMenuPopup;
public BattleActionMenu BattleActionMenu;
public override void _Ready()
{
this.GetUniqueNode(ref BattleTimeLabel, nameof(BattleTimeLabel));
this.GetUniqueNode(ref PauseMenuPopup, nameof(PauseMenuPopup));
this.GetUniqueNode(ref SettingsMenuPopup, nameof(SettingsMenuPopup));
this.GetUniqueNode(ref BattleActionMenu, nameof(BattleActionMenu));
}
public override void _GuiInput(InputEvent @event)
{
if (@event is InputEventMouseButton mouseButtonEvent)
{
if (mouseButtonEvent.Pressed)
{
LastMousePressedPosition = mouseButtonEvent.Position;
var battleActionMenuRect = new Rect2(BattleActionMenu.Position, BattleActionMenu.Size);
if (!battleActionMenuRect.HasPoint(LastMousePressedPosition))
{
BattleActionMenu.Visible = false;
}
}
}
}
public void ShowActionMenu(Vector2 position)
{
if (!BattleActionMenu.Visible)
{
BattleActionMenu.Position = position;
BattleActionMenu.Visible = true;
}
}
}
}

@ -0,0 +1,89 @@
[gd_scene load_steps=4 format=3 uid="uid://dyyrp4px1km16"]
[ext_resource type="Script" path="res://Components/BattleHUD.cs" id="1_12a1x"]
[ext_resource type="PackedScene" path="res://Components/SettingsMenuPopup.tscn" id="2_t66a0"]
[ext_resource type="PackedScene" uid="uid://bktklsml5d0jg" path="res://Components/BattleActionMenu.tscn" id="3_0nyue"]
[node name="BattleHUD" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 1
script = ExtResource("1_12a1x")
[node name="BattleTimeLabel" type="Label" parent="."]
unique_name_in_owner = true
layout_mode = 1
offset_right = 41.0
offset_bottom = 26.0
text = "00:00"
metadata/_edit_use_anchors_ = true
[node name="PauseBattleButton" type="Button" 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 = -20.0
offset_top = -23.0
offset_right = 20.0
grow_horizontal = 2
grow_vertical = 0
focus_mode = 0
text = "按下 Space 暂停时间"
[node name="PauseMenuPopup" type="Popup" parent="."]
unique_name_in_owner = true
size = Vector2i(242, 306)
borderless = false
[node name="PauseMenu" type="VBoxContainer" parent="PauseMenuPopup"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -86.0
offset_top = -50.5
offset_right = 86.0
offset_bottom = 50.5
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="ResumeBattleButton" type="Button" parent="PauseMenuPopup/PauseMenu"]
unique_name_in_owner = true
layout_mode = 2
text = "继续战斗"
[node name="SettingsMenuButton" type="Button" parent="PauseMenuPopup/PauseMenu"]
unique_name_in_owner = true
layout_mode = 2
text = "游戏设置"
[node name="EscapeFromBattleButton" type="Button" parent="PauseMenuPopup/PauseMenu"]
unique_name_in_owner = true
layout_mode = 2
text = "退出战斗"
[node name="SettingsMenuPopup" parent="." instance=ExtResource("2_t66a0")]
unique_name_in_owner = true
visible = false
borderless = false
[node name="BattleActionMenu" parent="." instance=ExtResource("3_0nyue")]
unique_name_in_owner = true
visible = false
layout_mode = 0
anchors_preset = 0
anchor_top = 0.0
anchor_bottom = 0.0
offset_top = 0.0
offset_bottom = 31.0
grow_vertical = 1

@ -2,8 +2,35 @@ namespace CMSGame
{ {
public partial class BattleCharacter : CharacterBody3D public partial class BattleCharacter : CharacterBody3D
{ {
[Signal]
public delegate void MousePressedEventHandler(Vector3 position);
[Export]
public Texture SpriteTexture;
public BattleFieldPosition BattleFieldPosition; public BattleFieldPosition BattleFieldPosition;
public Character Character; public Character Character;
public Sprite3D Sprite3D;
public Label3D StatusLabel;
public override void _Ready()
{
this.GetUniqueNode(ref Sprite3D, nameof(Sprite3D));
this.GetUniqueNode(ref StatusLabel, nameof(StatusLabel));
}
public override void _InputEvent(Camera3D camera, InputEvent @event, Vector3 position, Vector3 normal, int shapeIdx)
{
if (@event is InputEventMouseButton mouseButtonEvent)
{
if (mouseButtonEvent.Pressed)
{
EmitSignal(SignalName.MousePressed, position);
}
}
}
} }
} }

@ -13,6 +13,7 @@ script = ExtResource("2_vbdi8")
unique_name_in_owner = true unique_name_in_owner = true
[node name="Sprite3D" type="Sprite3D" parent="."] [node name="Sprite3D" type="Sprite3D" parent="."]
unique_name_in_owner = true
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0) transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
shaded = true shaded = true
alpha_cut = 2 alpha_cut = 2

@ -2,12 +2,12 @@ namespace CMSGame
{ {
public partial class BattleScene : Node3D public partial class BattleScene : Node3D
{ {
public BattleHUD HUD;
public Popup PauseMenuPopup; public Popup PauseMenuPopup;
public Popup SettingsMenuPopup; public Popup SettingsMenuPopup;
public Label BattleTimeLabel;
public double Time; public double Time;
public bool IsPause = false; public bool IsPause = false;
@ -16,9 +16,9 @@ namespace CMSGame
public override void _Ready() public override void _Ready()
{ {
this.GetUniqueNode(ref PauseMenuPopup, nameof(PauseMenuPopup)); this.GetUniqueNode(ref HUD, nameof(HUD));
this.GetUniqueNode(ref SettingsMenuPopup, nameof(SettingsMenuPopup)); PauseMenuPopup = HUD.PauseMenuPopup;
this.GetUniqueNode(ref BattleTimeLabel, nameof(BattleTimeLabel)); SettingsMenuPopup = HUD.SettingsMenuPopup;
} }
public override void _Process(double delta) public override void _Process(double delta)
@ -44,7 +44,7 @@ namespace CMSGame
public void UpdateUI() public void UpdateUI()
{ {
BattleTimeLabel.Text = TimeHelper.FormatTime(Time); HUD.BattleTimeLabel.Text = TimeHelper.FormatTime(Time);
} }
private void TogglePauseBattle() private void TogglePauseBattle()

@ -1,7 +1,7 @@
[gd_scene load_steps=10 format=3 uid="uid://cx6yq8awwkqv3"] [gd_scene load_steps=10 format=3 uid="uid://cp6aa655vykt1"]
[ext_resource type="Script" path="res://Scenes/BattleScene.cs" id="1_n6bn7"] [ext_resource type="Script" path="res://Scenes/BattleScene.cs" id="1_n6bn7"]
[ext_resource type="PackedScene" path="res://Components/SettingsMenuPopup.tscn" id="2_aucd7"] [ext_resource type="PackedScene" uid="uid://dyyrp4px1km16" path="res://Components/BattleHUD.tscn" id="2_u4666"]
[ext_resource type="Texture2D" uid="uid://dt1kwicn6i51e" path="res://Temp/Textures/SBS - Tiny Texture Pack - 256x256/256x256/Bricks/Bricks_05-256x256.png" id="3_swgxf"] [ext_resource type="Texture2D" uid="uid://dt1kwicn6i51e" path="res://Temp/Textures/SBS - Tiny Texture Pack - 256x256/256x256/Bricks/Bricks_05-256x256.png" id="3_swgxf"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_vrgig"] [sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_vrgig"]
@ -42,76 +42,8 @@ transform = Transform3D(1, 0, 0, 0, 0.939693, 0.34202, 0, -0.34202, 0.939693, 0,
[node name="CanvasLayer" type="CanvasLayer" parent="Camera3D"] [node name="CanvasLayer" type="CanvasLayer" parent="Camera3D"]
[node name="HUD" type="Control" parent="Camera3D/CanvasLayer"] [node name="HUD" parent="Camera3D/CanvasLayer" instance=ExtResource("2_u4666")]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="BattleTimeLabel" type="Label" parent="Camera3D/CanvasLayer/HUD"]
unique_name_in_owner = true
layout_mode = 1
offset_right = 41.0
offset_bottom = 26.0
text = "00:00"
metadata/_edit_use_anchors_ = true
[node name="PauseBattleButton" type="Button" parent="Camera3D/CanvasLayer/HUD"]
layout_mode = 1
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -20.0
offset_top = -23.0
offset_right = 20.0
grow_horizontal = 2
grow_vertical = 0
focus_mode = 0
text = "按下 Space 暂停时间"
[node name="PauseMenuPopup" type="Popup" parent="Camera3D/CanvasLayer/HUD"]
unique_name_in_owner = true
size = Vector2i(242, 306)
borderless = false
[node name="PauseMenu" type="VBoxContainer" parent="Camera3D/CanvasLayer/HUD/PauseMenuPopup"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -86.0
offset_top = -50.5
offset_right = 86.0
offset_bottom = 50.5
grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 4
size_flags_vertical = 4
[node name="ResumeBattleButton" type="Button" parent="Camera3D/CanvasLayer/HUD/PauseMenuPopup/PauseMenu"]
unique_name_in_owner = true
layout_mode = 2
text = "继续战斗"
[node name="SettingsMenuButton" type="Button" parent="Camera3D/CanvasLayer/HUD/PauseMenuPopup/PauseMenu"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2
text = "游戏设置"
[node name="EscapeFromBattleButton" type="Button" parent="Camera3D/CanvasLayer/HUD/PauseMenuPopup/PauseMenu"]
unique_name_in_owner = true
layout_mode = 2
text = "退出战斗"
[node name="SettingsMenuPopup" parent="Camera3D/CanvasLayer/HUD" instance=ExtResource("2_aucd7")]
unique_name_in_owner = true
visible = false
borderless = false
[node name="Ground" type="Node3D" parent="."] [node name="Ground" type="Node3D" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
@ -131,8 +63,3 @@ shape = SubResource("WorldBoundaryShape3D_a4f8m")
unique_name_in_owner = true unique_name_in_owner = true
[node name="Objects" type="Node3D" parent="."] [node name="Objects" type="Node3D" parent="."]
[connection signal="pressed" from="Camera3D/CanvasLayer/HUD/PauseBattleButton" to="." method="On_PauseBattleButton_Pressed"]
[connection signal="popup_hide" from="Camera3D/CanvasLayer/HUD/PauseMenuPopup" to="." method="On_PauseMenuPopup_PopupHide"]
[connection signal="pressed" from="Camera3D/CanvasLayer/HUD/PauseMenuPopup/PauseMenu/ResumeBattleButton" to="." method="On_ResumeBattleButton_Pressed"]
[connection signal="pressed" from="Camera3D/CanvasLayer/HUD/PauseMenuPopup/PauseMenu/SettingsMenuButton" to="." method="On_SettingsMenuButton_Pressed"]

@ -2,8 +2,16 @@ namespace CMSGame
{ {
public partial class BattleSceneTest : Node3D public partial class BattleSceneTest : Node3D
{ {
public BattleScene BattleScene;
public override void _Ready() public override void _Ready()
{ {
BattleScene = GetNode<BattleScene>("BattleScene");
}
public void On_BattleCharacter_MousePressed(Vector3 _)
{
BattleScene.HUD.ShowActionMenu(BattleScene.HUD.LastMousePressedPosition);
} }
} }
} }

@ -1,9 +1,65 @@
[gd_scene load_steps=3 format=3 uid="uid://6phl40durwor"] [gd_scene load_steps=10 format=3 uid="uid://6phl40durwor"]
[ext_resource type="PackedScene" uid="uid://cx6yq8awwkqv3" path="res://Scenes/BattleScene.tscn" id="1_fdqdi"] [ext_resource type="PackedScene" uid="uid://cp6aa655vykt1" path="res://Scenes/BattleScene.tscn" id="1_fdqdi"]
[ext_resource type="Script" path="res://Tests/BattleSceneTest.cs" id="1_tuul4"] [ext_resource type="Script" path="res://Tests/BattleSceneTest.cs" id="1_tuul4"]
[ext_resource type="PackedScene" uid="uid://igk5375j1keq" path="res://Models/BattleCharacter.tscn" id="3_nau0d"]
[ext_resource type="Texture2D" uid="uid://w6qckexp2he1" path="res://Temp/Characters/2_73.png" id="4_jnah0"]
[ext_resource type="Texture2D" uid="uid://du6o3upum6lkr" path="res://Temp/Characters/3_0.png" id="5_4vahd"]
[ext_resource type="Texture2D" uid="uid://cl11bl8lcnwha" path="res://Temp/Characters/4_2.png" id="6_6563q"]
[ext_resource type="Texture2D" uid="uid://dc27ugd4sik7m" path="res://Temp/Characters/5_4.png" id="7_a35tl"]
[ext_resource type="Texture2D" uid="uid://cl8nkrx2bk76n" path="res://Temp/Characters/6_1.png" id="8_oklwm"]
[ext_resource type="Texture2D" uid="uid://ch0pdjtnr3y7r" path="res://Temp/Characters/7.png" id="9_wor4w"]
[node name="BattleSceneTest" type="Node3D"] [node name="BattleSceneTest" type="Node3D"]
script = ExtResource("1_tuul4") script = ExtResource("1_tuul4")
[node name="BattleScene" parent="." instance=ExtResource("1_fdqdi")] [node name="BattleScene" parent="." instance=ExtResource("1_fdqdi")]
[node name="BattleCharacter" parent="BattleScene/Characters" index="0" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.1026, 0.524168, -2.96058)
[node name="BattleCharacter2" parent="BattleScene/Characters" index="1" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.25622, 0.524168, -2.87261)
[node name="Sprite3D" parent="BattleScene/Characters/BattleCharacter2" index="1"]
texture = ExtResource("4_jnah0")
[node name="BattleCharacter3" parent="BattleScene/Characters" index="2" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.524168, -4.12488)
[node name="Sprite3D" parent="BattleScene/Characters/BattleCharacter3" index="1"]
texture = ExtResource("5_4vahd")
[node name="BattleCharacter4" parent="BattleScene/Characters" index="3" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.737777, 0.524168, -3.35854)
[node name="Sprite3D" parent="BattleScene/Characters/BattleCharacter4" index="1"]
texture = ExtResource("6_6563q")
[node name="BattleCharacter5" parent="BattleScene/Characters" index="4" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.6372, 0.524168, -3.47228)
[node name="Sprite3D" parent="BattleScene/Characters/BattleCharacter5" index="1"]
texture = ExtResource("7_a35tl")
[node name="BattleCharacter6" parent="BattleScene/Characters" index="5" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.27585, 0.524168, -5.80874)
[node name="Sprite3D" parent="BattleScene/Characters/BattleCharacter6" index="1"]
texture = ExtResource("8_oklwm")
[node name="BattleCharacter7" parent="BattleScene/Characters" index="6" instance=ExtResource("3_nau0d")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.44713, 0.524168, -6.18927)
[node name="Sprite3D" parent="BattleScene/Characters/BattleCharacter7" index="1"]
texture = ExtResource("9_wor4w")
[connection signal="MousePressed" from="BattleScene/Characters/BattleCharacter" to="." method="On_BattleCharacter_MousePressed"]
[editable path="BattleScene"]
[editable path="BattleScene/Characters/BattleCharacter2"]
[editable path="BattleScene/Characters/BattleCharacter3"]
[editable path="BattleScene/Characters/BattleCharacter4"]
[editable path="BattleScene/Characters/BattleCharacter5"]
[editable path="BattleScene/Characters/BattleCharacter6"]
[editable path="BattleScene/Characters/BattleCharacter7"]

Loading…
Cancel
Save