Esempio n. 1
0
    public virtual void FireSingleBullet(uLink.BitStream sendStream, Ray ray, ItemRepresentation itemRep, out Component hitComponent, out bool allowBlood)
    {
        RaycastHit2 raycastHit2;
        Vector3     point;
        IDMain      dMain;
        Component   component;
        IDMain      dMain1;
        NetEntityID netEntityID = NetEntityID.unassigned;
        bool        flag        = false;
        bool        flag1       = Physics2.Raycast2(ray, out raycastHit2, this.GetBulletRange(itemRep), 406721553);

        if (!flag1)
        {
            dMain        = null;
            point        = ray.GetPoint(this.GetBulletRange(itemRep));
            hitComponent = null;
        }
        else
        {
            point = raycastHit2.point;
            IDBase dBase = raycastHit2.id;
            if (!raycastHit2.remoteBodyPart)
            {
                component = raycastHit2.collider;
            }
            else
            {
                component = raycastHit2.remoteBodyPart;
            }
            hitComponent = component;
            if (!dBase)
            {
                dMain1 = null;
            }
            else
            {
                dMain1 = dBase.idMain;
            }
            dMain = dMain1;
            if (dMain)
            {
                netEntityID = NetEntityID.Get(dMain);
                if (!netEntityID.isUnassigned)
                {
                    TakeDamage takeDamage = dMain.GetComponent <TakeDamage>();
                    if (takeDamage)
                    {
                        flag = true;
                        if (takeDamage.ShouldPlayHitNotification())
                        {
                            this.PlayHitNotification(point, null);
                        }
                    }
                }
            }
        }
        this.WriteHitInfo(sendStream, ref ray, flag1, ref raycastHit2, flag, netEntityID);
        allowBlood = (!flag1 ? false : flag);
    }
Esempio n. 2
0
    private static void UpdateBeam(ref LaserBeam.FrameData frame, LaserBeam beam)
    {
        Vector3   vector;
        Transform transform = beam.transform;

        frame.origin    = transform.position;
        frame.direction = transform.forward;
        frame.direction.Normalize();
        int beamLayers = (int)beam.beamLayers;

        if (beamLayers == 0)
        {
            frame.hit = false;
        }
        else if (beam.isViewModel)
        {
            RaycastHit2 hit;
            if (frame.hit = Physics2.Raycast2(frame.origin, frame.direction, out hit, beam.beamMaxDistance, beamLayers))
            {
                frame.hitPoint  = hit.point;
                frame.hitNormal = hit.normal;
            }
        }
        else
        {
            RaycastHit hit2;
            if (frame.hit = Physics.Raycast(frame.origin, frame.direction, out hit2, beam.beamMaxDistance, beamLayers))
            {
                frame.hitPoint  = hit2.point;
                frame.hitNormal = hit2.normal;
            }
        }
        if (!frame.hit)
        {
            frame.didHit           = false;
            frame.point.x          = frame.origin.x + (frame.direction.x * beam.beamMaxDistance);
            frame.point.y          = frame.origin.y + (frame.direction.y * beam.beamMaxDistance);
            frame.point.z          = frame.origin.z + (frame.direction.z * beam.beamMaxDistance);
            frame.distance         = beam.beamMaxDistance;
            frame.distanceFraction = 1f;
            frame.pointWidth       = beam.beamWidthEnd;
        }
        else
        {
            frame.point            = frame.hitPoint;
            frame.didHit           = true;
            frame.distance         = (((frame.direction.x * frame.point.x) + (frame.direction.y * frame.point.y)) + (frame.direction.z * frame.point.z)) - (((frame.direction.x * frame.origin.x) + (frame.direction.y * frame.origin.y)) + (frame.direction.z * frame.origin.z));
            frame.distanceFraction = frame.distance / beam.beamMaxDistance;
            frame.pointWidth       = Mathf.Lerp(beam.beamWidthStart, beam.beamWidthEnd, frame.distanceFraction);
            frame.dotRadius        = Mathf.Lerp(beam.dotRadiusStart, beam.dotRadiusEnd, frame.distanceFraction);
        }
        frame.originWidth = beam.beamWidthStart;
        vector.x          = vector.y = vector.z = frame.originWidth;
        frame.bounds      = new Bounds(frame.origin, vector);
        vector.x          = vector.y = vector.z = frame.pointWidth;
        frame.bounds.Encapsulate(new Bounds(frame.point, vector));
        frame.beamsLayer = ((int)1) << beam.gameObject.layer;
        allBeamsMask    |= frame.beamsLayer;
    }
