public static void DrawColonistIconsBar([NotNull] this Pawn pawn, Rect psiRect, float rectAlpha) { CompPSI pawnStats = pawn.GetComp <CompPSI>(); if (pawn.Dead || !pawn.Spawned || pawn.holdingOwner == null || pawn.Map == null) { pawnStats.ThisColCount = 0; return; } SettingsColonistBar colBarSettings = Settings.BarSettings; int barIconNum = 0; int rowCount = pawnStats.ThisColCount; // Drafted if (colBarSettings.ShowDraft && pawn.Drafted) { if (pawnStats.IsPacifist) { DrawIconOnBar(psiRect, ref barIconNum, Icon.Draft, Textures.ColYellow, rectAlpha, rowCount); } else { DrawIconOnBar(psiRect, ref barIconNum, Icon.Draft, Textures.ColVermillion, rectAlpha, rowCount); } } List <IconEntryBar> drawIconEntries = pawnStats.BarIconList; if (!pawnStats.BarIconList.NullOrEmpty()) { int maxIconCount = Mathf.Min( Settings.BarSettings.IconsInColumn * 2, drawIconEntries.Count + barIconNum); for (int index = 0; index < maxIconCount - barIconNum; index++) { IconEntryBar iconEntryBar = drawIconEntries[index]; iconEntryBar.Color.a *= rectAlpha; DrawIconOnBar(psiRect, iconEntryBar, index + barIconNum, rowCount); } barIconNum += maxIconCount; } // Idle - bar icon already included - vanilla int colCount = Mathf.CeilToInt((float)barIconNum / Settings.BarSettings.IconsInColumn); pawnStats.ThisColCount = colCount; }
private static void DrawIconOnBar(Rect psiRect, IconEntryBar iconEntryBar, int entry, int rowCount) { Material material = GameComponentPSI.PSIMaterials[iconEntryBar.Icon]; if (material == null) { return; } Vector3 posOffset = _iconPosRectsBar[entry]; Color guiColor = GUI.color; guiColor.a = iconEntryBar.Color.a; GUI.color = guiColor; material.color = iconEntryBar.Color; Rect iconRect = new Rect(psiRect); float size = Mathf.Min(iconRect.width, iconRect.height) / rowCount; iconRect.height = iconRect.width = size; switch (Settings.BarSettings.ColBarPSIIconPos) { case Position.Alignment.Left: iconRect.x = psiRect.xMax - size; iconRect.y = psiRect.yMax - size; break; case Position.Alignment.Right: iconRect.x = psiRect.xMin; iconRect.y = psiRect.yMax - size; break; case Position.Alignment.Top: iconRect.y = psiRect.yMax - size; break; case Position.Alignment.Bottom: iconRect.y = psiRect.yMin; break; } // iconRect.x += (-0.5f * CBKF.ColBarSettings.IconMarginX - 0.5f * CBKF.ColBarSettings.IconOffsetX) * iconRect.width; // iconRect.y -= (-0.5f * CBKF.ColBarSettings.IconDistanceY + 0.5f * CBKF.ColBarSettings.IconOffsetY) * iconRect.height; iconRect.x += Settings.BarSettings.IconOffsetX * posOffset.x * size; iconRect.y -= Settings.BarSettings.IconOffsetY * posOffset.z * iconRect.height; // On Colonist // iconRect.x -= iconRect.width * 0.5f; // iconRect.y -= iconRect.height * 0.5f; GUI.DrawTexture(iconRect, Textures.BgTexIconPSI); GUI.color = iconEntryBar.Color; iconRect.x += size * 0.1f; iconRect.y += iconRect.height * 0.1f; iconRect.width *= 0.8f; iconRect.height *= 0.8f; GUI.DrawTexture(iconRect, material.mainTexture, ScaleMode.ScaleToFit, true); GUI.color = guiColor; if (iconEntryBar.Tooltip != null) { TooltipHandler.TipRegion(iconRect, iconEntryBar.Tooltip); } }