示例#1
0
    public virtual void DoMeleeEffects(Vector3 fromPos, Vector3 pos, Quaternion rot, GameObject hitObj)
    {
        if (!hitObj.CompareTag("Tree Collider"))
        {
            SurfaceInfo.DoImpact(hitObj, SurfaceInfoObject.ImpactType.Melee, pos, rot);
            return;
        }
        GameObject gameObject = UnityEngine.Object.Instantiate(this.impactEffectWood, pos, rot) as GameObject;

        UnityEngine.Object.Destroy(gameObject, 1.5f);
        this.impactSoundWood.Play(pos, 1f, 2f, 10f);
    }
示例#2
0
 public virtual void DoMeleeEffects(Vector3 fromPos, Vector3 pos, Quaternion rot, GameObject hitObj)
 {
     if (hitObj.CompareTag("Tree Collider"))
     {
         GameObject obj2 = Object.Instantiate(this.impactEffectWood, pos, rot) as GameObject;
         Object.Destroy(obj2, 1.5f);
         this.impactSoundWood.Play(pos, (float)1f, (float)2f, (float)10f);
     }
     else
     {
         SurfaceInfo.DoImpact(hitObj, SurfaceInfoObject.ImpactType.Melee, pos, rot);
     }
 }
示例#3
0
    private void Update()
    {
        float num = Time.time - this.lastUpdateTime;

        this.lastUpdateTime = Time.time;
        if (this.distance > this.fadeDistStart)
        {
            base.transform.localScale = Vector3.Lerp(base.transform.localScale, this.startScale, Mathf.Clamp((float)((this.distance - this.fadeDistStart) / this.fadeDistLength), (float)0f, (float)1f));
        }
        RaycastHit  hitInfo  = new RaycastHit();
        RaycastHit2 invalid  = RaycastHit2.invalid;
        Ray         ray      = new Ray(base.transform.position, base.transform.forward);
        float       distance = this.speedPerSec * num;
        bool        flag     = !((this.thereIsACollider && (this.colliderToHit != null)) && this.colliderToHit.enabled);

        if (!flag ? this.colliderToHit.Raycast(ray, out hitInfo, distance) : Physics2.Raycast2(ray, out invalid, this.speedPerSec * num, this.layerMask))
        {
            Vector3    point;
            Vector3    normal;
            GameObject gameObject;
            Rigidbody  rigidbody;
            if (Vector3.Distance(Camera.main.transform.position, base.transform.position) > 75f)
            {
                Object.Destroy(base.gameObject);
                return;
            }
            if (flag)
            {
                normal     = invalid.normal;
                point      = invalid.point;
                gameObject = invalid.gameObject;
                rigidbody  = invalid.rigidbody;
            }
            else
            {
                normal     = hitInfo.normal;
                point      = hitInfo.point;
                gameObject = hitInfo.collider.gameObject;
                rigidbody  = hitInfo.rigidbody;
            }
            Quaternion rotation     = Quaternion.LookRotation(normal);
            int        layer        = gameObject.layer;
            GameObject impactPrefab = this.impactPrefab;
            bool       flag2        = true;
            if (((rigidbody != null) && !rigidbody.isKinematic) && !rigidbody.CompareTag("Door"))
            {
                rigidbody.AddForceAtPosition((Vector3)(Vector3.up * 200f), point);
                rigidbody.AddForceAtPosition((Vector3)(ray.direction * 1000f), point);
            }
            SurfaceInfo.DoImpact(gameObject, SurfaceInfoObject.ImpactType.Bullet, point + ((Vector3)(normal * 0.01f)), rotation);
            switch (layer)
            {
            case 0x11:
            case 0x12:
            case 0x1b:
            case 0x15:
                flag2 = false;
                break;
            }
            Object.Destroy(base.gameObject);
            if (flag2)
            {
                this.impactSounds[Random.Range(0, this.impactSounds.Length)].Play(point, 1f, 2f, 15f, 180);
                GameObject obj4 = Object.Instantiate(this.decalPrefab, point + ((Vector3)(normal * Random.Range((float)0.01f, (float)0.03f))), rotation * Quaternion.Euler(0f, 0f, (float)Random.Range(-30, 30))) as GameObject;
                if (gameObject != null)
                {
                    obj4.transform.parent = gameObject.transform;
                }
                Object.Destroy(obj4, 15f);
            }
        }
        else
        {
            Transform transform = base.transform;
            transform.position += (Vector3)((base.transform.forward * this.speedPerSec) * num);
            this.distance      += this.speedPerSec * num;
        }
        if (this.distance > this.maxRange)
        {
            Object.Destroy(base.gameObject);
        }
    }
