Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d997ff7652 | ||
|
|
3ddd1b3d23 | ||
|
|
a8d404aca7 | ||
|
|
989ef30f4a | ||
|
|
e4bca75da1 | ||
|
|
418b1a7d2e | ||
|
|
db41ada262 | ||
|
|
27833773c9 | ||
|
|
1742ce201c | ||
|
|
850f16ca4c | ||
|
|
4d445c676c | ||
|
|
f9ac7aa549 | ||
|
|
a7e2b2cf35 | ||
|
|
55fc259849 | ||
|
|
c9a1e60d50 | ||
|
|
188a622c97 | ||
|
|
ccc01ab5dc | ||
|
|
ee1545fca0 | ||
|
|
267b40bfa1 | ||
|
|
f429888727 | ||
|
|
4ae550e4ab | ||
|
|
952ee91f7c | ||
|
|
a9fe2df233 | ||
|
|
d453499014 | ||
|
|
9395bebd46 | ||
|
|
75c52362b9 | ||
|
|
448922dbda | ||
|
|
686238e6e5 | ||
|
|
d9c21a43bf | ||
|
|
93f87913b4 | ||
|
|
ddf70d1aaa | ||
|
|
1091d6b666 |
798
CookieMonster.js
798
CookieMonster.js
File diff suppressed because it is too large
Load Diff
32
README.md
32
README.md
@@ -1,6 +1,6 @@
|
|||||||
# Cookie Monster
|
# Cookie Monster
|
||||||
|
|
||||||
Cookie Monster is an addon you can load into Cookie Clicker, that offers a wide range of tools and statistics to enhance the game. It is **not** a cheat interface – although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want.
|
**Cookie Monster** is an addon you can load into Cookie Clicker, that offers a wide range of tools and statistics to enhance the game. It is **not** a cheat interface – although it does offer helpers for golden cookies and such, everything can be toggled off at will to only leave how much information you want.
|
||||||
|
|
||||||
This is a helper, and it is here to help you at *whichever* degree you want, if you only need some help shortening long numbers, it does that. If you need to be accompanied by hand to pick the best buildings to buy, it does that, but **everything is an option**.
|
This is a helper, and it is here to help you at *whichever* degree you want, if you only need some help shortening long numbers, it does that. If you need to be accompanied by hand to pick the best buildings to buy, it does that, but **everything is an option**.
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ This index is computed for buildings and upgrades. If the relevant option is ena
|
|||||||
* Purple : (upgrades) This item has a worse BCI than any building
|
* Purple : (upgrades) This item has a worse BCI than any building
|
||||||
* Gray : (upgrades) This item has not been calculated and/or cannot be calculated due to no definitive worth.
|
* Gray : (upgrades) This item has not been calculated and/or cannot be calculated due to no definitive worth.
|
||||||
|
|
||||||
Note : For this index, **lower is better**, meaning a building with a BCI of 1 is more interesting that one with a BCI of 3.
|
Note : For this index, **lower is better**, meaning a building with a BCI of 1 is more interesting than one with a BCI of 3.
|
||||||
|
|
||||||
## What it doesn't do
|
## What it doesn't do
|
||||||
|
|
||||||
@@ -50,14 +50,11 @@ Do note though that, although these upgrades have no direct value, if buying the
|
|||||||
|
|
||||||
## Bookmarklet
|
## Bookmarklet
|
||||||
|
|
||||||
Simply use like the previous addon, create a bookmark and set this as the URL. Then when in the game, click on that bookmark.
|
Copy this code and save it as a bookmark. Paste it in the URL section. To activate, click the bookmark when the game's open.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
javascript: (function () {
|
javascript: (function () {
|
||||||
var load = document.createElement('script');
|
Game.LoadMod('http://aktanusa.github.io/CookieMonster/CookieMonster.js');
|
||||||
load.setAttribute('type', 'text/javascript');
|
|
||||||
load.setAttribute('src', 'http://aktanusa.github.io/CookieMonster/CookieMonster.js');
|
|
||||||
document.head.appendChild(load);
|
|
||||||
}());
|
}());
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -76,16 +73,14 @@ If you'd rather use the addon as a script via per example *Greasemonkey* or *Tam
|
|||||||
// @grant none
|
// @grant none
|
||||||
// ==/UserScript==
|
// ==/UserScript==
|
||||||
|
|
||||||
var init = Game.Init;
|
javascript:(function() {
|
||||||
Game.Init = function() {
|
var checkReady = setInterval(function() {
|
||||||
init();
|
if (Game.ready != undefined && Game.ready) {
|
||||||
(function () {
|
Game.LoadMod('http://aktanusa.github.io/CookieMonster/CookieMonster.js');
|
||||||
var load = document.createElement('script');
|
clearInterval(checkReady);
|
||||||
load.setAttribute('type', 'text/javascript');
|
|
||||||
load.setAttribute('src', 'http://aktanusa.github.io/CookieMonster/CookieMonster.js');
|
|
||||||
document.head.appendChild(load);
|
|
||||||
}());
|
|
||||||
}
|
}
|
||||||
|
}, 1000);
|
||||||
|
}());
|
||||||
```
|
```
|
||||||
|
|
||||||
# Bugs and suggestions
|
# Bugs and suggestions
|
||||||
@@ -96,10 +91,7 @@ Before submitting a bug, make sure to give a shot at the latest version of the a
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
javascript: (function () {
|
javascript: (function () {
|
||||||
var load = document.createElement('script');
|
Game.LoadMod('https://raw.githubusercontent.com/Aktanusa/CookieMonster/dev/CookieMonster.js');
|
||||||
load.setAttribute('type', 'text/javascript');
|
|
||||||
load.setAttribute('src', 'https://raw.githubusercontent.com/Aktanusa/CookieMonster/dev/CookieMonster.js');
|
|
||||||
document.head.appendChild(load);
|
|
||||||
}());
|
}());
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
BIN
jscolor/arrow.gif
Normal file
BIN
jscolor/arrow.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 66 B |
BIN
jscolor/cross.gif
Normal file
BIN
jscolor/cross.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 83 B |
BIN
jscolor/hs.png
Normal file
BIN
jscolor/hs.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.6 KiB |
BIN
jscolor/hv.png
Normal file
BIN
jscolor/hv.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
997
jscolor/jscolor.js
Normal file
997
jscolor/jscolor.js
Normal file
@@ -0,0 +1,997 @@
|
|||||||
|
/**
|
||||||
|
* jscolor, JavaScript Color Picker
|
||||||
|
*
|
||||||
|
* @version 1.4.3
|
||||||
|
* @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html
|
||||||
|
* @author Jan Odvarko, http://odvarko.cz
|
||||||
|
* @created 2008-06-15
|
||||||
|
* @updated 2014-07-16
|
||||||
|
* @link http://jscolor.com
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
var jscolor = {
|
||||||
|
|
||||||
|
|
||||||
|
dir : '', // location of jscolor directory (leave empty to autodetect)
|
||||||
|
bindClass : 'color', // class name
|
||||||
|
binding : true, // automatic binding via <input class="...">
|
||||||
|
preloading : true, // use image preloading?
|
||||||
|
|
||||||
|
|
||||||
|
install : function() {
|
||||||
|
jscolor.addEvent(window, 'load', jscolor.init);
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
init : function() {
|
||||||
|
if(jscolor.binding) {
|
||||||
|
jscolor.bind();
|
||||||
|
}
|
||||||
|
if(jscolor.preloading) {
|
||||||
|
jscolor.preload();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getDir : function() {
|
||||||
|
if(!jscolor.dir) {
|
||||||
|
var detected = jscolor.detectDir();
|
||||||
|
jscolor.dir = detected!==false ? detected : 'jscolor/';
|
||||||
|
}
|
||||||
|
return jscolor.dir;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
detectDir : function() {
|
||||||
|
var base = location.href;
|
||||||
|
|
||||||
|
var e = document.getElementsByTagName('base');
|
||||||
|
for(var i=0; i<e.length; i+=1) {
|
||||||
|
if(e[i].href) { base = e[i].href; }
|
||||||
|
}
|
||||||
|
|
||||||
|
var e = document.getElementsByTagName('script');
|
||||||
|
for(var i=0; i<e.length; i+=1) {
|
||||||
|
if(e[i].src && /(^|\/)jscolor\.js([?#].*)?$/i.test(e[i].src)) {
|
||||||
|
var src = new jscolor.URI(e[i].src);
|
||||||
|
var srcAbs = src.toAbsolute(base);
|
||||||
|
srcAbs.path = srcAbs.path.replace(/[^\/]+$/, ''); // remove filename
|
||||||
|
srcAbs.query = null;
|
||||||
|
srcAbs.fragment = null;
|
||||||
|
return srcAbs.toString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
bind : function() {
|
||||||
|
var matchClass = new RegExp('(^|\\s)('+jscolor.bindClass+')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
|
||||||
|
var e = document.getElementsByTagName('input');
|
||||||
|
for(var i=0; i<e.length; i+=1) {
|
||||||
|
var m;
|
||||||
|
if(!e[i].color && e[i].className && (m = e[i].className.match(matchClass))) {
|
||||||
|
var prop = {};
|
||||||
|
if(m[4]) {
|
||||||
|
try {
|
||||||
|
prop = (new Function ('return (' + m[4] + ')'))();
|
||||||
|
} catch(eInvalidProp) {}
|
||||||
|
}
|
||||||
|
e[i].color = new jscolor.color(e[i], prop);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
preload : function() {
|
||||||
|
for(var fn in jscolor.imgRequire) {
|
||||||
|
if(jscolor.imgRequire.hasOwnProperty(fn)) {
|
||||||
|
jscolor.loadImage(fn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
images : {
|
||||||
|
pad : [ 181, 101 ],
|
||||||
|
sld : [ 16, 101 ],
|
||||||
|
cross : [ 15, 15 ],
|
||||||
|
arrow : [ 7, 11 ]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
imgRequire : {},
|
||||||
|
imgLoaded : {},
|
||||||
|
|
||||||
|
|
||||||
|
requireImage : function(filename) {
|
||||||
|
jscolor.imgRequire[filename] = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
loadImage : function(filename) {
|
||||||
|
if(!jscolor.imgLoaded[filename]) {
|
||||||
|
jscolor.imgLoaded[filename] = new Image();
|
||||||
|
jscolor.imgLoaded[filename].src = jscolor.getDir()+filename;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
fetchElement : function(mixed) {
|
||||||
|
return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
addEvent : function(el, evnt, func) {
|
||||||
|
if(el.addEventListener) {
|
||||||
|
el.addEventListener(evnt, func, false);
|
||||||
|
} else if(el.attachEvent) {
|
||||||
|
el.attachEvent('on'+evnt, func);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
fireEvent : function(el, evnt) {
|
||||||
|
if(!el) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if(document.createEvent) {
|
||||||
|
var ev = document.createEvent('HTMLEvents');
|
||||||
|
ev.initEvent(evnt, true, true);
|
||||||
|
el.dispatchEvent(ev);
|
||||||
|
} else if(document.createEventObject) {
|
||||||
|
var ev = document.createEventObject();
|
||||||
|
el.fireEvent('on'+evnt, ev);
|
||||||
|
} else if(el['on'+evnt]) { // alternatively use the traditional event model (IE5)
|
||||||
|
el['on'+evnt]();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getElementPos : function(e) {
|
||||||
|
var e1=e, e2=e;
|
||||||
|
var x=0, y=0;
|
||||||
|
if(e1.offsetParent) {
|
||||||
|
do {
|
||||||
|
x += e1.offsetLeft;
|
||||||
|
y += e1.offsetTop;
|
||||||
|
} while(e1 = e1.offsetParent);
|
||||||
|
}
|
||||||
|
while((e2 = e2.parentNode) && e2.nodeName.toUpperCase() !== 'BODY') {
|
||||||
|
x -= e2.scrollLeft;
|
||||||
|
y -= e2.scrollTop;
|
||||||
|
}
|
||||||
|
return [x, y];
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getElementSize : function(e) {
|
||||||
|
return [e.offsetWidth, e.offsetHeight];
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getRelMousePos : function(e) {
|
||||||
|
var x = 0, y = 0;
|
||||||
|
if (!e) { e = window.event; }
|
||||||
|
if (typeof e.offsetX === 'number') {
|
||||||
|
x = e.offsetX;
|
||||||
|
y = e.offsetY;
|
||||||
|
} else if (typeof e.layerX === 'number') {
|
||||||
|
x = e.layerX;
|
||||||
|
y = e.layerY;
|
||||||
|
}
|
||||||
|
return { x: x, y: y };
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getViewPos : function() {
|
||||||
|
if(typeof window.pageYOffset === 'number') {
|
||||||
|
return [window.pageXOffset, window.pageYOffset];
|
||||||
|
} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
|
||||||
|
return [document.body.scrollLeft, document.body.scrollTop];
|
||||||
|
} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
|
||||||
|
return [document.documentElement.scrollLeft, document.documentElement.scrollTop];
|
||||||
|
} else {
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
getViewSize : function() {
|
||||||
|
if(typeof window.innerWidth === 'number') {
|
||||||
|
return [window.innerWidth, window.innerHeight];
|
||||||
|
} else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
|
||||||
|
return [document.body.clientWidth, document.body.clientHeight];
|
||||||
|
} else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
|
||||||
|
return [document.documentElement.clientWidth, document.documentElement.clientHeight];
|
||||||
|
} else {
|
||||||
|
return [0, 0];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
URI : function(uri) { // See RFC3986
|
||||||
|
|
||||||
|
this.scheme = null;
|
||||||
|
this.authority = null;
|
||||||
|
this.path = '';
|
||||||
|
this.query = null;
|
||||||
|
this.fragment = null;
|
||||||
|
|
||||||
|
this.parse = function(uri) {
|
||||||
|
var m = uri.match(/^(([A-Za-z][0-9A-Za-z+.-]*)(:))?((\/\/)([^\/?#]*))?([^?#]*)((\?)([^#]*))?((#)(.*))?/);
|
||||||
|
this.scheme = m[3] ? m[2] : null;
|
||||||
|
this.authority = m[5] ? m[6] : null;
|
||||||
|
this.path = m[7];
|
||||||
|
this.query = m[9] ? m[10] : null;
|
||||||
|
this.fragment = m[12] ? m[13] : null;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.toString = function() {
|
||||||
|
var result = '';
|
||||||
|
if(this.scheme !== null) { result = result + this.scheme + ':'; }
|
||||||
|
if(this.authority !== null) { result = result + '//' + this.authority; }
|
||||||
|
if(this.path !== null) { result = result + this.path; }
|
||||||
|
if(this.query !== null) { result = result + '?' + this.query; }
|
||||||
|
if(this.fragment !== null) { result = result + '#' + this.fragment; }
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.toAbsolute = function(base) {
|
||||||
|
var base = new jscolor.URI(base);
|
||||||
|
var r = this;
|
||||||
|
var t = new jscolor.URI;
|
||||||
|
|
||||||
|
if(base.scheme === null) { return false; }
|
||||||
|
|
||||||
|
if(r.scheme !== null && r.scheme.toLowerCase() === base.scheme.toLowerCase()) {
|
||||||
|
r.scheme = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(r.scheme !== null) {
|
||||||
|
t.scheme = r.scheme;
|
||||||
|
t.authority = r.authority;
|
||||||
|
t.path = removeDotSegments(r.path);
|
||||||
|
t.query = r.query;
|
||||||
|
} else {
|
||||||
|
if(r.authority !== null) {
|
||||||
|
t.authority = r.authority;
|
||||||
|
t.path = removeDotSegments(r.path);
|
||||||
|
t.query = r.query;
|
||||||
|
} else {
|
||||||
|
if(r.path === '') {
|
||||||
|
t.path = base.path;
|
||||||
|
if(r.query !== null) {
|
||||||
|
t.query = r.query;
|
||||||
|
} else {
|
||||||
|
t.query = base.query;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if(r.path.substr(0,1) === '/') {
|
||||||
|
t.path = removeDotSegments(r.path);
|
||||||
|
} else {
|
||||||
|
if(base.authority !== null && base.path === '') {
|
||||||
|
t.path = '/'+r.path;
|
||||||
|
} else {
|
||||||
|
t.path = base.path.replace(/[^\/]+$/,'')+r.path;
|
||||||
|
}
|
||||||
|
t.path = removeDotSegments(t.path);
|
||||||
|
}
|
||||||
|
t.query = r.query;
|
||||||
|
}
|
||||||
|
t.authority = base.authority;
|
||||||
|
}
|
||||||
|
t.scheme = base.scheme;
|
||||||
|
}
|
||||||
|
t.fragment = r.fragment;
|
||||||
|
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
function removeDotSegments(path) {
|
||||||
|
var out = '';
|
||||||
|
while(path) {
|
||||||
|
if(path.substr(0,3)==='../' || path.substr(0,2)==='./') {
|
||||||
|
path = path.replace(/^\.+/,'').substr(1);
|
||||||
|
} else if(path.substr(0,3)==='/./' || path==='/.') {
|
||||||
|
path = '/'+path.substr(3);
|
||||||
|
} else if(path.substr(0,4)==='/../' || path==='/..') {
|
||||||
|
path = '/'+path.substr(4);
|
||||||
|
out = out.replace(/\/?[^\/]*$/, '');
|
||||||
|
} else if(path==='.' || path==='..') {
|
||||||
|
path = '';
|
||||||
|
} else {
|
||||||
|
var rm = path.match(/^\/?[^\/]*/)[0];
|
||||||
|
path = path.substr(rm.length);
|
||||||
|
out = out + rm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uri) {
|
||||||
|
this.parse(uri);
|
||||||
|
}
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Usage example:
|
||||||
|
// var myColor = new jscolor.color(myInputElement)
|
||||||
|
//
|
||||||
|
|
||||||
|
color : function(target, prop) {
|
||||||
|
|
||||||
|
|
||||||
|
this.required = true; // refuse empty values?
|
||||||
|
this.adjust = true; // adjust value to uniform notation?
|
||||||
|
this.hash = false; // prefix color with # symbol?
|
||||||
|
this.caps = true; // uppercase?
|
||||||
|
this.slider = true; // show the value/saturation slider?
|
||||||
|
this.valueElement = target; // value holder
|
||||||
|
this.styleElement = target; // where to reflect current color
|
||||||
|
this.onImmediateChange = null; // onchange callback (can be either string or function)
|
||||||
|
this.hsv = [0, 0, 1]; // read-only 0-6, 0-1, 0-1
|
||||||
|
this.rgb = [1, 1, 1]; // read-only 0-1, 0-1, 0-1
|
||||||
|
this.minH = 0; // read-only 0-6
|
||||||
|
this.maxH = 6; // read-only 0-6
|
||||||
|
this.minS = 0; // read-only 0-1
|
||||||
|
this.maxS = 1; // read-only 0-1
|
||||||
|
this.minV = 0; // read-only 0-1
|
||||||
|
this.maxV = 1; // read-only 0-1
|
||||||
|
|
||||||
|
this.pickerOnfocus = true; // display picker on focus?
|
||||||
|
this.pickerMode = 'HSV'; // HSV | HVS
|
||||||
|
this.pickerPosition = 'bottom'; // left | right | top | bottom
|
||||||
|
this.pickerSmartPosition = true; // automatically adjust picker position when necessary
|
||||||
|
this.pickerButtonHeight = 20; // px
|
||||||
|
this.pickerClosable = false;
|
||||||
|
this.pickerCloseText = 'Close';
|
||||||
|
this.pickerButtonColor = 'ButtonText'; // px
|
||||||
|
this.pickerFace = 10; // px
|
||||||
|
this.pickerFaceColor = 'ThreeDFace'; // CSS color
|
||||||
|
this.pickerBorder = 1; // px
|
||||||
|
this.pickerBorderColor = 'ThreeDHighlight ThreeDShadow ThreeDShadow ThreeDHighlight'; // CSS color
|
||||||
|
this.pickerInset = 1; // px
|
||||||
|
this.pickerInsetColor = 'ThreeDShadow ThreeDHighlight ThreeDHighlight ThreeDShadow'; // CSS color
|
||||||
|
this.pickerZIndex = 10000;
|
||||||
|
|
||||||
|
|
||||||
|
for(var p in prop) {
|
||||||
|
if(prop.hasOwnProperty(p)) {
|
||||||
|
this[p] = prop[p];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
this.hidePicker = function() {
|
||||||
|
if(isPickerOwner()) {
|
||||||
|
removePicker();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.showPicker = function() {
|
||||||
|
if(!isPickerOwner()) {
|
||||||
|
var tp = jscolor.getElementPos(target); // target pos
|
||||||
|
var ts = jscolor.getElementSize(target); // target size
|
||||||
|
var vp = jscolor.getViewPos(); // view pos
|
||||||
|
var vs = jscolor.getViewSize(); // view size
|
||||||
|
var ps = getPickerDims(this); // picker size
|
||||||
|
var a, b, c;
|
||||||
|
switch(this.pickerPosition.toLowerCase()) {
|
||||||
|
case 'left': a=1; b=0; c=-1; break;
|
||||||
|
case 'right':a=1; b=0; c=1; break;
|
||||||
|
case 'top': a=0; b=1; c=-1; break;
|
||||||
|
default: a=0; b=1; c=1; break;
|
||||||
|
}
|
||||||
|
var l = (ts[b]+ps[b])/2;
|
||||||
|
|
||||||
|
// picker pos
|
||||||
|
if (!this.pickerSmartPosition) {
|
||||||
|
var pp = [
|
||||||
|
tp[a],
|
||||||
|
tp[b]+ts[b]-l+l*c
|
||||||
|
];
|
||||||
|
} else {
|
||||||
|
var pp = [
|
||||||
|
-vp[a]+tp[a]+ps[a] > vs[a] ?
|
||||||
|
(-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
|
||||||
|
tp[a],
|
||||||
|
-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
|
||||||
|
(-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
|
||||||
|
(tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
drawPicker(pp[a], pp[b]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.importColor = function() {
|
||||||
|
if(!valueElement) {
|
||||||
|
this.exportColor();
|
||||||
|
} else {
|
||||||
|
if(!this.adjust) {
|
||||||
|
if(!this.fromString(valueElement.value, leaveValue)) {
|
||||||
|
styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
|
||||||
|
styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
|
||||||
|
styleElement.style.color = styleElement.jscStyle.color;
|
||||||
|
this.exportColor(leaveValue | leaveStyle);
|
||||||
|
}
|
||||||
|
} else if(!this.required && /^\s*$/.test(valueElement.value)) {
|
||||||
|
valueElement.value = '';
|
||||||
|
styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage;
|
||||||
|
styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor;
|
||||||
|
styleElement.style.color = styleElement.jscStyle.color;
|
||||||
|
this.exportColor(leaveValue | leaveStyle);
|
||||||
|
|
||||||
|
} else if(this.fromString(valueElement.value)) {
|
||||||
|
// OK
|
||||||
|
} else {
|
||||||
|
this.exportColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.exportColor = function(flags) {
|
||||||
|
if(!(flags & leaveValue) && valueElement) {
|
||||||
|
var value = this.toString();
|
||||||
|
if(this.caps) { value = value.toUpperCase(); }
|
||||||
|
if(this.hash) { value = '#'+value; }
|
||||||
|
valueElement.value = value;
|
||||||
|
}
|
||||||
|
if(!(flags & leaveStyle) && styleElement) {
|
||||||
|
styleElement.style.backgroundImage = "none";
|
||||||
|
styleElement.style.backgroundColor =
|
||||||
|
'#'+this.toString();
|
||||||
|
styleElement.style.color =
|
||||||
|
0.213 * this.rgb[0] +
|
||||||
|
0.715 * this.rgb[1] +
|
||||||
|
0.072 * this.rgb[2]
|
||||||
|
< 0.5 ? '#FFF' : '#000';
|
||||||
|
}
|
||||||
|
if(!(flags & leavePad) && isPickerOwner()) {
|
||||||
|
redrawPad();
|
||||||
|
}
|
||||||
|
if(!(flags & leaveSld) && isPickerOwner()) {
|
||||||
|
redrawSld();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.fromHSV = function(h, s, v, flags) { // null = don't change
|
||||||
|
if(h !== null) { h = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, h)); }
|
||||||
|
if(s !== null) { s = Math.max(0.0, this.minS, Math.min(1.0, this.maxS, s)); }
|
||||||
|
if(v !== null) { v = Math.max(0.0, this.minV, Math.min(1.0, this.maxV, v)); }
|
||||||
|
|
||||||
|
this.rgb = HSV_RGB(
|
||||||
|
h===null ? this.hsv[0] : (this.hsv[0]=h),
|
||||||
|
s===null ? this.hsv[1] : (this.hsv[1]=s),
|
||||||
|
v===null ? this.hsv[2] : (this.hsv[2]=v)
|
||||||
|
);
|
||||||
|
|
||||||
|
this.exportColor(flags);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.fromRGB = function(r, g, b, flags) { // null = don't change
|
||||||
|
if(r !== null) { r = Math.max(0.0, Math.min(1.0, r)); }
|
||||||
|
if(g !== null) { g = Math.max(0.0, Math.min(1.0, g)); }
|
||||||
|
if(b !== null) { b = Math.max(0.0, Math.min(1.0, b)); }
|
||||||
|
|
||||||
|
var hsv = RGB_HSV(
|
||||||
|
r===null ? this.rgb[0] : r,
|
||||||
|
g===null ? this.rgb[1] : g,
|
||||||
|
b===null ? this.rgb[2] : b
|
||||||
|
);
|
||||||
|
if(hsv[0] !== null) {
|
||||||
|
this.hsv[0] = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, hsv[0]));
|
||||||
|
}
|
||||||
|
if(hsv[2] !== 0) {
|
||||||
|
this.hsv[1] = hsv[1]===null ? null : Math.max(0.0, this.minS, Math.min(1.0, this.maxS, hsv[1]));
|
||||||
|
}
|
||||||
|
this.hsv[2] = hsv[2]===null ? null : Math.max(0.0, this.minV, Math.min(1.0, this.maxV, hsv[2]));
|
||||||
|
|
||||||
|
// update RGB according to final HSV, as some values might be trimmed
|
||||||
|
var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
|
||||||
|
this.rgb[0] = rgb[0];
|
||||||
|
this.rgb[1] = rgb[1];
|
||||||
|
this.rgb[2] = rgb[2];
|
||||||
|
|
||||||
|
this.exportColor(flags);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.fromString = function(hex, flags) {
|
||||||
|
var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i);
|
||||||
|
if(!m) {
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if(m[1].length === 6) { // 6-char notation
|
||||||
|
this.fromRGB(
|
||||||
|
parseInt(m[1].substr(0,2),16) / 255,
|
||||||
|
parseInt(m[1].substr(2,2),16) / 255,
|
||||||
|
parseInt(m[1].substr(4,2),16) / 255,
|
||||||
|
flags
|
||||||
|
);
|
||||||
|
} else { // 3-char notation
|
||||||
|
this.fromRGB(
|
||||||
|
parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255,
|
||||||
|
parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255,
|
||||||
|
parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255,
|
||||||
|
flags
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
this.toString = function() {
|
||||||
|
return (
|
||||||
|
(0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) +
|
||||||
|
(0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) +
|
||||||
|
(0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
function RGB_HSV(r, g, b) {
|
||||||
|
var n = Math.min(Math.min(r,g),b);
|
||||||
|
var v = Math.max(Math.max(r,g),b);
|
||||||
|
var m = v - n;
|
||||||
|
if(m === 0) { return [ null, 0, v ]; }
|
||||||
|
var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
|
||||||
|
return [ h===6?0:h, m/v, v ];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function HSV_RGB(h, s, v) {
|
||||||
|
if(h === null) { return [ v, v, v ]; }
|
||||||
|
var i = Math.floor(h);
|
||||||
|
var f = i%2 ? h-i : 1-(h-i);
|
||||||
|
var m = v * (1 - s);
|
||||||
|
var n = v * (1 - s*f);
|
||||||
|
switch(i) {
|
||||||
|
case 6:
|
||||||
|
case 0: return [v,n,m];
|
||||||
|
case 1: return [n,v,m];
|
||||||
|
case 2: return [m,v,n];
|
||||||
|
case 3: return [m,n,v];
|
||||||
|
case 4: return [n,m,v];
|
||||||
|
case 5: return [v,m,n];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function removePicker() {
|
||||||
|
delete jscolor.picker.owner;
|
||||||
|
document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function drawPicker(x, y) {
|
||||||
|
if(!jscolor.picker) {
|
||||||
|
jscolor.picker = {
|
||||||
|
box : document.createElement('div'),
|
||||||
|
boxB : document.createElement('div'),
|
||||||
|
pad : document.createElement('div'),
|
||||||
|
padB : document.createElement('div'),
|
||||||
|
padM : document.createElement('div'),
|
||||||
|
sld : document.createElement('div'),
|
||||||
|
sldB : document.createElement('div'),
|
||||||
|
sldM : document.createElement('div'),
|
||||||
|
btn : document.createElement('div'),
|
||||||
|
btnS : document.createElement('span'),
|
||||||
|
btnT : document.createTextNode(THIS.pickerCloseText)
|
||||||
|
};
|
||||||
|
for(var i=0,segSize=4; i<jscolor.images.sld[1]; i+=segSize) {
|
||||||
|
var seg = document.createElement('div');
|
||||||
|
seg.style.height = segSize+'px';
|
||||||
|
seg.style.fontSize = '1px';
|
||||||
|
seg.style.lineHeight = '0';
|
||||||
|
jscolor.picker.sld.appendChild(seg);
|
||||||
|
}
|
||||||
|
jscolor.picker.sldB.appendChild(jscolor.picker.sld);
|
||||||
|
jscolor.picker.box.appendChild(jscolor.picker.sldB);
|
||||||
|
jscolor.picker.box.appendChild(jscolor.picker.sldM);
|
||||||
|
jscolor.picker.padB.appendChild(jscolor.picker.pad);
|
||||||
|
jscolor.picker.box.appendChild(jscolor.picker.padB);
|
||||||
|
jscolor.picker.box.appendChild(jscolor.picker.padM);
|
||||||
|
jscolor.picker.btnS.appendChild(jscolor.picker.btnT);
|
||||||
|
jscolor.picker.btn.appendChild(jscolor.picker.btnS);
|
||||||
|
jscolor.picker.box.appendChild(jscolor.picker.btn);
|
||||||
|
jscolor.picker.boxB.appendChild(jscolor.picker.box);
|
||||||
|
}
|
||||||
|
|
||||||
|
var p = jscolor.picker;
|
||||||
|
|
||||||
|
// controls interaction
|
||||||
|
p.box.onmouseup =
|
||||||
|
p.box.onmouseout = function() { target.focus(); };
|
||||||
|
p.box.onmousedown = function() { abortBlur=true; };
|
||||||
|
p.box.onmousemove = function(e) {
|
||||||
|
if (holdPad || holdSld) {
|
||||||
|
holdPad && setPad(e);
|
||||||
|
holdSld && setSld(e);
|
||||||
|
if (document.selection) {
|
||||||
|
document.selection.empty();
|
||||||
|
} else if (window.getSelection) {
|
||||||
|
window.getSelection().removeAllRanges();
|
||||||
|
}
|
||||||
|
dispatchImmediateChange();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
if('ontouchstart' in window) { // if touch device
|
||||||
|
var handle_touchmove = function(e) {
|
||||||
|
var event={
|
||||||
|
'offsetX': e.touches[0].pageX-touchOffset.X,
|
||||||
|
'offsetY': e.touches[0].pageY-touchOffset.Y
|
||||||
|
};
|
||||||
|
if (holdPad || holdSld) {
|
||||||
|
holdPad && setPad(event);
|
||||||
|
holdSld && setSld(event);
|
||||||
|
dispatchImmediateChange();
|
||||||
|
}
|
||||||
|
e.stopPropagation(); // prevent move "view" on broswer
|
||||||
|
e.preventDefault(); // prevent Default - Android Fix (else android generated only 1-2 touchmove events)
|
||||||
|
};
|
||||||
|
p.box.removeEventListener('touchmove', handle_touchmove, false)
|
||||||
|
p.box.addEventListener('touchmove', handle_touchmove, false)
|
||||||
|
}
|
||||||
|
p.padM.onmouseup =
|
||||||
|
p.padM.onmouseout = function() { if(holdPad) { holdPad=false; jscolor.fireEvent(valueElement,'change'); } };
|
||||||
|
p.padM.onmousedown = function(e) {
|
||||||
|
// if the slider is at the bottom, move it up
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: if (THIS.hsv[2] === 0) { THIS.fromHSV(null, null, 1.0); }; break;
|
||||||
|
case 1: if (THIS.hsv[1] === 0) { THIS.fromHSV(null, 1.0, null); }; break;
|
||||||
|
}
|
||||||
|
holdSld=false;
|
||||||
|
holdPad=true;
|
||||||
|
setPad(e);
|
||||||
|
dispatchImmediateChange();
|
||||||
|
};
|
||||||
|
if('ontouchstart' in window) {
|
||||||
|
p.padM.addEventListener('touchstart', function(e) {
|
||||||
|
touchOffset={
|
||||||
|
'X': e.target.offsetParent.offsetLeft,
|
||||||
|
'Y': e.target.offsetParent.offsetTop
|
||||||
|
};
|
||||||
|
this.onmousedown({
|
||||||
|
'offsetX':e.touches[0].pageX-touchOffset.X,
|
||||||
|
'offsetY':e.touches[0].pageY-touchOffset.Y
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
p.sldM.onmouseup =
|
||||||
|
p.sldM.onmouseout = function() { if(holdSld) { holdSld=false; jscolor.fireEvent(valueElement,'change'); } };
|
||||||
|
p.sldM.onmousedown = function(e) {
|
||||||
|
holdPad=false;
|
||||||
|
holdSld=true;
|
||||||
|
setSld(e);
|
||||||
|
dispatchImmediateChange();
|
||||||
|
};
|
||||||
|
if('ontouchstart' in window) {
|
||||||
|
p.sldM.addEventListener('touchstart', function(e) {
|
||||||
|
touchOffset={
|
||||||
|
'X': e.target.offsetParent.offsetLeft,
|
||||||
|
'Y': e.target.offsetParent.offsetTop
|
||||||
|
};
|
||||||
|
this.onmousedown({
|
||||||
|
'offsetX':e.touches[0].pageX-touchOffset.X,
|
||||||
|
'offsetY':e.touches[0].pageY-touchOffset.Y
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// picker
|
||||||
|
var dims = getPickerDims(THIS);
|
||||||
|
p.box.style.width = dims[0] + 'px';
|
||||||
|
p.box.style.height = dims[1] + 'px';
|
||||||
|
|
||||||
|
// picker border
|
||||||
|
p.boxB.style.position = 'absolute';
|
||||||
|
p.boxB.style.clear = 'both';
|
||||||
|
p.boxB.style.left = x+'px';
|
||||||
|
p.boxB.style.top = y+'px';
|
||||||
|
p.boxB.style.zIndex = THIS.pickerZIndex;
|
||||||
|
p.boxB.style.border = THIS.pickerBorder+'px solid';
|
||||||
|
p.boxB.style.borderColor = THIS.pickerBorderColor;
|
||||||
|
p.boxB.style.background = THIS.pickerFaceColor;
|
||||||
|
|
||||||
|
// pad image
|
||||||
|
p.pad.style.width = jscolor.images.pad[0]+'px';
|
||||||
|
p.pad.style.height = jscolor.images.pad[1]+'px';
|
||||||
|
|
||||||
|
// pad border
|
||||||
|
p.padB.style.position = 'absolute';
|
||||||
|
p.padB.style.left = THIS.pickerFace+'px';
|
||||||
|
p.padB.style.top = THIS.pickerFace+'px';
|
||||||
|
p.padB.style.border = THIS.pickerInset+'px solid';
|
||||||
|
p.padB.style.borderColor = THIS.pickerInsetColor;
|
||||||
|
|
||||||
|
// pad mouse area
|
||||||
|
p.padM.style.position = 'absolute';
|
||||||
|
p.padM.style.left = '0';
|
||||||
|
p.padM.style.top = '0';
|
||||||
|
p.padM.style.width = THIS.pickerFace + 2*THIS.pickerInset + jscolor.images.pad[0] + jscolor.images.arrow[0] + 'px';
|
||||||
|
p.padM.style.height = p.box.style.height;
|
||||||
|
p.padM.style.cursor = 'crosshair';
|
||||||
|
|
||||||
|
// slider image
|
||||||
|
p.sld.style.overflow = 'hidden';
|
||||||
|
p.sld.style.width = jscolor.images.sld[0]+'px';
|
||||||
|
p.sld.style.height = jscolor.images.sld[1]+'px';
|
||||||
|
|
||||||
|
// slider border
|
||||||
|
p.sldB.style.display = THIS.slider ? 'block' : 'none';
|
||||||
|
p.sldB.style.position = 'absolute';
|
||||||
|
p.sldB.style.right = THIS.pickerFace+'px';
|
||||||
|
p.sldB.style.top = THIS.pickerFace+'px';
|
||||||
|
p.sldB.style.border = THIS.pickerInset+'px solid';
|
||||||
|
p.sldB.style.borderColor = THIS.pickerInsetColor;
|
||||||
|
|
||||||
|
// slider mouse area
|
||||||
|
p.sldM.style.display = THIS.slider ? 'block' : 'none';
|
||||||
|
p.sldM.style.position = 'absolute';
|
||||||
|
p.sldM.style.right = '0';
|
||||||
|
p.sldM.style.top = '0';
|
||||||
|
p.sldM.style.width = jscolor.images.sld[0] + jscolor.images.arrow[0] + THIS.pickerFace + 2*THIS.pickerInset + 'px';
|
||||||
|
p.sldM.style.height = p.box.style.height;
|
||||||
|
try {
|
||||||
|
p.sldM.style.cursor = 'pointer';
|
||||||
|
} catch(eOldIE) {
|
||||||
|
p.sldM.style.cursor = 'hand';
|
||||||
|
}
|
||||||
|
|
||||||
|
// "close" button
|
||||||
|
function setBtnBorder() {
|
||||||
|
var insetColors = THIS.pickerInsetColor.split(/\s+/);
|
||||||
|
var pickerOutsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
|
||||||
|
p.btn.style.borderColor = pickerOutsetColor;
|
||||||
|
}
|
||||||
|
p.btn.style.display = THIS.pickerClosable ? 'block' : 'none';
|
||||||
|
p.btn.style.position = 'absolute';
|
||||||
|
p.btn.style.left = THIS.pickerFace + 'px';
|
||||||
|
p.btn.style.bottom = THIS.pickerFace + 'px';
|
||||||
|
p.btn.style.padding = '0 15px';
|
||||||
|
p.btn.style.height = '18px';
|
||||||
|
p.btn.style.border = THIS.pickerInset + 'px solid';
|
||||||
|
setBtnBorder();
|
||||||
|
p.btn.style.color = THIS.pickerButtonColor;
|
||||||
|
p.btn.style.font = '12px sans-serif';
|
||||||
|
p.btn.style.textAlign = 'center';
|
||||||
|
try {
|
||||||
|
p.btn.style.cursor = 'pointer';
|
||||||
|
} catch(eOldIE) {
|
||||||
|
p.btn.style.cursor = 'hand';
|
||||||
|
}
|
||||||
|
p.btn.onmousedown = function () {
|
||||||
|
THIS.hidePicker();
|
||||||
|
};
|
||||||
|
p.btnS.style.lineHeight = p.btn.style.height;
|
||||||
|
|
||||||
|
// load images in optimal order
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: var padImg = 'hs.png'; break;
|
||||||
|
case 1: var padImg = 'hv.png'; break;
|
||||||
|
}
|
||||||
|
p.padM.style.backgroundImage = "url('"+jscolor.getDir()+"cross.gif')";
|
||||||
|
p.padM.style.backgroundRepeat = "no-repeat";
|
||||||
|
p.sldM.style.backgroundImage = "url('"+jscolor.getDir()+"arrow.gif')";
|
||||||
|
p.sldM.style.backgroundRepeat = "no-repeat";
|
||||||
|
p.pad.style.backgroundImage = "url('"+jscolor.getDir()+padImg+"')";
|
||||||
|
p.pad.style.backgroundRepeat = "no-repeat";
|
||||||
|
p.pad.style.backgroundPosition = "0 0";
|
||||||
|
|
||||||
|
// place pointers
|
||||||
|
redrawPad();
|
||||||
|
redrawSld();
|
||||||
|
|
||||||
|
jscolor.picker.owner = THIS;
|
||||||
|
document.getElementsByTagName('body')[0].appendChild(p.boxB);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function getPickerDims(o) {
|
||||||
|
var dims = [
|
||||||
|
2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[0] +
|
||||||
|
(o.slider ? 2*o.pickerInset + 2*jscolor.images.arrow[0] + jscolor.images.sld[0] : 0),
|
||||||
|
o.pickerClosable ?
|
||||||
|
4*o.pickerInset + 3*o.pickerFace + jscolor.images.pad[1] + o.pickerButtonHeight :
|
||||||
|
2*o.pickerInset + 2*o.pickerFace + jscolor.images.pad[1]
|
||||||
|
];
|
||||||
|
return dims;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function redrawPad() {
|
||||||
|
// redraw the pad pointer
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: var yComponent = 1; break;
|
||||||
|
case 1: var yComponent = 2; break;
|
||||||
|
}
|
||||||
|
var x = Math.round((THIS.hsv[0]/6) * (jscolor.images.pad[0]-1));
|
||||||
|
var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.pad[1]-1));
|
||||||
|
jscolor.picker.padM.style.backgroundPosition =
|
||||||
|
(THIS.pickerFace+THIS.pickerInset+x - Math.floor(jscolor.images.cross[0]/2)) + 'px ' +
|
||||||
|
(THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.cross[1]/2)) + 'px';
|
||||||
|
|
||||||
|
// redraw the slider image
|
||||||
|
var seg = jscolor.picker.sld.childNodes;
|
||||||
|
|
||||||
|
switch(modeID) {
|
||||||
|
case 0:
|
||||||
|
var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 1);
|
||||||
|
for(var i=0; i<seg.length; i+=1) {
|
||||||
|
seg[i].style.backgroundColor = 'rgb('+
|
||||||
|
(rgb[0]*(1-i/seg.length)*100)+'%,'+
|
||||||
|
(rgb[1]*(1-i/seg.length)*100)+'%,'+
|
||||||
|
(rgb[2]*(1-i/seg.length)*100)+'%)';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
var rgb, s, c = [ THIS.hsv[2], 0, 0 ];
|
||||||
|
var i = Math.floor(THIS.hsv[0]);
|
||||||
|
var f = i%2 ? THIS.hsv[0]-i : 1-(THIS.hsv[0]-i);
|
||||||
|
switch(i) {
|
||||||
|
case 6:
|
||||||
|
case 0: rgb=[0,1,2]; break;
|
||||||
|
case 1: rgb=[1,0,2]; break;
|
||||||
|
case 2: rgb=[2,0,1]; break;
|
||||||
|
case 3: rgb=[2,1,0]; break;
|
||||||
|
case 4: rgb=[1,2,0]; break;
|
||||||
|
case 5: rgb=[0,2,1]; break;
|
||||||
|
}
|
||||||
|
for(var i=0; i<seg.length; i+=1) {
|
||||||
|
s = 1 - 1/(seg.length-1)*i;
|
||||||
|
c[1] = c[0] * (1 - s*f);
|
||||||
|
c[2] = c[0] * (1 - s);
|
||||||
|
seg[i].style.backgroundColor = 'rgb('+
|
||||||
|
(c[rgb[0]]*100)+'%,'+
|
||||||
|
(c[rgb[1]]*100)+'%,'+
|
||||||
|
(c[rgb[2]]*100)+'%)';
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function redrawSld() {
|
||||||
|
// redraw the slider pointer
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: var yComponent = 2; break;
|
||||||
|
case 1: var yComponent = 1; break;
|
||||||
|
}
|
||||||
|
var y = Math.round((1-THIS.hsv[yComponent]) * (jscolor.images.sld[1]-1));
|
||||||
|
jscolor.picker.sldM.style.backgroundPosition =
|
||||||
|
'0 ' + (THIS.pickerFace+THIS.pickerInset+y - Math.floor(jscolor.images.arrow[1]/2)) + 'px';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function isPickerOwner() {
|
||||||
|
return jscolor.picker && jscolor.picker.owner === THIS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function blurTarget() {
|
||||||
|
if(valueElement === target) {
|
||||||
|
THIS.importColor();
|
||||||
|
}
|
||||||
|
if(THIS.pickerOnfocus) {
|
||||||
|
THIS.hidePicker();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function blurValue() {
|
||||||
|
if(valueElement !== target) {
|
||||||
|
THIS.importColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function setPad(e) {
|
||||||
|
var mpos = jscolor.getRelMousePos(e);
|
||||||
|
var x = mpos.x - THIS.pickerFace - THIS.pickerInset;
|
||||||
|
var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), 1 - y/(jscolor.images.pad[1]-1), null, leaveSld); break;
|
||||||
|
case 1: THIS.fromHSV(x*(6/(jscolor.images.pad[0]-1)), null, 1 - y/(jscolor.images.pad[1]-1), leaveSld); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function setSld(e) {
|
||||||
|
var mpos = jscolor.getRelMousePos(e);
|
||||||
|
var y = mpos.y - THIS.pickerFace - THIS.pickerInset;
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: THIS.fromHSV(null, null, 1 - y/(jscolor.images.sld[1]-1), leavePad); break;
|
||||||
|
case 1: THIS.fromHSV(null, 1 - y/(jscolor.images.sld[1]-1), null, leavePad); break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function dispatchImmediateChange() {
|
||||||
|
if (THIS.onImmediateChange) {
|
||||||
|
var callback;
|
||||||
|
if (typeof THIS.onImmediateChange === 'string') {
|
||||||
|
callback = new Function (THIS.onImmediateChange);
|
||||||
|
} else {
|
||||||
|
callback = THIS.onImmediateChange;
|
||||||
|
}
|
||||||
|
callback.call(THIS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var THIS = this;
|
||||||
|
var modeID = this.pickerMode.toLowerCase()==='hvs' ? 1 : 0;
|
||||||
|
var abortBlur = false;
|
||||||
|
var
|
||||||
|
valueElement = jscolor.fetchElement(this.valueElement),
|
||||||
|
styleElement = jscolor.fetchElement(this.styleElement);
|
||||||
|
var
|
||||||
|
holdPad = false,
|
||||||
|
holdSld = false,
|
||||||
|
touchOffset = {};
|
||||||
|
var
|
||||||
|
leaveValue = 1<<0,
|
||||||
|
leaveStyle = 1<<1,
|
||||||
|
leavePad = 1<<2,
|
||||||
|
leaveSld = 1<<3;
|
||||||
|
|
||||||
|
// target
|
||||||
|
jscolor.addEvent(target, 'focus', function() {
|
||||||
|
if(THIS.pickerOnfocus) { THIS.showPicker(); }
|
||||||
|
});
|
||||||
|
jscolor.addEvent(target, 'blur', function() {
|
||||||
|
if(!abortBlur) {
|
||||||
|
window.setTimeout(function(){ abortBlur || blurTarget(); abortBlur=false; }, 0);
|
||||||
|
} else {
|
||||||
|
abortBlur = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// valueElement
|
||||||
|
if(valueElement) {
|
||||||
|
var updateField = function() {
|
||||||
|
THIS.fromString(valueElement.value, leaveValue);
|
||||||
|
dispatchImmediateChange();
|
||||||
|
};
|
||||||
|
jscolor.addEvent(valueElement, 'keyup', updateField);
|
||||||
|
jscolor.addEvent(valueElement, 'input', updateField);
|
||||||
|
jscolor.addEvent(valueElement, 'blur', blurValue);
|
||||||
|
valueElement.setAttribute('autocomplete', 'off');
|
||||||
|
}
|
||||||
|
|
||||||
|
// styleElement
|
||||||
|
if(styleElement) {
|
||||||
|
styleElement.jscStyle = {
|
||||||
|
backgroundImage : styleElement.style.backgroundImage,
|
||||||
|
backgroundColor : styleElement.style.backgroundColor,
|
||||||
|
color : styleElement.style.color
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// require images
|
||||||
|
switch(modeID) {
|
||||||
|
case 0: jscolor.requireImage('hs.png'); break;
|
||||||
|
case 1: jscolor.requireImage('hv.png'); break;
|
||||||
|
}
|
||||||
|
jscolor.requireImage('cross.gif');
|
||||||
|
jscolor.requireImage('arrow.gif');
|
||||||
|
|
||||||
|
this.importColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
jscolor.install();
|
||||||
97
src/Cache.js
97
src/Cache.js
@@ -3,11 +3,14 @@
|
|||||||
*********/
|
*********/
|
||||||
|
|
||||||
CM.Cache.RemakeIncome = function() {
|
CM.Cache.RemakeIncome = function() {
|
||||||
// Simulate Building Buys
|
// Simulate Building Buys for 1 amount
|
||||||
CM.Sim.BuyBuildings();
|
CM.Sim.BuyBuildings(1, 'Objects');
|
||||||
|
|
||||||
// Simulate Upgrade Buys
|
// Simulate Upgrade Buys
|
||||||
CM.Sim.BuyUpgrades();
|
CM.Sim.BuyUpgrades();
|
||||||
|
|
||||||
|
// Simulate Building Buys for 10 amount
|
||||||
|
CM.Sim.BuyBuildings(10, 'Objects10');
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Cache.RemakeBuildingsBCI = function() {
|
CM.Cache.RemakeBuildingsBCI = function() {
|
||||||
@@ -45,12 +48,31 @@ CM.Cache.RemakeUpgradeBCI = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Cache.RemakeBuildings10BCI = function() {
|
||||||
|
for (var i in CM.Cache.Objects10) {
|
||||||
|
CM.Cache.Objects10[i].price = CM.Sim.BuildingGetPrice(Game.Objects[i].basePrice, Game.Objects[i].amount, 10);
|
||||||
|
CM.Cache.Objects10[i].bci = CM.Cache.Objects10[i].price / CM.Cache.Objects10[i].bonus;
|
||||||
|
var color = '';
|
||||||
|
if (CM.Cache.Objects10[i].bci <= 0 || CM.Cache.Objects10[i].bci == 'Infinity') color = CM.Disp.colorGray;
|
||||||
|
else if (CM.Cache.Objects10[i].bci < CM.Disp.min) color = CM.Disp.colorBlue;
|
||||||
|
else if (CM.Cache.Objects10[i].bci == CM.Disp.min) color = CM.Disp.colorGreen;
|
||||||
|
else if (CM.Cache.Objects10[i].bci == CM.Disp.max) color = CM.Disp.colorRed;
|
||||||
|
else if (CM.Cache.Objects10[i].bci > CM.Disp.max) color = CM.Disp.colorPurple;
|
||||||
|
else if (CM.Cache.Objects10[i].bci > CM.Disp.mid) color = CM.Disp.colorOrange;
|
||||||
|
else color = CM.Disp.colorYellow;
|
||||||
|
CM.Cache.Objects10[i].color = color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CM.Cache.RemakeBCI = function() {
|
CM.Cache.RemakeBCI = function() {
|
||||||
// Buildings
|
// Buildings for 1 amount
|
||||||
CM.Cache.RemakeBuildingsBCI();
|
CM.Cache.RemakeBuildingsBCI();
|
||||||
|
|
||||||
// Upgrades
|
// Upgrades
|
||||||
CM.Cache.RemakeUpgradeBCI();
|
CM.Cache.RemakeUpgradeBCI();
|
||||||
|
|
||||||
|
// Buildings for 10 amount
|
||||||
|
CM.Cache.RemakeBuildings10BCI();
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Cache.RemakeLucky = function() {
|
CM.Cache.RemakeLucky = function() {
|
||||||
@@ -63,6 +85,69 @@ CM.Cache.RemakeLucky = function() {
|
|||||||
CM.Cache.LuckyRewardFrenzy = (CM.Cache.LuckyFrenzy * 0.1) + 13;
|
CM.Cache.LuckyRewardFrenzy = (CM.Cache.LuckyFrenzy * 0.1) + 13;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Cache.MaxChainMoni = function(digit, maxPayout) {
|
||||||
|
var chain = 1 + Math.max(0, Math.ceil(Math.log(Game.cookies) / Math.LN10) - 10);
|
||||||
|
var moni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain) * digit), maxPayout));
|
||||||
|
var nextMoni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain + 1) * digit), maxPayout));
|
||||||
|
while (nextMoni < maxPayout) {
|
||||||
|
chain++;
|
||||||
|
moni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain) * digit), maxPayout));
|
||||||
|
nextMoni = Math.max(digit, Math.min(Math.floor(1 / 9 * Math.pow(10, chain + 1) * digit), maxPayout));
|
||||||
|
}
|
||||||
|
return moni;
|
||||||
|
}
|
||||||
|
|
||||||
|
CM.Cache.RemakeChain = function() {
|
||||||
|
var maxPayout = Game.cookiesPs * 60 * 60 * 3;
|
||||||
|
if (Game.frenzy > 0) {
|
||||||
|
maxPayout /= Game.frenzyPower;
|
||||||
|
}
|
||||||
|
|
||||||
|
CM.Cache.ChainReward = CM.Cache.MaxChainMoni(7, maxPayout);
|
||||||
|
|
||||||
|
CM.Cache.ChainWrathReward = CM.Cache.MaxChainMoni(6, maxPayout);
|
||||||
|
|
||||||
|
var base = 0;
|
||||||
|
if (CM.Cache.ChainReward > CM.Cache.ChainWrathReward) {
|
||||||
|
base = CM.Cache.ChainReward;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
base = CM.Cache.ChainWrathReward;
|
||||||
|
}
|
||||||
|
var count = 1;
|
||||||
|
if (maxPayout < base) {
|
||||||
|
CM.Cache.Chain = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1;
|
||||||
|
while (base == base + count) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
CM.Cache.Chain = (base + count) / 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
CM.Cache.ChainFrenzyReward = CM.Cache.MaxChainMoni(7, maxPayout * 7);
|
||||||
|
|
||||||
|
CM.Cache.ChainFrenzyWrathReward = CM.Cache.MaxChainMoni(6, maxPayout * 7);
|
||||||
|
|
||||||
|
if (CM.Cache.ChainFrenzyReward > CM.Cache.ChainFrenzyWrathReward) {
|
||||||
|
base = CM.Cache.ChainFrenzyReward;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
base = CM.Cache.ChainFrenzyWrathReward;
|
||||||
|
}
|
||||||
|
if ((maxPayout * 7) < base) {
|
||||||
|
CM.Cache.ChainFrenzy = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
count = base > Math.pow(2, 53) ? Math.pow(2, Math.floor(Math.log(base) / Math.log(2)) - 53) : 1;
|
||||||
|
while(base == base + count) {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
CM.Cache.ChainFrenzy = (base + count) / 0.25;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CM.Cache.RemakeSeaSpec = function() {
|
CM.Cache.RemakeSeaSpec = function() {
|
||||||
if (Game.season == 'christmas') {
|
if (Game.season == 'christmas') {
|
||||||
CM.Cache.SeaSpec = Math.max(25, Game.cookiesPs * 60 * 1);
|
CM.Cache.SeaSpec = Math.max(25, Game.cookiesPs * 60 * 1);
|
||||||
@@ -75,4 +160,10 @@ CM.Cache.LuckyReward = 0;
|
|||||||
CM.Cache.LuckyFrenzy = 0;
|
CM.Cache.LuckyFrenzy = 0;
|
||||||
CM.Cache.LuckyRewardFrenzy = 0;
|
CM.Cache.LuckyRewardFrenzy = 0;
|
||||||
CM.Cache.SeaSpec = 0;
|
CM.Cache.SeaSpec = 0;
|
||||||
|
CM.Cache.Chain = 0;
|
||||||
|
CM.Cache.ChainReward = 0;
|
||||||
|
CM.Cache.ChainWrathReward = 0;
|
||||||
|
CM.Cache.ChainFrenzy = 0;
|
||||||
|
CM.Cache.ChainFrenzyReward = 0;
|
||||||
|
CM.Cache.ChainFrenzyWrathReward = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -13,15 +13,45 @@ CM.LoadConfig = function() {
|
|||||||
// Check values
|
// Check values
|
||||||
var mod = false;
|
var mod = false;
|
||||||
for (var i in CM.ConfigDefault) {
|
for (var i in CM.ConfigDefault) {
|
||||||
if (CM.Config[i] == undefined || !(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) {
|
if (CM.Config[i] == undefined) {
|
||||||
mod = true;
|
mod = true;
|
||||||
CM.Config[i] = CM.ConfigDefault[i];
|
CM.Config[i] = CM.ConfigDefault[i];
|
||||||
}
|
}
|
||||||
|
else if (i != 'StatsPref' && i != 'Colors') {
|
||||||
|
if (i.indexOf('SoundURL') == -1) {
|
||||||
|
if (!(CM.Config[i] > -1 && CM.Config[i] < CM.ConfigData[i].label.length)) {
|
||||||
|
mod = true;
|
||||||
|
CM.Config[i] = CM.ConfigDefault[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { // Sound URLs
|
||||||
|
if (typeof CM.Config[i] != 'string') {
|
||||||
|
mod = true;
|
||||||
|
CM.Config[i] = CM.ConfigDefault[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (i == 'StatsPref') {
|
||||||
|
for (var j in CM.ConfigDefault.StatsPref) {
|
||||||
|
if (CM.Config[i][j] == undefined || !(CM.Config[i][j] > -1 && CM.Config[i][j] < 2)) {
|
||||||
|
mod = true;
|
||||||
|
CM.Config[i][j] = CM.ConfigDefault[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { // Colors
|
||||||
|
for (var j in CM.ConfigDefault.StatsPref) {
|
||||||
|
if (CM.Config[i][j] == undefined || typeof CM.Config[i][j] != 'string') {
|
||||||
|
mod = true;
|
||||||
|
CM.Config[i][j] = CM.ConfigDefault[i][j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (mod) CM.SaveConfig(CM.Config);
|
if (mod) CM.SaveConfig(CM.Config);
|
||||||
CM.Loop(); // Do loop once
|
CM.Loop(); // Do loop once
|
||||||
for (var i in CM.ConfigDefault) {
|
for (var i in CM.ConfigDefault) {
|
||||||
if (CM.ConfigData[i].func != undefined) {
|
if (i != 'StatsPref' && CM.ConfigData[i].func != undefined) {
|
||||||
CM.ConfigData[i].func();
|
CM.ConfigData[i].func();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -62,21 +92,36 @@ CM.ToggleConfigDown = function(config) {
|
|||||||
CM.SaveConfig(CM.Config);
|
CM.SaveConfig(CM.Config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.ToggleStatsConfig = function(config) {
|
||||||
|
if (CM.Config.StatsPref[config] == 0) {
|
||||||
|
CM.Config.StatsPref[config]++;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CM.Config.StatsPref[config]--;
|
||||||
|
}
|
||||||
|
CM.SaveConfig(CM.Config);
|
||||||
|
}
|
||||||
|
|
||||||
CM.ConfigData.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', func: function() {CM.Disp.ToggleBotBar();}};
|
CM.ConfigData.BotBar = {label: ['Bottom Bar OFF', 'Bottom Bar ON'], desc: 'Building Information', func: function() {CM.Disp.ToggleBotBar();}};
|
||||||
CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', func: function() {CM.Disp.ToggleTimerBar();}};
|
CM.ConfigData.TimerBar = {label: ['Timer Bar OFF', 'Timer Bar ON'], desc: 'Timers of Golden Cookie, Season Popup, Frenzy (Normal, Clot, Elder), Click Frenzy', func: function() {CM.Disp.ToggleTimerBar();}};
|
||||||
|
CM.ConfigData.TimerBarPos = {label: ['Timer Bar Position (Top Left)', 'Timer Bar Position (Bottom)'], desc: 'Placement of the Timer Bar', func: function() {CM.Disp.ToggleTimerBarPos();}};
|
||||||
CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', func: function() {CM.Disp.UpdateBuildings();}};
|
CM.ConfigData.BuildColor = {label: ['Building Colors OFF', 'Building Colors ON'], desc: 'Color code buildings', func: function() {CM.Disp.UpdateBuildings();}};
|
||||||
CM.ConfigData.UpBarColor = {label: ['Upgrade Bar/Colors OFF', 'Upgrade Bar/Colors ON'], desc: 'Color code upgrades and add a counter', func: function() {CM.Disp.ToggleUpBarColor();}};
|
CM.ConfigData.UpBarColor = {label: ['Upgrade Bar/Colors OFF', 'Upgrade Bar/Colors ON'], desc: 'Color code upgrades and add a counter', func: function() {CM.Disp.ToggleUpBarColor();}};
|
||||||
|
CM.ConfigData.Colors = {desc: {Blue: 'Color for better than best BCI building', Green: 'Color for best BCI building', Yellow: 'Color for between best and worst BCI buildings closer to best', Orange: 'Color for between best and worst BCI buildings closer to worst', Red: 'Color for worst BCI building', Purple: 'Color for worse than worst BCI building', Gray: 'Color for negative or infinity BCI'}, func: function() {CM.Disp.UpdateColors();}};
|
||||||
CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'};
|
CM.ConfigData.Flash = {label: ['Flash OFF', 'Flash ON'], desc: 'Flash screen on Golden Cookie/Season Popup'};
|
||||||
CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup'};
|
CM.ConfigData.Sound = {label: ['Sounds OFF', 'Sounds ON'], desc: 'Play a sound on Golden Cookie/Season Popup'};
|
||||||
CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'};
|
CM.ConfigData.Volume = {label: [], desc: 'Volume of the sound'};
|
||||||
for (var i = 0; i < 101; i++) {
|
for (var i = 0; i < 101; i++) {
|
||||||
CM.ConfigData.Volume.label[i] = i + '%';
|
CM.ConfigData.Volume.label[i] = i + '%';
|
||||||
}
|
}
|
||||||
CM.ConfigData.GCTimer = {label: ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], desc: 'A timer on the Golden Cookie when has been spawned', func: function() {CM.Disp.ToggleGCTimer();}};
|
CM.ConfigData.GCSoundURL = {label: 'Golden Cookie Sound URL:', desc: 'URL of the sound to be played when a Golden Cookie spawns'};
|
||||||
|
CM.ConfigData.SeaSoundURL = {label: 'Season Special Sound URL:', desc: 'URL of the sound to be played when a Season Special spawns'};
|
||||||
|
CM.ConfigData.GCTimer = {label: ['Golden Cookie Timer OFF', 'Golden Cookie Timer ON'], desc: 'A timer on the Golden Cookie when it has been spawned', func: function() {CM.Disp.ToggleGCTimer();}};
|
||||||
CM.ConfigData.Title = {label: ['Title OFF', 'Title ON'], desc: 'Update title with Golden Cookie/Season Popup timers'};
|
CM.ConfigData.Title = {label: ['Title OFF', 'Title ON'], desc: 'Update title with Golden Cookie/Season Popup timers'};
|
||||||
CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'};
|
CM.ConfigData.Tooltip = {label: ['Tooltip Information OFF', 'Tooltip Information ON'], desc: 'Extra information in tooltip for buildings/upgrades'};
|
||||||
CM.ConfigData.ToolWarnCaut = {label: ['Tooltip Warning/Caution OFF', 'Tooltip Warning/Caution ON'], desc: 'A warning/caution when buying if it will put the bank under the amount needed for max "Lucky!"/"Lucky!" (Frenzy) rewards', func: function() {CM.Disp.ToggleToolWarnCaut();}};
|
CM.ConfigData.ToolWarnCaut = {label: ['Tooltip Warning/Caution OFF', 'Tooltip Warning/Caution ON'], desc: 'A warning/caution when buying if it will put the bank under the amount needed for max "Lucky!"/"Lucky!" (Frenzy) rewards', func: function() {CM.Disp.ToggleToolWarnCaut();}};
|
||||||
CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left)', 'Tooltip Warning/Caution Position (Bottom)'], desc: 'Placement of the warning/caution boxes', func: function() {CM.Disp.ToggleToolWarnCautPos();}};
|
CM.ConfigData.ToolWarnCautPos = {label: ['Tooltip Warning/Caution Position (Left)', 'Tooltip Warning/Caution Position (Bottom)'], desc: 'Placement of the warning/caution boxes', func: function() {CM.Disp.ToggleToolWarnCautPos();}};
|
||||||
|
CM.ConfigData.ToolWrink = {label: ['Wrinkler Tooltip OFF', 'Wrinkler Tooltip ON'], desc: 'Shows the amount of cookies a wrinkler will give when popping it'};
|
||||||
CM.ConfigData.Stats = {label: ['Statistics OFF', 'Statistics ON'], desc: 'Extra Cookie Monster statistics!'};
|
CM.ConfigData.Stats = {label: ['Statistics OFF', 'Statistics ON'], desc: 'Extra Cookie Monster statistics!'};
|
||||||
CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 3 seconds'};
|
CM.ConfigData.UpStats = {label: ['Statistics Update Rate (Default)', 'Statistics Update Rate (1s)'], desc: 'Default Game rate is once every 3 seconds'};
|
||||||
CM.ConfigData.SayTime = {label: ['Format Time OFF', 'Format Time ON'], desc: 'Change how time is displayed in statistics', func: function() {CM.Disp.ToggleSayTime();}};
|
CM.ConfigData.SayTime = {label: ['Format Time OFF', 'Format Time ON'], desc: 'Change how time is displayed in statistics', func: function() {CM.Disp.ToggleSayTime();}};
|
||||||
|
|||||||
606
src/Disp.js
606
src/Disp.js
@@ -96,6 +96,20 @@ CM.Disp.GetConfigDisplay = function(config) {
|
|||||||
return CM.ConfigData[config].label[CM.Config[config]];
|
return CM.ConfigData[config].label[CM.Config[config]];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Disp.AddJscolor = function() {
|
||||||
|
CM.Disp.Jscolor = document.createElement('script');
|
||||||
|
CM.Disp.Jscolor.type = 'text/javascript';
|
||||||
|
CM.Disp.Jscolor.setAttribute('src', 'http://aktanusa.github.io/CookieMonster/jscolor/jscolor.js');
|
||||||
|
document.head.appendChild(CM.Disp.Jscolor);
|
||||||
|
}
|
||||||
|
|
||||||
|
CM.Disp.CreateCssArea = function() {
|
||||||
|
CM.Disp.Css = document.createElement('style');
|
||||||
|
CM.Disp.Css.type = 'text/css';
|
||||||
|
|
||||||
|
document.head.appendChild(CM.Disp.Css);
|
||||||
|
}
|
||||||
|
|
||||||
CM.Disp.CreateBotBar = function() {
|
CM.Disp.CreateBotBar = function() {
|
||||||
CM.Disp.BotBar = document.createElement('div');
|
CM.Disp.BotBar = document.createElement('div');
|
||||||
CM.Disp.BotBar.id = 'CMBotBar';
|
CM.Disp.BotBar.id = 'CMBotBar';
|
||||||
@@ -122,7 +136,7 @@ CM.Disp.CreateBotBar = function() {
|
|||||||
var firstCol = function(text, color) {
|
var firstCol = function(text, color) {
|
||||||
var td = document.createElement('td');
|
var td = document.createElement('td');
|
||||||
td.style.textAlign = 'right';
|
td.style.textAlign = 'right';
|
||||||
td.style.color = color;
|
td.className = CM.Disp.colorTextPre + color;
|
||||||
td.textContent = text;
|
td.textContent = text;
|
||||||
return td;
|
return td;
|
||||||
}
|
}
|
||||||
@@ -145,7 +159,7 @@ CM.Disp.CreateBotBar = function() {
|
|||||||
var header = document.createElement('td');
|
var header = document.createElement('td');
|
||||||
header.appendChild(document.createTextNode((i.indexOf(' ') != -1 ? i.substring(0, i.indexOf(' ')) : i) + ' ('));
|
header.appendChild(document.createTextNode((i.indexOf(' ') != -1 ? i.substring(0, i.indexOf(' ')) : i) + ' ('));
|
||||||
var span = document.createElement('span');
|
var span = document.createElement('span');
|
||||||
span.style.color = CM.Disp.colorBlue;
|
span.className = CM.Disp.colorTextPre + CM.Disp.colorBlue;
|
||||||
header.appendChild(span);
|
header.appendChild(span);
|
||||||
header.appendChild(document.createTextNode(')'));
|
header.appendChild(document.createTextNode(')'));
|
||||||
type.appendChild(header);
|
type.appendChild(header);
|
||||||
@@ -179,7 +193,7 @@ CM.Disp.UpdateBotBarOther = function() {
|
|||||||
count++;
|
count++;
|
||||||
CM.Disp.BotBar.firstChild.firstChild.childNodes[0].childNodes[count].childNodes[1].textContent = Game.Objects[i].amount;
|
CM.Disp.BotBar.firstChild.firstChild.childNodes[0].childNodes[count].childNodes[1].textContent = Game.Objects[i].amount;
|
||||||
CM.Disp.BotBar.firstChild.firstChild.childNodes[1].childNodes[count].textContent = Beautify(CM.Cache.Objects[i].bonus, 2);
|
CM.Disp.BotBar.firstChild.firstChild.childNodes[1].childNodes[count].textContent = Beautify(CM.Cache.Objects[i].bonus, 2);
|
||||||
CM.Disp.BotBar.firstChild.firstChild.childNodes[2].childNodes[count].style.color = CM.Cache.Objects[i].color;
|
CM.Disp.BotBar.firstChild.firstChild.childNodes[2].childNodes[count].className = CM.Disp.colorTextPre + CM.Cache.Objects[i].color;
|
||||||
CM.Disp.BotBar.firstChild.firstChild.childNodes[2].childNodes[count].textContent = Beautify(CM.Cache.Objects[i].bci, 2);
|
CM.Disp.BotBar.firstChild.firstChild.childNodes[2].childNodes[count].textContent = Beautify(CM.Cache.Objects[i].bci, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -192,7 +206,7 @@ CM.Disp.UpdateBotBarTime = function() {
|
|||||||
for (var i in CM.Cache.Objects) {
|
for (var i in CM.Cache.Objects) {
|
||||||
count++;
|
count++;
|
||||||
var timeColor = CM.Disp.GetTimeColor(Game.Objects[i].getPrice());
|
var timeColor = CM.Disp.GetTimeColor(Game.Objects[i].getPrice());
|
||||||
CM.Disp.BotBar.firstChild.firstChild.childNodes[3].childNodes[count].style.color = timeColor.color;
|
CM.Disp.BotBar.firstChild.firstChild.childNodes[3].childNodes[count].className = CM.Disp.colorTextPre + timeColor.color;
|
||||||
CM.Disp.BotBar.firstChild.firstChild.childNodes[3].childNodes[count].textContent = timeColor.text;
|
CM.Disp.BotBar.firstChild.firstChild.childNodes[3].childNodes[count].textContent = timeColor.text;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -203,9 +217,7 @@ CM.Disp.CreateTimerBar = function() {
|
|||||||
CM.Disp.TimerBar.id = 'CMTimerBar';
|
CM.Disp.TimerBar.id = 'CMTimerBar';
|
||||||
CM.Disp.TimerBar.style.position = 'absolute';
|
CM.Disp.TimerBar.style.position = 'absolute';
|
||||||
CM.Disp.TimerBar.style.display = 'none';
|
CM.Disp.TimerBar.style.display = 'none';
|
||||||
CM.Disp.TimerBar.style.bottom = '0px';
|
|
||||||
CM.Disp.TimerBar.style.height = '48px';
|
CM.Disp.TimerBar.style.height = '48px';
|
||||||
CM.Disp.TimerBar.style.width = '100%';
|
|
||||||
CM.Disp.TimerBar.style.fontSize = '10px';
|
CM.Disp.TimerBar.style.fontSize = '10px';
|
||||||
CM.Disp.TimerBar.style.fontWeight = 'bold';
|
CM.Disp.TimerBar.style.fontWeight = 'bold';
|
||||||
CM.Disp.TimerBar.style.backgroundColor = 'black';
|
CM.Disp.TimerBar.style.backgroundColor = 'black';
|
||||||
@@ -235,8 +247,12 @@ CM.Disp.CreateTimerBar = function() {
|
|||||||
colorBar.id = bars[i].id
|
colorBar.id = bars[i].id
|
||||||
colorBar.style.display = 'inline-block';
|
colorBar.style.display = 'inline-block';
|
||||||
colorBar.style.height = '10px';
|
colorBar.style.height = '10px';
|
||||||
|
if (bars.length - 1 == i) {
|
||||||
|
colorBar.style.borderTopRightRadius = '10px';
|
||||||
|
colorBar.style.borderBottomRightRadius = '10px';
|
||||||
|
}
|
||||||
if (bars[i].color != undefined) {
|
if (bars[i].color != undefined) {
|
||||||
colorBar.style.backgroundColor = bars[i].color;
|
colorBar.className = CM.Disp.colorBackPre + bars[i].color;
|
||||||
}
|
}
|
||||||
div.appendChild(colorBar);
|
div.appendChild(colorBar);
|
||||||
}
|
}
|
||||||
@@ -295,6 +311,20 @@ CM.Disp.ToggleTimerBar = function() {
|
|||||||
CM.Disp.UpdateBotTimerBarDisplay();
|
CM.Disp.UpdateBotTimerBarDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Disp.ToggleTimerBarPos = function() {
|
||||||
|
if (CM.Config.TimerBarPos == 0) {
|
||||||
|
CM.Disp.TimerBar.style.width = '30%';
|
||||||
|
CM.Disp.TimerBar.style.bottom = '';
|
||||||
|
l('game').insertBefore(CM.Disp.TimerBar, l('sectionLeft'));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CM.Disp.TimerBar.style.width = '100%';
|
||||||
|
CM.Disp.TimerBar.style.bottom = '0px';
|
||||||
|
l('wrapper').appendChild(CM.Disp.TimerBar);
|
||||||
|
}
|
||||||
|
CM.Disp.UpdateBotTimerBarDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
CM.Disp.UpdateTimerBar = function() {
|
CM.Disp.UpdateTimerBar = function() {
|
||||||
if (CM.Config.TimerBar == 1) {
|
if (CM.Config.TimerBar == 1) {
|
||||||
// label width: 76 timer width: 26 div margin: 20
|
// label width: 76 timer width: 26 div margin: 20
|
||||||
@@ -304,6 +334,14 @@ CM.Disp.UpdateTimerBar = function() {
|
|||||||
if (Game.goldenCookie.life <= 0 && Game.goldenCookie.toDie == 0) {
|
if (Game.goldenCookie.life <= 0 && Game.goldenCookie.toDie == 0) {
|
||||||
CM.Disp.TimerBarGC.style.display = '';
|
CM.Disp.TimerBarGC.style.display = '';
|
||||||
l('CMTimerBarGCMinBar').style.width = Math.round(Math.max(0, Game.goldenCookie.minTime - Game.goldenCookie.time) * maxWidth / Game.goldenCookie.maxTime) + 'px';
|
l('CMTimerBarGCMinBar').style.width = Math.round(Math.max(0, Game.goldenCookie.minTime - Game.goldenCookie.time) * maxWidth / Game.goldenCookie.maxTime) + 'px';
|
||||||
|
if (Game.goldenCookie.minTime == Game.goldenCookie.maxTime) {
|
||||||
|
l('CMTimerBarGCMinBar').style.borderTopRightRadius = '10px';
|
||||||
|
l('CMTimerBarGCMinBar').style.borderBottomRightRadius = '10px';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
l('CMTimerBarGCMinBar').style.borderTopRightRadius = '';
|
||||||
|
l('CMTimerBarGCMinBar').style.borderBottomRightRadius = '';
|
||||||
|
}
|
||||||
l('CMTimerBarGCBar').style.width = Math.round(Math.min(Game.goldenCookie.maxTime - Game.goldenCookie.minTime, Game.goldenCookie.maxTime - Game.goldenCookie.time) * maxWidth / Game.goldenCookie.maxTime) + 'px';
|
l('CMTimerBarGCBar').style.width = Math.round(Math.min(Game.goldenCookie.maxTime - Game.goldenCookie.minTime, Game.goldenCookie.maxTime - Game.goldenCookie.time) * maxWidth / Game.goldenCookie.maxTime) + 'px';
|
||||||
l('CMTimerBarGCTime').textContent = Math.ceil((Game.goldenCookie.maxTime - Game.goldenCookie.time) / Game.fps);
|
l('CMTimerBarGCTime').textContent = Math.ceil((Game.goldenCookie.maxTime - Game.goldenCookie.time) / Game.fps);
|
||||||
count++;
|
count++;
|
||||||
@@ -327,15 +365,15 @@ CM.Disp.UpdateTimerBar = function() {
|
|||||||
CM.Disp.TimerBarFren.style.display = '';
|
CM.Disp.TimerBarFren.style.display = '';
|
||||||
if (Game.frenzyPower == 7) {
|
if (Game.frenzyPower == 7) {
|
||||||
l('CMTimerBarFrenType').textContent = 'Frenzy';
|
l('CMTimerBarFrenType').textContent = 'Frenzy';
|
||||||
l('CMTimerBarFrenBar').style.backgroundColor = CM.Disp.colorYellow;
|
l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorYellow;
|
||||||
}
|
}
|
||||||
else if (Game.frenzyPower == 0.5) {
|
else if (Game.frenzyPower == 0.5) {
|
||||||
l('CMTimerBarFrenType').textContent = 'Clot';
|
l('CMTimerBarFrenType').textContent = 'Clot';
|
||||||
l('CMTimerBarFrenBar').style.backgroundColor = CM.Disp.colorRed;
|
l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorRed;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
l('CMTimerBarFrenType').textContent = 'Blood Frenzy';
|
l('CMTimerBarFrenType').textContent = 'Blood Frenzy';
|
||||||
l('CMTimerBarFrenBar').style.backgroundColor = CM.Disp.colorGreen;
|
l('CMTimerBarFrenBar').className = CM.Disp.colorBackPre + CM.Disp.colorGreen;
|
||||||
}
|
}
|
||||||
l('CMTimerBarFrenBar').style.width = Math.round(Game.frenzy * maxWidth / Game.frenzyMax) + 'px';
|
l('CMTimerBarFrenBar').style.width = Math.round(Game.frenzy * maxWidth / Game.frenzyMax) + 'px';
|
||||||
l('CMTimerBarFrenTime').textContent = Math.ceil(Game.frenzy / Game.fps);
|
l('CMTimerBarFrenTime').textContent = Math.ceil(Game.frenzy / Game.fps);
|
||||||
@@ -366,7 +404,7 @@ CM.Disp.UpdateTimerBar = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CM.Disp.UpdateBotTimerBarDisplay = function() {
|
CM.Disp.UpdateBotTimerBarDisplay = function() {
|
||||||
if (CM.Config.BotBar == 1 && CM.Config.TimerBar == 1) {
|
if (CM.Config.BotBar == 1 && CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 1) {
|
||||||
CM.Disp.BotBar.style.bottom = '48px';
|
CM.Disp.BotBar.style.bottom = '48px';
|
||||||
l('game').style.bottom = '104px';
|
l('game').style.bottom = '104px';
|
||||||
}
|
}
|
||||||
@@ -374,20 +412,27 @@ CM.Disp.UpdateBotTimerBarDisplay = function() {
|
|||||||
CM.Disp.BotBar.style.bottom = '0px';
|
CM.Disp.BotBar.style.bottom = '0px';
|
||||||
l('game').style.bottom = '56px';
|
l('game').style.bottom = '56px';
|
||||||
}
|
}
|
||||||
else if (CM.Config.TimerBar == 1) {
|
else if (CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 1) {
|
||||||
l('game').style.bottom = '48px';
|
l('game').style.bottom = '48px';
|
||||||
}
|
}
|
||||||
else { // No bars
|
else { // No bars
|
||||||
l('game').style.bottom = '0px';
|
l('game').style.bottom = '0px';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (CM.Config.TimerBar == 1 && CM.Config.TimerBarPos == 0) {
|
||||||
|
l('sectionLeft').style.top = '48px';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
l('sectionLeft').style.top = '';
|
||||||
|
}
|
||||||
|
|
||||||
CM.Disp.UpdateBackground();
|
CM.Disp.UpdateBackground();
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Disp.UpdateBuildings = function() {
|
CM.Disp.UpdateBuildings = function() {
|
||||||
if (CM.Config.BuildColor == 1) {
|
if (CM.Config.BuildColor == 1) {
|
||||||
for (var i in CM.Cache.Objects) {
|
for (var i in CM.Cache.Objects) {
|
||||||
l('productPrice' + Game.Objects[i].id).style.color = CM.Cache.Objects[i].color;
|
l('productPrice' + Game.Objects[i].id).style.color = CM.Config.Colors[CM.Cache.Objects[i].color];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -421,7 +466,7 @@ CM.Disp.CreateUpgradeBar = function() {
|
|||||||
var div = document.createElement('div');
|
var div = document.createElement('div');
|
||||||
div.style.verticalAlign = 'middle';
|
div.style.verticalAlign = 'middle';
|
||||||
var span = document.createElement('span');
|
var span = document.createElement('span');
|
||||||
span.style.backgroundColor = color;
|
span.className = CM.Disp.colorBackPre + color;
|
||||||
span.style.display = 'inline-block';
|
span.style.display = 'inline-block';
|
||||||
span.style.height = '10px';
|
span.style.height = '10px';
|
||||||
span.style.width = '10px';
|
span.style.width = '10px';
|
||||||
@@ -445,7 +490,7 @@ CM.Disp.CreateUpgradeBar = function() {
|
|||||||
var upgradeNumber = function(id, color) {
|
var upgradeNumber = function(id, color) {
|
||||||
var span = document.createElement('span');
|
var span = document.createElement('span');
|
||||||
span.id = id;
|
span.id = id;
|
||||||
span.style.color = color;
|
span.className = CM.Disp.colorTextPre + color;
|
||||||
span.style.width = '14.28571428571429%';
|
span.style.width = '14.28571428571429%';
|
||||||
span.style.display = 'inline-block';
|
span.style.display = 'inline-block';
|
||||||
span.textContent = '0';
|
span.textContent = '0';
|
||||||
@@ -474,6 +519,7 @@ CM.Disp.ToggleUpBarColor = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CM.Disp.UpdateUpgrades = function() {
|
CM.Disp.UpdateUpgrades = function() {
|
||||||
|
if (CM.Config.UpBarColor == 1) {
|
||||||
var blue = 0;
|
var blue = 0;
|
||||||
var green = 0;
|
var green = 0;
|
||||||
var yellow = 0;
|
var yellow = 0;
|
||||||
@@ -485,13 +531,13 @@ CM.Disp.UpdateUpgrades = function() {
|
|||||||
for (var i in Game.UpgradesInStore) {
|
for (var i in Game.UpgradesInStore) {
|
||||||
var me = Game.UpgradesInStore[i];
|
var me = Game.UpgradesInStore[i];
|
||||||
if (l('upgrade' + i).childNodes.length > 0) {
|
if (l('upgrade' + i).childNodes.length > 0) {
|
||||||
l('upgrade' + i).childNodes[0].style.backgroundColor = CM.Cache.Upgrades[me.name].color;
|
l('upgrade' + i).childNodes[0].className = CM.Disp.colorBackPre + CM.Cache.Upgrades[me.name].color;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var div = document.createElement('div');
|
var div = document.createElement('div');
|
||||||
div.style.width = '17px';
|
div.style.width = '17px';
|
||||||
div.style.height = '17px';
|
div.style.height = '17px';
|
||||||
div.style.backgroundColor = CM.Cache.Upgrades[me.name].color;
|
div.className = CM.Disp.colorBackPre + CM.Cache.Upgrades[me.name].color;
|
||||||
l('upgrade' + i).appendChild(div);
|
l('upgrade' + i).appendChild(div);
|
||||||
}
|
}
|
||||||
if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorBlue) blue++;
|
if (CM.Cache.Upgrades[me.name].color == CM.Disp.colorBlue) blue++;
|
||||||
@@ -512,6 +558,22 @@ CM.Disp.UpdateUpgrades = function() {
|
|||||||
l('CMUpgradeBarPurple').textContent = purple;
|
l('CMUpgradeBarPurple').textContent = purple;
|
||||||
l('CMUpgradeBarGray').textContent = gray;
|
l('CMUpgradeBarGray').textContent = gray;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CM.Disp.UpdateColors = function() {
|
||||||
|
var str = '';
|
||||||
|
for (var i = 0; i < CM.Disp.colors.length; i++) {
|
||||||
|
str += '.' + CM.Disp.colorTextPre + CM.Disp.colors[i] + ' { color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }';
|
||||||
|
}
|
||||||
|
for (var i = 0; i < CM.Disp.colors.length; i++) {
|
||||||
|
str += '.' + CM.Disp.colorBackPre + CM.Disp.colors[i] + ' { background-color: ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }';
|
||||||
|
}
|
||||||
|
for (var i = 0; i < CM.Disp.colors.length; i++) {
|
||||||
|
str += '.' + CM.Disp.colorBorderPre + CM.Disp.colors[i] + ' { border: 1px solid ' + CM.Config.Colors[CM.Disp.colors[i]] + '; }';
|
||||||
|
}
|
||||||
|
CM.Disp.Css.textContent = str;
|
||||||
|
CM.Disp.UpdateBuildings(); // Class has been already set
|
||||||
|
}
|
||||||
|
|
||||||
CM.Disp.CreateWhiteScreen = function() {
|
CM.Disp.CreateWhiteScreen = function() {
|
||||||
CM.Disp.WhiteScreen = document.createElement('div');
|
CM.Disp.WhiteScreen = document.createElement('div');
|
||||||
@@ -595,7 +657,7 @@ CM.Disp.CheckGoldenCookie = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CM.Disp.Flash(3);
|
CM.Disp.Flash(3);
|
||||||
CM.Disp.PlaySound('http://cookie-monster.autopergamene.eu/mp3/bell.mp3');
|
CM.Disp.PlaySound(CM.Config.GCSoundURL);
|
||||||
}
|
}
|
||||||
else if (CM.Config.GCTimer == 1) CM.Disp.GCTimer.style.display = 'none';
|
else if (CM.Config.GCTimer == 1) CM.Disp.GCTimer.style.display = 'none';
|
||||||
}
|
}
|
||||||
@@ -609,7 +671,7 @@ CM.Disp.CheckGoldenCookie = function() {
|
|||||||
CM.Disp.EmphSeasonPopup = function() {
|
CM.Disp.EmphSeasonPopup = function() {
|
||||||
if (Game.season=='christmas') {
|
if (Game.season=='christmas') {
|
||||||
CM.Disp.Flash(3);
|
CM.Disp.Flash(3);
|
||||||
CM.Disp.PlaySound('http://www.freesound.org/data/previews/121/121099_2193266-lq.mp3');
|
CM.Disp.PlaySound(CM.Config.SeaSoundURL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -645,14 +707,19 @@ CM.Disp.UpdateTitle = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Disp.AddMenu = function() {
|
CM.Disp.CreateResetTooltip = function() {
|
||||||
var title = function() {
|
CM.Disp.ResetTooltipPlaceholder = document.createElement('div');
|
||||||
|
var resetTitleDesc = document.createElement('div');
|
||||||
|
resetTitleDesc.style.minWidth = '260px';
|
||||||
|
resetTitleDesc.style.marginBottom = '4px';
|
||||||
var div = document.createElement('div');
|
var div = document.createElement('div');
|
||||||
div.className = 'title';
|
div.style.textAlign = 'left';
|
||||||
div.style.color = CM.Disp.colorBlue;
|
div.textContent = 'The bonus income you would get from new heavenly chips/reset achievements if you have the same buildings/upgrades after reset';
|
||||||
div.textContent = 'Cookie Monster Goodies';
|
resetTitleDesc.appendChild(div);
|
||||||
return div;
|
CM.Disp.ResetTooltipPlaceholder.appendChild(resetTitleDesc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Disp.AddMenuPref = function(title) {
|
||||||
var header = function(text) {
|
var header = function(text) {
|
||||||
var div = document.createElement('div');
|
var div = document.createElement('div');
|
||||||
div.className = 'listing';
|
div.className = 'listing';
|
||||||
@@ -664,7 +731,6 @@ CM.Disp.AddMenu = function() {
|
|||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Game.onMenu == 'prefs') {
|
|
||||||
var frag = document.createDocumentFragment();
|
var frag = document.createDocumentFragment();
|
||||||
|
|
||||||
frag.appendChild(title());
|
frag.appendChild(title());
|
||||||
@@ -684,15 +750,58 @@ CM.Disp.AddMenu = function() {
|
|||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var url = function(config) {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.className = 'listing';
|
||||||
|
var span = document.createElement('span');
|
||||||
|
span.className = 'option';
|
||||||
|
span.textContent = CM.ConfigData[config].label + ' ';
|
||||||
|
div.appendChild(span);
|
||||||
|
var input = document.createElement('input');
|
||||||
|
input.id = CM.ConfigPrefix + config;
|
||||||
|
input.className = 'option';
|
||||||
|
input.type = 'text';
|
||||||
|
input.value = CM.Config[config];
|
||||||
|
input.style.width = '300px';
|
||||||
|
div.appendChild(input);
|
||||||
|
div.appendChild(document.createTextNode(' '));
|
||||||
|
var a = document.createElement('a');
|
||||||
|
a.className = 'option';
|
||||||
|
a.onclick = function() {CM.Config[config] = l(CM.ConfigPrefix + config).value;CM.SaveConfig(CM.Config);};
|
||||||
|
a.textContent = 'Save';
|
||||||
|
div.appendChild(a);
|
||||||
|
var label = document.createElement('label');
|
||||||
|
label.textContent = CM.ConfigData[config].desc;
|
||||||
|
div.appendChild(label);
|
||||||
|
return div;
|
||||||
|
}
|
||||||
|
|
||||||
frag.appendChild(header('Bars/Colors'));
|
frag.appendChild(header('Bars/Colors'));
|
||||||
frag.appendChild(listing('BotBar'));
|
frag.appendChild(listing('BotBar'));
|
||||||
frag.appendChild(listing('TimerBar'));
|
frag.appendChild(listing('TimerBar'));
|
||||||
|
frag.appendChild(listing('TimerBarPos'));
|
||||||
frag.appendChild(listing('BuildColor'));
|
frag.appendChild(listing('BuildColor'));
|
||||||
frag.appendChild(listing('UpBarColor'));
|
frag.appendChild(listing('UpBarColor'));
|
||||||
|
for (var i = 0; i < CM.Disp.colors.length; i++) {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.className = 'listing';
|
||||||
|
var input = document.createElement('input');
|
||||||
|
input.id = CM.ConfigPrefix + 'Color' + CM.Disp.colors[i];
|
||||||
|
input.className = 'option';
|
||||||
|
input.style.width = '65px';
|
||||||
|
input.value = CM.Config.Colors[CM.Disp.colors[i]];
|
||||||
|
div.appendChild(input);
|
||||||
|
eval('var change = function() {CM.Config.Colors[\'' + CM.Disp.colors[i] + '\'] = l(CM.ConfigPrefix + \'Color\' + \'' + CM.Disp.colors[i] + '\').value; CM.Disp.UpdateColors(); CM.SaveConfig(CM.Config);}');
|
||||||
|
var jscolorpicker = new jscolor.color(input, {hash: true, caps: false, pickerZIndex: 1000000, pickerPosition: 'right', onImmediateChange: change});
|
||||||
|
var label = document.createElement('label');
|
||||||
|
label.textContent = CM.ConfigData.Colors.desc[CM.Disp.colors[i]];
|
||||||
|
div.appendChild(label);
|
||||||
|
frag.appendChild(div);
|
||||||
|
}
|
||||||
|
|
||||||
frag.appendChild(header('Golden Cookie/Season Popup Emphasis'));
|
frag.appendChild(header('Golden Cookie/Season Popup Emphasis'));
|
||||||
frag.appendChild(listing('Flash'));
|
frag.appendChild(listing('Flash'));
|
||||||
frag.appendChild(listing('Sound'));
|
frag.appendChild(listing('Sound'));
|
||||||
|
|
||||||
var volConfig = 'Volume';
|
var volConfig = 'Volume';
|
||||||
var volume = document.createElement('div');
|
var volume = document.createElement('div');
|
||||||
volume.className = 'listing';
|
volume.className = 'listing';
|
||||||
@@ -714,20 +823,24 @@ CM.Disp.AddMenu = function() {
|
|||||||
volLabel.textContent = CM.ConfigData[volConfig].desc;
|
volLabel.textContent = CM.ConfigData[volConfig].desc;
|
||||||
volume.appendChild(volLabel);
|
volume.appendChild(volLabel);
|
||||||
frag.appendChild(volume);
|
frag.appendChild(volume);
|
||||||
|
frag.appendChild(url('GCSoundURL'));
|
||||||
|
frag.appendChild(url('SeaSoundURL'));
|
||||||
frag.appendChild(listing('GCTimer'));
|
frag.appendChild(listing('GCTimer'));
|
||||||
frag.appendChild(listing('Title'));
|
frag.appendChild(listing('Title'));
|
||||||
|
|
||||||
frag.appendChild(header('Tooltip'));
|
frag.appendChild(header('Tooltip'));
|
||||||
frag.appendChild(listing('Tooltip'));
|
frag.appendChild(listing('Tooltip'));
|
||||||
frag.appendChild(listing('ToolWarnCaut'));
|
frag.appendChild(listing('ToolWarnCaut'));
|
||||||
frag.appendChild(listing('ToolWarnCautPos'));
|
frag.appendChild(listing('ToolWarnCautPos'));
|
||||||
|
frag.appendChild(listing('ToolWrink'));
|
||||||
|
|
||||||
frag.appendChild(header('Statistics'));
|
frag.appendChild(header('Statistics'));
|
||||||
frag.appendChild(listing('Stats'));
|
frag.appendChild(listing('Stats'));
|
||||||
frag.appendChild(listing('UpStats'));
|
frag.appendChild(listing('UpStats'));
|
||||||
frag.appendChild(listing('SayTime'));
|
frag.appendChild(listing('SayTime'));
|
||||||
|
|
||||||
frag.appendChild(header('Other'));
|
frag.appendChild(header('Other'));
|
||||||
frag.appendChild(listing('Scale'));
|
frag.appendChild(listing('Scale'));
|
||||||
|
|
||||||
var resDef = document.createElement('div');
|
var resDef = document.createElement('div');
|
||||||
resDef.className = 'listing';
|
resDef.className = 'listing';
|
||||||
var resDefBut = document.createElement('a');
|
var resDefBut = document.createElement('a');
|
||||||
@@ -742,56 +855,62 @@ CM.Disp.AddMenu = function() {
|
|||||||
CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick;
|
CM.Disp.FormatButtonOnClickBak = l('formatButton').onclick;
|
||||||
l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();};
|
l('formatButton').onclick = function() {Game.Toggle('format', 'formatButton', 'Short numbers OFF', 'Short numbers ON'); CM.Disp.RefreshScale();};
|
||||||
}
|
}
|
||||||
else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') {
|
|
||||||
|
CM.Disp.AddMenuStats = function(title) {
|
||||||
|
var header = function(text, config) {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.className = 'listing';
|
||||||
|
div.style.padding = '5px 16px';
|
||||||
|
div.style.opacity = '0.7';
|
||||||
|
div.style.fontSize = '17px';
|
||||||
|
div.style.fontFamily = '\"Kavoon\", Georgia, serif';
|
||||||
|
div.appendChild(document.createTextNode(text + ' '));
|
||||||
|
var span = document.createElement('span');
|
||||||
|
span.style.cursor = 'pointer';
|
||||||
|
span.style.display = 'inline-block';
|
||||||
|
span.style.height = '14px';
|
||||||
|
span.style.width = '14px';
|
||||||
|
span.style.borderRadius = '7px';
|
||||||
|
span.style.textAlign = 'center';
|
||||||
|
span.style.backgroundColor = '#C0C0C0';
|
||||||
|
span.style.color = 'black';
|
||||||
|
span.style.fontSize = '13px';
|
||||||
|
span.style.verticalAlign = 'middle';
|
||||||
|
span.textContent = CM.Config.StatsPref[config] ? '-' : '+';
|
||||||
|
span.onclick = function() {CM.ToggleStatsConfig(config); Game.UpdateMenu();};
|
||||||
|
div.appendChild(span);
|
||||||
|
return div;
|
||||||
|
}
|
||||||
|
|
||||||
var stats = document.createElement('div');
|
var stats = document.createElement('div');
|
||||||
stats.className = 'subsection';
|
stats.className = 'subsection';
|
||||||
|
|
||||||
|
stats.appendChild(title());
|
||||||
|
|
||||||
|
var listing = function(name, text) {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.className = 'listing';
|
||||||
|
var b = document.createElement('b');
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
stats.appendChild(header('Lucky Cookies', 'Lucky'));
|
||||||
|
if (CM.Config.StatsPref.Lucky) {
|
||||||
var luckyColor = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.colorRed : CM.Disp.colorGreen;
|
var luckyColor = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.colorRed : CM.Disp.colorGreen;
|
||||||
var luckyTime = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.FormatTime((CM.Cache.Lucky - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
|
var luckyTime = (Game.cookies < CM.Cache.Lucky) ? CM.Disp.FormatTime((CM.Cache.Lucky - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
|
||||||
var luckyColorFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen;
|
var luckyColorFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen;
|
||||||
var luckyTimeFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.FormatTime((CM.Cache.LuckyFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
|
var luckyTimeFrenzy = (Game.cookies < CM.Cache.LuckyFrenzy) ? CM.Disp.FormatTime((CM.Cache.LuckyFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
|
||||||
var luckyCur = Math.min(Game.cookies * 0.1, Game.cookiesPs * 60 * 20) + 13;
|
var luckyCur = Math.min(Game.cookies * 0.1, Game.cookiesPs * 60 * 20) + 13;
|
||||||
|
|
||||||
var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset);
|
|
||||||
var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset);
|
|
||||||
|
|
||||||
var halloCook = 0;
|
|
||||||
for (var i in CM.Data.HalloCookies) {
|
|
||||||
if (Game.Has(CM.Data.HalloCookies[i])) halloCook++;
|
|
||||||
}
|
|
||||||
var christCook = 0;
|
|
||||||
for (var i in CM.Data.ChristCookies) {
|
|
||||||
if (Game.Has(CM.Data.ChristCookies[i])) christCook++;
|
|
||||||
}
|
|
||||||
var valCook = 0;
|
|
||||||
for (var i in CM.Data.ValCookies) {
|
|
||||||
if (Game.Has(CM.Data.ValCookies[i])) valCook++;
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
var normEggs = 0;
|
|
||||||
for (var i in Game.eggDrops) {
|
|
||||||
if (Game.HasUnlocked(Game.eggDrops[i])) normEggs++;
|
|
||||||
}
|
|
||||||
var rareEggs = 0;
|
|
||||||
for (var i in Game.rareEggDrops) {
|
|
||||||
if (Game.HasUnlocked(Game.rareEggDrops[i])) rareEggs++;
|
|
||||||
}
|
|
||||||
|
|
||||||
var listing = function(name, text) {
|
|
||||||
var div = document.createElement('div');
|
|
||||||
div.className = 'listing';
|
|
||||||
var b = document.createElement('b');
|
|
||||||
b.textContent = name;
|
|
||||||
div.appendChild(b);
|
|
||||||
div.appendChild(text);
|
|
||||||
return div;
|
|
||||||
}
|
|
||||||
stats.appendChild(title());
|
|
||||||
stats.appendChild(header('Lucky Cookies'));
|
|
||||||
var luckyReqFrag = document.createDocumentFragment();
|
var luckyReqFrag = document.createDocumentFragment();
|
||||||
var luckyReqSpan = document.createElement('span');
|
var luckyReqSpan = document.createElement('span');
|
||||||
luckyReqSpan.style.fontWeight = 'bold';
|
luckyReqSpan.style.fontWeight = 'bold';
|
||||||
luckyReqSpan.style.color = luckyColor;
|
luckyReqSpan.className = CM.Disp.colorTextPre + luckyColor;
|
||||||
luckyReqSpan.textContent = Beautify(CM.Cache.Lucky);
|
luckyReqSpan.textContent = Beautify(CM.Cache.Lucky);
|
||||||
luckyReqFrag.appendChild(luckyReqSpan);
|
luckyReqFrag.appendChild(luckyReqSpan);
|
||||||
if (luckyTime != '') {
|
if (luckyTime != '') {
|
||||||
@@ -799,11 +918,11 @@ CM.Disp.AddMenu = function() {
|
|||||||
luckyReqSmall.textContent = ' (' + luckyTime + ')';
|
luckyReqSmall.textContent = ' (' + luckyTime + ')';
|
||||||
luckyReqFrag.appendChild(luckyReqSmall);
|
luckyReqFrag.appendChild(luckyReqSmall);
|
||||||
}
|
}
|
||||||
stats.appendChild(listing('\"Lucky!\" Cookies Required : ', luckyReqFrag));
|
stats.appendChild(listing('\"Lucky!\" Cookies Required', luckyReqFrag));
|
||||||
var luckyReqFrenFrag = document.createDocumentFragment();
|
var luckyReqFrenFrag = document.createDocumentFragment();
|
||||||
var luckyReqFrenSpan = document.createElement('span');
|
var luckyReqFrenSpan = document.createElement('span');
|
||||||
luckyReqFrenSpan.style.fontWeight = 'bold';
|
luckyReqFrenSpan.style.fontWeight = 'bold';
|
||||||
luckyReqFrenSpan.style.color = luckyColorFrenzy;
|
luckyReqFrenSpan.className = CM.Disp.colorTextPre + luckyColorFrenzy;
|
||||||
luckyReqFrenSpan.textContent = Beautify(CM.Cache.LuckyFrenzy);
|
luckyReqFrenSpan.textContent = Beautify(CM.Cache.LuckyFrenzy);
|
||||||
luckyReqFrenFrag.appendChild(luckyReqFrenSpan);
|
luckyReqFrenFrag.appendChild(luckyReqFrenSpan);
|
||||||
if (luckyTimeFrenzy != '') {
|
if (luckyTimeFrenzy != '') {
|
||||||
@@ -811,54 +930,234 @@ CM.Disp.AddMenu = function() {
|
|||||||
luckyReqFrenSmall.textContent = ' (' + luckyTimeFrenzy + ')';
|
luckyReqFrenSmall.textContent = ' (' + luckyTimeFrenzy + ')';
|
||||||
luckyReqFrenFrag.appendChild(luckyReqFrenSmall);
|
luckyReqFrenFrag.appendChild(luckyReqFrenSmall);
|
||||||
}
|
}
|
||||||
stats.appendChild(listing('\"Lucky!\" Cookies Required (Frenzy) : ', luckyReqFrenFrag));
|
stats.appendChild(listing('\"Lucky!\" Cookies Required (Frenzy)', luckyReqFrenFrag));
|
||||||
stats.appendChild(listing('\"Lucky!\" Reward (MAX) : ', document.createTextNode(Beautify(CM.Cache.LuckyReward))));
|
stats.appendChild(listing('\"Lucky!\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.LuckyReward))));
|
||||||
stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy) : ', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy))));
|
stats.appendChild(listing('\"Lucky!\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.LuckyRewardFrenzy))));
|
||||||
stats.appendChild(listing('\"Lucky!\" Reward (CUR) : ', document.createTextNode(Beautify(luckyCur))));
|
stats.appendChild(listing('\"Lucky!\" Reward (CUR)', document.createTextNode(Beautify(luckyCur))));
|
||||||
stats.appendChild(header('Heavenly Chips'));
|
}
|
||||||
|
|
||||||
|
stats.appendChild(header('Chain Cookies', 'Chain'));
|
||||||
|
if (CM.Config.StatsPref.Chain) {
|
||||||
|
var chainColor = (Game.cookies < CM.Cache.Chain) ? CM.Disp.colorRed : CM.Disp.colorGreen;
|
||||||
|
var chainTime = (Game.cookies < CM.Cache.Chain) ? CM.Disp.FormatTime((CM.Cache.Chain - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
|
||||||
|
var chainColorFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.colorRed : CM.Disp.colorGreen;
|
||||||
|
var chainTimeFrenzy = (Game.cookies < CM.Cache.ChainFrenzy) ? CM.Disp.FormatTime((CM.Cache.ChainFrenzy - Game.cookies) / (Game.cookiesPs * (1 - Game.cpsSucked))) : '';
|
||||||
|
var chainCurMax = Math.min(Game.cookiesPs * 60 * 60 * 3, Game.cookies * 0.25);
|
||||||
|
var chainCur = CM.Cache.MaxChainMoni(7, chainCurMax);
|
||||||
|
var chainCurWrath = CM.Cache.MaxChainMoni(6, chainCurMax);
|
||||||
|
|
||||||
|
var chainReqFrag = document.createDocumentFragment();
|
||||||
|
var chainReqSpan = document.createElement('span');
|
||||||
|
chainReqSpan.style.fontWeight = 'bold';
|
||||||
|
chainReqSpan.className = CM.Disp.colorTextPre + chainColor;
|
||||||
|
chainReqSpan.textContent = Beautify(CM.Cache.Chain);
|
||||||
|
chainReqFrag.appendChild(chainReqSpan);
|
||||||
|
if (chainTime != '') {
|
||||||
|
var chainReqSmall = document.createElement('small');
|
||||||
|
chainReqSmall.textContent = ' (' + chainTime + ')';
|
||||||
|
chainReqFrag.appendChild(chainReqSmall);
|
||||||
|
}
|
||||||
|
stats.appendChild(listing('\"Chain\" Cookies Required', chainReqFrag));
|
||||||
|
var chainReqFrenFrag = document.createDocumentFragment();
|
||||||
|
var chainReqFrenSpan = document.createElement('span');
|
||||||
|
chainReqFrenSpan.style.fontWeight = 'bold';
|
||||||
|
chainReqFrenSpan.className = CM.Disp.colorTextPre + chainColorFrenzy;
|
||||||
|
chainReqFrenSpan.textContent = Beautify(CM.Cache.ChainFrenzy);
|
||||||
|
chainReqFrenFrag.appendChild(chainReqFrenSpan);
|
||||||
|
if (chainTimeFrenzy != '') {
|
||||||
|
var chainReqFrenSmall = document.createElement('small');
|
||||||
|
chainReqFrenSmall.textContent = ' (' + chainTimeFrenzy + ')';
|
||||||
|
chainReqFrenFrag.appendChild(chainReqFrenSmall);
|
||||||
|
}
|
||||||
|
stats.appendChild(listing('\"Chain\" Cookies Required (Frenzy)', chainReqFrenFrag));
|
||||||
|
stats.appendChild(listing('\"Chain\" Reward (MAX)', document.createTextNode(Beautify(CM.Cache.ChainReward))));
|
||||||
|
stats.appendChild(listing('\"Chain\" Reward (MAX) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainWrathReward))));
|
||||||
|
stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyReward))));
|
||||||
|
stats.appendChild(listing('\"Chain\" Reward (MAX) (Frenzy) (Wrath)', document.createTextNode(Beautify(CM.Cache.ChainFrenzyWrathReward))));
|
||||||
|
stats.appendChild(listing('\"Chain\" Reward (CUR)', document.createTextNode(Beautify(chainCur))));
|
||||||
|
stats.appendChild(listing('\"Chain\" Reward (CUR) (Wrath)', document.createTextNode(Beautify(chainCurWrath))));
|
||||||
|
}
|
||||||
|
|
||||||
|
stats.appendChild(header('Heavenly Chips', 'HC'));
|
||||||
|
if (CM.Config.StatsPref.HC) {
|
||||||
|
var possibleHC = Game.HowMuchPrestige(Game.cookiesEarned + Game.cookiesReset);
|
||||||
|
var neededCook = CM.Sim.CookNeedPrest(possibleHC + 1) - (Game.cookiesEarned + Game.cookiesReset);
|
||||||
|
|
||||||
var hcMaxFrag = document.createDocumentFragment();
|
var hcMaxFrag = document.createDocumentFragment();
|
||||||
hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC)));
|
hcMaxFrag.appendChild(document.createTextNode(Beautify(possibleHC)));
|
||||||
var hcMaxSmall = document.createElement('small');
|
var hcMaxSmall = document.createElement('small');
|
||||||
hcMaxSmall.textContent = ' (' + Beautify((possibleHC * 2)) + '%)';
|
hcMaxSmall.textContent = ' (' + Beautify((possibleHC * 2)) + '%)';
|
||||||
hcMaxFrag.appendChild(hcMaxSmall);
|
hcMaxFrag.appendChild(hcMaxSmall);
|
||||||
stats.appendChild(listing('Heavenly Chips (MAX) : ', hcMaxFrag));
|
stats.appendChild(listing('Heavenly Chips (MAX)', hcMaxFrag));
|
||||||
var hcCurFrag = document.createDocumentFragment();
|
var hcCurFrag = document.createDocumentFragment();
|
||||||
hcCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige['Heavenly chips'])));
|
hcCurFrag.appendChild(document.createTextNode(Beautify(Game.prestige['Heavenly chips'])));
|
||||||
var hcCurSmall = document.createElement('small');
|
var hcCurSmall = document.createElement('small');
|
||||||
hcCurSmall.textContent = ' (' + Beautify((Game.prestige['Heavenly chips'] * 2)) + '%)';
|
hcCurSmall.textContent = ' (' + Beautify((Game.prestige['Heavenly chips'] * 2)) + '%)';
|
||||||
hcCurFrag.appendChild(hcCurSmall);
|
hcCurFrag.appendChild(hcCurSmall);
|
||||||
stats.appendChild(listing('Heavenly Chips (CUR) : ', hcCurFrag));
|
stats.appendChild(listing('Heavenly Chips (CUR)', hcCurFrag));
|
||||||
stats.appendChild(listing('Cookies To Next Chip : ', document.createTextNode(Beautify(neededCook))));
|
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))));
|
stats.appendChild(listing('Time To Next Chip', document.createTextNode(CM.Disp.FormatTime(neededCook / (Game.cookiesPs * (1 - Game.cpsSucked)), 1))));
|
||||||
stats.appendChild(listing('Reset Bonus Income : ', document.createTextNode(Beautify(CM.Sim.ResetBonus()))));
|
var resetTitleFrag = document.createDocumentFragment();
|
||||||
|
resetTitleFrag.appendChild(document.createTextNode('Reset Bonus Income '))
|
||||||
|
var resetTitleSpan = document.createElement('span');
|
||||||
|
resetTitleSpan.onmouseout = function() { Game.tooltip.hide(); };
|
||||||
|
resetTitleSpan.onmouseover = function() {Game.tooltip.draw(this, escape(CM.Disp.ResetTooltipPlaceholder.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)));
|
||||||
|
var increase = Math.round(resetBonus / Game.cookiesPs * 10000);
|
||||||
|
if (isFinite(increase) && increase != 0) {
|
||||||
|
var resetSmall = document.createElement('small');
|
||||||
|
resetSmall.textContent = ' (' + (increase / 100) + '% of income)';
|
||||||
|
resetFrag.appendChild(resetSmall);
|
||||||
|
}
|
||||||
|
stats.appendChild(listing(resetTitleFrag, resetFrag));
|
||||||
|
}
|
||||||
|
|
||||||
if (Game.cpsSucked > 0) {
|
if (Game.cpsSucked > 0) {
|
||||||
stats.appendChild(header('Wrinklers'));
|
stats.appendChild(header('Wrinklers', 'Wrink'));
|
||||||
|
if (CM.Config.StatsPref.Wrink) {
|
||||||
var sucked = 0;
|
var sucked = 0;
|
||||||
for (var i in Game.wrinklers) {
|
for (var i in Game.wrinklers) {
|
||||||
sucked += Game.wrinklers[i].sucked;
|
sucked += Game.wrinklers[i].sucked;
|
||||||
}
|
}
|
||||||
sucked *= 1.1;
|
sucked *= 1.1;
|
||||||
if (Game.Has('Wrinklerspawn')) sucked *= 1.05;
|
if (Game.Has('Wrinklerspawn')) sucked *= 1.05;
|
||||||
stats.appendChild(listing('Rewards of Popping : ', document.createTextNode(Beautify(sucked))));
|
stats.appendChild(listing('Rewards of Popping', document.createTextNode(Beautify(sucked))));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var specDisp = false;
|
||||||
|
var halloCook = [];
|
||||||
|
for (var i in CM.Data.HalloCookies) {
|
||||||
|
if (!Game.Has(CM.Data.HalloCookies[i])) {
|
||||||
|
halloCook.push(CM.Data.HalloCookies[i]);
|
||||||
|
specDisp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var christCook = [];
|
||||||
|
for (var i in CM.Data.ChristCookies) {
|
||||||
|
if (!Game.Has(CM.Data.ChristCookies[i])) {
|
||||||
|
christCook.push(CM.Data.ChristCookies[i]);
|
||||||
|
specDisp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var valCook = [];
|
||||||
|
for (var i in CM.Data.ValCookies) {
|
||||||
|
if (!Game.Has(CM.Data.ValCookies[i])) {
|
||||||
|
valCook.push(CM.Data.ValCookies[i]);
|
||||||
|
specDisp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var normEggs = [];
|
||||||
|
for (var i in Game.eggDrops) {
|
||||||
|
if (!Game.HasUnlocked(Game.eggDrops[i])) {
|
||||||
|
normEggs.push(Game.eggDrops[i]);
|
||||||
|
specDisp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var rareEggs = [];
|
||||||
|
for (var i in Game.rareEggDrops) {
|
||||||
|
if (!Game.HasUnlocked(Game.rareEggDrops[i])) {
|
||||||
|
rareEggs.push(Game.rareEggDrops[i]);
|
||||||
|
specDisp = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Game.season == 'christmas' || specDisp) {
|
||||||
|
stats.appendChild(header('Season Specials', 'Sea'));
|
||||||
|
if (CM.Config.StatsPref.Sea) {
|
||||||
|
if (specDisp) {
|
||||||
|
var createSpecDisp = function(theSpecDisp) {
|
||||||
|
var frag = document.createDocumentFragment();
|
||||||
|
frag.appendChild(document.createTextNode(theSpecDisp.length + ' '));
|
||||||
|
var span = document.createElement('span');
|
||||||
|
span.onmouseout = function() { Game.tooltip.hide(); };
|
||||||
|
var placeholder = document.createElement('div');
|
||||||
|
var missing = document.createElement('div');
|
||||||
|
missing.style.minWidth = '140px';
|
||||||
|
missing.style.marginBottom = '4px';
|
||||||
|
var title = document.createElement('div');
|
||||||
|
title.className = 'name';
|
||||||
|
title.style.marginBottom = '4px';
|
||||||
|
title.style.textAlign = 'center';
|
||||||
|
title.textContent = 'Missing';
|
||||||
|
missing.appendChild(title);
|
||||||
|
for (var i in theSpecDisp) {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.style.textAlign = 'center';
|
||||||
|
div.appendChild(document.createTextNode(theSpecDisp[i]));
|
||||||
|
missing.appendChild(div);
|
||||||
|
}
|
||||||
|
placeholder.appendChild(missing);
|
||||||
|
span.onmouseover = function() {Game.tooltip.draw(this, escape(placeholder.innerHTML));};
|
||||||
|
span.style.cursor = 'default';
|
||||||
|
span.style.display = 'inline-block';
|
||||||
|
span.style.height = '10px';
|
||||||
|
span.style.width = '10px';
|
||||||
|
span.style.borderRadius = '5px';
|
||||||
|
span.style.textAlign = 'center';
|
||||||
|
span.style.backgroundColor = '#C0C0C0';
|
||||||
|
span.style.color = 'black';
|
||||||
|
span.style.fontSize = '9px';
|
||||||
|
span.style.verticalAlign = 'bottom';
|
||||||
|
span.textContent = '?';
|
||||||
|
frag.appendChild(span);
|
||||||
|
return frag;
|
||||||
|
}
|
||||||
|
if (halloCook.length != 0) stats.appendChild(listing('Halloween Cookies Left to Buy', createSpecDisp(halloCook)));
|
||||||
|
if (christCook.length != 0) stats.appendChild(listing('Christmas Cookies Left to Buy', createSpecDisp(christCook)));
|
||||||
|
if (valCook.length != 0) stats.appendChild(listing('Valentine Cookies Left to Buy', createSpecDisp(valCook)));
|
||||||
|
if (normEggs.length != 0) stats.appendChild(listing('Normal Easter Eggs Left to Unlock', createSpecDisp(normEggs)));
|
||||||
|
if (rareEggs.length != 0) stats.appendChild(listing('Rare Easter Eggs Left to Unlock', createSpecDisp(rareEggs)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Game.season == 'christmas') stats.appendChild(listing('Reindeer Reward', document.createTextNode(Beautify(CM.Cache.SeaSpec))));
|
||||||
}
|
}
|
||||||
stats.appendChild(header('Season Specials'));
|
|
||||||
stats.appendChild(listing('Halloween Cookies Bought : ', document.createTextNode(halloCook + ' of ' + CM.Data.HalloCookies.length)));
|
|
||||||
stats.appendChild(listing('Christmas Cookies Bought : ', document.createTextNode(christCook + ' of ' + CM.Data.ChristCookies.length)));
|
|
||||||
stats.appendChild(listing('Valentine Cookies Bought : ', document.createTextNode(valCook + ' of ' + CM.Data.ValCookies.length)));
|
|
||||||
stats.appendChild(listing('Normal Easter Eggs Unlocked : ', document.createTextNode(normEggs + ' of ' + Game.eggDrops.length)));
|
|
||||||
stats.appendChild(listing('Rare Easter Eggs Unlocked : ', document.createTextNode(rareEggs + ' of ' + Game.rareEggDrops.length)));
|
|
||||||
if (Game.season == 'christmas') {
|
|
||||||
stats.appendChild(listing('Reindeer Reward : ', document.createTextNode(Beautify(CM.Cache.SeaSpec))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
l('menu').insertBefore(stats, l('menu').childNodes[2]);
|
l('menu').insertBefore(stats, l('menu').childNodes[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Disp.AddMenu = function() {
|
||||||
|
var title = function() {
|
||||||
|
var div = document.createElement('div');
|
||||||
|
div.className = 'title ' + CM.Disp.colorTextPre + CM.Disp.colorBlue;
|
||||||
|
div.textContent = 'Cookie Monster Goodies';
|
||||||
|
return div;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Game.onMenu == 'prefs') {
|
||||||
|
CM.Disp.AddMenuPref(title);
|
||||||
|
}
|
||||||
|
else if (CM.Config.Stats == 1 && Game.onMenu == 'stats') {
|
||||||
|
CM.Disp.AddMenuStats(title);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Disp.RefreshMenu = function() {
|
CM.Disp.RefreshMenu = function() {
|
||||||
if (CM.Config.UpStats && Game.onMenu == 'stats' && Game.drawT % (Game.fps * 3) != 0 && Game.drawT % Game.fps == 0) Game.UpdateMenu();
|
if (CM.Config.UpStats && Game.onMenu == 'stats' && Game.drawT % (Game.fps * 3) != 0 && Game.drawT % Game.fps == 0) Game.UpdateMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Disp.UpdateTooltipLocation = function() {
|
||||||
|
Game.tooltip.tta.style.top = Math.max(0, Math.min((l('game').clientHeight + l('topBar').clientHeight) - Game.tooltip.tt.clientHeight - CM.Disp.TooltipWarnCaut.clientHeight - 64, Game.mouseY - 48)) + 'px';
|
||||||
|
if (Game.tooltip.origin == 'wrink') {
|
||||||
|
Game.tooltip.tta.style.left = (Game.mouseX + l('tooltip').offsetWidth + 25) + 'px';
|
||||||
|
Game.tooltip.tta.style.right = 'auto';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CM.Disp.CreateTooltipWarnCaut = function() {
|
CM.Disp.CreateTooltipWarnCaut = function() {
|
||||||
CM.Disp.TooltipWarnCaut = document.createElement('div');
|
CM.Disp.TooltipWarnCaut = document.createElement('div');
|
||||||
CM.Disp.TooltipWarnCaut.style.position = 'absolute';
|
CM.Disp.TooltipWarnCaut.style.position = 'absolute';
|
||||||
@@ -875,13 +1174,13 @@ CM.Disp.CreateTooltipWarnCaut = function() {
|
|||||||
box.style.MsTransition = 'opacity 0.1s ease-out';
|
box.style.MsTransition = 'opacity 0.1s ease-out';
|
||||||
box.style.OTransition = 'opacity 0.1s ease-out';
|
box.style.OTransition = 'opacity 0.1s ease-out';
|
||||||
box.style.transition = 'opacity 0.1s ease-out';
|
box.style.transition = 'opacity 0.1s ease-out';
|
||||||
box.style.border = '1px solid ' + color;
|
box.className = CM.Disp.colorBorderPre + color;
|
||||||
box.style.padding = '2px';
|
box.style.padding = '2px';
|
||||||
box.style.background = '#000 url(img/darkNoise.png)';
|
box.style.background = '#000 url(img/darkNoise.png)';
|
||||||
var labelDiv = document.createElement('div');
|
var labelDiv = document.createElement('div');
|
||||||
box.appendChild(labelDiv);
|
box.appendChild(labelDiv);
|
||||||
var labelSpan = document.createElement('span');
|
var labelSpan = document.createElement('span');
|
||||||
labelSpan.style.color = color;
|
labelSpan.className = CM.Disp.colorTextPre + color;
|
||||||
labelSpan.style.fontWeight = 'bold';
|
labelSpan.style.fontWeight = 'bold';
|
||||||
labelSpan.textContent = labelTextFront;
|
labelSpan.textContent = labelTextFront;
|
||||||
labelDiv.appendChild(labelSpan);
|
labelDiv.appendChild(labelSpan);
|
||||||
@@ -943,9 +1242,20 @@ CM.Disp.AddTooltipUpgrade = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CM.Disp.AddTooltipBuild10 = function() {
|
||||||
|
for (var i in Game.Objects) {
|
||||||
|
var me = Game.Objects[i];
|
||||||
|
l('buttonBuy10-' + me.id).onmouseover = function() {CM.Disp.TooltipBuy10 = true;};
|
||||||
|
l('buttonBuy10-' + me.id).onmouseout = function() {CM.Disp.TooltipBuy10 = false;};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CM.Disp.Tooltip = function(type, name) {
|
CM.Disp.Tooltip = function(type, name) {
|
||||||
if (type == 'b') {
|
if (type == 'b') {
|
||||||
l('tooltip').innerHTML = Game.Objects[name].tooltip();
|
l('tooltip').innerHTML = Game.Objects[name].tooltip();
|
||||||
|
if (CM.Disp.TooltipBuy10) {
|
||||||
|
l('tooltip').innerHTML = l('tooltip').innerHTML.split(Beautify(Game.Objects[name].getPrice())).join(Beautify(CM.Cache.Objects10[name].price));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else { // Upgrades
|
else { // Upgrades
|
||||||
CM.Disp.TooltipUpgradeBack[name]();
|
CM.Disp.TooltipUpgradeBack[name]();
|
||||||
@@ -966,7 +1276,7 @@ CM.Disp.Tooltip = function(type, name) {
|
|||||||
var header = function(text) {
|
var header = function(text) {
|
||||||
var div = document.createElement('div');
|
var div = document.createElement('div');
|
||||||
div.style.fontWeight = 'bold';
|
div.style.fontWeight = 'bold';
|
||||||
div.style.color = CM.Disp.colorBlue;
|
div.className = CM.Disp.colorTextPre + CM.Disp.colorBlue;
|
||||||
div.textContent = text;
|
div.textContent = text;
|
||||||
return div;
|
return div;
|
||||||
}
|
}
|
||||||
@@ -1004,21 +1314,32 @@ CM.Disp.UpdateTooltip = function() {
|
|||||||
var price;
|
var price;
|
||||||
var bonus;
|
var bonus;
|
||||||
if (CM.Disp.tooltipType == 'b') {
|
if (CM.Disp.tooltipType == 'b') {
|
||||||
|
if (!CM.Disp.TooltipBuy10) {
|
||||||
bonus = CM.Cache.Objects[CM.Disp.tooltipName].bonus;
|
bonus = CM.Cache.Objects[CM.Disp.tooltipName].bonus;
|
||||||
price = Game.Objects[CM.Disp.tooltipName].getPrice();
|
price = Game.Objects[CM.Disp.tooltipName].getPrice();
|
||||||
if (CM.Config.Tooltip == 1) {
|
if (CM.Config.Tooltip == 1) {
|
||||||
l('CMTooltipBorder').style.color = CM.Cache.Objects[CM.Disp.tooltipName].color;
|
l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Objects[CM.Disp.tooltipName].color;
|
||||||
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects[CM.Disp.tooltipName].bci, 2);
|
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects[CM.Disp.tooltipName].bci, 2);
|
||||||
l('CMTooltipBCI').style.color = CM.Cache.Objects[CM.Disp.tooltipName].color;
|
l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Objects[CM.Disp.tooltipName].color;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bonus = CM.Cache.Objects10[CM.Disp.tooltipName].bonus;
|
||||||
|
price = CM.Cache.Objects10[CM.Disp.tooltipName].price;
|
||||||
|
if (CM.Config.Tooltip == 1) {
|
||||||
|
l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Objects10[CM.Disp.tooltipName].color;
|
||||||
|
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Objects10[CM.Disp.tooltipName].bci, 2);
|
||||||
|
l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Objects10[CM.Disp.tooltipName].color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { // Upgrades
|
else { // Upgrades
|
||||||
bonus = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bonus;
|
bonus = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bonus;
|
||||||
price = Game.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].getPrice();
|
price = Game.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].getPrice();
|
||||||
if (CM.Config.Tooltip == 1) {
|
if (CM.Config.Tooltip == 1) {
|
||||||
l('CMTooltipBorder').style.color = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color;
|
l('CMTooltipBorder').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color;
|
||||||
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bci, 2);
|
l('CMTooltipBCI').textContent = Beautify(CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].bci, 2);
|
||||||
l('CMTooltipBCI').style.color = CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color;
|
l('CMTooltipBCI').className = CM.Disp.colorTextPre + CM.Cache.Upgrades[Game.UpgradesInStore[CM.Disp.tooltipName].name].color;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (CM.Config.Tooltip == 1) {
|
if (CM.Config.Tooltip == 1) {
|
||||||
@@ -1031,7 +1352,7 @@ CM.Disp.UpdateTooltip = function() {
|
|||||||
|
|
||||||
var timeColor = CM.Disp.GetTimeColor(price);
|
var timeColor = CM.Disp.GetTimeColor(price);
|
||||||
l('CMTooltipTime').textContent = timeColor.text;
|
l('CMTooltipTime').textContent = timeColor.text;
|
||||||
l('CMTooltipTime').style.color = timeColor.color;
|
l('CMTooltipTime').className = CM.Disp.colorTextPre + timeColor.color;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CM.Config.ToolWarnCaut == 1) {
|
if (CM.Config.ToolWarnCaut == 1) {
|
||||||
@@ -1089,6 +1410,70 @@ 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.Config.ToolWrink == 1 && 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)) {
|
||||||
|
showingTooltip = true;
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CM.Disp.TooltipWrinklerCache[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!showingTooltip) {
|
||||||
|
Game.tooltip.hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CM.Disp.UpdateWrinklerTooltip = function() {
|
||||||
|
if (CM.Config.ToolWrink == 1 && 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.ToggleSayTime = function() {
|
CM.Disp.ToggleSayTime = function() {
|
||||||
if (CM.Config.SayTime == 1) {
|
if (CM.Config.SayTime == 1) {
|
||||||
Game.sayTime = CM.Disp.sayTime;
|
Game.sayTime = CM.Disp.sayTime;
|
||||||
@@ -1111,15 +1496,28 @@ CM.Disp.RefreshScale = function() {
|
|||||||
CM.Disp.min = -1;
|
CM.Disp.min = -1;
|
||||||
CM.Disp.max = -1;
|
CM.Disp.max = -1;
|
||||||
CM.Disp.mid = -1;
|
CM.Disp.mid = -1;
|
||||||
CM.Disp.colorBlue = '#4bb8f0';
|
CM.Disp.colorTextPre = 'CMText';
|
||||||
CM.Disp.colorGreen = 'lime';
|
CM.Disp.colorBackPre = 'CMBack';
|
||||||
CM.Disp.colorYellow = 'yellow';
|
CM.Disp.colorBorderPre = 'CMBorder';
|
||||||
CM.Disp.colorOrange = '#ff7f00';
|
CM.Disp.colorBlue = 'Blue';
|
||||||
CM.Disp.colorRed = 'red';
|
CM.Disp.colorGreen = 'Green';
|
||||||
CM.Disp.colorPurple = 'magenta';
|
CM.Disp.colorYellow = 'Yellow';
|
||||||
CM.Disp.colorGray = '#b3b3b3';
|
CM.Disp.colorOrange = 'Orange';
|
||||||
|
CM.Disp.colorRed = 'Red';
|
||||||
|
CM.Disp.colorPurple = 'Purple';
|
||||||
|
CM.Disp.colorGray = 'Gray';
|
||||||
|
CM.Disp.colors = [ CM.Disp.colorBlue, CM.Disp.colorGreen, CM.Disp.colorYellow, CM.Disp.colorOrange, CM.Disp.colorRed, CM.Disp.colorPurple, CM.Disp.colorGray];
|
||||||
CM.Disp.lastGoldenCookieState = 'none';
|
CM.Disp.lastGoldenCookieState = 'none';
|
||||||
|
|
||||||
CM.Disp.metric = ['M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
|
CM.Disp.metric = ['M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
|
||||||
CM.Disp.shortScale = ['M', 'B', 'Tr', 'Quadr', 'Quint', 'Sext', 'Sept', 'Oct', 'Non', 'Dec', 'Undec', 'Duodec', 'Tredec'];
|
CM.Disp.shortScale = ['M', 'B', 'Tr', 'Quadr', 'Quint', 'Sext', 'Sept', 'Oct', 'Non', 'Dec', 'Undec', 'Duodec', 'Tredec'];
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
17
src/Main.js
17
src/Main.js
@@ -34,6 +34,7 @@ CM.ReplaceNative = function() {
|
|||||||
Game.tooltip.update = function() {
|
Game.tooltip.update = function() {
|
||||||
CM.Backup.tooltip.updateMod();
|
CM.Backup.tooltip.updateMod();
|
||||||
CM.Disp.UpdateTooltipWarnCaut();
|
CM.Disp.UpdateTooltipWarnCaut();
|
||||||
|
CM.Disp.UpdateTooltipLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Backup.RebuildUpgrades = Game.RebuildUpgrades;
|
CM.Backup.RebuildUpgrades = Game.RebuildUpgrades;
|
||||||
@@ -44,9 +45,11 @@ CM.ReplaceNative = function() {
|
|||||||
|
|
||||||
CM.Backup.UpdateMenu = Game.UpdateMenu;
|
CM.Backup.UpdateMenu = Game.UpdateMenu;
|
||||||
Game.UpdateMenu = function() {
|
Game.UpdateMenu = function() {
|
||||||
|
if (jscolor == undefined || jscolor.picker == undefined || jscolor.picker.owner == undefined) {
|
||||||
CM.Backup.UpdateMenu();
|
CM.Backup.UpdateMenu();
|
||||||
CM.Disp.AddMenu();
|
CM.Disp.AddMenu();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CM.Backup.sayTime = Game.sayTime;
|
CM.Backup.sayTime = Game.sayTime;
|
||||||
CM.Disp.sayTime = function(time, detail) {
|
CM.Disp.sayTime = function(time, detail) {
|
||||||
@@ -66,6 +69,7 @@ CM.Loop = function() {
|
|||||||
CM.Cache.RemakeIncome();
|
CM.Cache.RemakeIncome();
|
||||||
CM.Cache.RemakeBCI();
|
CM.Cache.RemakeBCI();
|
||||||
CM.Cache.RemakeLucky();
|
CM.Cache.RemakeLucky();
|
||||||
|
CM.Cache.RemakeChain();
|
||||||
CM.Cache.RemakeSeaSpec();
|
CM.Cache.RemakeSeaSpec();
|
||||||
|
|
||||||
CM.Disp.UpdateBotBarOther();
|
CM.Disp.UpdateBotBarOther();
|
||||||
@@ -82,6 +86,10 @@ CM.Loop = function() {
|
|||||||
// Update Tooltip
|
// Update Tooltip
|
||||||
CM.Disp.UpdateTooltip();
|
CM.Disp.UpdateTooltip();
|
||||||
|
|
||||||
|
// Update Wrinkler Tooltip
|
||||||
|
CM.Disp.CheckWrinklerTooltip();
|
||||||
|
CM.Disp.UpdateWrinklerTooltip();
|
||||||
|
|
||||||
// Check Golden Cookies
|
// Check Golden Cookies
|
||||||
CM.Disp.CheckGoldenCookie();
|
CM.Disp.CheckGoldenCookie();
|
||||||
|
|
||||||
@@ -98,13 +106,18 @@ CM.Init = function() {
|
|||||||
proceed = confirm('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' is meant for Game version ' + CM.VersionMajor + '. Loading a different version may cause errors. Do you still want to load Cookie Monster?');
|
proceed = confirm('Cookie Monster version ' + CM.VersionMajor + '.' + CM.VersionMinor + ' is meant for Game version ' + CM.VersionMajor + '. Loading a different version may cause errors. Do you still want to load Cookie Monster?');
|
||||||
}
|
}
|
||||||
if (proceed) {
|
if (proceed) {
|
||||||
|
CM.Disp.AddJscolor();
|
||||||
|
CM.Disp.CreateCssArea();
|
||||||
CM.Disp.CreateBotBar();
|
CM.Disp.CreateBotBar();
|
||||||
CM.Disp.CreateTimerBar();
|
CM.Disp.CreateTimerBar();
|
||||||
CM.Disp.CreateUpgradeBar();
|
CM.Disp.CreateUpgradeBar();
|
||||||
CM.Disp.CreateWhiteScreen();
|
CM.Disp.CreateWhiteScreen();
|
||||||
CM.Disp.CreateGCTimer();
|
CM.Disp.CreateGCTimer();
|
||||||
|
CM.Disp.CreateResetTooltip();
|
||||||
CM.Disp.CreateTooltipWarnCaut();
|
CM.Disp.CreateTooltipWarnCaut();
|
||||||
CM.Disp.AddTooltipBuild();
|
CM.Disp.AddTooltipBuild();
|
||||||
|
CM.Disp.AddTooltipBuild10();
|
||||||
|
CM.Disp.AddWrinklerAreaDetect();
|
||||||
CM.ReplaceNative();
|
CM.ReplaceNative();
|
||||||
Game.CalculateGains();
|
Game.CalculateGains();
|
||||||
CM.LoadConfig(); // Must be after all things are created!
|
CM.LoadConfig(); // Must be after all things are created!
|
||||||
@@ -116,9 +129,9 @@ CM.Init = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.ConfigDefault = {BotBar: 1, TimerBar: 1, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 0, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2};
|
CM.ConfigDefault = {BotBar: 1, TimerBar: 1, TimerBarPos: 0, BuildColor: 1, UpBarColor: 1, Flash: 1, Sound: 1, Volume: 100, GCSoundURL: 'http://freesound.org/data/previews/66/66717_931655-lq.mp3', SeaSoundURL: 'http://www.freesound.org/data/previews/121/121099_2193266-lq.mp3', GCTimer: 1, Title: 1, Tooltip: 1, ToolWarnCaut: 1, ToolWarnCautPos: 1, ToolWrink: 1, Stats: 1, UpStats: 1, SayTime: 1, Scale: 2, StatsPref: {Lucky: 1, Chain: 1, HC: 1, Wrink: 1, Sea: 1}, Colors : {Blue: '#4bb8f0', Green: '#00ff00', Yellow: '#ffff00', Orange: '#ff7f00', Red: '#ff0000', Purple: '#ff00ff', Gray: '#b3b3b3'}};
|
||||||
CM.ConfigPrefix = 'CMConfig';
|
CM.ConfigPrefix = 'CMConfig';
|
||||||
|
|
||||||
CM.VersionMajor = '1.0465';
|
CM.VersionMajor = '1.0465';
|
||||||
CM.VersionMinor = '5';
|
CM.VersionMinor = '12';
|
||||||
|
|
||||||
|
|||||||
27
src/Sim.js
27
src/Sim.js
@@ -2,6 +2,20 @@
|
|||||||
* Sim *
|
* Sim *
|
||||||
*******/
|
*******/
|
||||||
|
|
||||||
|
CM.Sim.BuildingGetPrice = function (basePrice, start, increase) {
|
||||||
|
var totalPrice = 0;
|
||||||
|
var count = 0;
|
||||||
|
while(count < increase) {
|
||||||
|
var price = basePrice * Math.pow(Game.priceIncrease, start + count);
|
||||||
|
if (Game.Has('Season savings')) price *= 0.99;
|
||||||
|
if (Game.Has('Santa\'s dominion')) price *= 0.99;
|
||||||
|
if (Game.Has('Faberge egg')) price *= 0.99;
|
||||||
|
totalPrice += Math.ceil(price);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
return totalPrice;
|
||||||
|
}
|
||||||
|
|
||||||
eval('CM.Sim.Has = ' + Game.Has.toString().split('Game').join('CM.Sim'));
|
eval('CM.Sim.Has = ' + Game.Has.toString().split('Game').join('CM.Sim'));
|
||||||
|
|
||||||
CM.Sim.Win = function(what) {
|
CM.Sim.Win = function(what) {
|
||||||
@@ -132,8 +146,7 @@ CM.Sim.CalculateGains = function() {
|
|||||||
|
|
||||||
if (CM.Sim.Has('Elder Covenant')) mult *= 0.95;
|
if (CM.Sim.Has('Elder Covenant')) mult *= 0.95;
|
||||||
|
|
||||||
CM.Sim.globalCpsMult = mult;
|
CM.Sim.cookiesPs *= mult;
|
||||||
CM.Sim.cookiesPs *= CM.Sim.globalCpsMult;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
CM.Sim.CheckOtherAchiev = function() {
|
CM.Sim.CheckOtherAchiev = function() {
|
||||||
@@ -207,12 +220,12 @@ CM.Sim.CheckOtherAchiev = function() {
|
|||||||
if (hasAllChristCook) CM.Sim.Win('Let it snow');
|
if (hasAllChristCook) CM.Sim.Win('Let it snow');
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Sim.BuyBuildings = function() {
|
CM.Sim.BuyBuildings = function(amount, target) {
|
||||||
CM.Cache.Objects = [];
|
CM.Cache[target] = [];
|
||||||
for (var i in Game.Objects) {
|
for (var i in Game.Objects) {
|
||||||
CM.Sim.CopyData();
|
CM.Sim.CopyData();
|
||||||
var me = CM.Sim.Objects[i];
|
var me = CM.Sim.Objects[i];
|
||||||
me.amount++;
|
me.amount += amount;
|
||||||
|
|
||||||
if (i == 'Cursor') {
|
if (i == 'Cursor') {
|
||||||
if (me.amount >= 1) CM.Sim.Win('Click');
|
if (me.amount >= 1) CM.Sim.Win('Click');
|
||||||
@@ -305,8 +318,8 @@ CM.Sim.BuyBuildings = function() {
|
|||||||
CM.Sim.CalculateGains();
|
CM.Sim.CalculateGains();
|
||||||
}
|
}
|
||||||
|
|
||||||
CM.Cache.Objects[i] = {};
|
CM.Cache[target][i] = {};
|
||||||
CM.Cache.Objects[i].bonus = CM.Sim.cookiesPs - Game.cookiesPs;
|
CM.Cache[target][i].bonus = CM.Sim.cookiesPs - Game.cookiesPs;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user