From f429888727be4a5ef28b0c1b1018ac43a496ea76 Mon Sep 17 00:00:00 2001 From: Aktanusa Date: Tue, 8 Jul 2014 23:38:21 -0400 Subject: [PATCH] Added a tooltip for reset bonus income. Also added a tooltip per wrinkler that shows the amount it will give on pop (#9) --- CookieMonster.js | 119 +++++++++++++++++++++++++++++++++++++++++++++-- src/Disp.js | 113 ++++++++++++++++++++++++++++++++++++++++++-- src/Main.js | 6 +++ 3 files changed, 230 insertions(+), 8 deletions(-) diff --git a/CookieMonster.js b/CookieMonster.js index 4708fbf..2806c64 100644 --- a/CookieMonster.js +++ b/CookieMonster.js @@ -1051,7 +1051,7 @@ CM.Disp.AddMenuStats = function(title) { div.style.fontSize = '17px'; div.style.fontFamily = '\"Kavoon\", Georgia, serif'; div.appendChild(document.createTextNode(text + ' ')); - span = document.createElement('span'); + var span = document.createElement('span'); span.style.cursor = 'pointer'; span.style.display = 'inline-block'; span.style.height = '14px'; @@ -1077,7 +1077,9 @@ CM.Disp.AddMenuStats = function(title) { var div = document.createElement('div'); div.className = 'listing'; var b = document.createElement('b'); - b.textContent = name + ' : '; + if (typeof name == 'string') b.appendChild(document.createTextNode(name)); + else b.appendChild(name); // fragment + b.appendChild(document.createTextNode(' : ')); div.appendChild(b); div.appendChild(text); return div; @@ -1181,6 +1183,32 @@ CM.Disp.AddMenuStats = function(title) { stats.appendChild(listing('Heavenly Chips (CUR)', hcCurFrag)); stats.appendChild(listing('Cookies To Next Chip', document.createTextNode(Beautify(neededCook)))); stats.appendChild(listing('Time To Next Chip', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); + var resetTitleFrag = document.createDocumentFragment(); + resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income ')) + var resetTitleSpan = document.createElement('span'); + resetTitleSpan.onmouseout = function() { Game.tooltip.hide(); }; + var resetTitlePlaceholder = document.createElement('div'); + var resetTitleDesc = document.createElement('div'); + resetTitleDesc.style.minWidth = '260px'; + resetTitleDesc.style.marginBottom = '4px'; + var resetTitleDiv = document.createElement('div'); + resetTitleDiv.style.textAlign = 'left'; + resetTitleDiv.textContent = 'The bonus income you would get from new heavenly chips/reset achievements if you have the same buildings/upgrades after reset'; + resetTitleDesc.appendChild(resetTitleDiv); + resetTitlePlaceholder.appendChild(resetTitleDesc); + resetTitleSpan.onmouseover = function() {Game.tooltip.draw(this, escape(resetTitlePlaceholder.innerHTML));}; + resetTitleSpan.style.cursor = 'default'; + resetTitleSpan.style.display = 'inline-block'; + resetTitleSpan.style.height = '10px'; + resetTitleSpan.style.width = '10px'; + resetTitleSpan.style.borderRadius = '5px'; + resetTitleSpan.style.textAlign = 'center'; + resetTitleSpan.style.backgroundColor = '#C0C0C0'; + resetTitleSpan.style.color = 'black'; + resetTitleSpan.style.fontSize = '9px'; + resetTitleSpan.style.verticalAlign = 'bottom'; + resetTitleSpan.textContent = '?'; + resetTitleFrag.appendChild(resetTitleSpan); var resetBonus = CM.Sim.ResetBonus(); var resetFrag = document.createDocumentFragment(); resetFrag.appendChild(document.createTextNode(Beautify(resetBonus))); @@ -1190,7 +1218,7 @@ CM.Disp.AddMenuStats = function(title) { resetSmall.textContent = ' (' + (increase / 100) + '% of income)'; resetFrag.appendChild(resetSmall); } - stats.appendChild(listing('Reset Bonus Income', resetFrag)); + stats.appendChild(listing(resetTitleFrag, resetFrag)); } if (Game.cpsSucked > 0) { @@ -1249,7 +1277,7 @@ CM.Disp.AddMenuStats = function(title) { var createSpecDisp = function(theSpecDisp) { var frag = document.createDocumentFragment(); frag.appendChild(document.createTextNode(theSpecDisp.length + ' ')); - span = document.createElement('span'); + var span = document.createElement('span'); span.onmouseout = function() { Game.tooltip.hide(); }; var placeholder = document.createElement('div'); var missing = document.createElement('div'); @@ -1570,6 +1598,76 @@ CM.Disp.UpdateTooltipWarnCaut = function() { } } +CM.Disp.AddWrinklerAreaDetect = function() { + l('backgroundLeftCanvas').onmouseover = function() {CM.Disp.TooltipWrinklerArea = 1;}; + l('backgroundLeftCanvas').onmouseout = function() { + CM.Disp.TooltipWrinklerArea = 0; + Game.tooltip.hide(); + for (var i = 0; i < 10; i++) { + CM.Disp.TooltipWrinklerCache[i] = 0; + } + }; +} + +CM.Disp.CheckWrinklerTooltip = function() { + if (CM.Disp.TooltipWrinklerArea == 1) { + var showingTooltip = false; + var mouseInWrinkler = function (x, y, rect) { + var dx = x + Math.sin(-rect.r) * (-(rect.h / 2 - rect.o)), dy = y + Math.cos(-rect.r) * (-(rect.h / 2 - rect.o)); + var h1 = Math.sqrt(dx * dx + dy * dy); + var currA = Math.atan2(dy, dx); + var newA = currA - rect.r; + var x2 = Math.cos(newA) * h1; + var y2 = Math.sin(newA) * h1; + if (x2 > -0.5 * rect.w && x2 < 0.5 * rect.w && y2 > -0.5 * rect.h && y2 < 0.5 * rect.h) return true; + return false; + } + for (var i in Game.wrinklers) { + var me = Game.wrinklers[i]; + var rect = {w: 100, h: 200, r: (-me.r) * Math.PI / 180, o: 10}; + if (me.phase > 0 && Game.LeftBackground && Game.mouseX < Game.LeftBackground.canvas.width && mouseInWrinkler(Game.mouseX - me.x, Game.mouseY - me.y, rect)) { + if (CM.Disp.TooltipWrinklerCache[i] == 0) { + var placeholder = document.createElement('div'); + var wrinkler = document.createElement('div'); + wrinkler.style.minWidth = '120px'; + wrinkler.style.marginBottom = '4px'; + var div = document.createElement('div'); + div.style.textAlign = 'center'; + div.id = 'CMTooltipWrinkler'; + wrinkler.appendChild(div); + placeholder.appendChild(wrinkler); + Game.tooltip.draw(this, escape(placeholder.innerHTML), 'wrink'); + CM.Disp.TooltipWrinkler = i; + CM.Disp.TooltipWrinklerCache[i] = 1; + } + showingTooltip = true; + } + else { + CM.Disp.TooltipWrinklerCache[i] = 0; + } + } + if (!showingTooltip) { + Game.tooltip.hide(); + } + } +} + +CM.Disp.UpdateWrinklerTooltip = function() { + if (l('CMTooltipWrinkler') != null) { + var sucked = Game.wrinklers[CM.Disp.TooltipWrinkler].sucked; + sucked *= 1.1; + if (Game.Has('Wrinklerspawn')) sucked *= 1.05; + l('CMTooltipWrinkler').textContent = Beautify(sucked); + } +} + +CM.Disp.UpdateTooltipWrinklerLocation = function() { + if (Game.tooltip.origin == 'wrink') { + Game.tooltip.tta.style.left = (Game.mouseX + l('tooltip').offsetWidth + 20) + 'px'; + Game.tooltip.tta.style.right = 'auto'; + } +} + CM.Disp.ToggleSayTime = function() { if (CM.Config.SayTime == 1) { Game.sayTime = CM.Disp.sayTime; @@ -1606,6 +1704,13 @@ CM.Disp.shortScale = ['M', 'B', 'Tr', 'Quadr', 'Quint', 'Sext', 'Sept', 'Oct', ' CM.Disp.TooltipBuy10 = false; +CM.Disp.TooltipWrinklerArea = 0; +CM.Disp.TooltipWrinkler = -1; +CM.Disp.TooltipWrinklerCache = []; +for (var i = 0; i < 10; i++) { + CM.Disp.TooltipWrinklerCache[i] = 0; +} + /******** * Main * ********/ @@ -1641,6 +1746,7 @@ CM.ReplaceNative = function() { eval('CM.Backup.tooltip.updateMod = ' + Game.tooltip.update.toString().split('this').join('Game.tooltip')); Game.tooltip.update = function() { CM.Backup.tooltip.updateMod(); + CM.Disp.UpdateTooltipWrinklerLocation(); CM.Disp.UpdateTooltipWarnCaut(); } @@ -1690,6 +1796,10 @@ CM.Loop = function() { // Update Tooltip CM.Disp.UpdateTooltip(); + + // Update Wrinkler Tooltip + CM.Disp.CheckWrinklerTooltip(); + CM.Disp.UpdateWrinklerTooltip(); // Check Golden Cookies CM.Disp.CheckGoldenCookie(); @@ -1715,6 +1825,7 @@ CM.Init = function() { CM.Disp.CreateTooltipWarnCaut(); CM.Disp.AddTooltipBuild(); CM.Disp.AddTooltipBuild10(); + CM.Disp.AddWrinklerAreaDetect(); CM.ReplaceNative(); Game.CalculateGains(); CM.LoadConfig(); // Must be after all things are created! diff --git a/src/Disp.js b/src/Disp.js index b08a7fd..8659f05 100644 --- a/src/Disp.js +++ b/src/Disp.js @@ -745,7 +745,7 @@ CM.Disp.AddMenuStats = function(title) { div.style.fontSize = '17px'; div.style.fontFamily = '\"Kavoon\", Georgia, serif'; div.appendChild(document.createTextNode(text + ' ')); - span = document.createElement('span'); + var span = document.createElement('span'); span.style.cursor = 'pointer'; span.style.display = 'inline-block'; span.style.height = '14px'; @@ -771,7 +771,9 @@ CM.Disp.AddMenuStats = function(title) { var div = document.createElement('div'); div.className = 'listing'; var b = document.createElement('b'); - b.textContent = name + ' : '; + if (typeof name == 'string') b.appendChild(document.createTextNode(name)); + else b.appendChild(name); // fragment + b.appendChild(document.createTextNode(' : ')); div.appendChild(b); div.appendChild(text); return div; @@ -875,6 +877,32 @@ CM.Disp.AddMenuStats = function(title) { stats.appendChild(listing('Heavenly Chips (CUR)', hcCurFrag)); stats.appendChild(listing('Cookies To Next Chip', document.createTextNode(Beautify(neededCook)))); stats.appendChild(listing('Time To Next Chip', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1)))); + var resetTitleFrag = document.createDocumentFragment(); + resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income ')) + var resetTitleSpan = document.createElement('span'); + resetTitleSpan.onmouseout = function() { Game.tooltip.hide(); }; + var resetTitlePlaceholder = document.createElement('div'); + var resetTitleDesc = document.createElement('div'); + resetTitleDesc.style.minWidth = '260px'; + resetTitleDesc.style.marginBottom = '4px'; + var resetTitleDiv = document.createElement('div'); + resetTitleDiv.style.textAlign = 'left'; + resetTitleDiv.textContent = 'The bonus income you would get from new heavenly chips/reset achievements if you have the same buildings/upgrades after reset'; + resetTitleDesc.appendChild(resetTitleDiv); + resetTitlePlaceholder.appendChild(resetTitleDesc); + resetTitleSpan.onmouseover = function() {Game.tooltip.draw(this, escape(resetTitlePlaceholder.innerHTML));}; + resetTitleSpan.style.cursor = 'default'; + resetTitleSpan.style.display = 'inline-block'; + resetTitleSpan.style.height = '10px'; + resetTitleSpan.style.width = '10px'; + resetTitleSpan.style.borderRadius = '5px'; + resetTitleSpan.style.textAlign = 'center'; + resetTitleSpan.style.backgroundColor = '#C0C0C0'; + resetTitleSpan.style.color = 'black'; + resetTitleSpan.style.fontSize = '9px'; + resetTitleSpan.style.verticalAlign = 'bottom'; + resetTitleSpan.textContent = '?'; + resetTitleFrag.appendChild(resetTitleSpan); var resetBonus = CM.Sim.ResetBonus(); var resetFrag = document.createDocumentFragment(); resetFrag.appendChild(document.createTextNode(Beautify(resetBonus))); @@ -884,7 +912,7 @@ CM.Disp.AddMenuStats = function(title) { resetSmall.textContent = ' (' + (increase / 100) + '% of income)'; resetFrag.appendChild(resetSmall); } - stats.appendChild(listing('Reset Bonus Income', resetFrag)); + stats.appendChild(listing(resetTitleFrag, resetFrag)); } if (Game.cpsSucked > 0) { @@ -943,7 +971,7 @@ CM.Disp.AddMenuStats = function(title) { var createSpecDisp = function(theSpecDisp) { var frag = document.createDocumentFragment(); frag.appendChild(document.createTextNode(theSpecDisp.length + ' ')); - span = document.createElement('span'); + var span = document.createElement('span'); span.onmouseout = function() { Game.tooltip.hide(); }; var placeholder = document.createElement('div'); var missing = document.createElement('div'); @@ -1264,6 +1292,76 @@ CM.Disp.UpdateTooltipWarnCaut = function() { } } +CM.Disp.AddWrinklerAreaDetect = function() { + l('backgroundLeftCanvas').onmouseover = function() {CM.Disp.TooltipWrinklerArea = 1;}; + l('backgroundLeftCanvas').onmouseout = function() { + CM.Disp.TooltipWrinklerArea = 0; + Game.tooltip.hide(); + for (var i = 0; i < 10; i++) { + CM.Disp.TooltipWrinklerCache[i] = 0; + } + }; +} + +CM.Disp.CheckWrinklerTooltip = function() { + if (CM.Disp.TooltipWrinklerArea == 1) { + var showingTooltip = false; + var mouseInWrinkler = function (x, y, rect) { + var dx = x + Math.sin(-rect.r) * (-(rect.h / 2 - rect.o)), dy = y + Math.cos(-rect.r) * (-(rect.h / 2 - rect.o)); + var h1 = Math.sqrt(dx * dx + dy * dy); + var currA = Math.atan2(dy, dx); + var newA = currA - rect.r; + var x2 = Math.cos(newA) * h1; + var y2 = Math.sin(newA) * h1; + if (x2 > -0.5 * rect.w && x2 < 0.5 * rect.w && y2 > -0.5 * rect.h && y2 < 0.5 * rect.h) return true; + return false; + } + for (var i in Game.wrinklers) { + var me = Game.wrinklers[i]; + var rect = {w: 100, h: 200, r: (-me.r) * Math.PI / 180, o: 10}; + if (me.phase > 0 && Game.LeftBackground && Game.mouseX < Game.LeftBackground.canvas.width && mouseInWrinkler(Game.mouseX - me.x, Game.mouseY - me.y, rect)) { + if (CM.Disp.TooltipWrinklerCache[i] == 0) { + var placeholder = document.createElement('div'); + var wrinkler = document.createElement('div'); + wrinkler.style.minWidth = '120px'; + wrinkler.style.marginBottom = '4px'; + var div = document.createElement('div'); + div.style.textAlign = 'center'; + div.id = 'CMTooltipWrinkler'; + wrinkler.appendChild(div); + placeholder.appendChild(wrinkler); + Game.tooltip.draw(this, escape(placeholder.innerHTML), 'wrink'); + CM.Disp.TooltipWrinkler = i; + CM.Disp.TooltipWrinklerCache[i] = 1; + } + showingTooltip = true; + } + else { + CM.Disp.TooltipWrinklerCache[i] = 0; + } + } + if (!showingTooltip) { + Game.tooltip.hide(); + } + } +} + +CM.Disp.UpdateWrinklerTooltip = function() { + if (l('CMTooltipWrinkler') != null) { + var sucked = Game.wrinklers[CM.Disp.TooltipWrinkler].sucked; + sucked *= 1.1; + if (Game.Has('Wrinklerspawn')) sucked *= 1.05; + l('CMTooltipWrinkler').textContent = Beautify(sucked); + } +} + +CM.Disp.UpdateTooltipWrinklerLocation = function() { + if (Game.tooltip.origin == 'wrink') { + Game.tooltip.tta.style.left = (Game.mouseX + l('tooltip').offsetWidth + 20) + 'px'; + Game.tooltip.tta.style.right = 'auto'; + } +} + CM.Disp.ToggleSayTime = function() { if (CM.Config.SayTime == 1) { Game.sayTime = CM.Disp.sayTime; @@ -1300,3 +1398,10 @@ CM.Disp.shortScale = ['M', 'B', 'Tr', 'Quadr', 'Quint', 'Sext', 'Sept', 'Oct', ' CM.Disp.TooltipBuy10 = false; +CM.Disp.TooltipWrinklerArea = 0; +CM.Disp.TooltipWrinkler = -1; +CM.Disp.TooltipWrinklerCache = []; +for (var i = 0; i < 10; i++) { + CM.Disp.TooltipWrinklerCache[i] = 0; +} + diff --git a/src/Main.js b/src/Main.js index 597bb8d..a5984da 100644 --- a/src/Main.js +++ b/src/Main.js @@ -33,6 +33,7 @@ CM.ReplaceNative = function() { eval('CM.Backup.tooltip.updateMod = ' + Game.tooltip.update.toString().split('this').join('Game.tooltip')); Game.tooltip.update = function() { CM.Backup.tooltip.updateMod(); + CM.Disp.UpdateTooltipWrinklerLocation(); CM.Disp.UpdateTooltipWarnCaut(); } @@ -82,6 +83,10 @@ CM.Loop = function() { // Update Tooltip CM.Disp.UpdateTooltip(); + + // Update Wrinkler Tooltip + CM.Disp.CheckWrinklerTooltip(); + CM.Disp.UpdateWrinklerTooltip(); // Check Golden Cookies CM.Disp.CheckGoldenCookie(); @@ -107,6 +112,7 @@ CM.Init = function() { CM.Disp.CreateTooltipWarnCaut(); CM.Disp.AddTooltipBuild(); CM.Disp.AddTooltipBuild10(); + CM.Disp.AddWrinklerAreaDetect(); CM.ReplaceNative(); Game.CalculateGains(); CM.LoadConfig(); // Must be after all things are created!