示例#4
0
    private void Update()
    {
        Vector3    vector3;
        Vector3    vector31;
        GameObject gameObject;
        Rigidbody  rigidbody;
        float      single = Time.time - this.lastUpdateTime;

        this.lastUpdateTime = Time.time;
        if (this.distance > this.fadeDistStart)
        {
            base.transform.localScale = Vector3.Lerp(base.transform.localScale, this.startScale, Mathf.Clamp((this.distance - this.fadeDistStart) / this.fadeDistLength, 0f, 1f));
        }
        RaycastHit  raycastHit  = new RaycastHit();
        RaycastHit2 raycastHit2 = RaycastHit2.invalid;
        Ray         ray         = new Ray(base.transform.position, base.transform.forward);
        float       single1     = this.speedPerSec * single;
        bool        flag        = (!this.thereIsACollider || !this.colliderToHit ? 0 : (int)this.colliderToHit.enabled) == 0;

        if ((!flag ? !this.colliderToHit.Raycast(ray, out raycastHit, single1) : !Physics2.Raycast2(ray, out raycastHit2, this.speedPerSec * single, this.layerMask)))
        {
            Transform transforms = base.transform;
            transforms.position = transforms.position + ((base.transform.forward * this.speedPerSec) * single);
            Tracer tracer = this;
            tracer.distance = tracer.distance + this.speedPerSec * single;
        }
        else
        {
            if (Vector3.Distance(Camera.main.transform.position, base.transform.position) > 75f)
            {
                UnityEngine.Object.Destroy(base.gameObject);
                return;
            }
            if (!flag)
            {
                vector31   = raycastHit.normal;
                vector3    = raycastHit.point;
                gameObject = raycastHit.collider.gameObject;
                rigidbody  = raycastHit.rigidbody;
            }
            else
            {
                vector31   = raycastHit2.normal;
                vector3    = raycastHit2.point;
                gameObject = raycastHit2.gameObject;
                rigidbody  = raycastHit2.rigidbody;
            }
            Quaternion quaternion  = Quaternion.LookRotation(vector31);
            int        num         = gameObject.layer;
            GameObject gameObject1 = this.impactPrefab;
            bool       flag1       = true;
            if (rigidbody && !rigidbody.isKinematic && !rigidbody.CompareTag("Door"))
            {
                rigidbody.AddForceAtPosition(Vector3.up * 200f, vector3);
                rigidbody.AddForceAtPosition(ray.direction * 1000f, vector3);
            }
            SurfaceInfo.DoImpact(gameObject, SurfaceInfoObject.ImpactType.Bullet, vector3 + (vector31 * 0.01f), quaternion);
            if (num == 17 || num == 18 || num == 27 || num == 21)
            {
                flag1 = false;
            }
            UnityEngine.Object.Destroy(base.gameObject);
            if (flag1)
            {
                this.impactSounds[UnityEngine.Random.Range(0, (int)this.impactSounds.Length)].Play(vector3, 1f, 2f, 15f, 180);
                GameObject gameObject2 = UnityEngine.Object.Instantiate(this.decalPrefab, vector3 + (vector31 * UnityEngine.Random.Range(0.01f, 0.03f)), quaternion * Quaternion.Euler(0f, 0f, (float)UnityEngine.Random.Range(-30, 30))) as GameObject;
                if (gameObject)
                {
                    gameObject2.transform.parent = gameObject.transform;
                }
                UnityEngine.Object.Destroy(gameObject2, 15f);
            }
        }
        if (this.distance > this.maxRange)
        {
            UnityEngine.Object.Destroy(base.gameObject);
        }
    }