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