mirror of
https://github.com/doublespeakgames/adarkroom.git
synced 2026-05-28 00:01:54 +08:00
7ee96fd108
This additional content explores the aftermath of an event in The Ensign. A large dungeon, The Executioner, reveals the fate of one of the Wanderers’ most powerful weapons though multiple wings, each ending with a unique boss encounter. The fabricator allows the player to craft powerful items out of alien alloy, introducing new combat mechanics.
132 lines
3.4 KiB
JavaScript
132 lines
3.4 KiB
JavaScript
var Button = {
|
|
Button: function(options) {
|
|
if(typeof options.cooldown == 'number') {
|
|
this.data_cooldown = options.cooldown;
|
|
}
|
|
this.data_remaining = 0;
|
|
if(typeof options.click == 'function') {
|
|
this.data_handler = options.click;
|
|
}
|
|
|
|
var el = $('<div>')
|
|
.attr('id', typeof(options.id) != 'undefined' ? options.id : "BTN_" + Engine.getGuid())
|
|
.addClass('button')
|
|
.text(typeof(options.text) != 'undefined' ? options.text : "button")
|
|
.click(function() {
|
|
if(!$(this).hasClass('disabled')) {
|
|
Button.cooldown($(this));
|
|
$(this).data("handler")($(this));
|
|
}
|
|
})
|
|
.data("handler", typeof options.click == 'function' ? options.click : function() { Engine.log("click"); })
|
|
.data("remaining", 0)
|
|
.data("cooldown", typeof options.cooldown == 'number' ? options.cooldown : 0)
|
|
.data('boosted', options.boosted ?? (() => false));
|
|
|
|
el.append($("<div>").addClass('cooldown'));
|
|
|
|
// waiting for expiry of residual cooldown detected in state
|
|
Button.cooldown(el, 'state');
|
|
|
|
if(options.cost) {
|
|
var ttPos = options.ttPos ? options.ttPos : "bottom right";
|
|
var costTooltip = $('<div>').addClass('tooltip ' + ttPos);
|
|
for(var k in options.cost) {
|
|
$("<div>").addClass('row_key').text(_(k)).appendTo(costTooltip);
|
|
$("<div>").addClass('row_val').text(options.cost[k]).appendTo(costTooltip);
|
|
}
|
|
if(costTooltip.children().length > 0) {
|
|
costTooltip.appendTo(el);
|
|
}
|
|
}
|
|
|
|
if(options.width) {
|
|
el.css('width', options.width);
|
|
}
|
|
|
|
return el;
|
|
},
|
|
|
|
saveCooldown: true,
|
|
|
|
setDisabled: function(btn, disabled) {
|
|
if(btn) {
|
|
if(!disabled && !btn.data('onCooldown')) {
|
|
btn.removeClass('disabled');
|
|
} else if(disabled) {
|
|
btn.addClass('disabled');
|
|
}
|
|
btn.data('disabled', disabled);
|
|
}
|
|
},
|
|
|
|
isDisabled: function(btn) {
|
|
if(btn) {
|
|
return btn.data('disabled') === true;
|
|
}
|
|
return false;
|
|
},
|
|
|
|
cooldown: function(btn, option) {
|
|
var cd = btn.data("cooldown");
|
|
if (btn.data('boosted')()) {
|
|
cd /= 2;
|
|
}
|
|
var id = 'cooldown.'+ btn.attr('id');
|
|
if(cd > 0) {
|
|
if(typeof option == 'number') {
|
|
cd = option;
|
|
}
|
|
// param "start" takes value from cooldown time if not specified
|
|
var start, left;
|
|
switch(option){
|
|
// a switch will allow for several uses of cooldown function
|
|
case 'state':
|
|
if(!$SM.get(id)){
|
|
return;
|
|
}
|
|
start = Math.min($SM.get(id), cd);
|
|
left = (start / cd).toFixed(4);
|
|
break;
|
|
default:
|
|
start = cd;
|
|
left = 1;
|
|
}
|
|
Button.clearCooldown(btn);
|
|
if(Button.saveCooldown){
|
|
$SM.set(id,start);
|
|
// residual value is measured in seconds
|
|
// saves program performance
|
|
btn.data('countdown', Engine.setInterval(function(){
|
|
$SM.set(id, $SM.get(id, true) - 0.5, true);
|
|
},500));
|
|
}
|
|
var time = start;
|
|
if (Engine.options.doubleTime){
|
|
time /= 2;
|
|
}
|
|
$('div.cooldown', btn).width(left * 100 +"%").animate({width: '0%'}, time * 1000, 'linear', function() {
|
|
Button.clearCooldown(btn, true);
|
|
});
|
|
btn.addClass('disabled');
|
|
btn.data('onCooldown', true);
|
|
}
|
|
},
|
|
|
|
clearCooldown: function(btn, cooldownEnded) {
|
|
var ended = cooldownEnded || false;
|
|
if(!ended){
|
|
$('div.cooldown', btn).stop(true, true);
|
|
}
|
|
btn.data('onCooldown', false);
|
|
if(btn.data('countdown')){
|
|
window.clearInterval(btn.data('countdown'));
|
|
$SM.remove('cooldown.'+ btn.attr('id'));
|
|
btn.removeData('countdown');
|
|
}
|
|
if(!btn.data('disabled')) {
|
|
btn.removeClass('disabled');
|
|
}
|
|
}
|
|
};
|