Beispiel #1
0
        protected override void Start()
        {
            var random = UnityEngine.Random.Range(97, 123);

            m_OtherKey = (Key)Enum.ToObject(typeof(KeyCode), random);

            base.Start();

            if (IsPlacedOnBrick())
            {
                if (m_Enable != Enable.Always)
                {
                    // Apply the correct sensing, given when to enable the input.
                    switch (m_Enable)
                    {
                    case Enable.WhenPlayerIsNearby:
                    {
                        m_Sense = Sense.Player;
                        break;
                    }

                    case Enable.WhenBricksAreNearby:
                    {
                        m_Sense = Sense.Bricks;
                        break;
                    }

                    case Enable.WhenTagIsNearby:
                    {
                        m_Sense = Sense.Tag;
                        break;
                    }
                    }

                    var colliderComponentToClone = gameObject.AddComponent <SphereCollider>();
                    colliderComponentToClone.center  = m_ScopedPivotOffset;
                    colliderComponentToClone.radius  = 0.0f;
                    colliderComponentToClone.enabled = false;

                    var sensoryCollider = LEGOBehaviourCollider.Add <SensoryCollider>(colliderComponentToClone, m_ScopedBricks, m_Distance * LEGOHorizontalModule);
                    SetupSensoryCollider(sensoryCollider);

                    Destroy(colliderComponentToClone);
                }
                else
                {
                    m_Distance = int.MaxValue;
                }
            }
        }
        protected void Start()
        {
            if (IsPlacedOnBrick())
            {
                // Add one SensoryCollider based on scope pivot.
                var colliderComponentToClone = gameObject.AddComponent <SphereCollider>();
                colliderComponentToClone.center  = m_ScopedPivotOffset;
                colliderComponentToClone.radius  = 0.0f;
                colliderComponentToClone.enabled = false;

                var sensoryCollider = LEGOBehaviourCollider.Add <SensoryCollider>(colliderComponentToClone, m_ScopedBricks, m_Distance * LEGOBehaviour.LEGOHorizontalModule);
                SetupSensoryCollider(sensoryCollider);

                Destroy(colliderComponentToClone);
            }
        }
 protected void Start()
 {
     if (IsPlacedOnBrick())
     {
         // Add SensoryCollider to all brick colliders.
         foreach (var brick in m_ScopedBricks)
         {
             foreach (var part in brick.parts)
             {
                 foreach (var collider in part.colliders)
                 {
                     var sensoryCollider = LEGOBehaviourCollider.Add <SensoryCollider>(collider, m_ScopedBricks, 0.64f);
                     SetupSensoryCollider(sensoryCollider);
                 }
             }
         }
     }
 }
        protected override void Start()
        {
            base.Start();

            if (IsPlacedOnBrick())
            {
                // Add particle system.
                if (m_Effect)
                {
                    m_ParticleSystem = Instantiate(m_Effect, transform);
                    m_ParticleSystem.transform.position   = m_ScopedBounds.center;
                    m_ParticleSystem.transform.localScale = m_ScopedBounds.size;
                    m_ParticleSystem.Stop();

                    // Scale particle emission with volume of scope.
                    var scopeVolume            = m_ScopedBounds.size.x * m_ScopedBounds.size.y * m_ScopedBounds.size.z;
                    var particleEmissionModule = m_ParticleSystem.emission;
                    particleEmissionModule.rateOverTime = Mathf.Clamp(k_ParticleEmissionPerModule * scopeVolume / LEGOModuleVolume, k_MinParticleEmission, k_MaxParticleEmission);

                    // Scale particle burst when picked up with volume of scope.
                    m_BurstParticleCount = Mathf.RoundToInt(Mathf.Clamp(k_ParticleBurstPerModule * scopeVolume / LEGOModuleVolume, k_MinParticleBurst, k_MaxParticleBurst));
                }

                // Add SensoryCollider to all brick colliders.
                foreach (var brick in m_ScopedBricks)
                {
                    foreach (var part in brick.parts)
                    {
                        foreach (var collider in part.colliders)
                        {
                            var sensoryCollider = LEGOBehaviourCollider.Add <SensoryCollider>(collider, m_ScopedBricks, 0.64f);
                            SetupSensoryCollider(sensoryCollider);

                            // Make the original collider a trigger.
                            collider.isTrigger = true;
                        }
                    }
                }

                // Disconnect from all bricks not in scope.
                foreach (var brick in m_ScopedBricks)
                {
                    brick.DisconnectInverse(m_ScopedBricks);
                }

                // Make invisible.
                foreach (var partRenderer in m_scopedPartRenderers)
                {
                    partRenderer.enabled = false;
                }

                // Find all LEGOBehaviours in scope.
                foreach (var brick in m_ScopedBricks)
                {
                    m_Behaviours.AddRange(brick.GetComponentsInChildren <LEGOBehaviour>());
                }

                // Set random initial hover offset to desynchronise Pickup Actions.
                m_InitialHoverOffset = UnityEngine.Random.Range(0f, 360f);

                // Set random initial rotation to desynchronise Pickup Actions.
                float initialRotaion = UnityEngine.Random.Range(0f, 360f);
                var   worldPivot     = transform.position + transform.TransformVector(m_BrickPivotOffset);
                foreach (var brick in m_ScopedBricks)
                {
                    brick.transform.RotateAround(worldPivot, Vector3.up, initialRotaion);
                }
            }
        }