Esempio n. 3
0
    public bool Physics2SphereCast(Ray ray, float radius, float range, int hitMask, out Vector3 point, out Vector3 normal, out Collider hitCollider, out BodyPart part)
    {
        RaycastHit2 raycastHit2;
        RaycastHit  raycastHit;
        RaycastHit  raycastHit1;
        RaycastHit  raycastHit3 = new RaycastHit();
        bool        flag        = false;
        bool        flag1       = false;

        if (Physics.SphereCast(ray, radius, out raycastHit1, range - radius, hitMask & -131073))
        {
            flag1       = true;
            raycastHit3 = raycastHit1;
            if (Physics.Raycast(ray, out raycastHit, range, hitMask & -131073))
            {
                flag = true;
                if (raycastHit.distance < raycastHit1.distance)
                {
                    raycastHit3 = raycastHit;
                }
            }
        }
        bool flag2 = (flag1 ? true : flag);

        if (Physics2.Raycast2(ray, out raycastHit2, range, hitMask) && (!flag2 || raycastHit2.distance < raycastHit3.distance))
        {
            point       = raycastHit2.point;
            normal      = raycastHit2.normal;
            hitCollider = raycastHit2.collider;
            part        = raycastHit2.bodyPart;
            return(true);
        }
        if (!flag2)
        {
            Collider[] colliderArray = Physics.OverlapSphere(ray.origin, 0.3f, 131072);
            if ((int)colliderArray.Length > 0)
            {
                point       = ray.origin + (ray.direction * 0.5f);
                normal      = ray.direction * -1f;
                hitCollider = colliderArray[0];
                part        = BodyPart.Undefined;
                return(true);
            }
        }
        if (flag2)
        {
            point       = raycastHit3.point;
            normal      = raycastHit3.normal;
            hitCollider = raycastHit3.collider;
            part        = BodyPart.Undefined;
            return(true);
        }
        point       = ray.origin + (ray.direction * range);
        normal      = ray.direction * -1f;
        hitCollider = null;
        part        = BodyPart.Undefined;
        return(false);
    }
    // Token: 0x06003539 RID: 13625 RVA: 0x000C3C60 File Offset: 0x000C1E60
    public bool Physics2SphereCast(Ray ray, float radius, float range, int hitMask, out Vector3 point, out Vector3 normal, out Collider hitCollider, out BodyPart part)
    {
        RaycastHit raycastHit = default(RaycastHit);
        bool       flag       = false;
        bool       flag2      = false;
        RaycastHit raycastHit2;

        if (Physics.SphereCast(ray, radius, ref raycastHit2, range - radius, hitMask & -131073))
        {
            flag2      = true;
            raycastHit = raycastHit2;
            RaycastHit raycastHit3;
            if (Physics.Raycast(ray, ref raycastHit3, range, hitMask & -131073))
            {
                flag = true;
                if (raycastHit3.distance < raycastHit2.distance)
                {
                    raycastHit = raycastHit3;
                }
            }
        }
        bool        flag3 = flag2 || flag;
        RaycastHit2 raycastHit4;

        if (Physics2.Raycast2(ray, ref raycastHit4, range, hitMask) && (!flag3 || raycastHit4.distance < raycastHit.distance))
        {
            point       = raycastHit4.point;
            normal      = raycastHit4.normal;
            hitCollider = raycastHit4.collider;
            part        = raycastHit4.bodyPart;
            return(true);
        }
        if (!flag3)
        {
            Collider[] array = Physics.OverlapSphere(ray.origin, 0.3f, 131072);
            if (array.Length > 0)
            {
                point       = ray.origin + ray.direction * 0.5f;
                normal      = ray.direction * -1f;
                hitCollider = array[0];
                part        = 0;
                return(true);
            }
        }
        if (!flag3)
        {
            point       = ray.origin + ray.direction * range;
            normal      = ray.direction * -1f;
            hitCollider = null;
            part        = 0;
            return(false);
        }
        point       = raycastHit.point;
        normal      = raycastHit.normal;
        hitCollider = raycastHit.collider;
        part        = 0;
        return(true);
    }
Esempio n. 5
0
    public bool Physics2SphereCast(Ray ray, float radius, float range, int hitMask, out Vector3 point, out Vector3 normal, out Collider hitCollider, out BodyPart part)
    {
        RaycastHit2 hit;
        RaycastHit  hit3;
        RaycastHit  hit4  = new RaycastHit();
        bool        flag  = false;
        bool        flag2 = false;

        if (Physics.SphereCast(ray, radius, out hit3, range - radius, hitMask & -131073))
        {
            RaycastHit hit2;
            flag2 = true;
            hit4  = hit3;
            if (Physics.Raycast(ray, out hit2, range, hitMask & -131073))
            {
                flag = true;
                if (hit2.distance < hit3.distance)
                {
                    hit4 = hit2;
                }
            }
        }
        bool flag3 = flag2 || flag;

        if (Physics2.Raycast2(ray, out hit, range, hitMask) && (!flag3 || (hit.distance < hit4.distance)))
        {
            point       = hit.point;
            normal      = hit.normal;
            hitCollider = hit.collider;
            part        = hit.bodyPart;
            return(true);
        }
        if (!flag3)
        {
            Collider[] colliderArray = Physics.OverlapSphere(ray.origin, 0.3f, 0x20000);
            if (colliderArray.Length > 0)
            {
                point       = ray.origin + ((Vector3)(ray.direction * 0.5f));
                normal      = (Vector3)(ray.direction * -1f);
                hitCollider = colliderArray[0];
                part        = BodyPart.Undefined;
                return(true);
            }
        }
        if (!flag3)
        {
            point       = ray.origin + ((Vector3)(ray.direction * range));
            normal      = (Vector3)(ray.direction * -1f);
            hitCollider = null;
            part        = BodyPart.Undefined;
            return(false);
        }
        point       = hit4.point;
        normal      = hit4.normal;
        hitCollider = hit4.collider;
        part        = BodyPart.Undefined;
        return(true);
    }
