Ejemplo n.º 1
0
        public static UIGradientPreview Create(CreateParams input)
        {
            GameObject go = new GameObject(input.widgetName);

            go.tag = "UICollider";

            // Find the anchor of the parent if it is a UIElement
            Vector3 parentAnchor = Vector3.zero;

            if (input.parent)
            {
                UIElement elem = input.parent.gameObject.GetComponent <UIElement>();
                if (elem)
                {
                    parentAnchor = elem.Anchor;
                }
            }

            UIGradientPreview uiGradientWidget = go.AddComponent <UIGradientPreview>();

            uiGradientWidget.relativeLocation        = input.relativeLocation;
            uiGradientWidget.transform.parent        = input.parent;
            uiGradientWidget.transform.localPosition = parentAnchor + input.relativeLocation;
            uiGradientWidget.transform.localRotation = Quaternion.identity;
            uiGradientWidget.transform.localScale    = Vector3.one;
            uiGradientWidget.width     = input.width;
            uiGradientWidget.height    = input.height;
            uiGradientWidget.thickness = input.thickness;

            // TODO: put the mesh in a sub object to apply a transformation that wont perturb the base object.

            // Setup the Meshfilter
            MeshFilter meshFilter = go.GetComponent <MeshFilter>();

            if (meshFilter != null)
            {
                Mesh[] meshes     = Resources.LoadAll <Mesh>("Models/half_sphere");
                Mesh   theNewMesh = meshes[0];
                meshFilter.sharedMesh = meshes[0];

                Vector3 originalSize = meshFilter.sharedMesh.bounds.size; // 1.997, 1, 1.997
                float   sc           = input.width / originalSize.x;      // 0.06 = 0.12 / 1.997

                //transform.localPosition = new Vector3(width / 2.0f, -height / 2.0f, 0.0f);
                uiGradientWidget.transform.localRotation = Quaternion.Euler(-90.0f, 0.0f, 180.0f);
                uiGradientWidget.transform.localScale    = new Vector3(sc, sc / 2.0f, sc);

                uiGradientWidget.Anchor = Vector3.zero;
                BoxCollider coll = go.GetComponent <BoxCollider>();
                if (coll != null)
                {
                    Vector3 initColliderCenter = meshFilter.sharedMesh.bounds.center;
                    Vector3 initColliderSize   = meshFilter.sharedMesh.bounds.size;
                    if (initColliderSize.z < UIElement.collider_min_depth_deep)
                    {
                        coll.center = new Vector3(initColliderCenter.x, initColliderCenter.y, UIElement.collider_min_depth_deep / 2.0f);
                        coll.size   = new Vector3(initColliderSize.x, initColliderSize.y, UIElement.collider_min_depth_deep);
                    }
                    else
                    {
                        coll.center = initColliderCenter;
                        coll.size   = initColliderSize;
                    }
                    coll.isTrigger = true;
                }
            }

            // Setup the MeshRenderer
            MeshRenderer meshRenderer = go.GetComponent <MeshRenderer>();

            if (meshRenderer != null && input.material != null)
            {
                meshRenderer.sharedMaterial     = Instantiate(input.material);
                meshRenderer.shadowCastingMode  = UnityEngine.Rendering.ShadowCastingMode.Off;
                meshRenderer.renderingLayerMask = 1 << 1; // "LightLayer 1"
            }

            UIUtils.SetRecursiveLayer(go, "CameraHidden");

            return(uiGradientWidget);
        }
Ejemplo n.º 2
0
        public static GradientItem GenerateGradientItem(SkySettings sky)
        {
            GameObject   root         = new GameObject("GradientItem");
            GradientItem gradientItem = root.AddComponent <GradientItem>();

            root.layer = LayerMask.NameToLayer("CameraHidden");

            // Set the item invisible in order to hide it while it is not added into
            // a list. We will activate it after it is added
            root.transform.localScale = Vector3.zero;

            //
            // Background Panel
            //
            UIPanel panel = UIPanel.Create(new UIPanel.CreatePanelParams
            {
                parent           = root.transform,
                widgetName       = "GradientPreviewBackgroundPanel",
                relativeLocation = new Vector3(0.01f, -0.01f, -UIPanel.default_element_thickness),
                width            = 0.145f,
                height           = 0.185f,
                margin           = 0.005f
            });

            panel.SetLightLayer(3);

            //
            // Gradient Button
            //
            UIGradientPreview gradientPreview = UIGradientPreview.Create(new UIGradientPreview.CreateParams
            {
                parent           = panel.transform,
                widgetName       = "GradientPreview",
                relativeLocation = new Vector3(0.0725f, -0.0725f, -UIGradientPreview.default_thickness),
                width            = 0.12f,
                height           = 0.12f,
                margin           = 0.001f
            });

            gradientPreview.SetLightLayer(3);
            gradientPreview.Colors       = sky;
            gradientPreview.NeedsRebuild = true;

            //
            // Copy Button
            //
            UIButton copyButton = UIButton.Create(new UIButton.CreateButtonParams
            {
                parent           = panel.transform,
                widgetName       = "CopyButton",
                relativeLocation = new Vector3(0.075f, -0.15f, -UIButton.default_thickness),
                width            = 0.03f,
                height           = 0.03f,
                icon             = UIUtils.LoadIcon("duplicate"),
                buttonContent    = UIButton.ButtonContent.ImageOnly,
                margin           = 0.001f,
            });

            copyButton.SetLightLayer(3);

            //
            // Delete Button
            //
            UIButton deleteButton = UIButton.Create(new UIButton.CreateButtonParams
            {
                parent           = panel.transform,
                widgetName       = "DeleteButton",
                relativeLocation = new Vector3(0.11f, -0.15f, -UIButton.default_thickness),
                width            = 0.03f,
                height           = 0.03f,
                icon             = UIUtils.LoadIcon("trash"),
                buttonContent    = UIButton.ButtonContent.ImageOnly,
                margin           = 0.001f,
            });

            deleteButton.SetLightLayer(3);

            gradientItem.gradientPreview = gradientPreview;
            gradientItem.copyButton      = copyButton;
            gradientItem.deleteButton    = deleteButton;
            gradientItem.backgroundPanel = panel;

            return(gradientItem);
        }