Esempio n. 1
0
        private BoxDraft CreateDraft()
        {
            var result = BoxDraft.Create();

            result.Parse(target);

            result.length = draftLength;
            result.height = draftHeight;
            result.depth  = draftDepth;

            return(result);
        }
        private bool IsDraftValid(BoxDraft draft)
        {
            if (!Utils.IsValid(draft))
            {
                return(false);
            }

            if (Utils.NegativeOrZero(draft.height))
            {
                return(false);
            }

            return(true);
        }
        private static BoxDraft CreateRoofDraft(CapGenerationSettings settings)
        {
            var result = BoxDraft.Create();

            result.length = settings.length;
            result.depth  = settings.depth;
            result.height = settings.height;

            result.parent = settings.parent;
            result.pivot  = settings.pivot;

            result.up    = settings.up;
            result.right = settings.right;

            return(result);
        }
Esempio n. 4
0
        public void Build(BoxDraft draft)
        {
            if (!Utils.IsValid(this))
            {
                return;
            }

            if (!Utils.IsValid(draft))
            {
                return;
            }

            var settings = CreateSettings(parameters, draft);

            if (!Utils.IsValid(settings))
            {
                return;
            }

            var action = GetGenerationAction(parameters.mode);

            action(prefab, settings);
        }
        private void Build()
        {
            if (builder == null)
            {
                return;
            }

            if (draft.parent == null)
            {
                return;
            }

            Utils.DeleteChilds(draft.parent);

            var boxDraft = BoxDraft.Create(draft);

            boxDraft.Parse(draft.parent);
            (builder as IBoxBuilder).Build(boxDraft);

            if (isRunDecorators)
            {
                Utils.RunDecorators(boxDraft.parent);
            }
        }
        public void Build(BoxDraft draft)
        {
            if (!IsValid())
            {
                return;
            }

            if (!IsDraftValid(draft))
            {
                return;
            }

            var boxSettings = CreateBoxSettings(this, draft);

            if (!Utils.IsValid(boxSettings))
            {
                return;
            }

            // Front
            {
                var settings = CreateSideSettings(boxSettings);
                settings.length       = boxSettings.length;
                settings.height       = boxSettings.sidesHeight;
                settings.forwardScale = boxSettings.forwardScale;

                if (Utils.IsValid(settings))
                {
                    GenerateLine(front, settings);
                }
            }

            // Right
            {
                var settings = CreateSideSettings(boxSettings);
                settings.length       = boxSettings.depth;
                settings.height       = boxSettings.sidesHeight;
                settings.forwardScale = boxSettings.rightScale;
                settings.pivot        = boxSettings.GetRightPivot();
                settings.right        = boxSettings.GetRotatedRightAxis(-90f);

                if (Utils.IsValid(settings))
                {
                    GenerateLine(right, settings);
                }
            }

            // Back
            {
                var settings = CreateSideSettings(boxSettings);
                settings.length       = boxSettings.length;
                settings.height       = boxSettings.sidesHeight;
                settings.forwardScale = boxSettings.forwardScale;
                settings.pivot        = boxSettings.GetBackPivot();
                settings.right        = boxSettings.GetRotatedRightAxis(-180f);

                if (Utils.IsValid(settings))
                {
                    GenerateLine(back, settings);
                }
            }

            // Left
            {
                var settings = CreateSideSettings(boxSettings);
                settings.length       = boxSettings.depth;
                settings.height       = boxSettings.sidesHeight;
                settings.forwardScale = boxSettings.rightScale;
                settings.pivot        = boxSettings.GetLeftPivot();
                settings.right        = boxSettings.GetRotatedRightAxis(-270f);

                if (Utils.IsValid(settings))
                {
                    GenerateLine(left, settings);
                }
            }

            // Roof
            {
                var settings    = CreateCapSettings(boxSettings);
                var depthScale  = boxSettings.forwardScale;
                var lengthScale = boxSettings.rightScale;

                settings.pivot = boxSettings.pivot + boxSettings.up * boxSettings.sidesHeight;

                settings.length -= (left.depth + right.depth) * lengthScale;
                settings.pivot  += boxSettings.right * left.depth * lengthScale;

                settings.depth -= (front.depth + back.depth) * depthScale;
                settings.pivot += boxSettings.forward * front.depth * depthScale;

                if (Utils.IsValid(settings))
                {
                    if (Utils.IsValid(cap))
                    {
                        GenerateRoof(cap, settings);
                    }
                }
            }
        }
        /// ======================================================================

        private static BoxGenerationSettings CreateBoxSettings(StandardBoxBuilding builder, BoxDraft draft)
        {
            var result = BoxGenerationSettings.Create();

            result.length = draft.length;
            result.depth  = draft.depth;

            var capHeight = Utils.IsValid(builder.cap) ? builder.cap.height : 0f;

            var wallScaledHeight = draft.height - capHeight;
            var scale            = builder.CalculateHeightScale(wallScaledHeight);
            var roofScaledHeigh  = capHeight * scale;

            var totalScaledHeight = wallScaledHeight + roofScaledHeigh;

            if (!Utils.ApproximatelyZero(totalScaledHeight))
            {
                scale = draft.height / totalScaledHeight;
            }
            else
            {
                scale = 0f;
            }

            result.capHeight   = capHeight * scale;
            result.sidesHeight = draft.height - result.capHeight;

            result.rightScale   = builder.front.CalculateLengthScale(result.length);
            result.forwardScale = builder.right.CalculateLengthScale(result.depth);

            result.parent = draft.parent;
            result.pivot  = draft.pivot;

            result.up      = draft.up;
            result.right   = draft.right;
            result.forward = draft.forward;

            return(result);
        }
Esempio n. 8
0
 public void Build(BoxDraft draft)
 {
     return;
 }
Esempio n. 9
0
        /// ======================================================================

        private static RoofGenerationSettings CreateSettings(RoofParameters parameters, BoxDraft draft)
        {
            var result = RoofGenerationSettings.Create();

            result.itemLength = parameters.length;
            result.itemDepth  = parameters.depth;

            result.targetLength = draft.length;
            result.targetDepth  = draft.depth;

            result.parent = draft.parent;
            result.pivot  = draft.pivot;

            result.up      = draft.up;
            result.right   = draft.right;
            result.forward = draft.forward;

            return(result);
        }