protected override void OnInitialize()
        {
            MapBoundsData data = _entity.Current <MapBoundsData>();

            transform.localScale = new Vector3(data.Width * 2, 1, data.Height * 2);
            transform.position   = new Vector3(0, -2, 0);
        }
        /// <summary>
        /// Every update, we want to ensure that objects are inside the map and we also want to move
        /// the object according to its velocity.
        /// </summary>
        public void OnUpdate(IEntity entity)
        {
            MapBoundsData mapBounds = GlobalEntity.Current <MapBoundsData>();

            RespondToMapBounds(mapBounds, entity);
            IntegratePosition(entity);
        }
        /// <summary>
        /// Changes an objects velocity if it has left the map.
        /// </summary>
        private static void RespondToMapBounds(MapBoundsData mapBounds, IEntity entity) {
            PositionData pos = entity.Current<PositionData>();
            MovementData mov = entity.Current<MovementData>();

            if (((pos.Position.Z - pos.Position.Radius) < -mapBounds.Height && mov.Velocity.Z < 0) ||
                ((pos.Position.Z + pos.Position.Radius) > mapBounds.Height && mov.Velocity.Z > 0)) {
                entity.Modify<MovementData>().MultVelocity(1, -1);
            }
            if (((pos.Position.X - pos.Position.Radius) < -mapBounds.Width && mov.Velocity.X < 0) ||
                ((pos.Position.X + pos.Position.Radius) > mapBounds.Width && mov.Velocity.X > 0)) {
                entity.Modify<MovementData>().MultVelocity(-1, 1);
            }
        }
        /// <summary>
        /// Changes an objects velocity if it has left the map.
        /// </summary>
        private static void RespondToMapBounds(MapBoundsData mapBounds, IEntity entity)
        {
            PositionData pos = entity.Current <PositionData>();
            MovementData mov = entity.Current <MovementData>();

            if (((pos.Position.Z - pos.Position.Radius) < -mapBounds.Height && mov.Velocity.Z < 0) ||
                ((pos.Position.Z + pos.Position.Radius) > mapBounds.Height && mov.Velocity.Z > 0))
            {
                entity.Modify <MovementData>().MultVelocity(1, -1);
            }
            if (((pos.Position.X - pos.Position.Radius) < -mapBounds.Width && mov.Velocity.X < 0) ||
                ((pos.Position.X + pos.Position.Radius) > mapBounds.Width && mov.Velocity.X > 0))
            {
                entity.Modify <MovementData>().MultVelocity(-1, 1);
            }
        }