/// <summary> /// Find a target on the aiming line. /// Sets LineTaget when a target is aimed at. /// </summary> public Fixed AimLineAttack(Mobj shooter, Angle angle, Fixed range) { shooter = world.SubstNullMobj(shooter); currentShooter = shooter; currentShooterZ = shooter.Z + (shooter.Height >> 1) + Fixed.FromInt(8); currentRange = range; var targetX = shooter.X + range.ToIntFloor() * Trig.Cos(angle); var targetY = shooter.Y + range.ToIntFloor() * Trig.Sin(angle); // Can't shoot outside view angles. topSlope = Fixed.FromInt(100) / 160; bottomSlope = Fixed.FromInt(-100) / 160; lineTarget = null; world.PathTraversal.PathTraverse( shooter.X, shooter.Y, targetX, targetY, PathTraverseFlags.AddLines | PathTraverseFlags.AddThings, aimTraverseFunc); if (lineTarget != null) { return(currentAimSlope); } return(Fixed.Zero); }