public class TurretAim : ComponentSystem { protected override void OnUpdate() { EntityManager entityManager = World.DefaultGameObjectInjectionWorld.EntityManager; Entities.WithAll().ForEach((Entity entity, ref Translation turretPos, ref Rotation turretRot, ref Angle angle, ref HasTarget target)=>{ if(target.target != Entity.Null && EntityManager.Exists(target.target)){ Translation enemyPos = entityManager.GetComponentData(target.target); float3 targetVec = enemyPos.Value - turretPos.Value; float len = targetVec.x*targetVec.x + targetVec.y*targetVec.y + targetVec.z*targetVec.z; len = Mathf.Sqrt(len); float a = targetVec.z / len; a = Mathf.Acos(a); float rad = angle.angle * Mathf.Deg2Rad; if(targetVec.x < 0) a = -a; float speedInDeg = 90.0f; float maxDelta = Mathf.Deg2Rad * speedInDeg * Time.DeltaTime; float newRot = Mathf.MoveTowards(rad, a, maxDelta); angle.angle = newRot * Mathf.Rad2Deg; turretRot.Value = quaternion.EulerXYZ(0, newRot, 0); } else{ PostUpdateCommands.RemoveComponent(entity, typeof(HasTarget)); } }); } }