using Godot; namespace Mr.BrickAdventures.scripts.components; [GlobalClass] public partial class GravityMotionComponent : Node2D { [Export] public CharacterBody2D Body { get; set; } [Export] public LaunchComponent LaunchComponent { get; set; } [Export] public Vector2 Gravity { get; set; } = new Vector2(0, 1000f); [Export] public Vector2 TargetDirection { get; set; } = Vector2.Up; private Vector2 _velocity = Vector2.Zero; public override void _Ready() { if (LaunchComponent == null) return; var horizontalDirection = LaunchComponent.InitialDirection.Normalized(); var combinedDirection = (horizontalDirection + TargetDirection).Normalized(); _velocity = combinedDirection * LaunchComponent.Speed; } public override void _PhysicsProcess(double delta) { if (Body == null) return; _velocity += Gravity * (float)delta; Body.Velocity = _velocity; Body.MoveAndSlide(); if (_velocity.LengthSquared() > 0.01f) { Body.Rotation = _velocity.Angle(); } } }