private void CollisionEnter()
    {
        if (EffectOnHitObject != null && hit.transform != null)
        {
            var hitGO          = hit.transform;
            var renderer       = hitGO.GetComponentInChildren <Renderer>();
            var effectInstance = Instantiate(EffectOnHitObject) as GameObject;
            effectInstance.transform.parent        = renderer.transform;
            effectInstance.transform.localPosition = Vector3.zero;
            effectInstance.GetComponent <AddMaterialOnHit>().UpdateMaterial(hit);
        }

        if (AttachAfterCollision)
        {
            tRoot.parent = hit.transform;
        }

        if (SendCollisionMessage)
        {
            var collInfo = new CollisionInfo {
                Hit = hit
            };
            effectSettings.OnCollisionHandler(collInfo);
            if (hit.transform != null)
            {
                var shield = hit.transform.GetComponent <ShieldCollisionBehaviour>();
                if (shield != null)
                {
                    shield.ShieldCollisionEnter(collInfo);
                }
            }
        }
        onCollision = true;
    }
Ejemplo n.º 2
0
 private void CollisionEnter()
 {
     if (EffectOnHitObject != null && hit.transform != null)
     {
         var addMat = hit.transform.GetComponentInChildren <AddMaterialOnHit>();
         effectSettingsInstance = null;
         if (addMat != null)
         {
             effectSettingsInstance = addMat.gameObject.GetComponent <EffectSettings>();
         }
         if (effectSettingsInstance != null)
         {
             effectSettingsInstance.IsVisible = true;
         }
         else
         {
             var hitGO    = hit.transform;
             var renderer = hitGO.GetComponentInChildren <Renderer>();
             var effect   = Instantiate(EffectOnHitObject) as GameObject;
             effect.transform.parent        = renderer.transform;
             effect.transform.localPosition = Vector3.zero;
             effect.GetComponent <AddMaterialOnHit>().UpdateMaterial(hit);
             effectSettingsInstance = effect.GetComponent <EffectSettings>();
         }
     }
     effectSettings.OnCollisionHandler(new CollisionInfo {
         Hit = hit
     });
 }
    private void CollisionEnter()
    {
        if (EffectOnHitObject != null && hit.transform != null)
        {
            var hitEffect = Instantiate(EffectOnHitObject, tRoot.position, new Quaternion()) as GameObject;
            var hitGo     = hit.transform.gameObject;
            var mesh      = hitGo.GetComponent <MeshFilter>().sharedMesh;
            hitEffect.GetComponent <MeshFilter>().sharedMesh = mesh;
            hitEffect.transform.parent        = hitGo.transform;
            hitEffect.transform.localPosition = Vector3.zero;
            var rand = 1 + Random.Range(0, 2000) / 100000f;
            hitEffect.transform.localScale = new Vector3(rand, rand, rand);
        }

        if (AttachAfterCollision)
        {
            tRoot.parent = hit.transform;
        }

        if (SendCollisionMessage)
        {
            effectSettings.OnCollisionHandler(new CollisionInfo {
                Hit = hit
            });
        }
        onCollision = true;
    }
Ejemplo n.º 4
0
 void Start()
 {
     GetEffectSettingsComponent(transform);
     goInstances = new List <GameObject>();
     count       = (int)(Duration / Interval);
     for (int i = 0; i < count; i++)
     {
         var go = Instantiate(GO, transform.position, new Quaternion()) as GameObject;
         go.transform.parent = transform;
         var es = go.GetComponent <EffectSettings>();
         es.Target       = effectSettings.Target;
         es.IsHomingMove = effectSettings.IsHomingMove;
         es.MoveDistance = effectSettings.MoveDistance;
         es.MoveSpeed    = effectSettings.MoveSpeed;
         //es.DeactivateAfterCollision = effectSettings.DeactivateAfterCollision;
         //es.DeactivateTimeDelay = effectSettings.DeactivateTimeDelay;
         es.CollisionEnter    += (n, e) => effectSettings.OnCollisionHandler(e);
         es.ColliderRadius     = effectSettings.ColliderRadius;
         es.EffectRadius       = effectSettings.EffectRadius;
         es.EffectDeactivated += effectSettings_EffectDeactivated;
         goInstances.Add(go);
         go.SetActive(false);
     }
     InvokeAll();
     isInitialized = true;
 }
    void DeactivateAttachedPoints(RaycastHit hit)
    {
        for (int i = 0; i < AttachedPoints.Length; i++)
        {
            var ap = AttachedPoints[i];
            ap.SetActive(false);
        }
        var collInfo = new CollisionInfo {
            Hit = hit
        };

        effectSettings.OnCollisionHandler(collInfo);
        if (hit.transform != null)
        {
            var shield = hit.transform.GetComponent <ShieldCollisionBehaviour>();
            if (shield != null)
            {
                shield.ShieldCollisionEnter(collInfo);
            }
        }
        onCollision = true;
    }
