예제 #1
0
    public bool DoCheck(Vector3 position, Quaternion rotation)
    {
        Vector3    vector3    = position + (rotation * this.worldPosition);
        Quaternion quaternion = rotation * this.worldRotation;

        return(SocketMod_AreaCheck.IsInArea(vector3, quaternion, this.bounds, this.layerMask) == this.wantsInside);
    }
예제 #2
0
    private bool OnGround()
    {
        BaseEntity component = GetComponent <BaseEntity>();

        if ((bool)component)
        {
            Construction construction = PrefabAttribute.server.Find <Construction>(component.prefabID);
            if ((bool)construction)
            {
                Socket_Base[] allSockets = construction.allSockets;
                for (int i = 0; i < allSockets.Length; i++)
                {
                    SocketMod[] socketMods = allSockets[i].socketMods;
                    for (int j = 0; j < socketMods.Length; j++)
                    {
                        SocketMod_AreaCheck socketMod_AreaCheck = socketMods[j] as SocketMod_AreaCheck;
                        if ((bool)socketMod_AreaCheck && socketMod_AreaCheck.wantsInside && !socketMod_AreaCheck.DoCheck(component.transform.position, component.transform.rotation))
                        {
                            if (ConVar.Physics.groundwatchdebug)
                            {
                                Debug.Log("GroundWatch failed: " + socketMod_AreaCheck.hierachyName);
                            }
                            return(false);
                        }
                    }
                }
            }
        }
        List <Collider> obj = Facepunch.Pool.GetList <Collider>();

        Vis.Colliders(base.transform.TransformPoint(groundPosition), radius, obj, layers);
        foreach (Collider item in obj)
        {
            BaseEntity baseEntity = GameObjectEx.ToBaseEntity(item.gameObject);
            if (!baseEntity || (!(baseEntity == component) && !baseEntity.IsDestroyed && !baseEntity.isClient))
            {
                DecayEntity decayEntity  = component as DecayEntity;
                DecayEntity decayEntity2 = baseEntity as DecayEntity;
                if (!decayEntity || decayEntity.buildingID == 0 || !decayEntity2 || decayEntity2.buildingID == 0 || decayEntity.buildingID == decayEntity2.buildingID)
                {
                    Facepunch.Pool.FreeList(ref obj);
                    return(true);
                }
            }
        }
        if (ConVar.Physics.groundwatchdebug)
        {
            Debug.Log("GroundWatch failed: Legacy radius check");
        }
        Facepunch.Pool.FreeList(ref obj);
        return(false);
    }
예제 #3
0
    private bool OnGround()
    {
        bool       flag;
        BaseEntity component = base.GetComponent <BaseEntity>();

        if (component)
        {
            Construction construction = PrefabAttribute.server.Find <Construction>(component.prefabID);
            if (construction)
            {
                Socket_Base[] socketBaseArray = construction.allSockets;
                for (int i = 0; i < (int)socketBaseArray.Length; i++)
                {
                    SocketMod[] socketModArray = socketBaseArray[i].socketMods;
                    for (int j = 0; j < (int)socketModArray.Length; j++)
                    {
                        SocketMod_AreaCheck socketModAreaCheck = socketModArray[j] as SocketMod_AreaCheck;
                        if (socketModAreaCheck && socketModAreaCheck.wantsInside && !socketModAreaCheck.DoCheck(component.transform.position, component.transform.rotation))
                        {
                            return(false);
                        }
                    }
                }
            }
        }
        List <Collider> list = Pool.GetList <Collider>();

        Vis.Colliders <Collider>(base.transform.TransformPoint(this.groundPosition), this.radius, list, this.layers, QueryTriggerInteraction.Collide);
        List <Collider> .Enumerator enumerator = list.GetEnumerator();
        try
        {
            while (enumerator.MoveNext())
            {
                BaseEntity baseEntity = enumerator.Current.gameObject.ToBaseEntity();
                if (baseEntity && (baseEntity == component || baseEntity.IsDestroyed || baseEntity.isClient))
                {
                    continue;
                }
                Pool.FreeList <Collider>(ref list);
                flag = true;
                return(flag);
            }
            Pool.FreeList <Collider>(ref list);
            return(false);
        }
        finally
        {
            ((IDisposable)enumerator).Dispose();
        }
        return(flag);
    }
예제 #4
0
    private bool OnGround()
    {
        BaseEntity component = (BaseEntity)((Component)this).GetComponent <BaseEntity>();

        if (Object.op_Implicit((Object)component))
        {
            Construction construction = PrefabAttribute.server.Find <Construction>(component.prefabID);
            if ((bool)((PrefabAttribute)construction))
            {
                foreach (Socket_Base allSocket in construction.allSockets)
                {
                    foreach (SocketMod socketMod in allSocket.socketMods)
                    {
                        SocketMod_AreaCheck socketModAreaCheck = socketMod as SocketMod_AreaCheck;
                        if ((bool)((PrefabAttribute)socketModAreaCheck) && socketModAreaCheck.wantsInside && !socketModAreaCheck.DoCheck(((Component)component).get_transform().get_position(), ((Component)component).get_transform().get_rotation()))
                        {
                            return(false);
                        }
                    }
                }
            }
        }
        List <Collider> list = (List <Collider>)Pool.GetList <Collider>();

        Vis.Colliders <Collider>(((Component)this).get_transform().TransformPoint(this.groundPosition), this.radius, list, LayerMask.op_Implicit(this.layers), (QueryTriggerInteraction)2);
        using (List <Collider> .Enumerator enumerator = list.GetEnumerator())
        {
            while (enumerator.MoveNext())
            {
                BaseEntity baseEntity = ((Component)enumerator.Current).get_gameObject().ToBaseEntity();
                if (!Object.op_Implicit((Object)baseEntity) || !Object.op_Equality((Object)baseEntity, (Object)component) && !baseEntity.IsDestroyed && !baseEntity.isClient)
                {
                    // ISSUE: cast to a reference type
                    Pool.FreeList <Collider>((List <M0>&) ref list);
                    return(true);
                }
            }
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <Collider>((List <M0>&) ref list);
        return(false);
    }
 public bool DoCheck(Vector3 position, Quaternion rotation)
 {
     return(SocketMod_AreaCheck.IsInArea(Vector3.op_Addition(position, Quaternion.op_Multiply(rotation, this.worldPosition)), Quaternion.op_Multiply(rotation, this.worldRotation), this.bounds, this.layerMask) == this.wantsInside);
 }