public class TurretAim : ComponentSystem
{
protected override void OnUpdate()
{
EntityManager entityManager = World.DefaultGameObjectInjectionWorld.EntityManager;
Entities.WithAll<HasTarget>().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<Translation>(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));
}
});
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}