private UITextDamage GetAvailableText(string keyType) { bool ok = m_dTextTypes.ContainsKey(keyType); if (!ok) { Debug.LogError("Text Damage -> Cannot find keyType " + keyType + " on manager " + gameObject.name); return(null); } List <UITextDamage> candidates = m_dTextTypes[keyType]; for (int i = 0; i < candidates.Count; i++) { if (candidates[i].gameObject.activeSelf) { continue; } if (candidates[i].UsedLabel != null) { candidates[i].UsedLabel.transform.localPosition = Vector3.zero; } candidates[i].transform.localScale = Vector3.one; return(candidates[i]); } // Instantiate new List <UITextDamage> container = m_dTextTypes[keyType]; UITextDamage newInstance = AllocateOneInstance(textTypes.Find(t => t.keyType == keyType)); container.Add(newInstance); return(newInstance); }
private void Label_eventOnEnd(UITextDamage obj) { obj.eventOnEnd -= Label_eventOnEnd; List <Transform> keys = new List <Transform> (instancesInScreen.Keys); foreach (Transform key in keys) { List <UITextDamage> aux = new List <UITextDamage>(instancesInScreen[key].ToArray( )); aux.Remove(obj); instancesInScreen[key] = new Queue <UITextDamage>(aux); } }
private void Label_eventOnEnd(UITextDamage obj, Transform transformFollow) { obj.eventOnEnd -= Label_eventOnEnd; if (m_instancesInScreen.ContainsKey(transformFollow)) { m_instancesInScreen[transformFollow].Remove(obj); if (transformFollow) { if (m_tempObjects.Contains(transformFollow.gameObject)) { transformFollow.gameObject.SetActive(false); } } } }
/// <summary> /// Shows a desired text. /// </summary> /// <param name="text">text to show as string</param> /// <param name="target">transform for the text position to show</param> /// <param name="key">key type</param> public void Add(string text, Transform target, string key = "default") { // Get available text instance to use UITextDamage uiToUse = GetAvailableText(key); if (!instancesInScreen.ContainsKey(target)) { instancesInScreen.Add(target, new Queue <UITextDamage>( )); } instancesInScreen[target].Enqueue(uiToUse); // Subscribe to animation end event uiToUse.eventOnEnd += Label_eventOnEnd; // Show and set the text uiToUse.Show(text, target); }
/// <summary> /// Shows a desired text. /// </summary> /// <param name="text">Text to show as string</param> /// <param name="target">Transform for the text position to show</param> /// <param name="key">Key type</param> public void Add(string text, Transform target, string key = "default") { // Get available text instance to use UITextDamage uiToUse = GetAvailableText(key); if (!m_instancesInScreen.ContainsKey(target)) { m_instancesInScreen.Add(target, new List <UITextDamage>( )); } m_instancesInScreen[target].Add(uiToUse); // Subscribe to animation end event uiToUse.eventOnEnd += Label_eventOnEnd; // Inject the transform uiToUse.currentTransformFollow = target; // Show and set the text uiToUse.Show(text, target); }
/// <summary> /// Instantiates one text object of the desired type /// </summary> /// <param name="text">damage type</param> /// <returns></returns> private UITextDamage AllocateOneInstance(TextDamageType text) { if (text == null) { return(null); } GameObject g = Instantiate(text.prefab.gameObject) as GameObject; g.transform.SetParent(transform); g.transform.localPosition = Vector3.zero; g.transform.localRotation = Quaternion.identity; UITextDamage td = g.GetComponent <UITextDamage>( ); td.Canvas = this.canvas; td.Cam = theCamera; td.followsTarget = followsTarget; g.SetActive(false); return(td); }