private static void Hover <G, C, D>(C currentChild, InteriorFields <G, C> fields, int index, Dictionary <C, D> buildData, Action <C> assignCurrentChild) where C : IConvertible where D : BlueprintData { //print(String.Format("Hover over group {0} index {1}", fields.CurrentGroup, index)); C whatToBuild = fields.Map[fields.CurrentGroup][index]; Hover(currentChild, whatToBuild, fields, buildData, assignCurrentChild); }
private void SelectThing <G, C>(InteriorFields <G, C> fields, Action <bool> toggleOff, Action <C> plan) where C : IConvertible { C whatToBuild = (C)Enum.Parse(typeof(C), UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name); if (toggleOff != null) { fields.GroupDetailPanel.gameObject.SetActive(false); toggleOff(false); } plan(whatToBuild); if (toggleOff != null) { //code smell! :( PlayerInput.Instance.FPSController.FreezeLook = false; } }
private static void Hover <G, C, D>(C currentChild, C whatToBuild, InteriorFields <G, C> fields, Dictionary <C, D> buildData, Action <C> assignCurrentChild) where C : IConvertible where D : BlueprintData { //avoid filling every frame that we're hovered if (Convert.ToInt32(whatToBuild) != Convert.ToInt32(currentChild)) { if (buildData.ContainsKey(whatToBuild)) { assignCurrentChild(whatToBuild); BlueprintData data = buildData[whatToBuild]; fields.DetailHeader.text = whatToBuild.ToString(); fields.DetailDescription.text = data.Description; int i = 0; foreach (RectTransform text in fields.DetailMaterialsParent) { if (i == 0) { //noop; } else { int actualIndex = i - 1; bool active = actualIndex < data.Requirements.Count; text.gameObject.SetActive(active); if (active) { text.GetComponent <Text>().text = data.Requirements[actualIndex].ToString(); text.GetChild(0).GetComponent <Image>().sprite = data.Requirements[actualIndex].Type.Sprite(); } } i++; } fields.DetailPower.transform.parent.gameObject.SetActive(data.PowerSteady.HasValue || data.PowerMin.HasValue); if (data.PowerSteady.HasValue) { fields.DetailPower.text = data.PowerSteady.Value > 0 ? "+" + data.PowerSteady.Value : data.PowerSteady.Value.ToString(); } else if (data.PowerMin.HasValue && data.PowerMin.Value >= 0) { fields.DetailPower.text = String.Format("+[{0}-{1}]", data.PowerMin.Value, data.PowerMax.Value); } fields.DetailPowerStorage.transform.parent.gameObject.SetActive(data.EnergyStorage.HasValue); if (data.EnergyStorage.HasValue) { fields.DetailPower.text = data.EnergyStorage.ToString(); } fields.DetailTypedStorage.transform.parent.gameObject.SetActive(data.StorageType != Matter.Unspecified); if (data.StorageType != Matter.Unspecified) { fields.DetailStorage.transform.parent.gameObject.SetActive(false); fields.DetailTypedStorage.text = data.Storage.Value.ToString(); if (data.StorageType == Matter.Methane) { fields.DetailTypedStorageSprite.sprite = GuiBridge.Instance.Icons.MiscIcons[(int)MiscIcon.Molecule]; } else { fields.DetailTypedStorageSprite.sprite = data.StorageType.Sprite(); } } else { fields.DetailStorage.transform.parent.gameObject.SetActive(data.Storage.HasValue); if (data.Storage.HasValue) { fields.DetailStorage.text = data.Storage.Value.ToString(); } } if (data.IO == null) { foreach (Text io in fields.DetailIO) { io.transform.parent.gameObject.SetActive(false); } } else { i = 0; foreach (KeyValuePair <Matter, float> entry in data.IO) { fields.DetailIO[i].transform.parent.gameObject.SetActive(true); fields.DetailIO[i].text = entry.Value > 0 ? "+" + entry.Value : entry.Value.ToString(); fields.DetailIO[i].transform.parent.GetChild(0).GetComponent <Image>().sprite = entry.Key.Sprite(); i++; } for (int j = i; j < fields.DetailIO.Length; j++) { fields.DetailIO[i].transform.parent.gameObject.SetActive(false); } } } } }