Edit of asset "Ballistic Solutions (GDScript, C#)" Accepted
Old/Current | New/Edit | |
---|---|---|
Title | Ballistic Solutions (GDScript, C#) | BDC - Ballistic Deflection Calculator (GDScript, C#) |
Description |
Library for calculating interception times, impact positions, and firing vectors, taking into account the velocities and accelerations of both projectile and target. Example: # ... @export var projectile_packed_scene: PackedScene var projectile_speed: float = 200 var projectile_acceleration: Vector2 = Vector2.ZERO func shoot(target: Target2D) -> void: var to_target: Vector2 = target.global_position - global_position var velocity: Vector2 = Bsc.best_firing_velocity_vector2(projectile_speed, to_target, target.velocity, projectile_acceleration, target.acceleration) if is_nan(velocity.x): print("Impossible to hit the target") return var new_projectile: Projectile2D = projectile_packed_scene.instantiate() new_projectile.global_position = global_position new_projectile.velocity = velocity new_projectile.acceleration = projectile_acceleration get_parent().add_child(new_projectile) |
Ballistic deflection calculator is a tool for calculating the shot vector considering speeds and accelerations for Godot. Methods: GDScipt: Bdc # Times To Hit Array[float] times_to_hit(projectile_speed: float, to_target: Variant, target_velocity: Variant = Vector4.ZERO, projectile_acceleration: Variant = Vector4.ZERO, target_acceleration: Variant = Vector4.ZERO) static Array[float] times_to_hit_vector2(projectile_speed: float, to_target: Vector2, target_velocity: Vector2 = Vector2.ZERO, projectile_acceleration: Vector2 = Vector2.ZERO, target_acceleration: Vector2 = Vector2.ZERO) static Array[float] times_to_hit_vector3(projectile_speed: float, to_target: Vector3, target_velocity: Vector3 = Vector3.ZERO, projectile_acceleration: Vector3 = Vector3.ZERO, target_acceleration: Vector3 = Vector3.ZERO) static Array[float] times_to_hit_vector4(projectile_speed: float, to_target: Vector4, target_velocity: Vector4 = Vector4.ZERO, projectile_acceleration: Vector4 = Vector4.ZERO, target_acceleration: Vector4 = Vector4.ZERO) static # Velocities Array velocities(projectile_speed: float, to_target: Variant, target_velocity: Variant = Vector4.ZERO, projectile_acceleration: Variant = Vector4.ZERO, target_acceleration: Variant = Vector4.ZERO) static Array[Vector2] velocities_vector2(projectile_speed: float, to_target: Vector2, target_velocity: Vector2 = Vector2.ZERO, projectile_acceleration: Vector2 = Vector2.ZERO, target_acceleration: Vector2 = Vector2.ZERO) static Array[Vector3] velocities_vector3(projectile_speed: float, to_target: Vector3, target_velocity: Vector3 = Vector3.ZERO, projectile_acceleration: Vector3 = Vector3.ZERO, target_acceleration: Vector3 = Vector3.ZERO) static Array[Vector4] velocities_vector4(projectile_speed: float, to_target: Vector4, target_velocity: Vector4 = Vector4.ZERO, projectile_acceleration: Vector4 = Vector4.ZERO, target_acceleration: Vector4 = Vector4.ZERO) static # Velocity From Time To Hit Variant velocity_from_time_to_hit(time_to_hit: float, to_target: Variant, target_velocity: Variant = Vector4.ZERO, projectile_acceleration: Variant = Vector4.ZERO, target_acceleration: Variant = Vector4.ZERO) static Vector2 velocity_from_time_to_hit_vector2(time_to_hit: float, to_target: Vector2, target_velocity: Vector2 = Vector2.ZERO, projectile_acceleration: Vector2 = Vector2.ZERO, target_acceleration: Vector2 = Vector2.ZERO) static Vector3 velocity_from_time_to_hit_vector3(time_to_hit: float, to_target: Vector3, target_velocity: Vector3 = Vector3.ZERO, projectile_acceleration: Vector3 = Vector3.ZERO, target_acceleration: Vector3 = Vector3.ZERO) static Vector4 velocity_from_time_to_hit_vector4(time_to_hit: float, to_target: Vector4, target_velocity: Vector4 = Vector4.ZERO, projectile_acceleration: Vector4 = Vector4.ZERO, target_acceleration: Vector4 = Vector4.ZERO) static C#: BallisticDeflectionCalculator.Bdc // Times To Hit T[] TimesToHit<T>(T projectileSpeed, Vector2 toTarget, Vector2 targetVelocity = default, Vector2 projectileAcceleration = default, Vector2 targetAcceleration = default) where T : IFloatingPoint<T>; T[] TimesToHit<T>(T projectileSpeed, Vector3 toTarget, Vector3 targetVelocity = default, Vector3 projectileAcceleration = default, Vector3 targetAcceleration = default) where T : IFloatingPoint<T>; T[] TimesToHit<T>(T projectileSpeed, Vector4 toTarget, Vector4 targetVelocity = default, Vector4 projectileAcceleration = default, Vector4 targetAcceleration = default) where T : IFloatingPoint<T>; // Velocities Vector2[] Velocities<T>(T projectileSpeed, Vector2 toTarget, Vector2 targetVelocity = default, Vector2 projectileAcceleration = default, Vector2 targetAcceleration = default) where T : IFloatingPoint<T>; Vector3[] Velocities<T>(T projectileSpeed, Vector3 toTarget, Vector3 targetVelocity = default, Vector3 projectileAcceleration = default, Vector3 targetAcceleration = default) where T : IFloatingPoint<T>; Vector4[] Velocities<T>(T projectileSpeed, Vector4 toTarget, Vector4 targetVelocity = default, Vector4 projectileAcceleration = default, Vector4 targetAcceleration = default) where T : IFloatingPoint<T>; // Velocity From Time To Hit Vector2 VelocityFromTimeToHit<T>(T timeToHit, Vector2 toTarget, Vector2 targetVelocity = default, Vector2 projectileAcceleration = default, Vector2 targetAcceleration = default) where T : IFloatingPoint<T>; Vector3 VelocityFromTimeToHit<T>(T timeToHit, Vector3 toTarget, Vector3 targetVelocity = default, Vector3 projectileAcceleration = default, Vector3 targetAcceleration = default) where T : IFloatingPoint<T>; Vector4 VelocityFromTimeToHit<T>(T timeToHit, Vector4 toTarget, Vector2 targetVelocity = default, Vector4 projectileAcceleration = default, Vector4 targetAcceleration = default) where T : IFloatingPoint<T>; Example: GDScipt: @export var projectile_packed_scene: PackedScene var projectile_speed: float = 200 var projectile_acceleration: Vector2 = Vector2.ZERO func shoot(target: Target2D) -> void: var to_target: Vector2 = target.global_position - global_position var projectile_velocities: Array[Vector2] = Bdc.velocities_vector2(bullet_speed, to_target, target.velocity, projectile_acceleration, target.acceleration) if projectile_velocities.size() == 0: print("Impossible to hit the target") return var new_projectile: Projectile2D = projectile_packed_scene.instantiate() new_projectile.global_position = global_position new_projectile.velocity = bullet_velocities[0] new_projectile.acceleration = projectile_acceleration get_parent().add_child(new_projectile) C#: using Godot; using BallisticDeflectionCalculator; // ... [Export] public PackedScene? ProjectilePackedScene { get; set; } public float ProjectileSpeed { get; set; } = 200; public Vector2 ProjectileAcceleration { get; set; } = Vector2.Zero; public void Shoot(Target2D target) { Vector2 toTarget = target.GlobalPosition - GlobalPosition; Vector2[] projectileVelocities = Bdc.Velocities(ProjectileSpeed, toTarget, target.Velocity, ProjectileAcceleration, target.Acceleration); if (projectileVelocities.Length == 0) { GD.Print("Impossible to hit the target"); return; } Projectile2D newProjectile = ProjectilePackedScene.Instantiate<Projectile2D>(); newProjectile.GlobalPosition = GlobalPosition; newProjectile.Velocity = projectileVelocities[0]; newProjectile.Acceleration = ProjectileAcceleration; GetParent().AddChild(newProjectile); } |
Category | Scripts | |
License | MIT | |
Repository Provider | GitHub | |
Repository Url | https://github.com/neclor/ballistic-solutions | |
Issues Url | https://github.com/neclor/ballistic-solutions/issues | |
Godot version | Godot 4.0 | |
Version String | 4.0.1 | 3.0.0 |
Download Commit | 491ffeb7be4816d9d913a09fcc37a500c4390f76 | 5b32f69f5020253c93bc7ad0b50d7856db6ffb2a |
Download Url (Computed) | https://github.com/neclor/ballistic-solutions/archive/491ffeb7be4816d9d913a09fcc37a500c4390f76.zip | https://github.com/neclor/ballistic-solutions/archive/5b32f69f5020253c93bc7ad0b50d7856db6ffb2a.zip |
Icon Url |
https://raw.githubusercontent.com/neclor/ballistic-solutions/main/icon.png
![]() |