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); } }