Esempio n. 6
0
    // Token: 0x06003AD1 RID: 15057 RVA: 0x000CE300 File Offset: 0x000CC500
    private static void UpdateBeam(ref global::LaserBeam.FrameData frame, global::LaserBeam beam)
    {
        Transform transform = beam.transform;

        frame.origin    = transform.position;
        frame.direction = transform.forward;
        frame.direction.Normalize();
        int        num = beam.beamLayers;
        RaycastHit raycastHit2;

        if (num == 0)
        {
            frame.hit = false;
        }
        else if (beam.isViewModel)
        {
            RaycastHit2 raycastHit;
            if (frame.hit = Physics2.Raycast2(frame.origin, frame.direction, ref raycastHit, beam.beamMaxDistance, num))
            {
                frame.hitPoint  = raycastHit.point;
                frame.hitNormal = raycastHit.normal;
            }
        }
        else if (frame.hit = Physics.Raycast(frame.origin, frame.direction, ref raycastHit2, beam.beamMaxDistance, num))
        {
            frame.hitPoint  = raycastHit2.point;
            frame.hitNormal = raycastHit2.normal;
        }
        if (!frame.hit)
        {
            frame.didHit           = false;
            frame.point.x          = frame.origin.x + frame.direction.x * beam.beamMaxDistance;
            frame.point.y          = frame.origin.y + frame.direction.y * beam.beamMaxDistance;
            frame.point.z          = frame.origin.z + frame.direction.z * beam.beamMaxDistance;
            frame.distance         = beam.beamMaxDistance;
            frame.distanceFraction = 1f;
            frame.pointWidth       = beam.beamWidthEnd;
        }
        else
        {
            frame.point            = frame.hitPoint;
            frame.didHit           = true;
            frame.distance         = frame.direction.x * frame.point.x + frame.direction.y * frame.point.y + frame.direction.z * frame.point.z - (frame.direction.x * frame.origin.x + frame.direction.y * frame.origin.y + frame.direction.z * frame.origin.z);
            frame.distanceFraction = frame.distance / beam.beamMaxDistance;
            frame.pointWidth       = Mathf.Lerp(beam.beamWidthStart, beam.beamWidthEnd, frame.distanceFraction);
            frame.dotRadius        = Mathf.Lerp(beam.dotRadiusStart, beam.dotRadiusEnd, frame.distanceFraction);
        }
        frame.originWidth = beam.beamWidthStart;
        Vector3 vector;

        vector.x     = (vector.y = (vector.z = frame.originWidth));
        frame.bounds = new Bounds(frame.origin, vector);
        vector.x     = (vector.y = (vector.z = frame.pointWidth));
        frame.bounds.Encapsulate(new Bounds(frame.point, vector));
        frame.beamsLayer = 1 << beam.gameObject.layer;
        global::LaserGraphics.allBeamsMask |= frame.beamsLayer;
    }
 public void AutoWood()
 {
     if (CVars.Misc.AutoWood)
     {
         WoodBlockerTemp.numWood = -1f;
         Character component = PlayerClient.GetLocalPlayer().controllable.GetComponent <Character>();
         Inventory inventory = component.GetComponent(typeof(Inventory)) as Inventory;
         MeleeWeaponItem <MeleeWeaponDataBlock> meleeWeaponItem = inventory._activeItem as MeleeWeaponItem <MeleeWeaponDataBlock>;
         if (inventory._activeItem is MeleeWeaponItem <MeleeWeaponDataBlock> && Time.time - this.LAST_ATTACK_TIME > meleeWeaponItem.datablock.fireRate && this.AUTO_WOOD_GATHER)
         {
             this.LAST_ATTACK_TIME = Time.time;
             ItemRepresentation itemRepresentation = meleeWeaponItem.itemRepresentation;
             IMeleeWeaponItem   meleeWeaponItem2   = meleeWeaponItem.iface as IMeleeWeaponItem;
             RaycastHit2        raycastHit;
             bool    flag  = Physics2.Raycast2(component.eyesRay, out raycastHit, meleeWeaponItem.datablock.range, 406721553);
             Vector3 point = raycastHit.point;
             itemRepresentation.Action(3, uLink.RPCMode.Server);
             uLink.BitStream bitStream = new uLink.BitStream(false);
             if (flag)
             {
                 IDMain idMain = raycastHit.idMain;
                 bitStream.WriteBoolean(true);
                 bitStream.Write <NetEntityID>(NetEntityID.Get(idMain), new object[0]);
                 bitStream.WriteVector3(point);
                 bitStream.WriteBoolean(false);
                 itemRepresentation.ActionStream(1, uLink.RPCMode.Server, bitStream);
                 HUDHitIndicator hUDHitIndicator;
                 if (Facepunch.Bundling.Load <HUDHitIndicator>("content/hud/HUDHitIndicator", out hUDHitIndicator))
                 {
                     HUDHitIndicator.CreateIndicator(point, true, hUDHitIndicator);
                 }
             }
             else
             {
                 bitStream.WriteBoolean(false);
                 bitStream.WriteVector3(Vector3.zero);
                 bitStream.WriteBoolean(true);
                 itemRepresentation.ActionStream(1, uLink.RPCMode.Server, bitStream);
             }
         }
     }
 }
Esempio n. 8
0
 public void AutoWood()
 {
     if (CVars.Misc.AutoWood)
     {
         Character component = PlayerClient.GetLocalPlayer().controllable.GetComponent <Character>();
         Inventory inventory = component.GetComponent(typeof(Inventory)) as Inventory;
         MeleeWeaponItem <MeleeWeaponDataBlock> item = inventory._activeItem as MeleeWeaponItem <MeleeWeaponDataBlock>;
         if (((inventory._activeItem is MeleeWeaponItem <MeleeWeaponDataBlock>) && ((Time.time - this.LAST_ATTACK_TIME) > item.datablock.fireRate)) && this.AUTO_WOOD_GATHER)
         {
             RaycastHit2 hit;
             this.LAST_ATTACK_TIME = Time.time;
             ItemRepresentation itemRepresentation = item.itemRepresentation;
             IMeleeWeaponItem   iface = item.iface as IMeleeWeaponItem;
             bool    flag             = Physics2.Raycast2(component.eyesRay, out hit, item.datablock.range, 0x183e1411);
             Vector3 point            = hit.point;
             itemRepresentation.Action(3, uLink.RPCMode.Server);
             uLink.BitStream stream = new uLink.BitStream(false);
             if (flag)
             {
                 HUDHitIndicator indicator;
                 IDMain          idMain = hit.idMain;
                 stream.WriteBoolean(true);
                 stream.Write <NetEntityID>(NetEntityID.Get((UnityEngine.MonoBehaviour)idMain), new object[0]);
                 stream.WriteVector3(point);
                 stream.WriteBoolean(false);
                 itemRepresentation.ActionStream(1, uLink.RPCMode.Server, stream);
                 if (Bundling.Load <HUDHitIndicator>("content/hud/HUDHitIndicator", out indicator))
                 {
                     HUDHitIndicator.CreateIndicator(point, true, indicator);
                 }
             }
             else
             {
                 stream.WriteBoolean(false);
                 stream.WriteVector3(Vector3.zero);
                 stream.WriteBoolean(true);
                 itemRepresentation.ActionStream(1, uLink.RPCMode.Server, stream);
             }
         }
     }
 }
