public SafeCellQuery Reset(MinionBrain brain, bool avoid_light)
 {
     this.brain       = brain;
     targetCell       = PathFinder.InvalidCell;
     targetCost       = 2147483647;
     targetCellFlags  = (SafeFlags)0;
     this.avoid_light = avoid_light;
     return(this);
 }
    public override bool IsMatch(int cell, int parent_cell, int cost)
    {
        SafeFlags flags = GetFlags(cell, brain, avoid_light);
        bool      flag  = flags > targetCellFlags;
        bool      flag2 = flags == targetCellFlags && cost < targetCost;

        if (flag || flag2)
        {
            targetCellFlags = flags;
            targetCost      = cost;
            targetCell      = cell;
        }
        return(false);
    }
    public static SafeFlags GetFlags(int cell, MinionBrain brain, bool avoid_light = false)
    {
        int num = Grid.CellAbove(cell);

        if (!Grid.IsValidCell(num))
        {
            return((SafeFlags)0);
        }
        if (Grid.Solid[cell] || Grid.Solid[num])
        {
            return((SafeFlags)0);
        }
        if (Grid.IsTileUnderConstruction[cell] || Grid.IsTileUnderConstruction[num])
        {
            return((SafeFlags)0);
        }
        bool flag  = brain.IsCellClear(cell);
        bool flag2 = !Grid.Element[cell].IsLiquid;
        bool flag3 = !Grid.Element[num].IsLiquid;
        bool flag4 = Grid.Temperature[cell] > 285.15f && Grid.Temperature[cell] < 303.15f;
        bool flag5 = brain.OxygenBreather.IsBreathableElementAtCell(cell, Grid.DefaultOffset);
        bool flag6 = !brain.Navigator.NavGrid.NavTable.IsValid(cell, NavType.Ladder) && !brain.Navigator.NavGrid.NavTable.IsValid(cell, NavType.Pole);
        bool flag7 = !brain.Navigator.NavGrid.NavTable.IsValid(cell, NavType.Tube);
        bool flag8 = !avoid_light || SleepChore.IsLightLevelOk(cell);

        if (cell == Grid.PosToCell(brain))
        {
            flag5 = !brain.OxygenBreather.IsSuffocating;
        }
        SafeFlags safeFlags = (SafeFlags)0;

        if (flag)
        {
            safeFlags |= SafeFlags.IsClear;
        }
        if (flag4)
        {
            safeFlags |= SafeFlags.CorrectTemperature;
        }
        if (flag5)
        {
            safeFlags |= SafeFlags.IsBreathable;
        }
        if (flag6)
        {
            safeFlags |= SafeFlags.IsNotLadder;
        }
        if (flag7)
        {
            safeFlags |= SafeFlags.IsNotTube;
        }
        if (flag2)
        {
            safeFlags |= SafeFlags.IsNotLiquid;
        }
        if (flag3)
        {
            safeFlags |= SafeFlags.IsNotLiquidOnMyFace;
        }
        if (flag8)
        {
            safeFlags |= SafeFlags.IsLightOk;
        }
        return(safeFlags);
    }