public MotionDriver.MotionTarget Tick(MotionDriver.MotionState state, double delta) { if (entity.IsEmpty()) { return(Tick(state, entity, delta)); } Vector3D entityVelocity = new Vector3D(entity.Velocity); Vector3D scanPosition = entity.HitPosition.Value + entityVelocity * (state.Time - lastScanTime); Vector3D difference = scanPosition - camera.GetPosition(); double scanDistance = difference.Length() + 50; if (camera.CanScan(scanDistance + 5)) { difference.Normalize(); MyDetectedEntityInfo detected = camera.Raycast(scanPosition + 50 * difference); if (!detected.IsEmpty()) { entity = detected; lastScanTime = state.Time; } } return(Tick(state, entity, delta)); }
public override MotionDriver.MotionTarget Tick(MotionDriver.MotionState state, MyDetectedEntityInfo entity, double delta) { Vector3D entityVelocity = new Vector3D(entity.Velocity); double entityDistance = Vector3D.Distance(state.Position, entity.HitPosition.Value); double bulletTime = entityDistance / bulletVelocity; Vector3D targetPosition = entity.Position + Vector3D.TransformNormal(blockPosition, entity.Orientation) + entityVelocity * (state.Time - lastScanTime + delta + bulletTime); Vector3D forward = -(state.Position - targetPosition); forward.Normalize(); Quaternion orientation = Quaternion.CreateFromForwardUp(forward, state.WorldMatrix.Up); return(MotionDriver.MotionTarget.Orientation(orientation)); }
public MotionDriver.MotionTarget Tick(MotionDriver.MotionState s, double d) { if (entity.IsEmpty()) { return(Tick(s, entity, d)); } var v = new Vector3D(entity.Velocity); var p = entity.HitPosition.Value + v * (s.Time - lastScanTime); var f = p - camera.GetPosition(); var t = f.Length() + 50; if (camera.CanScan(t + 5)) { f.Normalize(); var x = camera.Raycast(p + 50 * f); if (!x.IsEmpty()) { entity = x; lastScanTime = s.Time; } } return(Tick(s, entity, d)); }
public abstract MotionDriver.MotionTarget Tick(MotionDriver.MotionState state, MyDetectedEntityInfo entity, double delta);
public virtual void OnArrived(MotionDriver.MotionState state) { }
public void OnArrived(MotionDriver.MotionState s) { }
public MotionDriver.MotionTarget Tick(MotionDriver.MotionState s, double d) { return(T); }
public abstract MotionDriver.MotionTarget Tick(MotionDriver.MotionState s, MyDetectedEntityInfo e, double d);
public override MotionDriver.MotionTarget Tick(MotionDriver.MotionState s, MyDetectedEntityInfo e, double d) { var v = new Vector3D(e.Velocity); var a = Vector3D.Distance(s.Position, e.HitPosition.Value); var b = a / V; var t = e.Position + Vector3D.TransformNormal(P, e.Orientation) + v * (s.Time - lastScanTime + d + b); var f = -(s.Position - t); f.Normalize(); return(MotionDriver.MotionTarget.Orientation(Quaternion.CreateFromForwardUp(f, s.WorldMatrix.Up))); }
public override void OnArrived(MotionDriver.MotionState s) { }
public void OnArrivedOrientation(MotionDriver.MotionState state) { target.Rotation = null; }
public void OnArrivedPosition(MotionDriver.MotionState state) { target.Position = null; }
public MotionDriver.MotionTarget Tick(MotionDriver.MotionState state, double delta) { return(target); }