public void Setup(
            IProtoStaticWorldObject protoStaticWorldObject,
            bool isCancelable,
            bool isRepeatCallbackIfHeld,
            bool isDrawConstructionGrid,
            bool isBlockingInput,
            ValidateCanBuildDelegate validateCanPlaceCallback,
            PlaceSelectedDelegate placeSelectedCallback,
            double?maxDistance = null)
        {
            this.maxDistanceSqr = maxDistance.HasValue
                                      ? maxDistance.Value * maxDistance.Value
                                      : double.MaxValue;

            this.protoStaticWorldObject   = protoStaticWorldObject;
            this.isCancelable             = isCancelable;
            this.isRepeatCallbackIfHeld   = isRepeatCallbackIfHeld;
            this.isDrawConstructionGrid   = isDrawConstructionGrid;
            this.IsBlockingInput          = isBlockingInput;
            this.placeSelectedCallback    = placeSelectedCallback;
            this.validateCanBuildCallback = validateCanPlaceCallback;
            this.IsFrozen = false;

            this.DestroyComponents();
        }
        public void Setup(
            IProtoStaticWorldObject protoStaticWorldObject,
            bool isCancelable,
            bool isRepeatCallbackIfHeld,
            bool isDrawConstructionGrid,
            bool isBlockingInput,
            ValidateCanBuildDelegate validateCanPlaceCallback,
            PlaceSelectedDelegate placeSelectedCallback,
            double delayRemainsSeconds = 0)
        {
            this.protoStaticWorldObject   = protoStaticWorldObject;
            this.isCancelable             = isCancelable;
            this.isRepeatCallbackIfHeld   = isRepeatCallbackIfHeld;
            this.isDrawConstructionGrid   = isDrawConstructionGrid;
            this.IsBlockingInput          = isBlockingInput;
            this.placeSelectedCallback    = placeSelectedCallback;
            this.validateCanBuildCallback = validateCanPlaceCallback;
            this.IsFrozen = false;

            this.delayRemainsSeconds = delayRemainsSeconds;

            this.DestroyComponents();
        }