diff --git a/DungeonShooting_Godot/prefab/role/Role0001.tscn b/DungeonShooting_Godot/prefab/role/Role0001.tscn
index 196f400..b8e436d 100644
--- a/DungeonShooting_Godot/prefab/role/Role0001.tscn
+++ b/DungeonShooting_Godot/prefab/role/Role0001.tscn
@@ -44,6 +44,3 @@
[node name="AnimatedSprite" parent="." index="2"]
material = SubResource("ShaderMaterial_8hgu2")
sprite_frames = ExtResource("4_galcc")
-
-[node name="MountPoint" parent="." index="6"]
-position = Vector2(2, -8)
diff --git a/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn b/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn
index d55de02..2217fee 100644
--- a/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn
+++ b/DungeonShooting_Godot/prefab/role/RoleTemplate.tscn
@@ -69,5 +69,5 @@
shape = SubResource("RectangleShape2D_n68nu")
[node name="MountPoint" type="Marker2D" parent="."]
-position = Vector2(1, -6)
+position = Vector2(2, -8)
script = ExtResource("2_5ddpw")
diff --git a/DungeonShooting_Godot/project.godot b/DungeonShooting_Godot/project.godot
index e7f84b4..c36c7b6 100644
--- a/DungeonShooting_Godot/project.godot
+++ b/DungeonShooting_Godot/project.godot
@@ -114,32 +114,32 @@
}
move_left={
"deadzone": 0.5,
-"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":65,"physical_keycode":0,"key_label":0,"unicode":97,"echo":false,"script":null)
+"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":0,"physical_keycode":65,"key_label":0,"unicode":97,"echo":false,"script":null)
]
}
move_right={
"deadzone": 0.5,
-"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":68,"physical_keycode":0,"key_label":0,"unicode":100,"echo":false,"script":null)
+"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":0,"physical_keycode":68,"key_label":0,"unicode":100,"echo":false,"script":null)
]
}
move_up={
"deadzone": 0.5,
-"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":87,"physical_keycode":0,"key_label":0,"unicode":119,"echo":false,"script":null)
+"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":0,"physical_keycode":87,"key_label":0,"unicode":119,"echo":false,"script":null)
]
}
move_down={
"deadzone": 0.5,
-"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":83,"physical_keycode":0,"key_label":0,"unicode":115,"echo":false,"script":null)
+"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":0,"physical_keycode":83,"key_label":0,"unicode":115,"echo":false,"script":null)
]
}
exchangeWeapon={
"deadzone": 0.5,
-"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":81,"physical_keycode":0,"key_label":0,"unicode":113,"echo":false,"script":null)
+"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":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null)
]
}
throwWeapon={
"deadzone": 0.5,
-"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":71,"physical_keycode":0,"key_label":0,"unicode":103,"echo":false,"script":null)
+"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":0,"physical_keycode":71,"key_label":0,"unicode":103,"echo":false,"script":null)
]
}
mouse_roll_up={
@@ -154,32 +154,32 @@
}
interactive={
"deadzone": 0.5,
-"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":69,"physical_keycode":0,"key_label":0,"unicode":101,"echo":false,"script":null)
+"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":0,"physical_keycode":69,"key_label":0,"unicode":101,"echo":false,"script":null)
]
}
reload={
"deadzone": 0.5,
-"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)
+"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":0,"physical_keycode":82,"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)
+"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":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":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)
+"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(75, 15),"global_position":Vector2(79, 56),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
]
}
useActiveProp={
"deadzone": 0.5,
-"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":70,"physical_keycode":0,"key_label":0,"unicode":102,"echo":false,"script":null)
+"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":0,"physical_keycode":70,"key_label":0,"unicode":102,"echo":false,"script":null)
]
}
removeProp={
"deadzone": 0.5,
-"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":88,"physical_keycode":0,"key_label":0,"unicode":120,"echo":false,"script":null)
+"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":0,"physical_keycode":88,"key_label":0,"unicode":120,"echo":false,"script":null)
]
}
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json
index 131108d..1c55d41 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json
+++ b/DungeonShooting_Godot/resource/map/tileMaps/TestGroup1/inlet/Start1/Preinstall.json
@@ -1 +1 @@
-[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":19,"Y":2},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":10,"Y":22},"Size":{"X":0,"Y":0},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":11,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-15,"Y":31},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":36},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":35,"Y":2},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-12,"Y":3},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}]]}]
\ No newline at end of file
+[{"Name":"test1","Weight":100,"Remark":"","WaveList":[[{"Position":{"X":19,"Y":2},"Size":{"X":0,"Y":0},"SpecialMarkType":1,"DelayTime":0,"MarkList":[]},{"Position":{"X":10,"Y":22},"Size":{"X":0,"Y":0},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]}],[{"Position":{"X":11,"Y":38},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop0003","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-15,"Y":31},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0.5,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":36,"Y":36},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":35,"Y":2},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":1.5,"MarkList":[{"Id":"prop0002","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-12,"Y":3},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":2,"MarkList":[{"Id":"weapon0001","Weight":100,"Attr":{"CurrAmmon":"30","ResidueAmmo":"210"},"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":-36,"Y":-18},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop5000","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]},{"Position":{"X":56,"Y":-24},"Size":{"X":16,"Y":16},"SpecialMarkType":0,"DelayTime":0,"MarkList":[{"Id":"prop5001","Weight":100,"Attr":null,"Altitude":8,"VerticalSpeed":0}]}]]}]
\ 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
index 124220e..feba74b 100644
--- a/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs
+++ b/DungeonShooting_Godot/src/game/activity/bullet/Bullet.cs
@@ -127,7 +127,6 @@
{
var d = damage;
damage = Role.RoleState.CallCalcDamageEvent(damage);
- GD.Print($"原伤害: {d}, 计算伤害: {damage}");
}
role.CallDeferred(nameof(Role.Hurt), damage, Rotation);
diff --git a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs
index ce037b4..ac660c5 100644
--- a/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs
+++ b/DungeonShooting_Godot/src/game/activity/prop/active/ActiveProp.cs
@@ -33,7 +33,7 @@
private int _count = 1;
///
- /// 道具最大可使用次数
+ /// 道具最大叠加用次数
///
public int MaxCount
{
@@ -238,7 +238,10 @@
player.ThrowActiveProp(player.ActivePropsPack.ActiveIndex);
}
//替换手中的道具
- player.PickUpActiveProp(this);
+ if (player.PickUpActiveProp(this))
+ {
+ Pickup();
+ }
}
else
{
@@ -255,6 +258,7 @@
item.Count += Count;
Count = 0;
}
+ Destroy();
}
}
}
@@ -292,7 +296,6 @@
public override void OnPickUpItem()
{
- Pickup();
}
public override void OnRemoveItem()
diff --git a/DungeonShooting_Godot/src/game/activity/role/Role.cs b/DungeonShooting_Godot/src/game/activity/role/Role.cs
index f910803..c2ce92b 100644
--- a/DungeonShooting_Godot/src/game/activity/role/Role.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/Role.cs
@@ -81,6 +81,11 @@
///
[Export, ExportFillNode]
public CollisionShape2D InteractiveCollision { get; set; }
+
+ ///
+ /// 武器挂载点是否始终指向目标
+ ///
+ public bool MountLookTarget { get; set; } = true;
///
/// 脸的朝向
@@ -222,6 +227,18 @@
///
public ActivityObject InteractiveItem { get; private set; }
+ ///
+ /// 是否可以翻滚
+ ///
+ public bool CanRoll => _rollCoolingTimer <= 0;
+
+ ///
+ /// 是否处于近战攻击中
+ ///
+ public bool IsMeleeAttack { get; private set; }
+
+ //翻滚冷却计时器
+ private float _rollCoolingTimer = 0;
//初始缩放
private Vector2 _startScale;
//所有角色碰撞的物体
@@ -383,6 +400,11 @@
protected override void Process(float delta)
{
+ if (_rollCoolingTimer > 0)
+ {
+ _rollCoolingTimer -= delta;
+ }
+
//看向目标
if (LookTarget != null)
{
@@ -397,8 +419,12 @@
{
Face = FaceDirection.Left;
}
- //枪口跟随目标
- MountPoint.SetLookAt(pos);
+
+ if (MountLookTarget)
+ {
+ //枪口跟随目标
+ MountPoint.SetLookAt(pos);
+ }
}
//检查可互动的物体
@@ -570,7 +596,6 @@
/// 使角色看向指定的坐标,
/// 注意, 调用该函数会清空 LookTarget, 因为拥有 LookTarget 时也会每帧更新玩家视野位置
///
- ///
public void LookTargetPosition(Vector2 pos)
{
LookTarget = null;
@@ -584,8 +609,12 @@
{
Face = FaceDirection.Left;
}
- //枪口跟随目标
- MountPoint.SetLookAt(pos);
+
+ if (MountLookTarget)
+ {
+ //枪口跟随目标
+ MountPoint.SetLookAt(pos);
+ }
}
///
@@ -854,13 +883,35 @@
///
public virtual void Attack()
{
- if (WeaponPack.ActiveItem != null)
+ if (!IsMeleeAttack && WeaponPack.ActiveItem != null)
{
WeaponPack.ActiveItem.Trigger(this);
}
}
///
+ /// 触发近战攻击
+ ///
+ public virtual void MeleeAttack()
+ {
+ if (IsMeleeAttack)
+ {
+ return;
+ }
+
+ if (WeaponPack.ActiveItem != null)
+ {
+ IsMeleeAttack = true;
+ WeaponPack.ActiveItem.TriggerMeleeAttack(this);
+ //播放近战动画
+ PlayAnimation_MeleeAttack(() =>
+ {
+ IsMeleeAttack = false;
+ });
+ }
+ }
+
+ ///
/// 触发使用道具
///
public virtual void UseActiveProp()
@@ -1028,4 +1079,12 @@
ActivePropsPack.Destroy();
WeaponPack.Destroy();
}
+
+ ///
+ /// 翻滚结束
+ ///
+ public void OverRoll()
+ {
+ _rollCoolingTimer = RoleState.RollTime;
+ }
}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs
index 835d741..f1c0e91 100644
--- a/DungeonShooting_Godot/src/game/activity/role/RoleState.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/RoleState.cs
@@ -15,16 +15,21 @@
/// 移动加速度
///
public float Acceleration = 1500f;
-
+
+ ///
+ /// 移动摩擦力, 仅用于人物基础移动
+ ///
+ public float Friction = 900f;
+
///
/// 翻滚速度
///
public float RollSpeed = 180f;
-
+
///
- /// 移动摩擦力
+ /// 翻滚冷却时间
///
- public float Friction = 900f;
+ public float RollTime = 0.5f;
///
/// 单格护盾恢复时间, 单位: 秒
@@ -39,7 +44,7 @@
///
/// 护盾被攻击后的无敌时间, 单位: 秒
///
- public float ShieldInvincibleTime = 0.5f;
+ public float ShieldInvincibleTime = 0.4f;
///
/// 攻击/发射后计算伤害
diff --git a/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs
new file mode 100644
index 0000000..fc3e853
--- /dev/null
+++ b/DungeonShooting_Godot/src/game/activity/role/Role_Animation.cs
@@ -0,0 +1,53 @@
+
+using System;
+using Godot;
+using Vector2 = Godot.Vector2;
+
+public partial class Role
+{
+ ///
+ /// 播放近战攻击动画
+ ///
+ public virtual void PlayAnimation_MeleeAttack(Action finish)
+ {
+ MountLookTarget = false;
+ var r = MountPoint.RotationDegrees;
+ var p1 = MountPoint.Position;
+ var p2 = p1 + new Vector2(6, 0).Rotated(Mathf.DegToRad(r - 60));
+ var p3 = p1 + new Vector2(6, 0).Rotated(Mathf.DegToRad(r + 60));
+
+ var tween = CreateTween();
+ tween.SetParallel();
+
+ tween.TweenProperty(MountPoint, "rotation_degrees", r - 60, 0.15);
+ tween.TweenProperty(MountPoint, "position", p2, 0.15);
+ tween.Chain();
+
+ tween.TweenCallback(Callable.From(() =>
+ {
+ MountPoint.RotationDegrees = r + 60;
+ MountPoint.Position = p3;
+ //创建屏幕抖动
+ if (Face == FaceDirection.Right)
+ {
+ GameCamera.Main.DirectionalShake(Vector2.FromAngle(Mathf.DegToRad(r - 90)) * 5);
+ }
+ else
+ {
+ GameCamera.Main.DirectionalShake(Vector2.FromAngle(Mathf.DegToRad(270 - r)) * 5);
+ }
+ }));
+ tween.Chain();
+
+ tween.TweenProperty(MountPoint, "rotation_degrees", r, 0.3);
+ tween.TweenProperty(MountPoint, "position", p1, 0.3);
+ tween.Chain();
+
+ tween.TweenCallback(Callable.From(() =>
+ {
+ MountLookTarget = true;
+ finish();
+ }));
+ tween.Play();
+ }
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
index 89e806c..0227a42 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/Player.cs
@@ -84,8 +84,12 @@
{
Face = FaceDirection.Left;
}
- //枪口跟随鼠标
- MountPoint.SetLookAt(mousePos);
+
+ if (MountLookTarget)
+ {
+ //枪口跟随鼠标
+ MountPoint.SetLookAt(mousePos);
+ }
}
if (InputManager.ExchangeWeapon) //切换武器
@@ -121,7 +125,14 @@
Reload();
}
- if (InputManager.Fire) //开火
+ if (InputManager.MeleeAttack) //近战攻击
+ {
+ if (StateController.CurrState != PlayerStateEnum.Roll) //不能是翻滚状态
+ {
+ MeleeAttack();
+ }
+ }
+ else if (InputManager.Fire) //正常开火
{
if (StateController.CurrState != PlayerStateEnum.Roll) //不能是翻滚状态
{
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs
index fb3c530..be67372 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerIdleState.cs
@@ -21,7 +21,7 @@
var dir = InputManager.MoveAxis;
if (dir != Vector2.Zero)
{
- if (InputManager.Roll) //按下翻滚
+ if (InputManager.Roll && Master.CanRoll) //按下翻滚
{
ChangeState(PlayerStateEnum.Roll);
}
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs
index a3953f1..b234832 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerMoveState.cs
@@ -24,7 +24,7 @@
}
else
{
- if (InputManager.Roll) //翻滚
+ if (InputManager.Roll && Master.CanRoll) //翻滚
{
ChangeState(PlayerStateEnum.Roll);
}
diff --git a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs
index badde0e..229b5df 100644
--- a/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs
+++ b/DungeonShooting_Godot/src/game/activity/role/player/state/PlayerRollState.cs
@@ -54,6 +54,7 @@
{
yield return Master.AnimatedSprite.ToSignal(Master.AnimatedSprite, AnimatedSprite2D.SignalName.AnimationFinished);
_coroutineId = -1;
+ Master.OverRoll();
if (InputManager.MoveAxis != Vector2.Zero) //切换到移动状态
{
ChangeState(PlayerStateEnum.Move);
diff --git a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
index f8d877d..5ec5fd3 100644
--- a/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
+++ b/DungeonShooting_Godot/src/game/activity/weapon/Weapon.cs
@@ -981,6 +981,14 @@
}
///
+ /// 触发武器的近战攻击
+ ///
+ public void TriggerMeleeAttack(Role trigger)
+ {
+
+ }
+
+ ///
/// 获取武器攻击的目标层级
///
///
diff --git a/DungeonShooting_Godot/src/game/manager/InputManager.cs b/DungeonShooting_Godot/src/game/manager/InputManager.cs
index 01512d6..6d92161 100644
--- a/DungeonShooting_Godot/src/game/manager/InputManager.cs
+++ b/DungeonShooting_Godot/src/game/manager/InputManager.cs
@@ -62,17 +62,17 @@
public static bool Fire { get; private set; }
///
- /// 是否按钮近战攻击按钮 (使用远程武器发起的近战攻击), 键鼠: 鼠标右键
+ /// 是否按钮近战攻击按钮 (使用远程武器发起的近战攻击), 键鼠: 键盘Space
///
public static bool MeleeAttack { get; private set; }
///
- /// 是否按下翻滚按钮, 键鼠: 键盘Space
+ /// 是否按下翻滚按钮, 键鼠: 鼠标右键
///
public static bool Roll { get; private set; }
///
- /// 是否按下打开地图按钮, 键鼠: 键盘Ctrl
+ /// 是否按下打开地图按钮, 键鼠: 键盘Ctrl
///
public static bool Map { get; private set; }