Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / weapon / gun / Gun.cs
using Godot;

/// <summary>
/// 普通的枪
/// </summary>
[Tool, GlobalClass]
public partial class Gun : Weapon
{
    // //步枪属性数据
    // private class RifleAttribute : WeaponAttribute
    // {
    //     public RifleAttribute()
    //     {
    //         Name = "步枪";
    //         Icon = ResourcePath.resource_sprite_gun_gun4_png;
    //         SpriteFrames = ResourcePath.resource_spriteFrames_Weapon0001_tres;
    //         Weight = 40;
    //         ThrowSpritePosition = new Vector2(0.4f, -2.6f);
    //         StartFiringSpeed = 480;
    //         StartScatteringRange = 30;
    //         FinalScatteringRange = 90;
    //         ScatteringRangeAddValue = 2f;
    //         ScatteringRangeBackSpeed = 40;
    //         //连发
    //         ContinuousShoot = true;
    //         AmmoCapacity = 30;
    //         StandbyAmmoCapacity = 30 * 3;
    //         MaxAmmoCapacity = 30 * 3;
    //         //扳机检测间隔
    //         TriggerInterval = 0f;
    //
    //         //开火前延时
    //         DelayedTime = 0f;
    //         //攻击距离
    //         MinDistance = 300;
    //         MaxDistance = 400;
    //         //发射子弹数量
    //         MinFireBulletCount = 1;
    //         MaxFireBulletCount = 1;
    //         //抬起角度
    //         UpliftAngle = 10;
    //         //开火位置
    //         FirePosition = new Vector2(21, -3f);
    //         //精灵位置
    //         SpritePosition = new Vector2(6, -1);
    //         ShellPosition = new Vector2(7.5f, -4.5f);
    //         
    //         AiUseAttribute = Clone();
    //         AiUseAttribute.AiTargetLockingTime = 0.5f;
    //         AiUseAttribute.TriggerInterval = 3f;
    //         AiUseAttribute.ContinuousShoot = false;
    //         AiUseAttribute.MinContinuousCount = 3;
    //         AiUseAttribute.MaxContinuousCount = 3;
    //     }
    // }
    //
    // //手枪属性数据
    // private class PistolAttribute : WeaponAttribute
    // {
    //     public PistolAttribute()
    //     {
    //         Name = "手枪";
    //         Icon = ResourcePath.resource_sprite_gun_gun3_png;
    //         SpriteFrames = ResourcePath.resource_spriteFrames_Weapon0003_tres;
    //         Weight = 20;
    //         ThrowSpritePosition = new Vector2(0.4f, -2.6f);
    //         WeightType = WeaponWeightType.DeputyWeapon;
    //         StartFiringSpeed = 300;
    //         FinalFiringSpeed = 300;
    //         StartScatteringRange = 5;
    //         FinalScatteringRange = 60;
    //         ScatteringRangeAddValue = 8f;
    //         ScatteringRangeBackSpeed = 40;
    //         ScatteringRangeBackTime = 0.5f;
    //         //连发
    //         ContinuousShoot = false;
    //         AmmoCapacity = 12;
    //         StandbyAmmoCapacity = 72;
    //         MaxAmmoCapacity = 72;
    //         //扳机检测间隔
    //         TriggerInterval = 0.1f;
    //         //连发数量
    //         MinContinuousCount = 1;
    //         MaxContinuousCount = 1;
    //         //开火前延时
    //         DelayedTime = 0f;
    //         //攻击距离
    //         MinDistance = 250;
    //         MaxDistance = 300;
    //         //发射子弹数量
    //         MinFireBulletCount = 1;
    //         MaxFireBulletCount = 1;
    //         //抬起角度
    //         UpliftAngle = 20;
    //         //开火位置
    //         FirePosition = new Vector2(13, -2);
    //         //精灵位置
    //         SpritePosition = new Vector2(5, 0);
    //         ShellPosition = new Vector2(5, -3);
    //
    //         AiUseAttribute = Clone();
    //         AiUseAttribute.AiTargetLockingTime = 1f;
    //         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()
    {
        //创建一个弹壳
        ThrowShell(ActivityObject.Ids.Id_shell0001);
        
        if (Master == Player.Current)
        {
            //创建抖动
            GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * 2f);
        }

        //创建开火特效
        var packedScene = ResourceManager.Load<PackedScene>(ResourcePath.prefab_effect_ShotFire_tscn);
        var sprite = packedScene.Instantiate<Sprite2D>();
        sprite.GlobalPosition = FirePoint.GlobalPosition;
        sprite.GlobalRotation = FirePoint.GlobalRotation;
        sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer);

        //播放射击音效
        SoundManager.PlaySoundEffectPosition(ResourcePath.resource_sound_sfx_ordinaryBullet2_mp3, GameApplication.Instance.ViewToGlobalPosition(GlobalPosition), -8);
    }

    protected override void OnShoot(float fireRotation)
    {
        //创建子弹
        var bullet = ActivityObject.Create<Bullet>(Attribute.BulletId);
        bullet.Init(
            this,
            350,
            Utils.RandomRangeFloat(Attribute.MinDistance, Attribute.MaxDistance),
            FirePoint.GlobalPosition,
            fireRotation,
            GetAttackLayer()
        );
        bullet.PutDown(RoomLayerEnum.YSortLayer);
    }
}