public static void Launch(EntityManager manager, Entity entity, float2 targetPosition, float absoluteVelocity, float2 direction, float destroyDelay = -1)
    {
        if (!manager.HasComponent <ProjectileComponentData>(entity))
        {
            manager.AddComponent <ProjectileComponentData>(entity);
            var data = manager.GetComponentData <ProjectileComponentData>(entity);

            var pos   = manager.GetComponentData <Translation>(entity);
            var scale = manager.GetComponentData <Scale>(entity);

            data.accelerationResistance = new float2(0, ProjectileLaunshSetupComponentData.scaledG);
            data.ground = ProjectileComponentData.GrountType.TARGET_Y;
            data.lifetimeAfterProjectileStop     = destroyDelay;
            data.removeEntityWhenProjectileStops = destroyDelay >= 0;
            data.targetPosition = targetPosition;

            manager.SetComponentData(entity, data);
            if (!manager.HasComponent <VelocityComponentData>(entity))
            {
                manager.AddComponent <VelocityComponentData>(entity);
            }
            var velocity = manager.GetComponentData <VelocityComponentData>(entity);

            velocity.value = direction.GetNormalized() * scale.Value * absoluteVelocity;
            manager.SetComponentData(entity, velocity);
        }
    }