Exemple #1
0
        /// <summary>
        ///  <para>
        ///   Method used to command a creature to begin moving towards a specific location
        ///   at a specific speed.  The actual movement operation may take several turns,
        ///   but is always initiated using this method.  Your movement location should
        ///   be within the world boundary and your movement speed should be less than or
        ///   equal to your creature's Species.MaximumSpeed.
        ///  </para>
        ///  <para>
        ///   Once called the creature will begin moving towards the specified point.  This
        ///   movement will continue until you issue a different BeginMoving command to your
        ///   creature, it reaches its destination, or becomes blocked by something.  Any
        ///   calls to BeginMoving will clear out any previous calls, so care should be taken
        ///   when issuing multi-part path movements.
        ///  </para>
        ///  <para>
        ///   Once the movement is completed the MoveCompleted event will be fired and your
        ///   event handler for this function will be called if you've provided one.  The
        ///   event handler will provide full information about the results of an attempted
        ///   movement operation.
        ///  </para>
        /// </summary>
        /// <param name="vector">
        ///  The MovementVector that determines the point you are moving to and how fast to move there.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        ///  Thrown if the vector parameter is null.
        /// </exception>
        /// <exception cref="OutOfBoundsException">
        ///  Thrown if the destination is outside of the world boundaries.
        /// </exception>
        /// <exception cref="TooFastException">
        ///  Thrown if the speed defined in the vector is greater than Species.MaximumSpeed.
        /// </exception>
        public void BeginMoving(MovementVector vector)
        {
            if (vector == null)
            {
                throw new ArgumentNullException("vector", "The argument 'vector' cannot be null");
            }

            if (vector.Speed > State.AnimalSpecies.MaximumSpeed)
            {
                throw new TooFastException();
            }

            if (vector.Destination.X > World.WorldWidth - 1 ||
                vector.Destination.X < 0 ||
                vector.Destination.Y > World.WorldHeight - 1 ||
                vector.Destination.Y < 0)
            {
                throw new OutOfBoundsException();
            }

            var actionID = GetNextActionID();
            var action   = new MoveToAction(ID, actionID, vector);

            lock (PendingActions)
            {
                PendingActions.SetMoveToAction(action);
                InProgressActions.SetMoveToAction(action);
            }
        }
Exemple #2
0
 /// <summary>
 ///  Creates a new movement action for an organism.
 /// </summary>
 /// <param name="organismID">The ID of the organism the action will work on.</param>
 /// <param name="actionID">The incremental ID representing this action.</param>
 /// <param name="moveTo">The movement vector that defines this action.</param>
 internal MoveToAction(string organismID, int actionID, MovementVector moveTo)
     : base(organismID, actionID)
 {
     MovementVector = moveTo;
 }
Exemple #3
0
        /// <summary>
        ///  <para>
        ///   Method used to command a creature to begin moving towards a specific location
        ///   at a specific speed.  The actual movement operation may take several turns,
        ///   but is always initiated using this method.  Your movement location should
        ///   be within the world boundary and your movement speed should be less than or
        ///   equal to your creature's Species.MaximumSpeed.
        ///  </para>
        ///  <para>
        ///   Once called the creature will begin moving towards the specified point.  This
        ///   movement will continue until you issue a different BeginMoving command to your
        ///   creature, it reaches its destination, or becomes blocked by something.  Any
        ///   calls to BeginMoving will clear out any previous calls, so care should be taken
        ///   when issuing multi-part path movements.
        ///  </para>
        ///  <para>
        ///   Once the movement is completed the MoveCompleted event will be fired and your
        ///   event handler for this function will be called if you've provided one.  The
        ///   event handler will provide full information about the results of an attempted
        ///   movement operation.
        ///  </para>
        /// </summary>
        /// <param name="vector">
        ///  The MovementVector that determines the point you are moving to and how fast to move there.
        /// </param>
        /// <exception cref="System.ArgumentNullException">
        ///  Thrown if the vector parameter is null.
        /// </exception>
        /// <exception cref="OutOfBoundsException">
        ///  Thrown if the destination is outside of the world boundaries.
        /// </exception>
        /// <exception cref="TooFastException">
        ///  Thrown if the speed defined in the vector is greater than Species.MaximumSpeed.
        /// </exception>
        public void BeginMoving(MovementVector vector)
        {
            if (vector == null)
            {
                throw new ArgumentNullException("vector", "The argument 'vector' cannot be null");
            }

            if (vector.Speed > State.AnimalSpecies.MaximumSpeed)
            {
                throw new TooFastException();
            }

            if (vector.Destination.X > World.WorldWidth - 1 ||
                vector.Destination.X < 0 ||
                vector.Destination.Y > World.WorldHeight - 1 ||
                vector.Destination.Y < 0)
            {
                throw new OutOfBoundsException();
            }

            var actionID = GetNextActionID();
            var action = new MoveToAction(ID, actionID, vector);
            lock (PendingActions)
            {
                PendingActions.SetMoveToAction(action);
                InProgressActions.SetMoveToAction(action);
            }
        }
Exemple #4
0
 /// <summary>
 ///  Creates a new teleportzone with all fields initialized.
 /// </summary>
 /// <param name="rectangle">The location and size of the zone.</param>
 /// <param name="vector">The movement vector of the zone.</param>
 /// <param name="ID">The ID for this zone.</param>
 public TeleportZone(Rectangle rectangle, MovementVector vector, int ID)
 {
     _rectangle = rectangle;
     _vector = vector;
     _teleportID = ID;
 }
Exemple #5
0
 /// <summary>
 ///  Get a new teleport zone that is initialized with a different
 ///  movement vector.
 /// </summary>
 /// <param name="vector">The new movement vector.</param>
 /// <returns>The update teleport zone.</returns>
 public TeleportZone SetVector(MovementVector vector)
 {
     var zone = Clone();
     zone._vector = vector;
     return zone;
 }
 /// <summary>
 ///  Creates a new teleportzone with all fields initialized.
 /// </summary>
 /// <param name="rectangle">The location and size of the zone.</param>
 /// <param name="vector">The movement vector of the zone.</param>
 /// <param name="ID">The ID for this zone.</param>
 public TeleportZone(Rectangle rectangle, MovementVector vector, int ID)
 {
     this.rectangle = rectangle;
     this.vector = vector;
     this.teleportID = ID;
 }
Exemple #7
0
 /// <summary>
 ///  Creates a new movement action for an organism.
 /// </summary>
 /// <param name="organismID">The ID of the organism the action will work on.</param>
 /// <param name="actionID">The incremental ID representing this action.</param>
 /// <param name="moveTo">The movement vector that defines this action.</param>
 internal MoveToAction(string organismID, int actionID, MovementVector moveTo) : base(organismID, actionID)
 {
     MovementVector = moveTo;
 }