Esempio n. 9
0
    public virtual void FireSingleBullet(uLink.BitStream sendStream, Ray ray, ItemRepresentation itemRep, out Component hitComponent, out bool allowBlood)
    {
        RaycastHit2 hit;
        Vector3     point;
        IDMain      main;
        NetEntityID unassigned     = NetEntityID.unassigned;
        bool        hitNetworkView = false;
        bool        didHit         = Physics2.Raycast2(ray, out hit, this.GetBulletRange(itemRep), 0x183e1411);

        if (didHit)
        {
            point = hit.point;
            IDBase id = hit.id;
            hitComponent = (hit.remoteBodyPart == null) ? ((Component)hit.collider) : ((Component)hit.remoteBodyPart);
            main         = (id == null) ? null : id.idMain;
            if (main != null)
            {
                unassigned = NetEntityID.Get((UnityEngine.MonoBehaviour)main);
                if (!unassigned.isUnassigned)
                {
                    TakeDamage component = main.GetComponent <TakeDamage>();
                    if (component != null)
                    {
                        hitNetworkView = true;
                        if (component.ShouldPlayHitNotification())
                        {
                            this.PlayHitNotification(point, null);
                        }
                    }
                }
            }
        }
        else
        {
            main         = null;
            point        = ray.GetPoint(this.GetBulletRange(itemRep));
            hitComponent = null;
        }
        this.WriteHitInfo(sendStream, ref ray, didHit, ref hit, hitNetworkView, unassigned);
        allowBlood = didHit && hitNetworkView;
    }
Esempio n. 10
0
    // Token: 0x060035F8 RID: 13816 RVA: 0x000C4DD0 File Offset: 0x000C2FD0
    public virtual void FireSingleBullet(BitStream sendStream, Ray ray, global::ItemRepresentation itemRep, out Component hitComponent, out bool allowBlood)
    {
        global::NetEntityID hitView = global::NetEntityID.unassigned;
        bool        flag            = false;
        RaycastHit2 raycastHit;
        bool        flag2 = Physics2.Raycast2(ray, ref raycastHit, this.GetBulletRange(itemRep), 406721553);

        if (flag2)
        {
            Vector3 point = raycastHit.point;
            IDBase  id    = raycastHit.id;
            hitComponent = ((!raycastHit.remoteBodyPart) ? raycastHit.collider : raycastHit.remoteBodyPart);
            IDMain idmain = (!id) ? null : id.idMain;
            if (idmain)
            {
                hitView = global::NetEntityID.Get(idmain);
                if (!hitView.isUnassigned)
                {
                    global::TakeDamage component = idmain.GetComponent <global::TakeDamage>();
                    if (component)
                    {
                        flag = true;
                        if (component.ShouldPlayHitNotification())
                        {
                            this.PlayHitNotification(point, null);
                        }
                    }
                }
            }
        }
        else
        {
            Vector3 point = ray.GetPoint(this.GetBulletRange(itemRep));
            hitComponent = null;
        }
        this.WriteHitInfo(sendStream, ref ray, flag2, ref raycastHit, flag, hitView);
        allowBlood = (flag2 && flag);
    }
Esempio n. 11
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);
        }
    }
Esempio n. 12
0
    // Token: 0x06002DB5 RID: 11701 RVA: 0x000AC314 File Offset: 0x000AA514
    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((this.distance - this.fadeDistStart) / this.fadeDistLength, 0f, 1f));
        }
        RaycastHit  raycastHit = default(RaycastHit);
        RaycastHit2 invalid    = RaycastHit2.invalid;
        Ray         ray;

        ray..ctor(base.transform.position, base.transform.forward);
        float num2 = this.speedPerSec * num;
        bool  flag = !this.thereIsACollider || !this.colliderToHit || !this.colliderToHit.enabled;

        if ((!flag) ? this.colliderToHit.Raycast(ray, ref raycastHit, num2) : Physics2.Raycast2(ray, ref invalid, this.speedPerSec * num, this.layerMask))
        {
            float num3 = Vector3.Distance(Camera.main.transform.position, base.transform.position);
            if (num3 > 75f)
            {
                Object.Destroy(base.gameObject);
                return;
            }
            Vector3    normal;
            Vector3    point;
            GameObject gameObject;
            Rigidbody  rigidbody;
            if (flag)
            {
                normal     = invalid.normal;
                point      = invalid.point;
                gameObject = invalid.gameObject;
                rigidbody  = invalid.rigidbody;
            }
            else
            {
                normal     = raycastHit.normal;
                point      = raycastHit.point;
                gameObject = raycastHit.collider.gameObject;
                rigidbody  = raycastHit.rigidbody;
            }
            Quaternion quaternion  = Quaternion.LookRotation(normal);
            int        layer       = gameObject.layer;
            GameObject gameObject2 = this.impactPrefab;
            bool       flag2       = true;
            if (rigidbody && !rigidbody.isKinematic && !rigidbody.CompareTag("Door"))
            {
                rigidbody.AddForceAtPosition(Vector3.up * 200f, point);
                rigidbody.AddForceAtPosition(ray.direction * 1000f, point);
            }
            global::SurfaceInfo.DoImpact(gameObject, global::SurfaceInfoObject.ImpactType.Bullet, point + normal * 0.01f, quaternion);
            if (layer == 17 || layer == 18 || layer == 27 || layer == 21)
            {
                flag2 = false;
            }
            Object.Destroy(base.gameObject);
            if (flag2)
            {
                this.impactSounds[Random.Range(0, this.impactSounds.Length)].Play(point, 1f, 2f, 15f, 180);
                GameObject gameObject3 = Object.Instantiate(this.decalPrefab, point + normal * Random.Range(0.01f, 0.03f), quaternion * Quaternion.Euler(0f, 0f, (float)Random.Range(-30, 30))) as GameObject;
                if (gameObject)
                {
                    gameObject3.transform.parent = gameObject.transform;
                }
                Object.Destroy(gameObject3, 15f);
            }
        }
        else
        {
            base.transform.position += base.transform.forward * this.speedPerSec * num;
            this.distance           += this.speedPerSec * num;
        }
        if (this.distance > this.maxRange)
        {
            Object.Destroy(base.gameObject);
        }
    }
    // Token: 0x06000267 RID: 615 RVA: 0x0000CBF4 File Offset: 0x0000ADF4
    private void Update()
    {
        if (this.impacted)
        {
            return;
        }
        float num = Time.time - this.lastUpdateTime;

        this.lastUpdateTime = Time.time;
        RaycastHit  raycastHit = default(RaycastHit);
        RaycastHit2 invalid    = RaycastHit2.invalid;

        base.transform.Rotate(Vector3.right, this.dropDegreesPerSec * num);
        Ray ray;

        ray..ctor(base.transform.position, base.transform.forward);
        float num2 = this.speedPerSec * num;
        bool  flag = true;

        if (Physics2.Raycast2(ray, ref invalid, this.speedPerSec * num, this.layerMask))
        {
            Vector3    normal;
            Vector3    point;
            GameObject gameObject;
            Rigidbody  rigidbody;
            if (flag)
            {
                normal     = invalid.normal;
                point      = invalid.point;
                gameObject = invalid.gameObject;
                rigidbody  = invalid.rigidbody;
            }
            else
            {
                normal     = raycastHit.normal;
                point      = raycastHit.point;
                gameObject = raycastHit.collider.gameObject;
                rigidbody  = raycastHit.rigidbody;
            }
            Quaternion quaternion = Quaternion.LookRotation(normal);
            Vector3    vector     = Vector3.zero;
            int        layer      = gameObject.layer;
            if (rigidbody && !rigidbody.isKinematic && !rigidbody.CompareTag("Door"))
            {
                rigidbody.AddForceAtPosition(Vector3.up * 200f, point);
                rigidbody.AddForceAtPosition(ray.direction * 1000f, point);
            }
            if (layer != 17 && layer != 18 && layer != 27 && layer != 21)
            {
                vector = point + normal * 0.01f;
            }
            this.impacted           = true;
            base.transform.position = point;
            this.TryReportHit(gameObject);
            base.transform.parent = gameObject.transform;
            TrailRenderer component = base.GetComponent <TrailRenderer>();
            if (component)
            {
                component.enabled = false;
            }
            base.audio.enabled = false;
            if (gameObject)
            {
                global::SurfaceInfoObject surfaceInfoFor = global::SurfaceInfo.GetSurfaceInfoFor(gameObject, point);
                surfaceInfoFor.GetImpactEffect(global::SurfaceInfoObject.ImpactType.Bullet);
                Object @object = Object.Instantiate(surfaceInfoFor.GetImpactEffect(global::SurfaceInfoObject.ImpactType.Bullet), point, quaternion);
                Object.Destroy(@object, 1.5f);
                this.TryReportMiss();
            }
            Object.Destroy(base.gameObject, 20f);
        }
        else
        {
            base.transform.position += base.transform.forward * this.speedPerSec * num;
            this.distance           += this.speedPerSec * num;
        }
        if (this.distance > this.maxRange || Time.time - this.spawnTime > this.maxLifeTime)
        {
            Object.Destroy(base.gameObject);
        }
    }
