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); } } }
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); } } } } }