public bool VisibilityTest(BaseEntity ent) { if (ent == null) { return(false); } if (!(Vector3.Distance(ent.transform.position, base.transform.position) < viewDistance)) { return(false); } bool flag = false; if (ent is BasePlayer) { BasePlayer basePlayer = ent as BasePlayer; Vector3 position = mainTurret.transform.position; flag = IsVisible(basePlayer.eyes.position, position) || IsVisible(basePlayer.transform.position + Vector3.up * 0.1f, position); if (flag) { flag = !UnityEngine.Physics.SphereCast(new Ray(position, Vector3Ex.Direction(basePlayer.eyes.position, position)), 0.05f, Vector3.Distance(basePlayer.eyes.position, position), 10551297); } } else { Debug.LogWarning("Standard vis test!"); flag = IsVisible(ent.CenterPoint()); } object obj = Interface.CallHook("CanBradleyApcTarget", this, ent); if (obj is bool) { return((bool)obj); } return(flag); }
public bool WithinVisionCone(BaseEntity other) { Vector3 rhs = Vector3Ex.Direction(other.transform.position, base.transform.position); if (Vector3.Dot(eyes.BodyForward(), rhs) < visionCone) { return(false); } return(true); }
public bool ValidDismountPosition(Vector3 disPos, Vector3 visualCheckOrigin) { if (!UnityEngine.Physics.CheckCapsule(disPos + new Vector3(0f, 0.5f, 0f), disPos + new Vector3(0f, 1.3f, 0f), 0.5f, 1537286401)) { Vector3 vector = disPos + base.transform.up * 0.5f; RaycastHit hitInfo; if (IsVisible(vector) && (!UnityEngine.Physics.Linecast(visualCheckOrigin, vector, out hitInfo, 1486946561) || _003CValidDismountPosition_003Eg__HitOurself_007C60_0(hitInfo))) { Ray ray = new Ray(visualCheckOrigin, Vector3Ex.Direction(vector, visualCheckOrigin)); float maxDistance = Vector3.Distance(visualCheckOrigin, vector); if (!UnityEngine.Physics.SphereCast(ray, 0.5f, out hitInfo, maxDistance, 1486946561) || _003CValidDismountPosition_003Eg__HitOurself_007C60_0(hitInfo)) { return(true); } } } return(false); }
public void MagnetThink(float delta) { if (!isMagnetOn) { return; } Vector3 position = magnetTrigger.transform.position; if (magnetTrigger.entityContents == null) { return; } foreach (BaseEntity entityContent in magnetTrigger.entityContents) { if (!entityContent.syncPosition) { continue; } Rigidbody component = entityContent.GetComponent <Rigidbody>(); if (component == null || component.isKinematic || entityContent.isClient) { continue; } if (new OBB(entityContent.transform.position, entityContent.transform.rotation, entityContent.bounds).Contains(attachDepthPoint.position)) { entityContent.GetComponent <MagnetLiftable>().SetMagnetized(true, this); if (fixedJoint.connectedBody == null) { Effect.server.Run(attachEffect.resourcePath, attachDepthPoint.position, -attachDepthPoint.up); fixedJoint.connectedBody = component; SetCollisionsEnabled(component.gameObject, false); continue; } } if (fixedJoint.connectedBody == null) { Vector3 position2 = entityContent.transform.position; float b = Vector3.Distance(position2, position); Vector3 vector = Vector3Ex.Direction(position, position2); float num = 1f / Mathf.Max(1f, b); component.AddForce(vector * magnetForce * num, ForceMode.Acceleration); } } }
public override void OnAttacked(HitInfo info) { if (base.isServer) { BasePlayer driver = GetDriver(); if (driver != null && info.damageTypes.Has(DamageType.Bullet)) { Capsule capsule = new Capsule(driverCollision.transform.position, driverCollision.radius, driverCollision.height); float num = Vector3.Distance(info.PointStart, info.PointEnd); Ray ray = new Ray(info.PointStart, Vector3Ex.Direction(info.PointEnd, info.PointStart)); RaycastHit hit; if (capsule.Trace(ray, out hit, 0.05f, num * 1.2f)) { driver.Hurt(info.damageTypes.Total() * 0.15f, DamageType.Bullet, info.Initiator); } } } base.OnAttacked(info); }
public void Server_SetDir(RPCMessage msg) { if (!IsStatic()) { BasePlayer player = msg.player; if (player.CanBuild() && player.IsBuildingAuthed() && Interface.CallHook("OnCCTVDirectionChange", this, player) == null) { Vector3 direction = Vector3Ex.Direction(player.eyes.position, yaw.transform.position); direction = base.transform.InverseTransformDirection(direction); Vector3 vector = BaseMountable.ConvertVector(Quaternion.LookRotation(direction).eulerAngles); pitchAmount = vector.x; yawAmount = vector.y; pitchAmount = Mathf.Clamp(pitchAmount, pitchClamp.x, pitchClamp.y); yawAmount = Mathf.Clamp(yawAmount, yawClamp.x, yawClamp.y); Quaternion localRotation = Quaternion.Euler(pitchAmount, 0f, 0f); Quaternion localRotation2 = Quaternion.Euler(0f, yawAmount, 0f); pitch.transform.localRotation = localRotation; yaw.transform.localRotation = localRotation2; SendNetworkUpdate(); } } }
private bool IsTargetInVision(BaseEntity target) { Vector3 rhs = Vector3Ex.Direction(target.transform.position, owner.transform.position); return(Vector3.Dot((playerOwner != null) ? playerOwner.eyes.BodyForward() : owner.transform.forward, rhs) >= visionCone); }
public bool WithinVisionCone(BaseEntity other) { return((double)Vector3.Dot(this.eyes.BodyForward(), Vector3Ex.Direction(((Component)other).get_transform().get_position(), ((Component)this).get_transform().get_position())) >= (double)this.visionCone); }