// ==UserScript==
// @name Tiberium Alliances Info Sticker
// @namespace TAInfoSticker
// @version 1.11.10
// @description Based on Maelstrom Dev Tools. Modified MCV timer, repair time label, resource labels.
// @include http*://prodgame*.alliances.commandandconquer.com/*/index.aspx*
// @author unicode
// ==/UserScript==
(function () {
var InfoSticker_main = function () {
try {
function createInfoSticker() {
console.log('InfoSticker loaded');
// define Base
qx.Class.define("InfoSticker.Base", {
type: "singleton",
extend: qx.core.Object,
members: {
/* Desktop */
dataTimerInterval: 1000,
positionInterval: 500,
tibIcon: null,
cryIcon: null,
powIcon: null,
creditIcon: null,
repairIcon: null,
hasStorage: false,
initialize: function () {
try {
this.hasStorage = 'localStorage' in window && window['localStorage'] !== null;
} catch (se) {}
try {
var fileManager = ClientLib.File.FileManager.GetInstance();
this.tibIcon = fileManager.GetPhysicalPath("ui/common/icn_res_tiberium.png");
this.cryIcon = fileManager.GetPhysicalPath("ui/common/icn_res_chrystal.png");
this.powIcon = fileManager.GetPhysicalPath("ui/common/icn_res_power.png");
this.creditIcon = fileManager.GetPhysicalPath("ui/common/icn_res_dollar.png");
this.repairIcon = fileManager.GetPhysicalPath("ui/icons/icn_repair_off_points.png");
if (typeof phe.cnc.Util.attachNetEvent == 'undefined')
this.attachEvent = webfrontend.gui.Util.attachNetEvent;
else
this.attachEvent = phe.cnc.Util.attachNetEvent;
this.runMainTimer();
} catch (e) {
console.log("InfoSticker.initialize: ", e.toString());
}
},
runMainTimer: function () {
try {
var self = this;
this.calculateInfoData();
window.setTimeout(function () {
self.runMainTimer();
}, this.dataTimerInterval);
} catch (e) {
console.log("InfoSticker.runMainTimer: ", e.toString());
}
},
runPositionTimer: function () {
try {
var self = this;
this.repositionSticker();
window.setTimeout(function () {
self.runPositionTimer();
}, this.positionInterval);
} catch (e) {
console.log("InfoSticker.runPositionTimer: ", e.toString());
}
},
infoSticker: null,
mcvPopup: null,
mcvTimerLabel: null,
mcvInfoLabel: null,
mcvPane: null,
repairPopup: null,
repairTimerLabel: null,
resourcePane: null,
resourceHidden: false,
resourceTitleLabel: null,
resourceHideButton: null,
resourceLabel1: null,
resourceLabel2: null,
resourceLabel3: null,
resourceLabel1per: null,
resourceLabel2per: null,
resourceLabel3per: null,
productionTitleLabel: null,
productionLabelPower: null,
productionLabelCredit: null,
repairInfoLabel: null,
lastButton: null,
top_image: null,
bot_image: null,
toFlipH: [],
pinButton: null,
pinned: false,
pinTop: 130,
pinButtonDecoration: null,
pinPane: null,
pinIconFix: false,
lockButton: null,
locked: false,
lockButtonDecoration: null,
lockPane: null,
lockIconFix: false,
mcvHide: false,
repairHide: false,
resourceHide: false,
productionHide: false,
stickerBackground: null,
mcvPane: null,
pinLockPos: 0,
attachEvent: function() {},
isNull: function(e) {
return typeof e == "undefined" || e == null;
},
getApp: function() {
return qx.core.Init.getApplication();
},
getBaseListBar: function() {
var app = this.getApp();
var b;
if(!this.isNull(app)) {
b = app.getBaseNavigationBar();
if(!this.isNull(b)) {
if(b.getChildren().length > 0) {
b = b.getChildren()[0];
if(b.getChildren().length > 0) {
b = b.getChildren()[0];
return b;
}
}
}
}
return null;
},
repositionSticker: function () {
try {
var i;
if (this.infoSticker && !this.mcvInfoLabel.isDisposed() && !this.mcvPopup.isDisposed()) {
var dele;
try {
if (this.top_image != null) {
dele = this.top_image.getContentElement().getDomElement();
if (dele != null) {
dele.style["-moz-transform"] = "scaleY(-1)";
dele.style["-o-transform"] = "scaleY(-1)";
dele.style["-webkit-transform"] = "scaleY(-1)";
dele.style.transform = "scaleY(-1)";
dele.style.filter = "FlipV";
dele.style["-ms-filter"] = "FlipV";
this.top_image = null;
}
}
for (i = this.toFlipH.length - 1; i >= 0; i--) {
var e = this.toFlipH[i];
if(e.isDisposed()) this.toFlipH.splice(i, 1);
else {
dele = e.getDecoratorElement().getDomElement();
if (dele != null) {
dele.style["-moz-transform"] = "scaleX(-1)";
dele.style["-o-transform"] = "scaleX(-1)";
dele.style["-webkit-transform"] = "scaleX(-1)";
dele.style.transform = "scaleX(-1)";
dele.style.filter = "FlipH";
dele.style["-ms-filter"] = "FlipH";
this.toFlipH.splice(i, 1);
}
}
}
} catch (e2) {
console.log("Error flipping images.", e2.toString());
}
var baseListBar = this.getBaseListBar();
if(baseListBar!=null) {
var baseCont = baseListBar.getChildren();
for (i = 0; i < baseCont.length; i++) {
var baseButton = baseCont[i];
if(typeof baseButton.getBaseId === 'function') {
if(baseButton.getBaseId() == ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity().get_Id()
&& baseButton.getBounds() != null && baseButton.getBounds().top!=null) {
//var baseButtonDecorator = baseButton.getDecorator();
//if (baseButton!=this.mcvPopup && baseButtonDecorator != null && typeof baseButtonDecorator === "string" && baseButton.getBounds() != null && baseButton.getBounds().top!=null) {
//if (baseButtonDecorator.indexOf("focused") >= 0 || baseButtonDecorator.indexOf("pressed") >= 0) {
if(this.locked) {
if(!this.pinned) {
if(baseListBar.indexOf(this.mcvPopup)>=0) {
baseListBar.remove(this.mcvPopup);
}
this.pinLockPos = baseListBar.indexOf(baseButton)+1;
baseListBar.addAt(this.mcvPopup, this.pinLockPos);
} else if(baseListBar.indexOf(this.mcvPopup)<0) {
baseListBar.addAt(this.mcvPopup, Math.max(0, Math.min(this.pinLockPos, baseCont.length)));
}
} else {
if(baseListBar.indexOf(this.mcvPopup)>=0) {
baseListBar.remove(this.mcvPopup);
}
if (!this.pinned) {
var top = baseButton.getBounds().top;
var infoTop;
try {
var stickerHeight = this.infoSticker.getContentElement().getDomElement().style.height;
stickerHeight = stickerHeight.substring(0, stickerHeight.indexOf("px"));
infoTop = Math.min(130 + top, Math.max(660, window.innerHeight) - parseInt(stickerHeight, 10) - 130);
} catch (heighterror) {
infoTop = 130 + top;
}
if(this.infoSticker.getContentElement().getDomElement()!=null)
this.infoSticker.setDomTop(infoTop);
this.pinTop = infoTop;
}
}
break;
}
}
}
}
}
} catch (ex) {
console.log("InfoSticker.repositionSticker: ", ex.toString());
}
},
toLock: function (e) {
try {
this.locked = !this.locked;
if(!this.locked) {
this.infoSticker.show();
this.stickerBackground.add(this.mcvPopup);
}
else this.infoSticker.hide();
this.lockButton.setIcon(this.locked ? "FactionUI/icons/icn_thread_locked_active.png" : "FactionUI/icons/icn_thread_locked_inactive.png");
this.updateLockButtonDecoration();
if (this.hasStorage) {
if (this.locked) {
localStorage["infoSticker-locked"] = "true";
if(this.pinned) localStorage["infoSticker-pinLock"] = this.pinLockPos.toString();
} else {
localStorage["infoSticker-locked"] = "false";
}
}
if(this.locked && this.pinned) {
this.menuUpButton.setEnabled(true);
this.menuDownButton.setEnabled(true);
} else {
this.menuUpButton.setEnabled(false);
this.menuDownButton.setEnabled(false);
}
this.repositionSticker();
} catch(e) {
console.log("InfoSticker.toLock: ", e.toString());
}
},
updateLockButtonDecoration: function () {
var light = "#CDD9DF";
var mid = "#9CA4A8";
var dark = "#8C9499";
this.lockPane.setDecorator(null);
this.lockButtonDecoration = new qx.ui.decoration.Background();
this.lockButtonDecoration.setBackgroundColor(this.locked ? dark : light);
this.lockPane.setDecorator(this.lockButtonDecoration);
},
toPin: function (e) {
try {
this.pinned = !this.pinned;
this.pinButton.setIcon(this.pinned ? "FactionUI/icons/icn_thread_pin_active.png" : "FactionUI/icons/icn_thread_pin_inactive.png");
this.updatePinButtonDecoration();
if (this.hasStorage) {
if (this.pinned) {
localStorage["infoSticker-pinned"] = "true";
localStorage["infoSticker-top"] = this.pinTop.toString();
if(this.locked) {
localStorage["infoSticker-pinLock"] = this.pinLockPos.toString();
}
} else {
localStorage["infoSticker-pinned"] = "false";
}
}
if(this.locked && this.pinned) {
this.menuUpButton.setEnabled(true);
this.menuDownButton.setEnabled(true);
} else {
this.menuUpButton.setEnabled(false);
this.menuDownButton.setEnabled(false);
}
} catch(e) {
console.log("InfoSticker.toPin: ", e.toString());
}
},
updatePinButtonDecoration: function () {
var light = "#CDD9DF";
var mid = "#9CA4A8";
var dark = "#8C9499";
this.pinPane.setDecorator(null);
this.pinButtonDecoration = new qx.ui.decoration.Background().set({
//innerOpacity: 0.5
});
//this.pinButtonDecoration.setInnerColor(this.pinned ? mid : light);
//this.pinButtonDecoration.setOuterColor(this.pinned ? light : mid);
this.pinButtonDecoration.setBackgroundColor(this.pinned ? dark : light);
this.pinPane.setDecorator(this.pinButtonDecoration);
},
hideResource: function () {
try {
//if(this.resourceHidden)
if (this.resourcePane.isVisible()) {
//this.resourcePane.hide();
this.resourcePane.exclude();
this.resourceHideButton.setLabel("+");
} else {
this.resourcePane.show();
this.resourceHideButton.setLabel("-");
}
} catch(e) {
console.log("InfoSticker.hideResource: ", e.toString());
}
},
lastPane: null,
createSection: function (parent, titleLabel, visible, visibilityStorageName) {
try {
var pane = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({
padding: [5, 0, 5, 5],
width: 124,
decorator: new qx.ui.decoration.Background().set({
backgroundImage: "decoration/pane_messaging_item/messaging_items_pane.png",
backgroundRepeat: "scale",
}),
alignX: "right"
});
var labelStyle = {
font: qx.bom.Font.fromString('bold').set({
size: 12
}),
textColor: '#595969'
};
titleLabel.set(labelStyle);
var hidePane = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({
width: 124,
alignX: "right"
});
var hideButton = new qx.ui.form.Button("-").set({
//decorator: new qx.ui.decoration.Single(1, "solid", "black"),
maxWidth: 15,
maxHeight: 10,
//textColor: "black"
});
var self = this;
//resourceHideButton.addListener("execute", this.hideResource, this);
hideButton.addListener("execute", function () {
if (hidePane.isVisible()) {
hidePane.exclude();
hideButton.setLabel("+");
} else {
hidePane.show();
hideButton.setLabel("-");
}
if(self.hasStorage)
localStorage["infoSticker-"+visibilityStorageName] = !hidePane.isVisible();
});
var titleBar = new qx.ui.container.Composite(new qx.ui.layout.HBox(0));
titleBar.add(hideButton);
titleBar.add(titleLabel);
pane.add(titleBar);
pane.add(hidePane);
if(!visible) hidePane.exclude();
this.toFlipH.push(pane);
this.lastPane = pane;
parent.add(pane);
return hidePane;
} catch(e) {
console.log("InfoSticker.createSection: ", e.toString());
throw e;
}
},
createHBox: function (ele1, ele2, ele3) {
var cnt;
cnt = new qx.ui.container.Composite();
cnt.setLayout(new qx.ui.layout.HBox(0));
if (ele1 != null) {
cnt.add(ele1);
ele1.setAlignY("middle");
}
if (ele2 != null) {
cnt.add(ele2);
ele2.setAlignY("bottom");
}
if (ele3 != null) {
cnt.add(ele3);
ele3.setAlignY("bottom");
}
return cnt;
},
formatCompactTime: function (time) {
var comps = time.split(":");
var i = 0;
var value = Math.round(parseInt(comps[i], 10)).toString();
var len = comps.length;
while(value==0) {
value = Math.round(parseInt(comps[++i], 10)).toString();
len--;
}
var unit;
switch(len) {
case 1: unit = "s"; break;
case 2: unit = "m"; break;
case 3: unit = "h"; break;
case 4: unit = "d"; break;
}
return value+unit;
},
createImage: function(icon) {
var image = new qx.ui.basic.Image(icon);
image.setScale(true);
image.setWidth(20);
image.setHeight(20);
return image;
},
createMCVPane: function() {
try {
this.mcvInfoLabel = new qx.ui.basic.Label();
this.mcvTimerLabel = new qx.ui.basic.Label().set({
font: qx.bom.Font.fromString('bold').set({
size: 18
}),
textColor: '#282828',
height: 20,
width: 114,
textAlign: 'center'
});
this.mcvTimerCreditProdLabel = new qx.ui.basic.Label().set({
font: qx.bom.Font.fromString('normal').set({
size: 12
}),
textColor: '#282828',
height: 20,
width: 114,
textAlign: 'center',
marginTop: 4,
marginBottom: -4
});
var app = qx.core.Init.getApplication();
var b3 = app.getBaseNavigationBar().getChildren()[0].getChildren()[0];
var pane = this.createSection(b3, this.mcvInfoLabel, !this.mcvHide, "mcvHide");
pane.add(this.mcvTimerLabel);
pane.add(this.mcvTimerCreditProdLabel);
this.mcvPane = this.lastPane;
this.lastPane.setMarginLeft(7);
} catch(e) {
console.log("InfoSticker.createMCVPopup", e.toString());
}
},
moveStickerUp: function() {
try {
var baseListBar = this.getBaseListBar();
this.pinLockPos=Math.max(0, this.pinLockPos-1);
if(baseListBar.indexOf(this.mcvPopup)>=0) {
baseListBar.remove(this.mcvPopup);
}
if (this.hasStorage) {
localStorage["infoSticker-pinLock"] = this.pinLockPos.toString();
}
} catch(e) {
console.log("InfoSticker.moveStickerUp", e.toString());
}
},
moveStickerDown: function() {
try {
var baseListBar = this.getBaseListBar();
this.pinLockPos=Math.min(baseListBar.getChildren().length, this.pinLockPos+1);
if(baseListBar.indexOf(this.mcvPopup)>=0) {
baseListBar.remove(this.mcvPopup);
}
if (this.hasStorage) {
localStorage["infoSticker-pinLock"] = this.pinLockPos.toString();
}
} catch(e) {
console.log("InfoSticker.moveStickerDown", e.toString());
}
},
menuUpButton: null,
menuDownButton: null,
createMCVPopup: function() {
try {
var self = this;
this.mcvPopup = new qx.ui.container.Composite(new qx.ui.layout.VBox().set({
spacing: 3})).set({
paddingLeft: 5,
width: 105,
decorator: new qx.ui.decoration.Background()
});
var menu = new qx.ui.menu.Menu();
var menuPinButton = new qx.ui.menu.Button("Pin", "FactionUI/icons/icn_thread_pin_inactive.png");
menuPinButton.addListener("execute", this.toPin, this);
menu.add(menuPinButton);
var menuLockButton = new qx.ui.menu.Button("Lock", "FactionUI/icons/icn_thread_locked_inactive.png");
menuLockButton.addListener("execute", this.toLock, this);
menu.add(menuLockButton);
var fileManager = ClientLib.File.FileManager.GetInstance();
this.menuUpButton = new qx.ui.menu.Button("Move up", fileManager.GetPhysicalPath("ui/icons/icon_tracker_arrow_up.png"));
//ui/icons/icon_tracker_arrow_up.png ui/gdi/icons/cht_opt_arrow_down.png
this.menuUpButton.addListener("execute", this.moveStickerUp, this);
menu.add(this.menuUpButton);
this.menuDownButton = new qx.ui.menu.Button("Move down", fileManager.GetPhysicalPath("ui/icons/icon_tracker_arrow_down.png"));
this.menuDownButton.addListener("execute", this.moveStickerDown, this);
menu.add(this.menuDownButton);
this.mcvPopup.setContextMenu(menu);
if(!this.locked) {
this.stickerBackground.add(this.mcvPopup);
}
////////////////////////////----------------------------------------------------------
this.pinButton = new webfrontend.ui.SoundButton().set({
decorator: "button-forum-light",
icon: this.pinned ? "FactionUI/icons/icn_thread_pin_active.png" : "FactionUI/icons/icn_thread_pin_inactive.png",
iconPosition: "top",
show: "icon",
cursor: "pointer",
height: 23,
width: 50,
//maxHeight: 25,
maxWidth: 33,
maxHeight: 19,
alignX: "center"
});
this.pinButton.addListener("execute", this.toPin, this);
this.pinPane = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({
//width: 50,
maxWidth: 37,
});
this.updatePinButtonDecoration();
this.pinPane.setDecorator(this.pinButtonDecoration);
this.pinPane.add(this.pinButton);
//this.mcvPopup.add(this.pinPane);
//this.toFlipH.push(this.pinPane);
var icon = this.pinButton.getChildControl("icon");
icon.setWidth(15);
icon.setHeight(15);
icon.setScale(true);
////////////////////////////----------------------------------------------------------
this.lockButton = new webfrontend.ui.SoundButton().set({
decorator: "button-forum-light",
icon: this.pinned ? "FactionUI/icons/icn_thread_locked_active.png" : "FactionUI/icons/icn_thread_locked_inactive.png",
iconPosition: "top",
show: "icon",
cursor: "pointer",
height: 23,
width: 50,
//maxHeight: 25,
maxWidth: 33,
maxHeight: 19,
alignX: "center"
});
this.lockButton.addListener("execute", this.toLock, this);
this.lockPane = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({
//width: 50,
maxWidth: 37,
});
this.updateLockButtonDecoration();
this.lockPane.setDecorator(this.lockButtonDecoration);
this.lockPane.add(this.lockButton);
//this.mcvPopup.add(this.pinPane);
//this.toFlipH.push(this.pinPane);
icon = this.lockButton.getChildControl("icon");
icon.setWidth(15);
icon.setHeight(15);
icon.setScale(true);
////////////////////////////----------------------------------------------------------
this.resourceTitleLabel = new qx.ui.basic.Label();
this.resourceTitleLabel.setValue("Base");
var resStyle = {
font: qx.bom.Font.fromString('bold').set({
size: 14
}),
textColor: '#282828',
height: 20,
width: 65,
marginLeft: -10,
textAlign: 'right'
};
this.resourceLabel1 = new qx.ui.basic.Label().set(resStyle);
this.resourceLabel2 = new qx.ui.basic.Label().set(resStyle);
this.resourceLabel3 = new qx.ui.basic.Label().set(resStyle);
var perStyle = {
font: qx.bom.Font.fromString('bold').set({
size: 9
}),
textColor: '#282828',
height: 18,
width: 33,
textAlign: 'right'
};
this.resourceLabel1per = new qx.ui.basic.Label().set(perStyle);
this.resourceLabel2per = new qx.ui.basic.Label().set(perStyle);
this.resourceLabel3per = new qx.ui.basic.Label().set(perStyle);
var pane3 = this.createSection(this.mcvPopup, this.resourceTitleLabel, !this.resourceHide, "resourceHide");
this.repairTimerLabel = new qx.ui.basic.Label().set({
font: qx.bom.Font.fromString('bold').set({
size: 16
}),
textColor: '#282828',
height: 20,
width: 85,
marginLeft: 0,
textAlign: 'center'
});
pane3.add(this.createHBox(this.createImage(this.repairIcon), this.repairTimerLabel));
pane3.add(this.createHBox(this.createImage(this.tibIcon), this.resourceLabel1, this.resourceLabel1per));
pane3.add(this.createHBox(this.createImage(this.cryIcon), this.resourceLabel2, this.resourceLabel2per));
pane3.add(this.createHBox(this.createImage(this.powIcon), this.resourceLabel3, this.resourceLabel3per));
var mcvC = this.mcvPopup.getChildren();
mcvC[mcvC.length-1].getChildren()[0].add(this.pinPane);
mcvC[mcvC.length-1].getChildren()[0].add(this.lockPane);
////////////////////////////----------------------------------------------------------
this.productionTitleLabel = new qx.ui.basic.Label();
this.productionTitleLabel.setValue("Productions");
var productionStyle = {
font: qx.bom.Font.fromString('bold').set({
size: 13
}),
textColor: '#282828',
height: 20,
width: 60,
textAlign: 'right',
marginTop: 2,
marginBottom: -2
};
this.productionLabelPower = new qx.ui.basic.Label().set(productionStyle);
this.productionLabelCredit = new qx.ui.basic.Label().set(productionStyle);
var pane4 = this.createSection(this.mcvPopup, this.productionTitleLabel, !this.productionHide, "productionHide");
pane4.add(this.createHBox(this.createImage(this.powIcon), this.productionLabelPower));
pane4.add(this.createHBox(this.createImage(this.creditIcon), this.productionLabelCredit));
////////////////////////////----------------------------------------------------------
} catch(e) {
console.log("InfoSticker: createMCVPopup", e.toString());
}
},
currentCityChange: function() {
this.calculateInfoData();
this.repositionSticker();
},
disposeRecover: function() {
try {
if(this.mcvPane.isDisposed()) {
this.createMCVPane();
}
if(this.mcvPopup.isDisposed()) {
this.createMCVPopup();
this.repositionSticker();
}
this.waitingRecovery = false;
} catch(e) {
console.log("InfoSticker: disposeRecover", e.toString());
}
},
waitingRecovery: false,
citiesChange: function() {
try {
var self = this;
var baseListBar = this.getBaseListBar();
this.disposeRecover();
if(baseListBar.indexOf(this.mcvPopup)>=0) {
baseListBar.remove(this.mcvPopup);
this.mcvPopup.dispose();
}
if(baseListBar.indexOf(this.mcvPane)>=0) {
baseListBar.remove(this.mcvPane);
this.mcvPane.dispose();
}
if(!this.waitingRecovery) {
this.waitingRecovery = true;
window.setTimeout(function () {
self.disposeRecover();
}, 10);
}
} catch(e) {
console.log("InfoSticker: citiesChange", e.toString());
}
},
calculateInfoData: function () {
try {
var self = this;
var player = ClientLib.Data.MainData.GetInstance().get_Player();
var cw = player.get_Faction();
var cj = ClientLib.Base.Tech.GetTechIdFromTechNameAndFaction(ClientLib.Base.ETechName.Research_BaseFound, cw);
var cr = player.get_PlayerResearch();
var cd = cr.GetResearchItemFomMdbId(cj);
var app = qx.core.Init.getApplication();
var b3 = app.getBaseNavigationBar().getChildren()[0].getChildren()[0];
if(b3.getChildren().length==0) return;
if (!this.infoSticker) {
this.infoSticker = new qx.ui.container.Composite(new qx.ui.layout.VBox().set({
alignX: "right"
})).set({
width: 105,
});
var top = 130;
if (this.hasStorage) {
var l = localStorage["infoSticker-locked"] == "true";
if (l != null) {
this.locked = l;
var pl = localStorage["infoSticker-pinLock"];
if(pl!=null) {
try {
this.pinLockPos = parseInt(pl, 10);
} catch(etm) {}
}
}
var p = localStorage["infoSticker-pinned"];
var t = localStorage["infoSticker-top"];
if (p != null && t != null) {
var tn;
try {
this.pinned = p == "true";
if (this.pinned) {
tn = parseInt(t, 10);
top = tn;
}
} catch (etn) {}
}
this.mcvHide = localStorage["infoSticker-mcvHide"] == "true";
this.repairHide = localStorage["infoSticker-repairHide"] == "true";
this.resourceHide = localStorage["infoSticker-resourceHide"] == "true";
this.productionHide = localStorage["infoSticker-productionHide"] == "true";
}
app.getDesktop().add(this.infoSticker, {
right: 124,
top: top
});
if(this.locked) {
this.infoSticker.hide();
}
this.stickerBackground = new qx.ui.container.Composite(new qx.ui.layout.VBox()).set({
//paddingLeft: 5,
width: 105,
decorator: new qx.ui.decoration.Background().set({
backgroundImage: "webfrontend/ui/common/bgr_region_world_select_scaler.png",
backgroundRepeat: "scale",
})
});
this.createMCVPane();
this.createMCVPopup();
if(this.locked && this.pinned) {
this.menuUpButton.setEnabled(true);
this.menuDownButton.setEnabled(true);
} else {
this.menuUpButton.setEnabled(false);
this.menuDownButton.setEnabled(false);
}
this.top_image = new qx.ui.basic.Image("webfrontend/ui/common/bgr_region_world_select_end.png");
this.infoSticker.add(this.top_image);
this.infoSticker.add(this.stickerBackground);
//this.infoSticker.add(this.mcvPopup);
this.bot_image = new qx.ui.basic.Image("webfrontend/ui/common/bgr_region_world_select_end.png");
this.infoSticker.add(this.bot_image);
this.runPositionTimer();
try {
this.attachEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "CurrentOwnChange", ClientLib.Data.CurrentOwnCityChange, this, this.currentCityChange);
this.attachEvent(ClientLib.Data.MainData.GetInstance().get_Cities(), "Change", ClientLib.Data.CitiesChange, this, this.citiesChange);
} catch(eventError) {
console.log("InfoSticker.EventAttach:", eventError);
console.log("The script will continue to run, but with slower response speed.");
}
}
this.disposeRecover();
if (cd == null) {
if (this.mcvPopup) {
//this.mcvInfoLabel.setValue("MCV ($???)");
this.mcvInfoLabel.setValue("MCV<br>$???");
this.mcvTimerLabel.setValue("Loading");
}
} else {
var nextLevelInfo = cd.get_NextLevelInfo_Obj();
var resourcesNeeded = [];
for (var i in nextLevelInfo.rr) {
if (nextLevelInfo.rr[i].t > 0) {
resourcesNeeded[nextLevelInfo.rr[i].t] = nextLevelInfo.rr[i].c;
}
}
//var researchNeeded = resourcesNeeded[ClientLib.Base.EResourceType.ResearchPoints];
//var currentResearchPoints = player.get_ResearchPoints();
var creditsNeeded = resourcesNeeded[ClientLib.Base.EResourceType.Gold];
var creditsResourceData = player.get_Credits();
var creditGrowthPerHour = (creditsResourceData.Delta + creditsResourceData.ExtraBonusDelta) * ClientLib.Data.MainData.GetInstance().get_Time().get_StepsPerHour();
var creditTimeLeftInHours = (creditsNeeded - player.GetCreditsCount()) / creditGrowthPerHour;
this.mcvInfoLabel.setValue("MCV ($ " + this.formatNumbersCompact(creditsNeeded) + ")");
//this.mcvInfoLabel.setValue("MCV<br>$" + this.formatNumbersCompact(creditsNeeded));
this.mcvTimerCreditProdLabel.setValue("at " + this.formatNumbersCompact(creditGrowthPerHour) + "/h");
if (creditTimeLeftInHours <= 0) {
this.mcvTimerLabel.setValue("Ready");
} else if (creditGrowthPerHour == 0) {
this.mcvTimerLabel.setValue("Never");
} else {
if(creditTimeLeftInHours >= 24 * 100) {
this.mcvTimerLabel.setValue("> 99 days");
} else {
this.mcvTimerLabel.setValue(this.FormatTimespan(creditTimeLeftInHours * 60 * 60));
}
}
}
var ncity = ClientLib.Data.MainData.GetInstance().get_Cities().get_CurrentOwnCity();
if (ncity == null) {
if (this.mcvPopup) {
this.repairTimerLabel.setValue("Select a base");
this.resourceLabel1.setValue("N/A");
this.resourceLabel2.setValue("N/A");
this.resourceLabel3.setValue("N/A");
}
} else {
var rt = Math.min(ncity.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeInf),
ncity.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeVeh),
ncity.GetResourceCount(ClientLib.Base.EResourceType.RepairChargeAir));
if (ncity.get_CityUnitsData().get_UnitLimitOffense() == 0) {
this.repairTimerLabel.setValue("No army");
} else {
this.repairTimerLabel.setValue(this.FormatTimespan(rt));
}
var tib = ncity.GetResourceCount(ClientLib.Base.EResourceType.Tiberium);
var tibMax = ncity.GetResourceMaxStorage(ClientLib.Base.EResourceType.Tiberium);
var tibRatio = tib / tibMax;
this.resourceLabel1.setTextColor(this.formatNumberColor(tib, tibMax));
this.resourceLabel1.setValue(this.formatNumbersCompact(tib));
this.resourceLabel1per.setValue(this.formatPercent(tibRatio));
var cry = ncity.GetResourceCount(ClientLib.Base.EResourceType.Crystal);
var cryMax = ncity.GetResourceMaxStorage(ClientLib.Base.EResourceType.Crystal);
var cryRatio = cry / cryMax;
this.resourceLabel2.setTextColor(this.formatNumberColor(cry, cryMax));
this.resourceLabel2.setValue(this.formatNumbersCompact(cry));
this.resourceLabel2per.setValue(this.formatPercent(cryRatio));
var power = ncity.GetResourceCount(ClientLib.Base.EResourceType.Power);
var powerMax = ncity.GetResourceMaxStorage(ClientLib.Base.EResourceType.Power);
var powerRatio = power / powerMax;
this.resourceLabel3.setTextColor(this.formatNumberColor(power, powerMax));
this.resourceLabel3.setValue(this.formatNumbersCompact(power));
this.resourceLabel3per.setValue(this.formatPercent(powerRatio));
var powerCont = ncity.GetResourceGrowPerHour(ClientLib.Base.EResourceType.Power, false, false);
var powerBonus = ncity.GetResourceBonusGrowPerHour(ClientLib.Base.EResourceType.Power);
var alliance = ClientLib.Data.MainData.GetInstance().get_Alliance();
var powerAlly = alliance.GetPOIBonusFromResourceType(ClientLib.Base.EResourceType.Power);
var powerProd = powerCont + powerBonus + powerAlly;
var creditCont = ClientLib.Base.Resource.GetResourceGrowPerHour(ncity.get_CityCreditsProduction(), false);
var creditBonus = ClientLib.Base.Resource.GetResourceBonusGrowPerHour(ncity.get_CityCreditsProduction(), false);
var creditProd = creditCont + creditBonus;
this.productionLabelPower.setValue(this.formatNumbersCompact(powerProd) + "/h");
this.productionLabelCredit.setValue(this.formatNumbersCompact(creditProd) + "/h");
}
} catch (e) {
console.log("InfoSticker.calculateInfoData", e.toString());
}
},
formatPercent: function (value) {
return value > 999 / 100 ? ">999%" : this.formatNumbersCompact(value * 100, 0) + "%";
//return this.formatNumbersCompact(value*100, 0) + "%";
},
formatNumberColor: function (value, max) {
var ratio = value / max;
var color;
var black = [40, 180, 40];
var yellow = [181, 181, 0];
var red = [187, 43, 43];
if (ratio < 0.5) color = black;
else if (ratio < 0.75) color = this.interpolateColor(black, yellow, (ratio - 0.5) / 0.25);
else if (ratio < 1) color = this.interpolateColor(yellow, red, (ratio - 0.75) / 0.25);
else color = red;
//console.log(qx.util.ColorUtil.rgbToHexString(color));
return qx.util.ColorUtil.rgbToHexString(color);
},
interpolateColor: function (color1, color2, s) {
//console.log("interp "+s+ " " + color1[1]+" " +color2[1]+" " +(color1[1]+s*(color2[1]-color1[1])));
return [Math.floor(color1[0] + s * (color2[0] - color1[0])),
Math.floor(color1[1] + s * (color2[1] - color1[1])),
Math.floor(color1[2] + s * (color2[2] - color1[2]))];
},
formatNumbersCompact: function (value, decimals) {
if (decimals == undefined) decimals = 2;
var valueStr;
var unit = "";
if (value < 1000) valueStr = value.toString();
else if (value < 1000 * 1000) {
valueStr = (value / 1000).toString();
unit = "k";
} else if (value < 1000 * 1000 * 1000) {
valueStr = (value / 1000000).toString();
unit = "M";
} else {
valueStr = (value / 1000000000).toString();
unit = "G";
}
if (valueStr.indexOf(".") >= 0) {
var whole = valueStr.substring(0, valueStr.indexOf("."));
if (decimals === 0) {
valueStr = whole;
} else {
var fraction = valueStr.substring(valueStr.indexOf(".") + 1);
if (fraction.length > decimals) fraction = fraction.substring(0, decimals);
valueStr = whole + "." + fraction;
}
}
valueStr = valueStr + unit;
return valueStr;
},
FormatTimespan: function (value) {
var i;
var t = ClientLib.Vis.VisMain.FormatTimespan(value);
var colonCount = 0;
for (i = 0; i < t.length; i++) {
if (t.charAt(i) == ':') colonCount++;
}
var r = "";
for (i = 0; i < t.length; i++) {
if (t.charAt(i) == ':') {
if (colonCount > 2) {
r += "d ";
} else {
r += t.charAt(i);
}
colonCount--;
} else {
r += t.charAt(i);
}
}
return r;
}
}
});
}
} catch (e) {
console.log("InfoSticker: createInfoSticker: ", e.toString());
}
function InfoSticker_checkIfLoaded() {
try {
if (typeof qx != 'undefined' && qx.core.Init.getApplication() && qx.core.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_NAVIGATION) && qx.core.Init.getApplication().getUIItem(ClientLib.Data.Missions.PATH.BAR_NAVIGATION).isVisible()) {
createInfoSticker();
window.InfoSticker.Base.getInstance().initialize();
} else {
window.setTimeout(InfoSticker_checkIfLoaded, 1000);
}
} catch (e) {
console.log("InfoSticker_checkIfLoaded: ", e.toString());
}
}
if (/commandandconquer\.com/i.test(document.domain)) {
window.setTimeout(InfoSticker_checkIfLoaded, 1000);
}
}
try {
var InfoStickerScript = document.createElement("script");
InfoStickerScript.innerHTML = "(" + InfoSticker_main.toString() + ")();";
InfoStickerScript.type = "text/javascript";
if (/commandandconquer\.com/i.test(document.domain)) {
document.getElementsByTagName("head")[0].appendChild(InfoStickerScript);
}
} catch (e) {
console.log("InfoSticker: init error: ", e.toString());
}
})();