@@ -1679,6 +1679,137 @@ public void linkedListModule_perClassStatics_andTyping_ok() {
16791679 );
16801680 }
16811681
1682+ @ Test
1683+ public void testTooltipGenerator () {
1684+ test ().withStdLib ().lines (
1685+ "package Test" ,
1686+ "import AbilityObjEditing" ,
1687+ "import HashMap" ,
1688+ "" ,
1689+ "@configurable constant TITLE_COLOR = \" |cff3B97D3\" " ,
1690+ "@configurable constant TITLE_TTYPE = \" Target Type:\" " ,
1691+ "@configurable constant MAX_TITLES = 10" ,
1692+ "" ,
1693+ "@configurable function buildLearnTooltip(string name) returns string" ,
1694+ "\t return \" |cffFFCC00Learn|r \" + name + \" - [|cffffcc00Level %d|r]\" " ,
1695+ "" ,
1696+ "@configurable function buildActiveTooltip(string name, int lvl) returns string" ,
1697+ "\t return name + \" - Level \" + lvl.toString()" ,
1698+ "" ,
1699+ "@configurable function buildPassiveTooltip(string name, int lvl) returns string" ,
1700+ "\t return name + \" - Level \" + lvl.toString()" ,
1701+ "" ,
1702+ "@configurable function buildDescription(string description) returns string" ,
1703+ "\t return \" |cff919191\" + description + \" |r\" " ,
1704+ "\t " ,
1705+ "public class AbilityTooltipGenerator implements TooltipGenerator" ,
1706+ "\t private constant propMap = new IterableMap<string, StringLevelClosure>" ,
1707+ "\t private var description = \" \" " ,
1708+ "" ,
1709+ "\t private var levels = 1" ,
1710+ "\t private var hotkey = \" \" " ,
1711+ "\t private var name = \" \" " ,
1712+ "" ,
1713+ "\t construct(string description)" ,
1714+ "\t \t this.description = description" ,
1715+ "" ,
1716+ "\t construct()" ,
1717+ "" ,
1718+ "\t override function addProperty(string title, StringLevelClosure lc)" ,
1719+ "\t \t propMap.put(title, lc)" ,
1720+ "" ,
1721+ "\t override function applyToDef(AbilityDefinition def)" ,
1722+ "\t \t levels = propMap.has(\" Levels\" ) ? fixValue(propMap.getAndRemove(\" Levels\" ).run(0)).toInt() : 1" ,
1723+ "\t \t name = propMap.has(\" Name\" ) ? propMap.getAndRemove(\" Name\" ).run(0) : \" unnamed\" " ,
1724+ "\t \t hotkey = propMap.has(\" Hotkey\" ) ? propMap.getAndRemove(\" Hotkey\" ).run(0) : \" Q\" " ,
1725+ "\t \t def..setTooltipLearn(generateTooltipLearn())" ,
1726+ "\t \t ..setTooltipLearnExtended(generateTooltipExtended(-1, true))" ,
1727+ "\t \t for i = 1 to levels" ,
1728+ "\t \t \t def..setTooltipNormal(i, generateTooltipNormal(i))" ,
1729+ "\t \t \t ..setTooltipNormalExtended(i, generateTooltipExtended(i, false))" ,
1730+ "" ,
1731+ "\t private function generateTooltipLearn() returns string" ,
1732+ "\t \t return buildLearnTooltip(name)" ,
1733+ "" ,
1734+ "\t private function generateTooltipNormal(int lvl) returns string" ,
1735+ "\t \t return buildActiveTooltip(name, lvl)" ,
1736+ "" ,
1737+ "\t private function generateTooltipExtended(int lvl, boolean learn) returns string" ,
1738+ "\t \t var s = \" \" " ,
1739+ "" ,
1740+ "\t \t for key in propMap" ,
1741+ "\t \t \t var tmp = \" \" " ,
1742+ "\t \t \t var isConstantValue = true" ,
1743+ "\t \t \t let val = fixValue(propMap.get(key).run(1))" ,
1744+ "\t \t \t for i = 2 to levels" ,
1745+ "\t \t \t \t let tval = fixValue(propMap.get(key).run(i))" ,
1746+ "\t \t \t \t if val != tval" ,
1747+ "\t \t \t \t \t isConstantValue = false" ,
1748+ "\t \t \t \t \t break" ,
1749+ "" ,
1750+ "\t \t \t if isConstantValue" ,
1751+ "\t \t \t \t tmp += \" |cffFFCC00\" + val + \" |r \" " ,
1752+ "\t \t \t else" ,
1753+ "\t \t \t \t for i = 1 to levels" ,
1754+ "\t \t \t \t \t tmp += fixValue(propMap.get(key).run(i)) + (i < levels ? \" /\" : \" \" )" ,
1755+ "" ,
1756+ "\t \t \t s += TITLE_COLOR + key + \" :|r \" + colorLevelValue(tmp, lvl, levels) + \" \\ n\" " ,
1757+ "\t \t s += \" \\ n\" " ,
1758+ "\t \t s += buildDescription(description)" ,
1759+ "\t \t return s" ,
1760+ "" ,
1761+ "\t private static function fixValue(string value) returns string" ,
1762+ "\t \t if value == \" \" " ,
1763+ "\t \t \t return \" \" " ,
1764+ "\t \t var s = value" ,
1765+ "\t \t let len = s.length()" ,
1766+ "\t \t let lastChar = s.substring(len-1, len)" ,
1767+ "\t \t if lastChar == \" .\" " ,
1768+ "\t \t \t s = s.substring(0, len-1)" ,
1769+ "\t \t else if len > 1 and s.substring(len-2, len) == \" .0\" " ,
1770+ "\t \t \t s = s.substring(0, len-2)" ,
1771+ "\t \t return s" ,
1772+ "" ,
1773+ "\t private static function colorLevelValue(string oldString, int lvl, int maxLevel) returns string" ,
1774+ "\t \t var _newString = \" \" " ,
1775+ "\t \t var charCount = 0" ,
1776+ "\t \t var charPosCount = 0" ,
1777+ "\t \t int array charPos" ,
1778+ "\t \t let oldLen = oldString.length()" ,
1779+ "\t \t for char in oldString" ,
1780+ "\t \t \t if char == \" /\" " ,
1781+ "\t \t \t \t charPos[charPosCount] = charCount" ,
1782+ "\t \t \t \t charPosCount++" ,
1783+ "\t \t \t charCount++" ,
1784+ "\t \t if lvl == -1" ,
1785+ "\t \t \t _newString = oldString" ,
1786+ "\t \t else if charPosCount <= 0" ,
1787+ "\t \t \t _newString = \" |cffFFCC00\" + oldString" ,
1788+ "\t \t else if maxLevel <= 1" ,
1789+ "\t \t \t _newString = \" |cffFFCC00\" + oldString" ,
1790+ "\t \t else if lvl == 1" ,
1791+ "\t \t \t _newString = \" |cffFFCC00\" + oldString.substring(0, charPos[0]) + \" |r\" + oldString.substring(charPos[0], oldLen)" ,
1792+ "\t \t else if lvl == maxLevel" ,
1793+ "\t \t \t _newString = oldString.substring(0, charPos[lvl-2] + 1) + \" |cffFFCC00\" + oldString.substring(charPos[lvl-2] + 1, oldLen) + \" |r\" " ,
1794+ "\t \t else" ,
1795+ "\t \t \t _newString = oldString.substring(0, charPos[lvl-2] + 1) + \" |cffFFCC00\" + oldString.substring(charPos[lvl-2] + 1, charPos[lvl-1]) + \" |r\" + oldString.substring(charPos[lvl-1], oldLen)" ,
1796+ "\t \t return _newString" ,
1797+ "constant h = compiletime(gen())" ,
1798+ "" ,
1799+ "function gen() returns int" ,
1800+ " let myInt = 20" ,
1801+ " let tgen = new AbilityTooltipGenerator(\" Test1\" )" ,
1802+ " new AbilityDefinitionItemHealAoe('1234')" ,
1803+ " ..registerTooltipGenerator(tgen)" ,
1804+ " ..tooltipStartListen()" ,
1805+ " ..addTooltipProperty(\" String\" , _ -> \" a\" )" ,
1806+ " ..tooltipStopListen(true)" ,
1807+ "" ,
1808+ " return 1" ,
1809+ "init" ,
1810+ " testSuccess()"
16821811
1812+ );
1813+ }
16831814
16841815}
0 commit comments