// This code is part of the Fungus library (https://github.com/snozbot/fungus) // It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) using System.Collections.Generic; #if UNITY_2018_1_OR_NEWER namespace Fungus { /// /// Static lookup for Text Mesh Pro Link animations. TMPro tracks and holds information about /// link tags in its text body and is recommended as one of the ways to achieve effects within /// a body of text. Giving you the text within the link and the name/hash of the link id itself. /// /// Such that {link="shake"}this text will be marked up as within shake link{/link}. /// /// By assigning to the LinkHashToEffect dictionary with a key of TMPro.TMP_TextUtilities.GetSimpleHashCode("shake") /// and a matching function signature that can then be used the the TMProLinkAnimator. /// /// See TMProLinkAnimEffects for sample basis for creating effects. /// public static class TMProLinkAnimLookup { //required signature for all TMProAnim functions for use in the lookup public delegate void TMProAnimFunc(TMProLinkAnimator beh, int start, int length); //static lookup for all tmpro link style lookups //this is where additional effects would be added static public Dictionary LinkHashToEffect = new Dictionary() { //comments left here for the effects that are added in the demo scene /* {TMPro.TMP_TextUtilities.GetSimpleHashCode("shake"), new TMProLinkAnimEffects.ShakeEffect() { mode = TMProLinkAnimEffects.TMPLinkAnimatorMode.PerLine, offsetScale = 2, rotScale = 15 }.DoEffect }, {TMPro.TMP_TextUtilities.GetSimpleHashCode("wiggle"), new TMProLinkAnimEffects.WiggleEffect() { mode = TMProLinkAnimEffects.TMPLinkAnimatorMode.PerSection, scale = 5 }.DoEffect }, {TMPro.TMP_TextUtilities.GetSimpleHashCode("wave"), new TMProLinkAnimEffects.WaveEffect() { mode = TMProLinkAnimEffects.TMPLinkAnimatorMode.PerCharacter, speed = 10, indexStep = 0.3f, scale = 2 }.DoEffect }, {TMPro.TMP_TextUtilities.GetSimpleHashCode("pivot"), new TMProLinkAnimEffects.PivotEffect() { mode = TMProLinkAnimEffects.TMPLinkAnimatorMode.PerWord, speed = 10, degScale = 15 }.DoEffect }, {TMPro.TMP_TextUtilities.GetSimpleHashCode("rainbow"), new TMProLinkAnimEffects.RainbowEffect() { mode = TMProLinkAnimEffects.TMPLinkAnimatorMode.PerCharacter, speed = 2, indexStep = 0.1f, s = 0.8f, v = 0.8f }.DoEffect }, {TMPro.TMP_TextUtilities.GetSimpleHashCode("ascend"), new TMProLinkAnimEffects.AscendEffect() { mode = TMProLinkAnimEffects.TMPLinkAnimatorMode.PerCharacter, totalStep = 10 }.DoEffect }, */ }; static public void AddHelper(string linkIdText, TMProAnimFunc func) { var hashCode = TMPro.TMP_TextUtilities.GetSimpleHashCode(linkIdText); if(!LinkHashToEffect.ContainsKey(hashCode)) LinkHashToEffect.Add(hashCode, func); } static public void AddHelper(string linkIdText, TMProLinkAnimEffects.BaseEffect baseEffect) { var hashCode = TMPro.TMP_TextUtilities.GetSimpleHashCode(linkIdText); if (!LinkHashToEffect.ContainsKey(hashCode)) LinkHashToEffect.Add(TMPro.TMP_TextUtilities.GetSimpleHashCode(linkIdText), baseEffect.DoEffect); } static public void Remove(string linkIdText) { var hashCode = TMPro.TMP_TextUtilities.GetSimpleHashCode(linkIdText); if (LinkHashToEffect.ContainsKey(hashCode)) LinkHashToEffect.Remove(hashCode); } static public void RemoveAll() { LinkHashToEffect.Clear(); } } } #endif