diff --git a/DungeonShooting_Godot/prefab/weapon/WeaponPreview.tscn b/DungeonShooting_Godot/prefab/weapon/WeaponPreview.tscn
index 4001e00..09d6f69 100644
--- a/DungeonShooting_Godot/prefab/weapon/WeaponPreview.tscn
+++ b/DungeonShooting_Godot/prefab/weapon/WeaponPreview.tscn
@@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://byy386hv6bko0" path="res://prefab/weapon/Weapon.tscn" id="1_byp1d"]
[ext_resource type="Shader" path="res://resource/material/Blend.gdshader" id="2_hn05o"]
-[ext_resource type="SpriteFrames" uid="uid://5m0qs7m4er5u" path="res://resource/spriteFrames/Weapon0001.tres" id="3_ee7rd"]
+[ext_resource type="SpriteFrames" uid="uid://djdvlmqsn8bie" path="res://resource/spriteFrames/Weapon0005.tres" id="3_iscyw"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ki13x"]
resource_local_to_scene = true
@@ -23,11 +23,11 @@
[node name="AnimatedSprite" parent="." index="1"]
material = SubResource("ShaderMaterial_5ojsm")
-position = Vector2(6, -1)
-sprite_frames = ExtResource("3_ee7rd")
+position = Vector2(9, 0)
+sprite_frames = ExtResource("3_iscyw")
[node name="ShellPoint" parent="." index="2"]
-position = Vector2(7.5, -4.5)
+position = Vector2(7, -3.5)
[node name="FirePoint" parent="." index="3"]
-position = Vector2(21, -3)
+position = Vector2(28, -3.5)
diff --git a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn
index 9cad5e8..2afb888 100644
--- a/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn
+++ b/DungeonShooting_Godot/resource/map/tileMaps/testGroup/inlet/Room1.tscn
@@ -22,6 +22,12 @@
Type = 5
ItemExpression = "0002(ResidueAmmo:15,CurrAmmon:0)"
+[node name="ActivityMark5" type="Node2D" parent="."]
+position = Vector2(78, 24)
+script = ExtResource("3_2xj23")
+Type = 5
+ItemExpression = "0005(ResidueAmmo:30,CurrAmmon:10)"
+
[node name="ActivityMark2" type="Node2D" parent="."]
position = Vector2(39, 75)
script = ExtResource("3_2xj23")
diff --git a/DungeonShooting_Godot/resource/sprite/gun/weapon0002/Weapon0002.png b/DungeonShooting_Godot/resource/sprite/gun/weapon0002/Weapon0002.png
index 36f7fe2..69e6b4d 100644
--- a/DungeonShooting_Godot/resource/sprite/gun/weapon0002/Weapon0002.png
+++ b/DungeonShooting_Godot/resource/sprite/gun/weapon0002/Weapon0002.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/weapon0005/Weapon0005.png b/DungeonShooting_Godot/resource/sprite/gun/weapon0005/Weapon0005.png
new file mode 100644
index 0000000..dd42c8a
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/gun/weapon0005/Weapon0005.png
Binary files differ
diff --git a/DungeonShooting_Godot/resource/sprite/gun/weapon0005/Weapon0005.png.import b/DungeonShooting_Godot/resource/sprite/gun/weapon0005/Weapon0005.png.import
new file mode 100644
index 0000000..c13fd73
--- /dev/null
+++ b/DungeonShooting_Godot/resource/sprite/gun/weapon0005/Weapon0005.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://504f1r0mi33n"
+path="res://.godot/imported/Weapon0005.png-25ad70af49e1b183ff828b73e385fbe0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://resource/sprite/gun/weapon0005/Weapon0005.png"
+dest_files=["res://.godot/imported/Weapon0005.png-25ad70af49e1b183ff828b73e385fbe0.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/Weapon0005.tres b/DungeonShooting_Godot/resource/spriteFrames/Weapon0005.tres
new file mode 100644
index 0000000..3939595
--- /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/gun/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/src/game/item/weapon/Weapon.cs b/DungeonShooting_Godot/src/game/item/weapon/Weapon.cs
index ba90eb7..ad92d9f 100644
--- a/DungeonShooting_Godot/src/game/item/weapon/Weapon.cs
+++ b/DungeonShooting_Godot/src/game/item/weapon/Weapon.cs
@@ -401,8 +401,11 @@
if (!_attackFlag && _attackTimer <= 0)
{
- CurrScatteringRange = Mathf.Max(CurrScatteringRange - Attribute.ScatteringRangeBackSpeed * delta,
- Attribute.StartScatteringRange);
+ if (_upTimer >= Attribute.ScatteringRangeBackTime)
+ {
+ CurrScatteringRange = Mathf.Max(CurrScatteringRange - Attribute.ScatteringRangeBackSpeed * delta,
+ Attribute.StartScatteringRange);
+ }
}
_triggerTimer = _triggerTimer > 0 ? _triggerTimer - delta : 0;
diff --git a/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs b/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs
index e0b61e4..14c6649 100644
--- a/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs
+++ b/DungeonShooting_Godot/src/game/item/weapon/WeaponAttribute.cs
@@ -123,6 +123,10 @@
///
public float ScatteringRangeBackSpeed = 10;
///
+ /// 松开扳机多久后开始销退散射值
+ ///
+ public float ScatteringRangeBackTime = 0f;
+ ///
/// 子弹飞行最大距离
///
public float MaxDistance = 600;
@@ -229,6 +233,7 @@
attr.FinalScatteringRange = FinalScatteringRange;
attr.ScatteringRangeAddValue = ScatteringRangeAddValue;
attr.ScatteringRangeBackSpeed = ScatteringRangeBackSpeed;
+ attr.ScatteringRangeBackTime = ScatteringRangeBackTime;
attr.MaxDistance = MaxDistance;
attr.MinDistance = MinDistance;
attr.FirePosition = FirePosition;
diff --git a/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs b/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs
index 66ebb91..3204ed6 100644
--- a/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs
+++ b/DungeonShooting_Godot/src/game/item/weapon/gun/Gun.cs
@@ -5,6 +5,7 @@
///
[RegisterWeapon(ActivityIdPrefix.Weapon + "0001", typeof(RifleAttribute))]
[RegisterWeapon(ActivityIdPrefix.Weapon + "0003", typeof(PistolAttribute))]
+[RegisterWeapon(ActivityIdPrefix.Weapon + "0005", typeof(SniperRifleAttribute))]
public partial class Gun : Weapon
{
//步枪属性数据
@@ -72,6 +73,7 @@
FinalScatteringRange = 60;
ScatteringRangeAddValue = 8f;
ScatteringRangeBackSpeed = 40;
+ ScatteringRangeBackTime = 0.5f;
//连发
ContinuousShoot = false;
AmmoCapacity = 12;
@@ -91,7 +93,7 @@
MinFireBulletCount = 1;
MaxFireBulletCount = 1;
//抬起角度
- UpliftAngle = 30;
+ UpliftAngle = 20;
//开火位置
FirePosition = new Vector2(13, -2);
//精灵位置
@@ -103,6 +105,60 @@
AiUseAttribute.TriggerInterval = 2f;
}
}
+
+ //狙击步枪
+ private class SniperRifleAttribute : WeaponAttribute
+ {
+ public SniperRifleAttribute()
+ {
+ Name = "狙击步枪";
+ Icon = ResourcePath.resource_sprite_gun_gun3_png;
+ SpriteFrames = ResourcePath.resource_spriteFrames_Weapon0005_tres;
+ Weight = 20;
+ ThrowSpritePosition = new Vector2(0.4f, -2.6f);
+ WeightType = WeaponWeightType.DeputyWeapon;
+ StartFiringSpeed = 60;
+ FinalFiringSpeed = 60;
+ StartScatteringRange = 0;
+ FinalScatteringRange = 20;
+ ScatteringRangeAddValue = 10;
+ ScatteringRangeBackSpeed = 10;
+ //连发
+ ContinuousShoot = false;
+ AmmoCapacity = 10;
+ StandbyAmmoCapacity = 50;
+ MaxAmmoCapacity = 50;
+ //扳机检测间隔
+ TriggerInterval = 0.1f;
+ //连发数量
+ MinContinuousCount = 1;
+ MaxContinuousCount = 1;
+ //开火前延时
+ DelayedTime = 0f;
+ //攻击距离
+ MinDistance = 600;
+ MaxDistance = 800;
+ //发射子弹数量
+ MinFireBulletCount = 1;
+ MaxFireBulletCount = 1;
+ //抬起角度
+ UpliftAngle = 15;
+ UpliftAngleRestore = 3.5f;
+ //开火位置
+ FirePosition = new Vector2(28, -3.5f);
+ //精灵位置
+ SpritePosition = new Vector2(9, 0);
+ ShellPosition = new Vector2(7, -3.5f);
+ MinBacklash = 6;
+ MinBacklash = 8;
+ BacklashRegressionSpeed = 20;
+ ReloadTime = 3.5f;
+
+ AiUseAttribute = Clone();
+ AiUseAttribute.AiTargetLockingTime = 1f;
+ AiUseAttribute.TriggerInterval = 2f;
+ }
+ }
protected override void OnFire()
{
diff --git a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
index 057f5e4..20be424 100644
--- a/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
+++ b/DungeonShooting_Godot/src/game/manager/ResourcePath.cs
@@ -33,6 +33,7 @@
public const string prefab_ui_Settlement_tscn = "res://prefab/ui/Settlement.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_WeaponPreview_tscn = "res://prefab/weapon/WeaponPreview.tscn";
public const string prefab_weapon_bullet_Bullet1_tscn = "res://prefab/weapon/bullet/Bullet1.tscn";
public const string prefab_weapon_bullet_Bullet2_tscn = "res://prefab/weapon/bullet/Bullet2.tscn";
public const string prefab_weapon_shell_ShellCase_tscn = "res://prefab/weapon/shell/ShellCase.tscn";
@@ -76,7 +77,10 @@
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_weapon0001_weapon0001_png = "res://resource/sprite/gun/weapon0001/weapon0001.png";
+ public const string resource_sprite_gun_weapon0001_Weapon0001_png = "res://resource/sprite/gun/weapon0001/Weapon0001.png";
+ public const string resource_sprite_gun_weapon0002_Weapon0002_png = "res://resource/sprite/gun/weapon0002/Weapon0002.png";
+ public const string resource_sprite_gun_weapon0003_Weapon0003_png = "res://resource/sprite/gun/weapon0003/Weapon0003.png";
+ public const string resource_sprite_gun_weapon0005_Weapon0005_png = "res://resource/sprite/gun/weapon0005/Weapon0005.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";
@@ -89,8 +93,8 @@
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_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_CursorCenter_png = "res://resource/sprite/ui/CursorCenter.png";
public const string resource_sprite_ui_cursors_png = "res://resource/sprite/ui/cursors.png";
@@ -116,6 +120,7 @@
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_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";