Beispiel #5
0
        protected override void Start()
        {
            base.Start();

            if (IsPlacedOnBrick())
            {
                // Add particle system.
                if (m_Effect)
                {
                    m_ParticleSystem = Instantiate(m_Effect, transform);
                    m_ParticleSystem.Stop();

                    var emissionColliderWeights = new List <int>();

                    // Scale particle emission with volume of scoped bricks.
                    var scopeVolume = 0.0f;
                    foreach (var brick in m_ScopedBricks)
                    {
                        foreach (var part in brick.parts)
                        {
                            foreach (var collider in part.colliders)
                            {
                                m_EmissionColliders.Add(collider);
                                var colliderType = collider.GetType();
                                if (colliderType == typeof(BoxCollider))
                                {
                                    var boxCollider = (BoxCollider)collider;
                                    var volume      = boxCollider.size.x * boxCollider.size.y * boxCollider.size.z;
                                    var weight      = Mathf.Max(1, Mathf.RoundToInt(volume));
                                    emissionColliderWeights.Add(weight);
                                    m_EmissionColliderWeightSum += weight;
                                    scopeVolume += volume;
                                }
                                else if (colliderType == typeof(SphereCollider))
                                {
                                    var sphereCollider = (SphereCollider)collider;
                                    var volume         = 4.0f / 3.0f * Mathf.PI * sphereCollider.radius * sphereCollider.radius * sphereCollider.radius;
                                    var weight         = Mathf.Max(1, Mathf.RoundToInt(volume));
                                    emissionColliderWeights.Add(weight);
                                    m_EmissionColliderWeightSum += weight;
                                    scopeVolume += volume;
                                }
                            }
                        }
                    }

                    m_EmissionRate = Mathf.Clamp(k_ParticleEmissionPerModule * scopeVolume / LEGOModuleVolume, k_MinParticleEmission, k_MaxParticleEmission);

                    // Compute an approximated distribution function for weighted random selection of emission colliders.
                    m_EmissionColliderDistribution = new int[m_EmissionColliderWeightSum];

                    var index = 0;
                    for (var i = 0; i < emissionColliderWeights.Count; ++i)
                    {
                        var colliderWeight = emissionColliderWeights[i];
                        for (var j = 0; j < colliderWeight; ++j)
                        {
                            m_EmissionColliderDistribution[index] = i;
                            index++;
                        }
                    }
                }

                // Add SensoryCollider to all brick colliders.
                foreach (var brick in m_ScopedBricks)
                {
                    foreach (var part in brick.parts)
                    {
                        foreach (var collider in part.colliders)
                        {
                            var hazardCollider = LEGOBehaviourCollider.Add <SensoryCollider>(collider, m_ScopedBricks, 0.64f, LayerMask.NameToLayer("Hazard"));
                            SetupSensoryCollider(hazardCollider);
                        }
                    }
                }
            }
        }