예제 #1
0
    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);
    }
예제 #2
0
    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);
    }
예제 #3
0
 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);
 }
예제 #4
0
    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);
            }
        }
    }
예제 #5
0
 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);
 }
예제 #6
0
 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();
         }
     }
 }
예제 #7
0
    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);
    }
예제 #8
0
 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);
 }