Пример #1
0
        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 };
            }
        }
Пример #2
0
        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[] { };

        }
Пример #3
0
 public abstract Vector2[] FindTargets(ZazumoActor zazumoActor, IEnumerable<EnemyActor> enemies);
Пример #4
0
 public ZazumoPhysics(ZazumoActor actor, IResourceDictionary resourceDictionary)
     : base(resourceDictionary)
 {
     this._actor = actor;
 }
Пример #5
0
 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);
 }