Newer
Older
DungeonShooting / src / weapon / ThrowNode.cs
@小李xl 小李xl on 9 Jun 2022 1 KB 实现投抛物体
using System;
using Godot;

/// <summary>
/// 模拟抛出的物体, 使用时将对象挂载到该节点上即可
/// </summary>
public class ThrowNode : Node2D
{
    public float MaxHeight = 30;
    public float TargetHeight = 0;
    public float StartHeight = 0;

    public Vector2 StartPos;
    public Vector2 TargetPos = new Vector2(120, 100);
    public Vector2 RealPosition = Vector2.Zero;


    public override void _Ready()
    {
        StartPos = GlobalPosition;
        RealPosition = StartPos;
    }

    public override void _Process(float delta)
    {
        if (RealPosition.DistanceSquaredTo(TargetPos) > 1)
        {
            float v = (StartPos.DistanceTo(RealPosition)) / (StartPos.DistanceTo(TargetPos));
            float progress = Mathf.Sin(v * Mathf.Pi);

            float y = 0;
            if (v <= 0.5f)
            {
                y = Mathf.Lerp(StartHeight, MaxHeight, progress);
            }
            else
            {
                y = Mathf.Lerp(TargetHeight, MaxHeight, progress);
            }

            RealPosition = RealPosition.MoveToward(TargetPos, 100 * delta);
            GlobalPosition = RealPosition - new Vector2(0, y);
        }

    }

}