< Summary

Class:UISelectableEntry
Assembly:bamlab.micromissiles
File(s):/github/workspace/Assets/Scripts/UI/UISelectableEntry.cs
Covered lines:0
Uncovered lines:81
Coverable lines:81
Total lines:138
Line coverage:0% (0 of 81)
Covered branches:0
Total branches:0
Covered methods:0
Total methods:15
Method coverage:0% (0 of 15)

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
UISelectableEntry()0%2100%
UISelectableEntry()0%2100%
Awake()0%2100%
SetClickCallback(...)0%2100%
OnPointerEnter(...)0%6200%
OnPointerDown(...)0%12300%
OnPointerExit(...)0%6200%
SetIsSelectable(...)0%2100%
GetIsSelectable()0%2100%
AddChildEntry(...)0%6200%
SetParent(...)0%2100%
SetChildEntries(...)0%2100%
GetChildEntries()0%2100%
SetTextContent(...)0%12300%
GetTextTransform(...)0%12300%

File(s)

/github/workspace/Assets/Scripts/UI/UISelectableEntry.cs

#LineLine coverage
 1using System.Collections.Generic;
 2using System;
 3using UnityEngine;
 4using UnityEngine.UI;
 5using TMPro;
 6using UnityEngine.EventSystems;
 7using System.Linq;
 8public class UISelectableEntry : EventTrigger {
 9  private List<UISelectableEntry> children;
 10  private List<string> textContent;
 11
 12  private UIDialog parentDialog;
 13
 14  private RectTransform rectTransform;
 15
 16  private CanvasRenderer canvasRenderer;
 17
 18  private Image image;
 19
 20  // Replace the single TextMeshProUGUI with a list to hold multiple columns
 21  private List<TextMeshProUGUI> textHandles;
 22
 023  private bool isSelectable = true;
 24
 025  private static Color baseColor = new Color32(31, 31, 45, 140);
 26
 27  private Action<object> OnClickCallback;
 28  private object callbackArgument;
 29
 030  public void Awake() {
 031    rectTransform = gameObject.AddComponent<RectTransform>();
 32
 033    image = gameObject.AddComponent<Image>();
 034    image.type = Image.Type.Sliced;
 035    image.color = baseColor;
 36
 37    // Initialize the list for text handles
 038    textHandles = new List<TextMeshProUGUI>();
 039  }
 40
 041  public void SetClickCallback(Action<object> callback, object argument) {
 042    OnClickCallback = callback;
 043    callbackArgument = argument;
 044  }
 45
 046  public override void OnPointerEnter(PointerEventData eventData) {
 047    if (isSelectable)
 048      image.color = baseColor + new Color32(20, 20, 20, 40);
 049    base.OnPointerEnter(eventData);
 050  }
 51
 052  public override void OnPointerDown(PointerEventData eventData) {
 053    if (isSelectable && OnClickCallback != null) {
 054      OnClickCallback(callbackArgument);
 055      image.color = baseColor + new Color32(40, 40, 40, 40);
 056    }
 057    base.OnPointerClick(eventData);
 058  }
 59
 060  public override void OnPointerExit(PointerEventData eventData) {
 061    if (isSelectable)
 062      image.color = baseColor;
 063    base.OnPointerExit(eventData);
 064  }
 65
 066  public void SetIsSelectable(bool isSelectable) {
 067    image.enabled = isSelectable;
 068    this.isSelectable = isSelectable;
 069  }
 70
 071  public bool GetIsSelectable() {
 072    return isSelectable;
 073  }
 74
 075  public void AddChildEntry(UISelectableEntry child) {
 076    if (children == null) {
 077      children = new List<UISelectableEntry>();
 078    }
 079    children.Add(child);
 080  }
 81
 082  public void SetParent(UIDialog parentDialog) {
 083    this.parentDialog = parentDialog;
 084  }
 85
 086  public void SetChildEntries(List<UISelectableEntry> children) {
 087    this.children = children;
 088  }
 89
 90  // Get the children of this entry
 091  public List<UISelectableEntry> GetChildEntries() {
 092    return children;
 093  }
 94
 095  public void SetTextContent(List<string> textContent) {
 096    this.textContent = textContent;
 97
 98    // Clear existing text handles
 099    foreach (var textHandle in textHandles) {
 0100      Destroy(textHandle.gameObject);
 0101    }
 0102    textHandles.Clear();
 103
 0104    int columnCount = textContent.Count;
 0105    float totalWidth = rectTransform.rect.width;
 0106    float columnWidth = totalWidth / columnCount;
 107
 0108    for (int i = 0; i < columnCount; i++) {
 109      // Create a new TextMeshProUGUI for each column
 0110      var textHandle = Instantiate(Resources.Load<GameObject>("Prefabs/EmptyObject"), rectTransform)
 111                           .AddComponent<TextMeshProUGUI>();
 0112      textHandle.gameObject.name = $"UISelectableEntry::Text_{i}";
 0113      textHandle.fontSize = 8;
 0114      textHandle.font = UIManager.Instance.Font;
 0115      textHandle.alignment = TextAlignmentOptions.MidlineLeft;
 116
 117      // Set the RectTransform for proper alignment
 0118      var textRect = textHandle.GetComponent<RectTransform>();
 0119      textRect.anchorMin = new Vector2((float)i / columnCount, 0);
 0120      textRect.anchorMax = new Vector2((float)(i + 1) / columnCount, 1);
 0121      textRect.offsetMin = Vector2.zero;
 0122      textRect.offsetMax = Vector2.zero;
 123
 124      // Set the text content
 0125      textHandle.text = textContent[i];
 126
 127      // Add to the list of text handles
 0128      textHandles.Add(textHandle);
 0129    }
 0130  }
 131
 0132  public RectTransform GetTextTransform(int index) {
 0133    if (index >= 0 && index < textHandles.Count) {
 0134      return textHandles[index].GetComponent<RectTransform>();
 135    }
 0136    return null;
 0137  }
 138}