Esempio n. 14
0
    public virtual void Local_FireWeapon(ViewModel vm, ItemRepresentation itemRep, IBulletWeaponItem itemInstance, ref HumanController.InputSample sample)
    {
        Component   component;
        Vector3     point;
        RaycastHit2 hit;
        IDMain      main;
        bool        flag4;
        Socket      muzzle;
        bool        flag5;
        Character   shooterOrNull = itemInstance.character;

        if (shooterOrNull == null)
        {
            return;
        }
        if (itemInstance.clipAmmo <= 0)
        {
            return;
        }
        Ray         eyesRay        = shooterOrNull.eyesRay;
        NetEntityID unassigned     = NetEntityID.unassigned;
        bool        hitNetworkView = false;
        int         count          = 1;

        itemInstance.Consume(ref count);
        bool       didHit = Physics2.Raycast2(eyesRay, out hit, this.GetBulletRange(itemRep), 0x183e1411);
        TakeDamage damage = null;

        if (!didHit)
        {
            main      = null;
            point     = eyesRay.GetPoint(1000f);
            component = null;
            goto Label_019E;
        }
        point = hit.point;
        IDBase id = hit.id;

        component = (hit.remoteBodyPart == null) ? ((Component)hit.collider) : ((Component)hit.remoteBodyPart);
        main      = (id == null) ? null : id.idMain;
        if (main == null)
        {
            goto Label_019E;
        }
        unassigned = NetEntityID.Get((MonoBehaviour)main);
        if (unassigned.isUnassigned)
        {
            goto Label_019E;
        }
        hitNetworkView = true;
        damage         = main.GetComponent <TakeDamage>();
        if ((damage != null) && damage.ShouldPlayHitNotification())
        {
            this.PlayHitNotification(point, shooterOrNull);
        }
        bool flag3 = false;

        if (hit.remoteBodyPart != null)
        {
            BodyPart bodyPart = hit.remoteBodyPart.bodyPart;
            switch (bodyPart)
            {
            case BodyPart.Brain:
            case BodyPart.L_Eye:
            case BodyPart.R_Eye:
                break;

            default:
                switch (bodyPart)
                {
                case BodyPart.Head:
                case BodyPart.Jaw:
                    break;

                case BodyPart.Scalp:
                case BodyPart.Nostrils:
                    goto Label_016C;

                default:
                    goto Label_016C;
                }
                break;
            }
            flag3 = true;
        }
        goto Label_0174;
Label_016C:
        flag3 = false;
Label_0174:
        if (flag3)
        {
            this.headshotSound.Play();
        }
Label_019E:
        flag4 = didHit && ((!hit.isHitboxHit || hit.bodyPart.IsDefined()) || (damage != null));
        if (vm != null)
        {
            Socket.Slot slot = vm.socketMap["muzzle"];
            muzzle = slot.socket;
            flag5  = true;
        }
        else
        {
            muzzle = itemRep.muzzle;
            flag5  = false;
        }
        Vector3 position = muzzle.position;

        this.DoWeaponEffects(shooterOrNull.transform, position, point, muzzle, flag5, component, flag4, itemRep);
        if (flag5)
        {
            vm.PlayFireAnimation();
        }
        float num2 = 1f;

        if (sample.aim && sample.crouch)
        {
            num2 -= this.aimingRecoilSubtract + (this.crouchRecoilSubtract * 0.5f);
        }
        else if (sample.aim)
        {
            num2 -= this.aimingRecoilSubtract;
        }
        else if (sample.crouch)
        {
            num2 -= this.crouchRecoilSubtract;
        }
        num2 = Mathf.Clamp01(num2);
        float pitch = Random.Range(this.recoilPitchMin, this.recoilPitchMax) * num2;
        float yaw   = Random.Range(this.recoilYawMin, this.recoilYawMax) * num2;

        if (weaponRecoil && (shooterOrNull.recoilSimulation != null))
        {
            shooterOrNull.recoilSimulation.AddRecoil(this.recoilDuration, pitch, yaw);
        }
        HeadBob bob = CameraMount.current.GetComponent <HeadBob>();

        if (((bob != null) && (this.shotBob != null)) && headRecoil)
        {
            bob.AddEffect(this.shotBob);
        }
        BitStream sendStream = new BitStream(false);

        this.WriteHitInfo(sendStream, ref eyesRay, didHit, ref hit, hitNetworkView, unassigned);
        itemRep.ActionStream(1, RPCMode.Server, sendStream);
    }
