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); } }
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; } }
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); } }
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(); //} }