Ejemplo n.º 6
0
    private void CollisionEnter()
    {
        if (EffectOnHitObject != null && hit.transform != null)
        {
            var addMat = hit.transform.GetComponentInChildren <AddMaterialOnHit>();
            effectSettingsInstance = null;
            if (addMat != null)
            {
                effectSettingsInstance = addMat.gameObject.GetComponent <EffectSettings>();
                effectSettingsInstance.EffectDeactivated += (sender, e) =>
                {
                    addMat.RemoveNewMaterial();
                };
            }

            if (effectSettingsInstance != null)
            {
                effectSettingsInstance.IsVisible = true;
            }
            else
            {
                var hitGO    = hit.transform;
                var renderer = hitGO.GetComponentInChildren <Renderer>();
                var effect   = ObjectPoolManager.Spawn(EffectOnHitObject) as GameObject;
                effect.transform.parent        = renderer.transform;
                effect.transform.localPosition = Vector3.zero;
                AddMaterialOnHit addMaterialScript = effect.GetComponent <AddMaterialOnHit>();
                addMaterialScript.UpdateMaterial(hit);
                effectSettings.EffectDeactivated += (sender, e) =>
                {
                    addMaterialScript.RemoveNewMaterial();
                };
            }
        }
        effectSettings.OnCollisionHandler(new CollisionInfo {
            Hit = hit
        });
    }
Ejemplo n.º 7
0
    private void Update()
    {
        if (tTarget == null || isFinished)
        {
            return;
        }
        var        pos = tRoot.position;
        RaycastHit verticalHit;

        Physics.Raycast(new Vector3(pos.x, 0.5f, pos.z), Vector3.down, out verticalHit);
        tRoot.position = verticalHit.point;
        pos            = tRoot.position;

        var endPoint      = effectSettings.IsHomingMove ? tTarget.position : targetPos;
        var pointOnGround = new Vector3(endPoint.x, 0, endPoint.z);

        if (Vector3.Distance(new Vector3(pos.x, 0, pos.z), pointOnGround) <= effectSettings.ColliderRadius)
        {
            effectSettings.OnCollisionHandler(new CollisionInfo());
            isFinished = true;
        }
        tRoot.position = Vector3.MoveTowards(pos, pointOnGround, effectSettings.MoveSpeed * Time.deltaTime);
    }
    void InitializeDefault()
    {
        GetComponent <Renderer>().material.SetFloat("_Chanel", currentShaderIndex);
        ++currentShaderIndex;
        if (currentShaderIndex == 3)
        {
            currentShaderIndex = 0;
        }
        line.SetPosition(0, tRoot.position);
        if (IsVertical)
        {
            if (Physics.Raycast(tRoot.position, Vector3.down, out hit))
            {
                line.SetPosition(1, hit.point);
                if (StartGlow != null)
                {
                    StartGlow.transform.position = tRoot.position;
                }
                if (HitGlow != null)
                {
                    HitGlow.transform.position = hit.point;
                }
                if (GoLight != null)
                {
                    GoLight.transform.position = hit.point + new Vector3(0, LightHeightOffset, 0);
                }
                if (Particles != null)
                {
                    Particles.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0);
                }
                if (Explosion != null)
                {
                    Explosion.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0);
                }
            }
        }
        else
        {
            tTarget = effectSettings.Target.transform;
            var targetDirection = (tTarget.position - tRoot.position).normalized;
            var direction       = tRoot.position + targetDirection * effectSettings.MoveDistance;
            if (Physics.Raycast(tRoot.position, targetDirection, out hit, effectSettings.MoveDistance + 1, effectSettings.LayerMask))
            {
                direction = (tRoot.position + Vector3.Normalize(hit.point - tRoot.position) * (effectSettings.MoveDistance + 1)).normalized;
            }
            line.SetPosition(1, hit.point - effectSettings.ColliderRadius * direction);
            var particlesOffsetPos = hit.point - direction * ParticlesHeightOffset;
            if (StartGlow != null)
            {
                StartGlow.transform.position = tRoot.position;
            }
            if (HitGlow != null)
            {
                HitGlow.transform.position = particlesOffsetPos;
            }
            if (GoLight != null)
            {
                GoLight.transform.position = hit.point - direction * LightHeightOffset;
            }
            if (Particles != null)
            {
                Particles.transform.position = particlesOffsetPos;
            }
            if (Explosion != null)
            {
                Explosion.transform.position = particlesOffsetPos;
            }
        }

        var collInfo = new CollisionInfo {
            Hit = hit
        };

        effectSettings.OnCollisionHandler(collInfo);
        if (hit.transform != null)
        {
            var shield = hit.transform.GetComponent <ShieldCollisionBehaviour>();
            if (shield != null)
            {
                shield.ShieldCollisionEnter(collInfo);
            }
        }
    }
 void Start()
 {
     GetEffectSettingsComponent(transform);
     effectSettings.OnCollisionHandler(new CollisionInfo());
     isInitialized = true;
 }
 void OnCollisionEnter(Collision collision)
 {
     effectSettings.OnCollisionHandler(new CollisionInfo());
 }
