Example #1
0
        public override NodeStatus Run()
        {
            var evt = blackboard.robot.LastScanEvent;

            if (evt == null)
            {
                return(NodeStatus.Failed);
            }

            // Calculate bearing from gun to target
            var absoluteBearing = blackboard.robot.Heading + evt.Bearing;
            var bearingFromGun  = Utils.NormalRelativeAngleDegrees(absoluteBearing - blackboard.robot.GunHeading);

            // Turn left or right depending on what is shortest
            if (bearingFromGun < 0)
            {
                blackboard.robot.SetTurnGunLeft(Math.Abs(bearingFromGun));
            }
            else if (bearingFromGun > 0)
            {
                blackboard.robot.SetTurnGunRight(Math.Abs(bearingFromGun));
            }

            if (!useParallel)
            {
                blackboard.robot.Execute();
            }

            return(NodeStatus.Success);
        }
        public override NodeStatus Run()
        {
            var evt = blackboard.robot.LastScanEvent;

            if (evt == null)
            {
                return(NodeStatus.Failed);
            }

            // Calculation stolen from http://robowiki.net/wiki/Linear_Targeting
            var bulletPower   = 3;
            var headOnBearing = blackboard.robot.HeadingRadians + evt.BearingRadians;
            var linearBearing = headOnBearing + Math.Asin(evt.Velocity / Rules.GetBulletSpeed(bulletPower) * Math.Sin(evt.HeadingRadians - headOnBearing));

            blackboard.robot.TurnGunRightRadians(Utils.NormalRelativeAngle(linearBearing - blackboard.robot.GunHeadingRadians));

            return(NodeStatus.Success);
        }