예제 #1
0
        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;
        }
예제 #2
0
        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);
            }
        }