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

/// <summary>
/// 普通的枪
/// </summary>
[Tool]
public partial class Gun : Weapon
{
    protected override void OnFire()
    {
        if (Master == World.Player)
        {
            //创建抖动
            GameCamera.Main.DirectionalShake(Vector2.Right.Rotated(GlobalRotation) * Attribute.CameraShake);
        }

        //创建开火特效
        if (!string.IsNullOrEmpty(Attribute.FireEffect))
        {
            var effect = ObjectManager.GetPoolItem<IEffect>(Attribute.FireEffect);
            var sprite = (Node2D)effect;
            // sprite.GlobalPosition = FirePoint.GlobalPosition;
            // sprite.GlobalRotation = FirePoint.GlobalRotation;
            // sprite.AddToActivityRoot(RoomLayerEnum.YSortLayer);
            sprite.Position = GetLocalFirePosition();
            AddChild(sprite);
            effect.PlayEffect();
        }
    }

    protected override void OnShoot(float fireRotation)
    {
        if (Master != null && !Master.IsDestroyed)
        {
            var calcBullet = Master.RoleState.CalcBullet(Attribute.Bullet);
            FireManager.ShootBullet(this, fireRotation, calcBullet);
            Master.ShootBulletHandler(this, fireRotation, Attribute.Bullet);
        }
        else if (TriggerRole != null && !TriggerRole.IsDestroyed)
        {
            var calcBullet = TriggerRole.RoleState.CalcBullet(Attribute.Bullet);
            FireManager.ShootBullet(this, fireRotation, calcBullet);
            TriggerRole.ShootBulletHandler(this, fireRotation, Attribute.Bullet);
        }
        else
        {
            FireManager.ShootBullet(this, fireRotation, Attribute.Bullet);
            Master?.ShootBulletHandler(this, fireRotation, Attribute.Bullet);
        }
    }

    // //测试用, 敌人被消灭时触发手上武器开火
    // protected override void OnRemove(Role master)
    // {
    //     base.OnRemove(master);
    //
    //     if (master.IsDie && master.IsEnemyWithPlayer())
    //     {
    //         this.CallDelay(0, () =>
    //         {
    //             Debug.Log("敌人扔掉武器触发攻击");
    //             Trigger(master);
    //         });
    //     }
    // }
}