public void AutoSpawn(GameObject forceTemplate = null)
            {
                var spawner  = GetComponent <TE3RandomSpawner>();
                var template = forceTemplate ? forceTemplate : spawner.GetRandomTemplate();
                var spawned  = spawner.SpawnInstance(template);

                spawned.transform.SetParent(transform);
                spawned.transform.localPosition = Vector3.zero;
                spawned.transform.rotation      = Quaternion.Euler(TE3Utils.Vec3Lerp(minEulerRotation, maxEulerRotation, TE3Utils.Vec3Random()))
                                                  * (preserveTemplateRotation ? template.transform.rotation : Quaternion.identity);
                spawned.transform.localScale = Vector3.Scale(
                    TE3Utils.Vec3Lerp(minScale, maxScale, TE3Utils.Vec3Random()),
                    preserveTemplateScale ? template.transform.lossyScale : Vector3.one
                    );

                if (m_SpawnedInstance)
                {
                    Undo.DestroyObjectImmediate(m_SpawnedInstance);
                }
                Undo.RegisterCreatedObjectUndo(spawned, "Auto Spawned");
                Undo.RecordObject(this, "Auto Spawned");

                m_SpawnedInstance = spawned;
                Debug.Log("AutoSpawn2: " + spawned);
            }
Ejemplo n.º 2
0
                public override Vector3 GetSpawnPositionCandidate(Transform transform)
                {
                    // Get a random direction
                    var dir2D = Random.insideUnitCircle;

                    m_Dir3D = new Vector3(dir2D.x, 0f, dir2D.y).normalized;

                    // Get distributed strength (focused on inner radius)
                    m_Strength = Mathf.Pow(Random.value, distributionPower);

                    // Get distributed distance
                    var scale = TE3Utils.Vec3Max(transform.lossyScale);
                    var dist  = Mathf.Lerp(innerRadius * scale, outerRadius * scale, m_Strength);

                    // Point candidate
                    var pnt = transform.position + offset + m_Dir3D * dist;

                    return(pnt);
                }
Ejemplo n.º 3
0
            void Reset()
            {
                var self        = GetComponent <Renderer>();
                var lodGroupIdx = TE3Utils.FindLODGroupIndex(self);

                // Bail if no renderer, no lodgroup, or we're in lod0.
                if (lodGroupIdx < 1)
                {
                    return;
                }

                // If we're in a LOD group, assume we want to source from LOD0.
                // (only allowed if there's a single renderer in LOD0)
                var lods = GetComponentInParent <LODGroup>().GetLODs();

                if (lods[0].renderers.Length == 1)
                {
                    source = lods[0].renderers[0];
                }
            }
Ejemplo n.º 4
0
                public override void DrawDebugGizmos(Transform transform)
                {
                    if (!showDebugGizmo)
                    {
                        return;
                    }

                    var scale    = TE3Utils.Vec3Max(transform.lossyScale);
                    var or       = outerRadius * scale;
                    var ir       = innerRadius * scale;
                    var radius   = or - ir;
                    var steps    = Mathf.RoundToInt(radius * 10f);
                    var stepSize = radius / (float)(steps - 1);

                    for (int i = 0; i < steps; ++i)
                    {
                        var strength = Mathf.Pow(1f - i / (float)steps, distributionPower);
                        Handles.color = new Color(1f, 1f, 1f, strength);
                        Handles.DrawSolidDisc(transform.position + offset, Vector3.up, ir + stepSize * i);
                    }

                    Handles.color = Color.gray;
                    Handles.DrawSolidDisc(transform.position, Vector3.up, ir);
                }