Esempio n. 15
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);
        }
    }
Esempio n. 16
0
    private static void UpdateBeam(ref LaserBeam.FrameData frame, LaserBeam beam)
    {
        RaycastHit2 raycastHit2;
        RaycastHit  raycastHit;
        Vector3     vector3 = new Vector3();
        bool        flag;
        Transform   transforms = beam.transform;

        frame.origin    = transforms.position;
        frame.direction = transforms.forward;
        frame.direction.Normalize();
        int num = beam.beamLayers;

        if (num == 0)
        {
            frame.hit = false;
        }
        else if (!beam.isViewModel)
        {
            bool flag1 = Physics.Raycast(frame.origin, frame.direction, out raycastHit, beam.beamMaxDistance, num);
            flag      = flag1;
            frame.hit = flag1;
            if (flag)
            {
                frame.hitPoint  = raycastHit.point;
                frame.hitNormal = raycastHit.normal;
            }
        }
        else
        {
            bool flag2 = Physics2.Raycast2(frame.origin, frame.direction, out raycastHit2, beam.beamMaxDistance, num);
            flag      = flag2;
            frame.hit = flag2;
            if (flag)
            {
                frame.hitPoint  = raycastHit2.point;
                frame.hitNormal = raycastHit2.normal;
            }
        }
        if (frame.hit)
        {
            frame.point            = frame.hitPoint;
            frame.didHit           = true;
            frame.distance         = frame.direction.x * frame.point.x + frame.direction.y * frame.point.y + frame.direction.z * frame.point.z - (frame.direction.x * frame.origin.x + frame.direction.y * frame.origin.y + frame.direction.z * frame.origin.z);
            frame.distanceFraction = frame.distance / beam.beamMaxDistance;
            frame.pointWidth       = Mathf.Lerp(beam.beamWidthStart, beam.beamWidthEnd, frame.distanceFraction);
            frame.dotRadius        = Mathf.Lerp(beam.dotRadiusStart, beam.dotRadiusEnd, frame.distanceFraction);
        }
        else
        {
            frame.didHit           = false;
            frame.point.x          = frame.origin.x + frame.direction.x * beam.beamMaxDistance;
            frame.point.y          = frame.origin.y + frame.direction.y * beam.beamMaxDistance;
            frame.point.z          = frame.origin.z + frame.direction.z * beam.beamMaxDistance;
            frame.distance         = beam.beamMaxDistance;
            frame.distanceFraction = 1f;
            frame.pointWidth       = beam.beamWidthEnd;
        }
        frame.originWidth = beam.beamWidthStart;
        float single  = frame.originWidth;
        float single1 = single;

        vector3.z = single;
        float single2 = single1;

        single1      = single2;
        vector3.y    = single2;
        vector3.x    = single1;
        frame.bounds = new Bounds(frame.origin, vector3);
        float single3 = frame.pointWidth;

        single1   = single3;
        vector3.z = single3;
        float single4 = single1;

        single1   = single4;
        vector3.y = single4;
        vector3.x = single1;
        frame.bounds.Encapsulate(new Bounds(frame.point, vector3));
        frame.beamsLayer           = 1 << (beam.gameObject.layer & 31);
        LaserGraphics.allBeamsMask = LaserGraphics.allBeamsMask | frame.beamsLayer;
    }
Esempio n. 17
0
    private void Update()
    {
        if (!this.impacted)
        {
            float num = Time.time - this.lastUpdateTime;
            this.lastUpdateTime = Time.time;
            RaycastHit  hit     = new RaycastHit();
            RaycastHit2 invalid = RaycastHit2.invalid;
            base.transform.Rotate(Vector3.right, (float)(this.dropDegreesPerSec * num));
            Ray   ray  = new Ray(base.transform.position, base.transform.forward);
            float num2 = this.speedPerSec * num;
            bool  flag = true;
            if (!Physics2.Raycast2(ray, out invalid, this.speedPerSec * num, this.layerMask))
            {
                Transform transform = base.transform;
                transform.position += (Vector3)((base.transform.forward * this.speedPerSec) * num);
                this.distance      += this.speedPerSec * num;
            }
            else
            {
                Vector3    point;
                Vector3    normal;
                GameObject gameObject;
                Rigidbody  rigidbody;
                if (flag)
                {
                    normal     = invalid.normal;
                    point      = invalid.point;
                    gameObject = invalid.gameObject;
                    rigidbody  = invalid.rigidbody;
                }
                else
                {
                    normal     = hit.normal;
                    point      = hit.point;
                    gameObject = hit.collider.gameObject;
                    rigidbody  = hit.rigidbody;
                }
                Quaternion rotation = Quaternion.LookRotation(normal);
                Vector3    zero     = Vector3.zero;
                int        layer    = gameObject.layer;
                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);
                }
                switch (layer)
                {
                case 0x11:
                case 0x12:
                case 0x1b:
                case 0x15:
                    flag2 = false;
                    break;

                default:
                    zero = point + ((Vector3)(normal * 0.01f));
                    break;
                }
                this.impacted           = true;
                base.transform.position = point;
                this.TryReportHit(gameObject);
                base.transform.parent = gameObject.transform;
                TrailRenderer component = base.GetComponent <TrailRenderer>();
                if (component != null)
                {
                    component.enabled = false;
                }
                base.audio.enabled = false;
                if (gameObject != null)
                {
                    SurfaceInfoObject surfaceInfoFor = SurfaceInfo.GetSurfaceInfoFor(gameObject, point);
                    surfaceInfoFor.GetImpactEffect(SurfaceInfoObject.ImpactType.Bullet);
                    Object.Destroy(Object.Instantiate(surfaceInfoFor.GetImpactEffect(SurfaceInfoObject.ImpactType.Bullet), point, rotation), 1.5f);
                    this.TryReportMiss();
                }
                Object.Destroy(base.gameObject, 20f);
            }
            if ((this.distance > this.maxRange) || ((Time.time - this.spawnTime) > this.maxLifeTime))
            {
                Object.Destroy(base.gameObject);
            }
        }
    }
