Exemplo n.º 1
0
        private ToolInfo privateBestTool(ToolType toolType)
        {
            ToolInfo info = null;
            float    val  = 0f;

            foreach (var currInfo in useableTools)
            {
                float currVal = currInfo.comp[toolType];
                if (currInfo.comp.TryGetValue(toolType, out var baseVal) && baseVal > 1f && currVal > val)
                {
                    info = currInfo;
                    val  = currVal;
                }
            }
            return(info);
        }
Exemplo n.º 2
0
        public ToolInfo ClosestToolInfo(ToolType toolType, IntVec3 pos, Pawn pawn = null)
        {
            var         reservation      = pawn?.MapHeld.reservationManager;
            var         faction          = pawn?.Faction;
            var         flag             = pawn.CanUseTools(out var tracker);
            ThingFilter assignmentFilter = null;

            if (flag)
            {
                assignmentFilter = tracker.ToolAssignment.filter;
            }
            ToolInfo info     = null;
            float    bestDist = float.MaxValue;

            foreach (var currInfo in UseableToolInfos)
            {
                if (pawn != null)
                {
                    if (flag)
                    {
                        if (currInfo.tool.ToolIsForbidden(pawn, assignmentFilter, reservation, faction))
                        {
                            continue;
                        }
                    }
                    else if (currInfo.tool.ToolIsForbidden(pawn, reservation, faction))
                    {
                        continue;
                    }
                }
                if (!currInfo.comp.TryGetValue(toolType, out float val) || val < 1f || !Distance(currInfo.tool, pos, out float dist))
                {
                    continue;
                }
                if (dist < bestDist)
                {
                    bestDist = dist;
                    info     = currInfo;
                }
            }
            return(info);
        }