Example #1
0
        //private IEnumerator DelayDestory(float time)
        //{
        //    yield return new WaitForSeconds(time);

        //    if (ExploseObject != null)
        //    {
        //        ExploseObject.SetActive(true);
        //        var particles = ExploseObject.GetComponentsInChildren<ParticleSystem>();
        //        foreach (var particle in particles)
        //            particle.Play();
        //        RigidBody.velocity = Vector3.zero;
        //        yield return new WaitForSeconds(0.5f);
        //    }

        //    Destroy(gameObject);
        //}

        //void OnTriggerEnter(Collider other)
        //{
        //    Debug.LogError("trigger " + other.gameObject.tag + "; " + other.gameObject.name);
        //    if (other.gameObject.tag == "Player")
        //    {
        //        var controller = other.gameObject.GetComponent<PlayerController>();

        //        if (_gameManager.PlayerModel.Dead)
        //            return;

        //        //StopAllCoroutines();
        //        _gameManager.PlayerModel.Damage(Damage);
        //        //RigidBody.velocity = Vector3.zero;
        //        //StartCoroutine(DelayDestory(0.2f));
        //    }
        //}

        //public void Go(GameManager gameManager, float lifeTime, float speed, float delayMove, Vector3 position)
        //{
        //    _gameManager = gameManager;
        //    _lifeTime = lifeTime;
        //    _speed = speed;
        //    _delayMove = delayMove;
        //    _startPosition = position;

        //    transform.position = _startPosition;
        //    gameObject.SetActive(true);

        //    StartCoroutine(StartMove());
        //}


        //private IEnumerator StartMove()
        //{
        //    yield return new WaitForSeconds(_delayMove);

        //    RigidBody.AddForce(transform.forward * _speed * 10);

        //    StartCoroutine(DelayDestory(_lifeTime));
        //}

        private void ChangeColor()
        {
            RFX4_ColorHelper.ChangeObjectColorByHUE(gameObject, ColorHUE / 360f);
            var transformMotion = gameObject.GetComponentInChildren <RFX4_TransformMotion>(true);

            if (transformMotion != null)
            {
                transformMotion.HUE = ColorHUE / 360f;
                foreach (var collidedInstance in transformMotion.CollidedInstances)
                {
                    if (collidedInstance != null)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(collidedInstance, ColorHUE / 360f);
                    }
                }
            }

            var rayCastCollision = gameObject.GetComponentInChildren <RFX4_RaycastCollision>(true);

            if (rayCastCollision != null)
            {
                rayCastCollision.HUE = ColorHUE / 360f;
                foreach (var collidedInstance in rayCastCollision.CollidedInstances)
                {
                    if (collidedInstance != null)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(collidedInstance, ColorHUE / 360f);
                    }
                }
            }
        }
    private void Update()
    {
        if (mat == null)
        {
            return;
        }
        var time = Time.time - startTime;

        if (canUpdate)
        {
            var eval = Color.Evaluate(time / TimeMultiplier);
            if (HUE > -0.9f)
            {
                eval       = RFX4_ColorHelper.ConvertRGBColorByHUE(eval, HUE);
                startColor = RFX4_ColorHelper.ConvertRGBColorByHUE(startColor, HUE);
            }
            mat.SetColor(propertyID, eval * startColor);
        }
        if (time >= TimeMultiplier)
        {
            if (IsLoop)
            {
                startTime = Time.time;
            }
            else
            {
                canUpdate = false;
            }
        }
    }
