Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / prop / PropActivity.cs
using Godot;

/// <summary>
/// 道具基类
/// </summary>
public abstract partial class PropActivity : ActivityObject
{
    /// <summary>
    /// 道具所属角色
    /// </summary>
    public Role Master { get; set; }

    /// <summary>
    /// 当道具被拾起时调用 (在 Master 赋值之后调用)
    /// </summary>
    public abstract void OnPickUpItem();

    /// <summary>
    /// 当道具被移除时调用 (在 Master 置为 null 之前调用)
    /// </summary>
    public abstract void OnRemoveItem();

    public override void OnInit()
    {
        ThrowCollisionMask = PhysicsLayer.Wall;
    }

    /// <summary>
    /// 触发扔掉道具效果, 并不会管道具是否在道具背包中
    /// </summary>
    /// <param name="master">触发扔掉该道具的的角色</param>
    public void ThrowProp(Role master)
    {
        ThrowProp(master, master.GlobalPosition);
    }
    
    /// <summary>
    /// 触发扔掉道具效果, 并不会管道具是否在道具背包中
    /// </summary>
    /// <param name="master">触发扔掉该道具的的角色</param>
    /// <param name="startPosition">投抛起始位置</param>
    public void ThrowProp(Role master, Vector2 startPosition)
    {
        //阴影偏移
        ShadowOffset = new Vector2(0, 2);
        GlobalRotation = 0;
        var startHeight = 8;
        Throw(startPosition, startHeight, 0, Vector2.Zero, 0);

        //继承role的移动速度
        InheritVelocity(master);
    }
}