Ejemplo n.º 11
0
    void InitializeDefault()
    {
        renderer.material.SetFloat("_Chanel", currentShaderIndex);
        ++currentShaderIndex;
        if (currentShaderIndex == 3)
        {
            currentShaderIndex = 0;
        }
        line.SetPosition(0, tRoot.position);
        if (IsVertical)
        {
            if (Physics.Raycast(tRoot.position, Vector3.down, out hit))
            {
                line.SetPosition(1, hit.point);
                if (StartGlow != null)
                {
                    StartGlow.transform.position = tRoot.position;
                }
                if (HitGlow != null)
                {
                    HitGlow.transform.position = hit.point;
                }
                if (GoLight != null)
                {
                    GoLight.transform.position = hit.point + new Vector3(0, LightHeightOffset, 0);
                }
                if (Particles != null)
                {
                    Particles.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0);
                }
                if (Explosion != null)
                {
                    Explosion.transform.position = hit.point + new Vector3(0, ParticlesHeightOffset, 0);
                }
            }
        }
        else
        {
            tTarget = effectSettings.Target.transform;
            var targetDirection = (tTarget.position - tRoot.position).normalized;
            if (Physics.Raycast(tRoot.position, targetDirection, out hit, effectSettings.MoveDistance + 1, effectSettings.LayerMask))
            {
                var direction = (tRoot.position + Vector3.Normalize(hit.point - tRoot.position) * (effectSettings.MoveDistance + 1)).normalized;
                line.SetPosition(1, hit.point - effectSettings.ColliderRadius * direction);
                var particlesOffsetPos = hit.point - direction * ParticlesHeightOffset;
                if (StartGlow != null)
                {
                    StartGlow.transform.position = tRoot.position;
                }
                if (HitGlow != null)
                {
                    HitGlow.transform.position = particlesOffsetPos;
                }
                if (GoLight != null)
                {
                    GoLight.transform.position = hit.point - direction * LightHeightOffset;
                }
                if (Particles != null)
                {
                    Particles.transform.position = particlesOffsetPos;
                }
                if (Explosion != null)
                {
                    Explosion.transform.position = particlesOffsetPos;
                }
                OnEffectOnHitObject();
                //OnExplosion(direction * ParticlesHeightOffset);
            }
        }

        effectSettings.OnCollisionHandler(new CollisionInfo {
            Hit = hit
        });
    }