Example #3
0
    private void Update()
    {
        rend.GetPropertyBlock(props);

        var time = Time.time - startTime;

        if (canUpdate)
        {
            var eval = Color.Evaluate(time / TimeMultiplier);
            if (HUE > -0.9f)
            {
                eval       = RFX4_ColorHelper.ConvertRGBColorByHUE(eval, HUE);
                startColor = RFX4_ColorHelper.ConvertRGBColorByHUE(startColor, HUE);
            }
            props.SetColor(propertyID, eval * startColor);
        }
        if (time >= TimeMultiplier)
        {
            if (IsLoop)
            {
                startTime = Time.time;
            }
            else
            {
                canUpdate = false;
            }
        }

        rend.SetPropertyBlock(props);
    }
    void OnCollisionBehaviour(RaycastHit hit)
    {
        print("hit");
        var handler = CollisionEnter;

        if (handler != null)
        {
            handler(this, new RFX4_CollisionInfo {
                Hit = hit
            });
        }
        CollidedInstances.Clear();
        foreach (var effect in EffectsOnCollision)
        {
            var instance = Instantiate(effect, hit.point + hit.normal * CollisionOffset, new Quaternion()) as GameObject;
            CollidedInstances.Add(instance);
            if (HUE > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
            }
            instance.transform.LookAt(hit.point + hit.normal + hit.normal * CollisionOffset);
            if (!CollisionEffectInWorldSpace)
            {
                instance.transform.parent = transform;
            }
            Destroy(instance, DestroyTimeDelay);
        }
    }
Example #5
0
    void OnCollisionBehaviour(RaycastHit hit)
    {
        var handler = CollisionEnter;

        if (handler != null)
        {
            handler(this, new RFX4_CollisionInfo {
                Hit = hit
            });
        }
        CollidedInstances.Clear();
        if (hit.rigidbody && hit.rigidbody.gameObject.tag == "Enemy")
        {
            _spell.OnHit(trigger, t.forward, t.position, hit.rigidbody.gameObject.GetComponent <Enemy>());
        }
        foreach (var effect in EffectsOnCollision)
        {
            var instance = Instantiate(effect, hit.point + hit.normal * CollisionOffset, new Quaternion()) as GameObject;
            CollidedInstances.Add(instance);
            if (HUE > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
            }
            instance.transform.LookAt(hit.point + hit.normal + hit.normal * CollisionOffset);
            if (!CollisionEffectInWorldSpace)
            {
                instance.transform.parent = transform;
            }
            Destroy(instance, DestroyTimeDelay);
        }
    }
