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";