public override Vector2[] FindTargets(ZazumoActor zazumoActor, IEnumerable<EnemyActor> enemies) { var moveDiretion = new Vector2(zazumoActor.Location.X, zazumoActor.Location.Y) - _lastPosition; moveDiretion.Normalize(); _lastPosition = new Vector2(zazumoActor.Location.X, zazumoActor.Location.Y); var requestedTarget = new Vector2(moveDiretion.X * -10f, moveDiretion.Y * -6f); if (Single.IsNaN(requestedTarget.X) || Single.IsNaN(requestedTarget.Y)) return new Vector2[]{}; if (_lastTarget == Vector2.Zero) { _lastTarget = requestedTarget; return new Vector2[] { requestedTarget }; } else { _lastTarget.Normalize(); var lastAngle = (Single)(Math.Acos(_lastTarget.X) * (_lastTarget.Y > 0 ? -1.0 : 1.0)); requestedTarget.Normalize(); var requestedAngle = (Single)(Math.Acos(requestedTarget.X) * (requestedTarget.Y > 0 ? -1.0 : 1.0)); Single angle = (0.7f * lastAngle) + (0.3f * requestedAngle); var direction = new Vector2((Single)Math.Cos(angle), (Single)Math.Sin(angle) * -1.0f); direction.Normalize(); var newtarget = new Vector2(direction.X * 10f, direction.Y * 6f); _lastTarget = newtarget; return new Vector2[] { newtarget }; } }
public override Vector2[] FindTargets(ZazumoActor zazumoActor, IEnumerable<EnemyActor> enemies) { var shortestDistance = Single.PositiveInfinity; Vector3 target = Vector3.Zero; // Find nearest enemy. foreach (var e in enemies) { if (e.Location.X < -1.0f || e.Location.X > 10.0f || e.Location.Y < -1.0f || e.Location.Y > 6f) continue; var distance = (e.Location - zazumoActor.Location).LengthSquared(); if (distance < shortestDistance) { shortestDistance = distance; target = e.Location; } return new Vector2[] { new Vector2(target.X, target.Y) }; } return new Vector2[] { }; }
public abstract Vector2[] FindTargets(ZazumoActor zazumoActor, IEnumerable<EnemyActor> enemies);
public ZazumoPhysics(ZazumoActor actor, IResourceDictionary resourceDictionary) : base(resourceDictionary) { this._actor = actor; }
private void CreateZazumo() { zazumoData = (CharacterArchetypeData)ResourceDictionary.GetResource("ZazumoData"); _zazumo = ActorFactory.Create<ZazumoActor>(zazumoData, new Vector2(_bounds.Left + _bounds.Width / 2f - zazumoData.Width / 2f, _bounds.Top + _bounds.Height / 2 - zazumoData.Height / 2f)); AddActorController<ZazumoController>(_zazumo); }