Example #6
0
    void RemoveRigidbody()
    {
        isCollided = false;

        if (rigid != null)
        {
            Destroy(rigid);
        }
        if (collid != null)
        {
            Destroy(collid);
        }

        if (EffectOnCollision != null && !Spawn)
        {
            var instance = Instantiate(EffectOnCollision, transform.position, new Quaternion()) as GameObject;

            if (HUE > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
            }

            if (LookAtNormal)
            {
                instance.transform.LookAt(transform.position + transform.forward);
            }
            else
            {
                instance.transform.rotation = transform.rotation;
            }
            // if (!CollisionEffectInWorldSpace) instance.transform.parent = contact.otherCollider.transform.parent;
            Spawn = true;
            Destroy(instance, CollisionEffectDestroyAfter);
        }
    }
    void OnCollisionBehaviour(RaycastHit hit)
    {
        var handler = CollisionEnter;

        if (handler != null)
        {
            handler(this, new RFX4_CollisionInfo {
                Hit = hit
            });
        }
        if (hit.transform.GetComponent <GoblinController>() != null)
        {
            hit.transform.GetComponent <GoblinController>().TakeDamage(10);
            if (transform.parent.name == "Effect1_Optimized(Clone)")
            {
                hit.transform.GetComponent <GoblinController>().SpeedDown();
            }
        }
        if (hit.transform.GetComponent <WatcherController>() != null)
        {
            hit.transform.GetComponent <WatcherController>().TakeDamage(10);
        }
        if (hit.transform.GetComponent <StateController>() != null)
        {
            hit.transform.GetComponent <StateController>().TakeDamage(10);
            if (transform.parent.name == "Effect1_Optimized(Clone)")
            {
                hit.transform.GetComponent <BossController>().SpeedDown();
            }
        }
        if (hit.transform.GetComponent <KinghtController>() != null)
        {
            hit.transform.GetComponent <KinghtController>().TakeDamage(10);
            if (transform.parent.name == "Effect1_Optimized(Clone)")
            {
                hit.transform.GetComponent <KinghtController>().SpeedDown();
            }
        }


        CollidedInstances.Clear();
        foreach (var effect in EffectsOnCollision)
        {
            var instance = Instantiate(effect, hit.point + hit.normal * CollisionOffset, new Quaternion()) as GameObject;
            CollidedInstances.Add(instance);
            if (HUE > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
            }
            instance.transform.LookAt(hit.point + hit.normal + hit.normal * CollisionOffset);
            if (!CollisionEffectInWorldSpace)
            {
                instance.transform.parent = transform;
            }
            Destroy(instance, DestroyTimeDelay);
        }
    }
    private void ComputeRaycast()
    {
        RaycastHit raycastHit;

        if (Physics.Linecast(transform.position + new Vector3(0, 1, 0), _target, out raycastHit, _collidesWith))
        {
            Vector3 position;
            if (UsePivotPosition)
            {
                position = raycastHit.transform.position;
            }
            else
            {
                position = raycastHit.point + raycastHit.normal * Offset;
            }

            if (CollidedInstances.Count == 0)
            {
                foreach (var effect in Effects)
                {
                    var instance = Instantiate(effect, position, new Quaternion());
                    CollidedInstances.Add(instance);
                    if (HUE > -0.9f)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
                    }

                    if (!IsWorldSpace)
                    {
                        instance.transform.parent = transform;
                    }
                    if (UseNormalRotation)
                    {
                        instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                    Destroy(instance, DestroyTime);
                    Destroy(gameObject.transform.parent.gameObject, DestroyTime);
                }
            }
            else
            {
                foreach (var instance in CollidedInstances)
                {
                    if (instance == null)
                    {
                        continue;
                    }
                    instance.transform.position = position;
                    if (UseNormalRotation)
                    {
                        instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                }
            }
        }
    }
Example #9
0
    private void UpdateRaycast()
    {
        RaycastHit raycastHit;

        if (Physics.Raycast(transform.position, transform.forward, out raycastHit, RaycastDistance))
        {
            Vector3 position;
            position = UsePivotPosition ? raycastHit.transform.position : raycastHit.point + raycastHit.normal * Offset;

            if (CollidedInstances.Count == 0)
            {
                for (int i = 0; i < Effects.Length; ++i)
                {
                    var instance = Instantiate(Effects[i], position, new Quaternion()) as GameObject;
                    CollidedInstances.Add(instance);
                    if (HUE > -0.9f)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
                    }

                    if (!IsWorldSpace)
                    {
                        instance.transform.parent = transform;
                    }
                    if (UseNormalRotation)
                    {
                        instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                    if (DestroyTime > 0.0001f)
                    {
                        Destroy(instance, DestroyTime);
                    }
                }
            }
            else
            {
                for (int i = 0; i < CollidedInstances.Count; ++i)
                {
                    if (CollidedInstances[i] == null)
                    {
                        continue;
                    }
                    CollidedInstances[i].transform.position = position;
                    if (UseNormalRotation)
                    {
                        CollidedInstances[i].transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                }
            }
        }

        if (RealTimeUpdateRaycast)
        {
            canUpdate = true;
        }
    }
Example #10
0
    public void ChangeParticleColor()
    {
        Debug.Log("ColorChanged");
        var hue = RFX4_ColorHelper.ColorToHSV(EffectColor).H;
        RFX4_ColorHelper.ChangeObjectColorByHUE(gameObject, hue);

        var physxMotion = GetComponentInChildren<RFX4_PhysicsMotion>();
        if (physxMotion != null) physxMotion.HUE = hue;

        var rayCastCollision = GetComponentInChildren<RFX4_RaycastCollision>();
        if (rayCastCollision != null) rayCastCollision.HUE = hue;
    }
Example #11
0
    void OnCollisionBehaviour(RaycastHit hit)
    {
        var handler = CollisionEnter;

        if (handler != null)
        {
            handler(this, new RFX4_CollisionInfo {
                Hit = hit
            });
        }
        CollidedInstances.Clear();
        foreach (var effect in EffectsOnCollision)
        {
            var instance = Instantiate(effect, hit.point + hit.normal * CollisionOffset, new Quaternion()) as GameObject;
            CollidedInstances.Add(instance);
            if (HUE > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
            }
            instance.transform.LookAt(hit.point + hit.normal + hit.normal * CollisionOffset);
            if (!CollisionEffectInWorldSpace)
            {
                instance.transform.parent = transform;
            }
            Destroy(instance, DestroyTimeDelay);
        }


        var col  = hit.collider.gameObject;
        var Rigi = col.GetComponent <Rigidbody>();

        if (Rigi)
        {
            Rigi.AddForceAtPosition(hit.normal * -2000f * Rigi.mass, hit.point);
        }
        if (col.transform.parent && col.transform.parent.gameObject.GetComponent <Ninja>())
        {
            Ninja n = col.transform.parent.gameObject.GetComponent <Ninja>();
            n.hits += 30;
            n.gameObject.GetComponent <Rigidbody>().AddForceAtPosition(hit.normal * -1000f, hit.point);
            if (hit.collider.name.Equals(n.weakSpotName))
            {
                n.hits += n.weakSpotDamage;
                col.GetComponent <Breakable_Object>().Explode(col.transform.position, 300f, 0f);
            }
        }
    }
    private void UpdateColor()
    {
        var transformMotion  = GetComponentInChildren <RFX4_TransformMotion>(true);
        var rayCastCollision = GetComponentInChildren <RFX4_RaycastCollision>(true);
        var hue = RFX4_ColorHelper.ColorToHSV(Color).H;

        RFX4_ColorHelper.ChangeObjectColorByHUE(gameObject, hue);
        if (transformMotion != null)
        {
            transformMotion.HUE = hue;
        }
        if (rayCastCollision != null)
        {
            rayCastCollision.HUE = hue;
        }
        previousColor = Color;
    }
Example #13
0
    private void InitFireBall()
    {
        fireBall = Instantiate(Resources.Load("Prefabs/Effects/FireBall"), skillSpellingPoint.position, Quaternion.Euler(0, !PlayerTestController.instance.facingRight?-90:90, 0)) as GameObject;
        var tm = fireBall.GetComponentInChildren <RFX4_TransformMotion>(true);

        if (tm != null)
        {
            tm.CollisionEnter += Tm_CollisionEnter_FireBall;
        }

        // define color
        float colorHUE = 6f; // red fire color

        RFX4_ColorHelper.ChangeObjectColorByHUE(fireBall, colorHUE / 360f);
        var transformMotion = fireBall.GetComponentInChildren <RFX4_TransformMotion>(true);

        if (transformMotion != null)
        {
            transformMotion.HUE = colorHUE / 360f;
            foreach (var collidedInstance in transformMotion.CollidedInstances)
            {
                if (collidedInstance != null)
                {
                    RFX4_ColorHelper.ChangeObjectColorByHUE(collidedInstance, colorHUE / 360f);
                }
            }
        }

        var rayCastCollision = fireBall.GetComponentInChildren <RFX4_RaycastCollision>(true);

        if (rayCastCollision != null)
        {
            rayCastCollision.HUE = colorHUE / 360f;
            foreach (var collidedInstance in rayCastCollision.CollidedInstances)
            {
                if (collidedInstance != null)
                {
                    RFX4_ColorHelper.ChangeObjectColorByHUE(collidedInstance, colorHUE / 360f);
                }
            }
        }
    }
Example #14
0
    void OnCollisionBehaviour(RaycastHit hit)
    {
        var explosionPoint = hit.point;
        var colliders      = Physics.OverlapSphere(explosionPoint, _explosionRadius);

        foreach (Collider hitCollider in colliders)
        {
            print(hitCollider.name);
            var rb = hitCollider.GetComponent <Rigidbody> ();
            if (rb != null)
            {
                print("FireBall Hit :" + rb.name);
                rb.AddExplosionForce(_explosionPower, explosionPoint, _explosionRadius, _upwardMod);
            }
        }
        var handler = CollisionEnter;

        if (handler != null)
        {
            handler(this, new RFX4_CollisionInfo {
                Hit = hit
            });
        }
        CollidedInstances.Clear();
        foreach (var effect in EffectsOnCollision)
        {
            var instance = Instantiate(effect, hit.point + hit.normal * CollisionOffset, new Quaternion()) as GameObject;
            CollidedInstances.Add(instance);
            if (HUE > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
            }
            instance.transform.LookAt(hit.point + hit.normal + hit.normal * CollisionOffset);
            if (!CollisionEffectInWorldSpace)
            {
                instance.transform.parent = transform;
            }
            Destroy(instance, DestroyTimeDelay);
        }
    }
Example #15
0
    private void OnCollisionBehaviour(RaycastHit hit)
    {
        CollidedInstances.Clear();
        foreach (var effect in EffectsOnCollision)
        {
            var instance = Instantiate(effect, hit.point + hit.normal * CollisionOffset, new Quaternion());
            CollidedInstances.Add(instance);
            if (Hue > -0.9f)
            {
                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, Hue);
            }

            instance.transform.LookAt(hit.point + hit.normal + hit.normal * CollisionOffset);
            if (!CollisionEffectInWorldSpace)
            {
                instance.transform.parent = transform;
            }
            Destroy(instance, DestroyTimeDelay);
        }

        Destroy(transform.parent.gameObject, DestroyTimeDelay);
    }
Example #16
0
    void OnCollisionEnter(Collision collision)
    {
        print(collision.gameObject.name);

        SpiritSystem spiritSystem = FindObjectOfType <SpiritSystem>();

        if (spiritSystem != null)
        {
            if (spiritSystem.spiritEquipped.spiritClass == BaseSpirit.SpiritClass.Mage)
            {
                if (collision.gameObject.GetComponent <Enemy>())
                {
                    collision.gameObject.GetComponent <Enemy>().TakeDamage(spiritSystem.spiritEquipped.DamageModifier);
                }

                spiritSystem.MageDamage(collision.transform.position);
            }
            else if (spiritSystem.spiritEquipped.spiritClass == BaseSpirit.SpiritClass.Ranger)
            {
                if (collision.gameObject.GetComponent <Enemy>())
                {
                    spiritSystem.RangerDamage(collision.gameObject.GetComponent <Enemy>());
                }
            }
        }


        if (isCollided && !effectSettings.UseCollisionDetection)
        {
            return;
        }
        foreach (ContactPoint contact in collision.contacts)
        {
            if (!isCollided)
            {
                isCollided = true;

                //offsetColliderPoint = contact.otherCollider.transform.position - contact.point;
                // lastCollider = contact.otherCollider;
                // lastContactPoint = contact;
                if (UseTargetPositionAfterCollision)
                {
                    if (targetAnchor != null)
                    {
                        Destroy(targetAnchor);
                    }

                    targetAnchor                    = new GameObject();
                    targetAnchor.hideFlags          = HideFlags.HideAndDontSave;
                    targetAnchor.transform.parent   = contact.otherCollider.transform;
                    targetAnchor.transform.position = contact.point;
                    targetAnchor.transform.rotation = transform.rotation;
                    //targetAnchor.transform.LookAt(contact.normal);
                }
            }
            var handler = CollisionEnter;
            if (handler != null)
            {
                handler(this, new RFX4_CollisionInfo {
                    HitPoint = contact.point, HitCollider = contact.otherCollider, HitGameObject = contact.otherCollider.gameObject
                });
            }

            if (EffectOnCollision != null)
            {
                var instance = Instantiate(EffectOnCollision, contact.point, new Quaternion()) as GameObject;

                if (HUE > -0.9f)
                {
                    RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
                }

                if (LookAtNormal)
                {
                    instance.transform.LookAt(contact.point + contact.normal);
                }
                else
                {
                    instance.transform.rotation = transform.rotation;
                }
                if (!CollisionEffectInWorldSpace)
                {
                    instance.transform.parent = contact.otherCollider.transform.parent;
                }
                Destroy(instance, CollisionEffectDestroyAfter);
            }
        }

        foreach (var obj in DeactivateObjectsAfterCollision)
        {
            if (obj != null)
            {
                var ps = obj.GetComponent <ParticleSystem>();
                if (ps != null)
                {
                    ps.Stop();
                }
                else
                {
                    obj.SetActive(false);
                }
            }
        }


        if (rigid != null)
        {
            Destroy(rigid);
        }
        if (collid != null)
        {
            Destroy(collid);
        }
    }
    private void UpdateRaycast()
    {
        RaycastHit raycastHit;

        if (Physics.Raycast(transform.position, transform.forward, out raycastHit, RaycastDistance))
        {
            Vector3 position;
            if (UsePivotPosition)
            {
                position = raycastHit.transform.position;
            }
            else
            {
                position = raycastHit.point + raycastHit.normal * Offset;
            }

            var handler = CollisionEnter;
            if (handler != null)
            {
                handler(this, new RFX4_PhysicsMotion.RFX4_CollisionInfo {
                    HitPoint = raycastHit.point, HitCollider = raycastHit.collider, HitGameObject = raycastHit.transform.gameObject
                });
            }

            if (distanceParticles != null)
            {
                foreach (var rayPS in distanceParticles)
                {
                    if (rayPS != null && rayPS.name.Contains(particlesAdditionalName))
                    {
                        rayPS.GetComponent <ParticleSystemRenderer>().lengthScale = (transform.position - raycastHit.point).magnitude / rayPS.main.startSize.constantMax;
                    }
                }
            }

            if (CollidedInstances.Count == 0)
            {
                foreach (var effect in Effects)
                {
                    if (effect != null)
                    {
                        if (photonView.IsMine)
                        {
                            var instance = PhotonNetwork.Instantiate(effect.name, position, new Quaternion()) as GameObject;
                            //custom
                            instance.GetComponent <SwordControl>()._teamNumber = GameObject.Find("DataBase").GetComponent <DataBaseScript>()._TeamNumber;
                            var effectSettings     = instance.GetComponent <RFX4_EffectSettings>();
                            var effectSettingsRoot = GetComponentInParent <RFX4_EffectSettings>();
                            if (effectSettings != null && effectSettingsRoot != null)
                            {
                                //effectSettings.EffectQuality = effectSettingsRoot.EffectQuality;
                                // effectSettings.ForceInitialize();
                            }

                            CollidedInstances.Add(instance);

                            if (HUE > -0.9f)
                            {
                                RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
                            }

                            if (!IsWorldSpace)
                            {
                                instance.transform.parent = transform;
                            }
                            if (UseNormalRotation)
                            {
                                instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                            }
                            if (DestroyTime > 0.0001f)
                            {
                                Destroy(instance, DestroyTime);
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (var instance in CollidedInstances)
                {
                    if (instance == null)
                    {
                        continue;
                    }
                    instance.transform.position = position;
                    if (UseNormalRotation)
                    {
                        instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                }
            }
        }
        if (RealTimeUpdateRaycast)
        {
            canUpdate = true;
        }
    }
Example #18
0
    void OnCollisionEnter(Collision collision)
    {
        if (isCollided && !effectSettings.UseCollisionDetection)
        {
            return;
        }

        foreach (ContactPoint contact in collision.contacts)
        {
            if (!isCollided)
            {
                isCollided = true;
                //offsetColliderPoint = contact.otherCollider.transform.position - contact.point;
                // lastCollider = contact.otherCollider;
                // lastContactPoint = contact;
                if (UseTargetPositionAfterCollision)
                {
                    if (targetAnchor != null)
                    {
                        Destroy(targetAnchor);
                    }

                    targetAnchor                    = new GameObject();
                    targetAnchor.hideFlags          = HideFlags.HideAndDontSave;
                    targetAnchor.transform.parent   = contact.otherCollider.transform;
                    targetAnchor.transform.position = contact.point;
                    targetAnchor.transform.rotation = transform.rotation;
                    //targetAnchor.transform.LookAt(contact.normal);
                }
            }
            // is a bullet bouncing?


            var handler = CollisionEnter;
            if (handler != null)
            {
                handler(this, new RFX4_CollisionInfo {
                    HitPoint = contact.point, HitCollider = contact.otherCollider, HitGameObject = contact.otherCollider.gameObject, Collision = collision
                });
            }

            if (!canExplode)
            {
                return;
            }
            if (EffectOnCollision != null)
            {
                var instance = Instantiate(EffectOnCollision, contact.point, new Quaternion()) as GameObject;

                if (HUE > -0.9f)
                {
                    RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
                }

                if (LookAtNormal)
                {
                    instance.transform.LookAt(contact.point + contact.normal);
                }
                else
                {
                    instance.transform.rotation = transform.rotation;
                }
                if (!CollisionEffectInWorldSpace)
                {
                    instance.transform.parent = contact.otherCollider.transform.parent;
                }
                Destroy(instance, CollisionEffectDestroyAfter);
            }
        }

        foreach (var obj in DeactivateObjectsAfterCollision)
        {
            if (obj != null)
            {
                var ps = obj.GetComponent <ParticleSystem>();
                if (ps != null)
                {
                    ps.Stop();
                }
                else
                {
                    obj.SetActive(false);
                }
            }
        }


        if (rigid != null)
        {
            Destroy(rigid);
        }
        if (collid != null)
        {
            Destroy(collid);
        }
    }
Example #19
0
    private void OnGUI()
    {
        if (Input.GetKeyUp(KeyCode.LeftArrow) || Input.GetKeyUp(KeyCode.RightArrow) || Input.GetKeyUp(KeyCode.DownArrow))
        {
            isButtonPressed = false;
        }

        if (GUI.Button(new Rect(10 * dpiScale, 15 * dpiScale, 135 * dpiScale, 37 * dpiScale), "PREVIOUS EFFECT") || (!isButtonPressed && Input.GetKeyDown(KeyCode.LeftArrow)))
        {
            isButtonPressed = true;
            ChangeCurrent(-1);
        }
        if (GUI.Button(new Rect(160 * dpiScale, 15 * dpiScale, 135 * dpiScale, 37 * dpiScale), "NEXT EFFECT") || (!isButtonPressed && Input.GetKeyDown(KeyCode.RightArrow)))
        {
            isButtonPressed = true;
            ChangeCurrent(+1);
        }
        var offset = 0f;

        if (UseMobileVersion)
        {
            offset += 50 * dpiScale;
            if (GUI.Button(new Rect(10 * dpiScale, 63 * dpiScale, 285 * dpiScale, 37 * dpiScale), "ON / OFF REALISTIC BLOOM") ||
                (!isButtonPressed && Input.GetKeyDown(KeyCode.DownArrow)))
            {
                isUsedMobileBloom = !isUsedMobileBloom;
                RFX4_DistortionAndBloom.UseBloom = isUsedMobileBloom;
            }
            if (!isUsedMobileBloom)
            {
                guiStyleHeaderMobile.normal.textColor = new Color(0.8f, 0.2f, 0.2f);
            }
            else
            {
                guiStyleHeaderMobile.normal.textColor = new Color(0.1f, 0.6f, 0.1f);
            }
            GUI.Label(new Rect(400 * dpiScale, 15 * dpiScale, 100 * dpiScale, 20 * dpiScale), "Bloom is " + (isUsedMobileBloom?"Enabled":"Disabled"), guiStyleHeaderMobile);
        }
        if (GUI.Button(new Rect(10 * dpiScale, 63 * dpiScale + offset, 285 * dpiScale, 37 * dpiScale), "Day / Night") || (!isButtonPressed && Input.GetKeyDown(KeyCode.DownArrow)))
        {
            isButtonPressed = true;
            if (ReflectionProbe != null)
            {
                ReflectionProbe.RenderProbe();
            }
            Sun.intensity = !isDay ? 0.05f : startSunIntensity;
            Sun.shadows   = isDay ? startLightShadows : LightShadows.None;
            foreach (var nightLight in NightLights)
            {
                nightLight.shadows = !isDay ? startLightShadows : LightShadows.None;
            }
            Sun.transform.rotation             = isDay ? startSunRotation : Quaternion.Euler(350, 30, 90);
            RenderSettings.ambientLight        = !isDay ? new Color(0.1f, 0.1f, 0.1f) : startAmbientLight;
            RenderSettings.ambientIntensity    = isDay ? startAmbientIntencity : 1;
            RenderSettings.reflectionIntensity = isDay ? startReflectionIntencity : 0.2f;
            isDay = !isDay;
        }

        GUI.Label(new Rect(400 * dpiScale, 15 * dpiScale + offset / 2, 100 * dpiScale, 20 * dpiScale),
                  "Prefab name is \"" + Prefabs[currentNomber].name +
                  "\"  \r\nHold any mouse button that would move the camera", guiStyleHeader);

        GUI.DrawTexture(new Rect(12 * dpiScale, 120 * dpiScale + offset, 285 * dpiScale, 15 * dpiScale), HUETexture, ScaleMode.StretchToFill, false, 0);


        float oldColorHUE = colorHUE;

        colorHUE = GUI.HorizontalSlider(new Rect(12 * dpiScale, 140 * dpiScale + offset, 285 * dpiScale, 15 * dpiScale), colorHUE, 0, 360);
        if (Mathf.Abs(oldColorHUE - colorHUE) > 0.001)
        {
            RFX4_ColorHelper.ChangeObjectColorByHUE(currentInstance, colorHUE / 360f);
            var transformMotion = currentInstance.GetComponentInChildren <RFX4_TransformMotion>(true);
            if (transformMotion != null)
            {
                transformMotion.HUE = colorHUE / 360f;
                foreach (var collidedInstance in transformMotion.CollidedInstances)
                {
                    if (collidedInstance != null)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(collidedInstance, colorHUE / 360f);
                    }
                }
            }

            var rayCastCollision = currentInstance.GetComponentInChildren <RFX4_RaycastCollision>(true);
            if (rayCastCollision != null)
            {
                rayCastCollision.HUE = colorHUE / 360f;
                foreach (var collidedInstance in rayCastCollision.CollidedInstances)
                {
                    if (collidedInstance != null)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(collidedInstance, colorHUE / 360f);
                    }
                }
            }
        }
    }
Example #20
0
    private void UpdateRaycast()
    {
        RaycastHit raycastHit;

        if (Physics.Raycast(transform.position, transform.forward, out raycastHit, RaycastDistance))
        {
            Vector3 position;
            if (UsePivotPosition)
            {
                position = raycastHit.transform.position;
            }
            else
            {
                position = raycastHit.point + raycastHit.normal * Offset;
            }

            if (CollidedInstances.Count == 0)
            {
                foreach (var effect in Effects)
                {
                    var instance = Instantiate(effect, position, new Quaternion()) as GameObject;
                    CollidedInstances.Add(instance);

                    if (OnCollisionObject != null)
                    {
                        OnCollisionObject(raycastHit.collider.gameObject);
                    }

                    if (HUE > -0.9f)
                    {
                        RFX4_ColorHelper.ChangeObjectColorByHUE(instance, HUE);
                    }
                    if (!IsWorldSpace)
                    {
                        instance.transform.parent = transform;
                    }
                    if (UseNormalRotation)
                    {
                        instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                    if (DestroyTime > 0.0001f)
                    {
                        Destroy(instance, DestroyTime);
                    }
                }
            }
            else
            {
                foreach (var instance in CollidedInstances)
                {
                    if (instance == null)
                    {
                        continue;
                    }
                    instance.transform.position = position;
                    if (UseNormalRotation)
                    {
                        instance.transform.LookAt(raycastHit.point + raycastHit.normal);
                    }
                }
            }
        }
        if (RealTimeUpdateRaycast)
        {
            canUpdate = true;
        }
    }