private void PickTargetToWatch()
    {
        //Debug.Log("to watch");
        var knower = _followedTarget.TargetTransform.GetComponent("IKnowsCurrentTarget") as IKnowsCurrentTarget;

        if (knower != null && knower.CurrentTarget != null)
        {
            _targetToWatch = knower.CurrentTarget;
            //Debug.Log("Watching followed object's target: " + _targetToWatch.TargetTransform.name);
        }
        else
        {
            var targets = _detector.DetectTargets()
                          .Where(t => t.TargetTransform.parent == null); //Don't watch anything that still has a parent.
            targets = _watchPicker.FilterTargets(targets)
                      .OrderByDescending(s => s.Score);
            //foreach (var item in targets)
            //{
            //    Debug.Log(item.TargetTransform.name + ": " + item.Score);
            //}

            _targetToWatch = targets
                             .FirstOrDefault();
            //Debug.Log("Watching picked target: " + _targetToWatch.TargetTransform.name);
        }
    }
Exemple #2
0
        public void RunSpaceship()
        {
            var targets = _picker.FilterTargets(_detector.DetectTargets());
            var target  = targets.OrderByDescending(t => t.Score).FirstOrDefault();

            if (_knower != null)
            {
                _knower.CurrentTarget = target;
            }

            _pilot.Fly(target);
        }
    private void PickBestTargetToFollow()
    {
        //Debug.Log("To Follow");
        var targets = _detector.DetectTargets()
                      .Where(t => t.TargetTransform.parent == null); //Don't follow anything that still has a parent.

        targets = _followPicker.FilterTargets(targets)
                  .OrderByDescending(s => s.Score);
        //foreach (var item in targets)
        //{
        //    Debug.Log(item.TargetTransform.name + ": " + item.Score);
        //}

        _followedTarget = targets
                          .FirstOrDefault();

        if (_followedTarget != null)
        {
            _tagPicker.Tag = _followedTarget.TargetTransform.tag;
        }
    }
Exemple #4
0
        public Rigidbody GetDestinationObject()
        {
            var targets = _detector
                          .DetectTargets()
                          .Select(t => t.Rigidbody.GetComponent <Rigidbody>())
                          .Where(t => t != null)
                          .Select(t => new PotentialTarget(t));

            //Debug.Log("unfiltered " + targets.Count());
            targets = _picker.FilterTargets(targets);

            var maxScore = targets.Max(t => t.Score);

            targets = targets.Where(t =>
                                    t.Score >= 0.5 * maxScore
                                    );

            //Debug.Log("filtered " + targets.Count());

            //Vector3 locationSum = SumVecors(targets.Select(t => t.position));
            if (targets.Any())
            {
                var averageXLocation = targets.Average(t => t.Rigidbody.position.x);
                var averageYLocation = targets.Average(t => t.Rigidbody.position.y);
                var averageZLocation = targets.Average(t => t.Rigidbody.position.z);
                _destination.position = new Vector3(averageXLocation, averageYLocation, averageZLocation);

                var averageXVelocity = targets.Average(t => t.Rigidbody.velocity.x);
                var averageYVelocity = targets.Average(t => t.Rigidbody.velocity.y);
                var averageZVelocity = targets.Average(t => t.Rigidbody.velocity.z);
                _destination.velocity = new Vector3(averageXVelocity, averageYVelocity, averageZVelocity);
            }
            else
            {
                _destination.position = Vector3.zero;
                _destination.velocity = Vector3.zero;
            }
            return(_destination);
        }
        public void RunTurret()
        {
            var allTargets = _targetDetector.DetectTargets();
            var bestTarget = _targetPicker.FilterTargets(allTargets).OrderByDescending(t => t.Score).FirstOrDefault();

            if (_knower != null)
            {
                _knower.CurrentTarget = bestTarget;
            }

            if (bestTarget != null)
            {
                //Debug.Log(name + " is aiming at " + bestTarget.TargetTransform);
                _turretTurner.TurnToTarget(bestTarget);
                _fireControl.ShootIfAimed(bestTarget);
            }
            else
            {
                _turretTurner.ReturnToRest();
                _fireControl.Shoot(false);
            }
        }
Exemple #6
0
        public void RunRocket()
        {
            var allTargets = _targetDetector.DetectTargets();
            var bestTarget = _targetPicker.FilterTargets(allTargets).OrderByDescending(t => t.Score).FirstOrDefault();

            if (_knower != null)
            {
                _knower.CurrentTarget = bestTarget;
            }

            //Debug.Log(name + " is flying at " + bestTarget.TargetTransform);
            _pilot.Fly(bestTarget);

            if (_pilot.StartDelay <= 0)
            {
                _detonator.AutoDetonate(bestTarget);
            }

            //Disabled detonation when out of fuel.
            //if(_engineControl.RemainingFuel < DetonateWithLessThanXRemainingFuel)
            //{
            //    _detonator.DetonateNow();
            //}
        }