Esempio n. 18
0
    // Token: 0x06003316 RID: 13078 RVA: 0x000C07F8 File Offset: 0x000BE9F8
    public virtual void Local_FireWeapon(global::ViewModel vm, global::ItemRepresentation itemRep, global::IBulletWeaponItem itemInstance, ref global::HumanController.InputSample sample)
    {
        global::Character character = itemInstance.character;

        if (character == null)
        {
            return;
        }
        if (itemInstance.clipAmmo <= 0)
        {
            return;
        }
        Ray eyesRay = character.eyesRay;
        global::NetEntityID hitView = global::NetEntityID.unassigned;
        bool hitNetworkView         = false;
        int  num = 1;

        itemInstance.Consume(ref num);
        RaycastHit2        raycastHit;
        bool               flag       = Physics2.Raycast2(eyesRay, ref raycastHit, this.GetBulletRange(itemRep), 406721553);
        global::TakeDamage takeDamage = null;
        Vector3            point;
        Component          hitComponent;

        if (flag)
        {
            point = raycastHit.point;
            IDBase id = raycastHit.id;
            hitComponent = ((!raycastHit.remoteBodyPart) ? raycastHit.collider : raycastHit.remoteBodyPart);
            IDMain idmain = (!id) ? null : id.idMain;
            if (idmain)
            {
                hitView = global::NetEntityID.Get(idmain);
                if (!hitView.isUnassigned)
                {
                    hitNetworkView = true;
                    takeDamage     = idmain.GetComponent <global::TakeDamage>();
                    if (takeDamage && takeDamage.ShouldPlayHitNotification())
                    {
                        this.PlayHitNotification(point, character);
                    }
                    bool flag2 = false;
                    if (raycastHit.remoteBodyPart)
                    {
                        BodyPart bodyPart = raycastHit.remoteBodyPart.bodyPart;
                        switch (bodyPart)
                        {
                        case 16:
                        case 20:
                        case 21:
                            break;

                        default:
                            switch (bodyPart)
                            {
                            case 9:
                            case 12:
                                goto IL_164;
                            }
                            flag2 = false;
                            goto IL_174;
                        }
IL_164:
                        flag2 = true;
                    }
IL_174:
                    if (flag2)
                    {
                        this.headshotSound.Play();
                    }
                }
            }
        }
        else
        {
            point        = eyesRay.GetPoint(1000f);
            hitComponent = null;
        }
        bool           allowBlood = flag && (!raycastHit.isHitboxHit || BodyParts.IsDefined(raycastHit.bodyPart) || takeDamage != null);
        global::Socket socket;
        bool           flag3;

        if (vm)
        {
            socket = vm.socketMap["muzzle"].socket;
            flag3  = true;
        }
        else
        {
            socket = itemRep.muzzle;
            flag3  = false;
        }
        Vector3 position = socket.position;

        this.DoWeaponEffects(character.transform, position, point, socket, flag3, hitComponent, allowBlood, itemRep);
        if (flag3)
        {
            vm.PlayFireAnimation();
        }
        float num2  = 1f;
        bool  flag4 = sample.aim && sample.crouch;

        if (flag4)
        {
            num2 -= this.aimingRecoilSubtract + this.crouchRecoilSubtract * 0.5f;
        }
        else if (sample.aim)
        {
            num2 -= this.aimingRecoilSubtract;
        }
        else if (sample.crouch)
        {
            num2 -= this.crouchRecoilSubtract;
        }
        num2 = Mathf.Clamp01(num2);
        float pitch = Random.Range(this.recoilPitchMin, this.recoilPitchMax) * num2;
        float yaw   = Random.Range(this.recoilYawMin, this.recoilYawMax) * num2;

        if (!global::BulletWeaponDataBlock.weaponRecoil && character.recoilSimulation)
        {
            character.recoilSimulation.AddRecoil(this.recoilDuration, pitch, yaw);
        }
        global::HeadBob component = global::CameraMount.current.GetComponent <global::HeadBob>();

        if (component && this.shotBob && global::BulletWeaponDataBlock.headRecoil)
        {
            component.AddEffect(this.shotBob);
        }
        BitStream bitStream = new BitStream(false);

        this.WriteHitInfo(bitStream, ref eyesRay, flag, ref raycastHit, hitNetworkView, hitView);
        itemRep.ActionStream(1, 0, bitStream);
    }
