コード例 #1
0
        // Inspector editing
        public override void OnInspectorGUI()
        {
            // Get target
            RayfireWind wind = target as RayfireWind;

            // Space
            GUILayout.Space(8);

            // Fragmentation section Begin
            GUILayout.BeginHorizontal();

            // Show gizmo
            wind.showGizmo = GUILayout.Toggle(wind.showGizmo, "Show Gizmo ", "Button");

            // Show noise
            wind.showNoise = GUILayout.Toggle(wind.showNoise, "Show Noise ", "Button");

            // Fragmentation section End
            EditorGUILayout.EndHorizontal();

            // Space
            GUILayout.Space(3);

            // Draw script UI
            DrawDefaultInspector();

            // Space
            GUILayout.Space(3);

            // Label
            GUILayout.Label("Filters", EditorStyles.boldLabel);

            // Tag filter
            wind.tagFilter = EditorGUILayout.TagField("Tag", wind.tagFilter);

            // Layer mask
            List <string> layerNames = new List <string>();

            for (int i = 0; i <= 31; i++)
            {
                layerNames.Add(i + ". " + LayerMask.LayerToName(i));
            }
            wind.mask = EditorGUILayout.MaskField("Layer", wind.mask, layerNames.ToArray());
        }
コード例 #2
0
        static void DrawGizmosSelected(RayfireWind wind, GizmoType gizmoType)
        {
            // Vars
            int     stepX;
            int     stepZ;
            float   windStr;
            float   x, y, z;
            Vector3 p1, p2, p3, p4, p5, p6, p7, p8, p10, p11, to;
            Vector3 h1;
            Vector3 vector;
            Vector3 localPos;
            float   perlinVal;
            Color   color = Color.red;

            color.b = 0.0f;
            Color wireColor = new Color(0.58f, 0.77f, 1f);
            Color sphCol    = new Color(1.0f, 0.60f, 0f);

            // Gizmo preview
            if (wind.showGizmo == true)
            {
                // Offsets
                x = wind.gizmoSize.x / 2f;
                y = wind.gizmoSize.y;
                z = wind.gizmoSize.z / 2f;

                // Get points
                p1 = new Vector3(-x, 0, -z);
                p2 = new Vector3(-x, 0, +z);
                p3 = new Vector3(+x, 0, -z);
                p4 = new Vector3(+x, 0, +z);
                p5 = new Vector3(-x, y, -z);
                p6 = new Vector3(-x, y, +z);
                p7 = new Vector3(+x, y, -z);
                p8 = new Vector3(+x, y, +z);

                p10 = new Vector3(-x, 0, 0);
                p11 = new Vector3(+x, 0, 0);
                to  = new Vector3(+0, 0, z);

                // Gizmo properties
                Gizmos.color  = wireColor;
                Gizmos.matrix = wind.transform.localToWorldMatrix;

                // Gizmo Lines
                Gizmos.DrawLine(p1, p2);
                Gizmos.DrawLine(p3, p4);
                Gizmos.DrawLine(p5, p6);
                Gizmos.DrawLine(p7, p8);
                Gizmos.DrawLine(p1, p5);
                Gizmos.DrawLine(p2, p6);
                Gizmos.DrawLine(p3, p7);
                Gizmos.DrawLine(p4, p8);
                Gizmos.DrawLine(p1, p3);
                Gizmos.DrawLine(p2, p4);
                Gizmos.DrawLine(p5, p7);
                Gizmos.DrawLine(p6, p8);

                // Arrow
                Gizmos.DrawLine(p1, Vector3.zero);
                Gizmos.DrawLine(p3, Vector3.zero);
                Gizmos.DrawLine(p10, to);
                Gizmos.DrawLine(p11, to);

                // Selectable sphere
                float sphereSize = (x + y + z) * 0.02f;
                if (sphereSize < 0.1f)
                {
                    sphereSize = 0.1f;
                }
                float ySph = y / 2f;
                Gizmos.color = sphCol;
                Gizmos.DrawSphere(new Vector3(x, ySph, 0f), sphereSize);
                Gizmos.DrawSphere(new Vector3(-x, ySph, 0f), sphereSize);
                Gizmos.DrawSphere(new Vector3(0f, ySph, z), sphereSize);
                Gizmos.DrawSphere(new Vector3(0f, ySph, -z), sphereSize);

                // Force preview
                if (wind.showNoise == true)
                {
                    // Preview rate
                    stepX = (int)(wind.gizmoSize.x / wind.previewDensity);
                    stepZ = (int)(wind.gizmoSize.z / wind.previewDensity);

                    // Create preview helpers
                    for (int xx = -(stepX / 2); xx < stepX / 2 + 1; xx++)
                    {
                        for (int zz = -(stepZ / 2); zz < stepZ / 2 + 1; zz++)
                        {
                            // Local position
                            localPos   = Vector3.zero;
                            localPos.x = xx * wind.previewDensity;
                            localPos.z = zz * wind.previewDensity;
                            localPos.y = 0.2f;

                            // Get perlin value for local position
                            perlinVal = wind.PerlinFixedLocal(localPos);

                            // Get final strength for local position by min and max str
                            windStr = wind.WindStrength(perlinVal);

                            // Get vector for current point
                            vector = wind.GetVectorLocal(localPos) * wind.previewSize;

                            // Set color
                            if (windStr >= 0)
                            {
                                color.r = perlinVal;
                                color.g = 1f - perlinVal;
                                color.b = 0f;
                            }
                            else
                            {
                                color.r = 0f;
                                color.g = perlinVal;
                                color.b = 1f - perlinVal;
                            }

                            Gizmos.color = color;

                            // Sphere preview
                            Gizmos.DrawWireSphere(localPos, windStr * 0.1f * wind.previewSize);

                            // Get vector end point
                            h1 = localPos + vector * windStr;

                            // Draw line
                            Gizmos.DrawLine(localPos, h1);
                        }
                    }
                }
            }
        }