Ejemplo n.º 1
0
        public void ValidateRequestedPosition(Cycle cycle)
        {
            var requestedLocation = _utilities.ToMapLocation(cycle.MovementController.RequestedPosition);

            // We only want to run logic against the cycle if it's potential new MovementController.HeadLocation has changed.
            if (!cycle.MovementController.HeadLocation.SameAs(requestedLocation))
            {
                var newLocation = validateOutOfBounds(cycle.MovementController.HeadLocation, _utilities.ToMapLocation(cycle.MovementController.RequestedPosition));
                newLocation = validateCycleCollisions(cycle.MovementController.HeadLocation, newLocation);

                // If our new location is now different from our request location, we need to change the confirmation,
                // otherwise we need to convert the newLocation to a position and confirm it that way.
                if (requestedLocation.SameAs(newLocation))
                {
                    cycle.MovementController.ConfirmPositionRequest();
                }
                else
                {
                    cycle.MovementController.ConfirmPositionRequest(_utilities.ToPosition(newLocation, cycle.MovementController.Position.y));
                }
            }
            else
            {
                // If our position request has not differed from our current head location then just confirm it
                cycle.MovementController.ConfirmPositionRequest();
            }
        }
Ejemplo n.º 2
0
        public void ValidateCollision(Cycle cycle)
        {
            var cycleLocation = _utilities.ToMapLocation(cycle.MovementController);

            // Check if we're out of bounds
            if (_utilities.OutOfBounds(cycleLocation))
            {
                cycle.HandleCollisionWith(null);
                return;
            }

            long occupiedById = _map[cycleLocation];

            if (occupiedById != 0 && occupiedById != -cycle.ID) // Check if we're colliding with something other than our head location
            {
                Cycle occupiedBy = _map.GetCycle(Math.Abs(occupiedById));

                cycle.HandleCollisionWith(occupiedBy);
            }
        }