Esempio n. 19
0
    public virtual void Local_FireWeapon(ViewModel vm, ItemRepresentation itemRep, IBulletWeaponItem itemInstance, ref HumanController.InputSample sample)
    {
        Component   component;
        Vector3     point;
        RaycastHit2 raycastHit2;
        IDMain      dMain;
        Socket      item;
        bool        flag;
        bool        flag1;
        Component   component1;
        IDMain      dMain1;
        Character   character = itemInstance.character;

        if (character == null)
        {
            return;
        }
        if (itemInstance.clipAmmo <= 0)
        {
            return;
        }
        Ray         ray         = character.eyesRay;
        NetEntityID netEntityID = NetEntityID.unassigned;
        bool        flag2       = false;
        int         num         = 1;

        itemInstance.Consume(ref num);
        bool       flag3      = Physics2.Raycast2(ray, out raycastHit2, this.GetBulletRange(itemRep), 406721553);
        TakeDamage takeDamage = null;

        if (!flag3)
        {
            dMain     = null;
            point     = ray.GetPoint(1000f);
            component = null;
        }
        else
        {
            point = raycastHit2.point;
            IDBase dBase = raycastHit2.id;
            if (!raycastHit2.remoteBodyPart)
            {
                component1 = raycastHit2.collider;
            }
            else
            {
                component1 = raycastHit2.remoteBodyPart;
            }
            component = component1;
            if (!dBase)
            {
                dMain1 = null;
            }
            else
            {
                dMain1 = dBase.idMain;
            }
            dMain = dMain1;
            if (dMain)
            {
                netEntityID = NetEntityID.Get(dMain);
                if (!netEntityID.isUnassigned)
                {
                    flag2      = true;
                    takeDamage = dMain.GetComponent <TakeDamage>();
                    if (takeDamage && takeDamage.ShouldPlayHitNotification())
                    {
                        this.PlayHitNotification(point, character);
                    }
                    bool flag4 = false;
                    if (raycastHit2.remoteBodyPart)
                    {
                        BodyPart bodyPart = raycastHit2.remoteBodyPart.bodyPart;
                        switch (bodyPart)
                        {
                        case BodyPart.Brain:
                        case BodyPart.L_Eye:
                        case BodyPart.R_Eye:
                        {
Label0:
                            flag4 = true;
                            break;
                        }

                        default:
                        {
                            switch (bodyPart)
                            {
                            case BodyPart.Head:
                            case BodyPart.Jaw:
                            {
                                goto Label0;
                            }

                            case BodyPart.Scalp:
                            case BodyPart.Nostrils:
                            {
                                flag4 = false;
                                break;
                            }

                            default:
                            {
                                goto case BodyPart.Nostrils;
                            }
                            }
                            break;
                        }
                        }
                    }
                    if (flag4)
                    {
                        this.headshotSound.Play();
                    }
                }
            }
        }
        if (!flag3)
        {
            flag1 = false;
        }
        else
        {
            flag1 = (!raycastHit2.isHitboxHit || raycastHit2.bodyPart.IsDefined() ? true : takeDamage != null);
        }
        bool flag5 = flag1;

        if (!vm)
        {
            item = itemRep.muzzle;
            flag = false;
        }
        else
        {
            item = vm.socketMap["muzzle"].socket;
            flag = true;
        }
        Vector3 vector3 = item.position;

        this.DoWeaponEffects(character.transform, vector3, point, item, flag, component, flag5, itemRep);
        if (flag)
        {
            vm.PlayFireAnimation();
        }
        float single = 1f;

        if ((!sample.aim ? false : sample.crouch))
        {
            single = single - (this.aimingRecoilSubtract + this.crouchRecoilSubtract * 0.5f);
        }
        else if (sample.aim)
        {
            single = single - this.aimingRecoilSubtract;
        }
        else if (sample.crouch)
        {
            single = single - this.crouchRecoilSubtract;
        }
        single = Mathf.Clamp01(single);
        float single1 = UnityEngine.Random.Range(this.recoilPitchMin, this.recoilPitchMax) * single;
        float single2 = UnityEngine.Random.Range(this.recoilYawMin, this.recoilYawMax) * single;

        if (BulletWeaponDataBlock.weaponRecoil && character.recoilSimulation)
        {
            character.recoilSimulation.AddRecoil(this.recoilDuration, single1, single2);
        }
        HeadBob headBob = CameraMount.current.GetComponent <HeadBob>();

        if (headBob && this.shotBob && BulletWeaponDataBlock.headRecoil)
        {
            headBob.AddEffect(this.shotBob);
        }
        uLink.BitStream bitStream = new uLink.BitStream(false);
        this.WriteHitInfo(bitStream, ref ray, flag3, ref raycastHit2, flag2, netEntityID);
        itemRep.ActionStream(1, uLink.RPCMode.Server, bitStream);
    }
Esempio n. 20
0
    private void Update()
    {
        Vector3    vector3;
        Vector3    vector31;
        GameObject gameObject;
        Rigidbody  rigidbody;

        if (this.impacted)
        {
            return;
        }
        float single = Time.time - this.lastUpdateTime;

        this.lastUpdateTime = Time.time;
        RaycastHit  raycastHit  = new RaycastHit();
        RaycastHit2 raycastHit2 = RaycastHit2.invalid;

        base.transform.Rotate(Vector3.right, this.dropDegreesPerSec * single);
        Ray  ray  = new Ray(base.transform.position, base.transform.forward);
        bool flag = true;

        if (!Physics2.Raycast2(ray, out raycastHit2, this.speedPerSec * single, this.layerMask))
        {
            Transform transforms = base.transform;
            transforms.position = transforms.position + ((base.transform.forward * this.speedPerSec) * single);
            ArrowMovement arrowMovement = this;
            arrowMovement.distance = arrowMovement.distance + this.speedPerSec * single;
        }
        else
        {
            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);
            Vector3    vector32   = Vector3.zero;
            int        num        = gameObject.layer;
            bool       flag1      = true;
            if (rigidbody && !rigidbody.isKinematic && !rigidbody.CompareTag("Door"))
            {
                rigidbody.AddForceAtPosition(Vector3.up * 200f, vector3);
                rigidbody.AddForceAtPosition(ray.direction * 1000f, vector3);
            }
            if (num == 17 || num == 18 || num == 27 || num == 21)
            {
                flag1 = false;
            }
            else
            {
                vector32 = vector3 + (vector31 * 0.01f);
            }
            this.impacted           = true;
            base.transform.position = vector3;
            this.TryReportHit(gameObject);
            base.transform.parent = gameObject.transform;
            TrailRenderer component = base.GetComponent <TrailRenderer>();
            if (component)
            {
                component.enabled = false;
            }
            base.audio.enabled = false;
            if (gameObject)
            {
                SurfaceInfoObject surfaceInfoFor = SurfaceInfo.GetSurfaceInfoFor(gameObject, vector3);
                surfaceInfoFor.GetImpactEffect(SurfaceInfoObject.ImpactType.Bullet);
                UnityEngine.Object obj = UnityEngine.Object.Instantiate(surfaceInfoFor.GetImpactEffect(SurfaceInfoObject.ImpactType.Bullet), vector3, quaternion);
                UnityEngine.Object.Destroy(obj, 1.5f);
                this.TryReportMiss();
            }
            UnityEngine.Object.Destroy(base.gameObject, 20f);
        }
        if (this.distance > this.maxRange || Time.time - this.spawnTime > this.maxLifeTime)
        {
            UnityEngine.Object.Destroy(base.gameObject);
        }
    }