MediaWiki:Gadget-artTab.js: Difference between revisions
Jump to navigation
Jump to search
Implemented a toggling logic for the live2d button |
Added more live2d controlling functions |
||
Line 26: | Line 26: | ||
return $(artTabDiv).attr("data-live2d-exist-" + costumeId) == "true"; | return $(artTabDiv).attr("data-live2d-exist-" + costumeId) == "true"; | ||
} | |||
function hideLive2dView(artTabDiv) { | |||
var live2dView = $(artTabDiv).find('.live2dstage'); | |||
live2dView.hide(); | |||
var stage = live2dView.data('live2dStage'); | |||
stage.removeChildren(); | |||
} | |||
function createLive2dView(artTabDiv, callback) { | |||
var live2dView = $(artTabDiv).find('.live2dstage'); | |||
if (live2dView.length < 1) { | |||
mw.loader.using('ext.gadget.live2d').then( function () { | |||
// Init renderer | |||
const l2d_tdoll_renderer = PIXI.autoDetectRenderer(500, 500,{transparent: true}); | |||
const l2d_tdoll_stage = new PIXI.Container(); | |||
// Start the animation | |||
function animate() { | |||
requestAnimationFrame(animate); | |||
l2d_tdoll_renderer.render(l2d_tdoll_stage); | |||
} | |||
animate(); | |||
var view = $(l2d_tdoll_renderer.view); | |||
view.data('live2dStage', l2d_tdoll_stage); | |||
view.addClass('live2dstage'); | |||
view.data('renderer', renderer); | |||
callback(view); | |||
}); | |||
} else { | |||
callback(live2dView.first()); | |||
} | |||
} | } | ||
function modelChanged(event, costumeSuffix) { | function modelChanged(event, costumeSuffix) { | ||
var artTabDiv = $(event.target).closest('.artTab'); | var artTabDiv = $(event.target).closest('.artTab'); | ||
var tdollId = artTabDiv.data('tdollId'); | var tdollId = artTabDiv.data('tdollId'); | ||
Line 35: | Line 69: | ||
var variantswitcher = artTabDiv.find('.variantswitcher'); | var variantswitcher = artTabDiv.find('.variantswitcher'); | ||
hideLive2dView(artTabDiv); | |||
variantswitcher.find('.right').remove(); | variantswitcher.find('.right').remove(); | ||
Revision as of 17:10, 13 January 2018
function switchVariant(event, variant) {
var currentElement = $(event.target);
var artTabDiv = currentElement.closest('.artTab');
artTabDiv.find('.artTabLinks').removeClass('active');
artTabDiv.find('.artTabContent .fullart').hide();
var live2dActive = false; // ToDo
if (live2dActive) {
console.log("?");
} else {
artTabDiv.find("[data-variant='" + currentElement.data('variant') +"']").show();
}
// Set "active" at the end
currentElement.addClass('active');
}
function doesLive2dAnimationExist(artTabDiv, costume) {
var costumeId = costume;
if (costumeId[0] === '_') {
costumeId = costumeId.substr(1);
}
if (costume == "") {
costumeId = "costume0";
}
return $(artTabDiv).attr("data-live2d-exist-" + costumeId) == "true";
}
function hideLive2dView(artTabDiv) {
var live2dView = $(artTabDiv).find('.live2dstage');
live2dView.hide();
var stage = live2dView.data('live2dStage');
stage.removeChildren();
}
function createLive2dView(artTabDiv, callback) {
var live2dView = $(artTabDiv).find('.live2dstage');
if (live2dView.length < 1) {
mw.loader.using('ext.gadget.live2d').then( function () {
// Init renderer
const l2d_tdoll_renderer = PIXI.autoDetectRenderer(500, 500,{transparent: true});
const l2d_tdoll_stage = new PIXI.Container();
// Start the animation
function animate() {
requestAnimationFrame(animate);
l2d_tdoll_renderer.render(l2d_tdoll_stage);
}
animate();
var view = $(l2d_tdoll_renderer.view);
view.data('live2dStage', l2d_tdoll_stage);
view.addClass('live2dstage');
view.data('renderer', renderer);
callback(view);
});
} else {
callback(live2dView.first());
}
}
function modelChanged(event, costumeSuffix) {
var artTabDiv = $(event.target).closest('.artTab');
var tdollId = artTabDiv.data('tdollId');
var artModelId = tdollId + costumeSuffix;
var variantswitcher = artTabDiv.find('.variantswitcher');
hideLive2dView(artTabDiv);
variantswitcher.find('.right').remove();
var basePath = mw.config.get("wgServer") + "/images/";
var cpp = window.gfUtils.createWikiPathPart;
var fullartPath = basePath + "thumb/" + cpp(artModelId +".png") + artModelId +".png/420px-" + artModelId +".png";
var fullartDamagedPath = basePath + "thumb/" + cpp(artModelId +"_D.png") + artModelId +"_D.png/420px-" + artModelId +"_D.png";
var normArt = artTabDiv.find(".fullart:not(.damaged) a");
normArt.attr("href", fullartPath );
normArt.find('img').attr("src", fullartPath );
normArt.find('img').attr("srcset", fullartPath );
normArt.find('img').attr("alt", fullartPath );
var damagedArt = artTabDiv.find(".fullart.damaged a");
damagedArt.attr("href", fullartDamagedPath );
damagedArt.find('img').attr("src", fullartDamagedPath );
damagedArt.find('img').attr("srcset", fullartDamagedPath );
damagedArt.find('img').attr("alt", fullartDamagedPath );
var isLive2dPossible = doesLive2dAnimationExist(artTabDiv, costumeSuffix);
if (isLive2dPossible) {
var live2dButton = $('<button></button>');
live2dButton.addClass('artTabLinks');
live2dButton.addClass('right');
live2dButton.click(function() {
if (live2dButton.is('.enabled')) {
live2dButton.removeClass('enabled');
} else {
live2dButton.addClass('enabled');
}
alert("Coming soon...");
});
live2dButton.text("Live2D");
variantswitcher.append(live2dButton);
}
};
RLQ.push(function () {
$(document).ready(function() {
var artTabDiv = $('.artTab');
artTabDiv.on('costume_changed', modelChanged);
var normalButton = $('<button></button>');
normalButton.addClass('artTabLinks');
normalButton.click(switchVariant);
normalButton.data('variant', "");
normalButton.text("Normal");
var damagedButton = $('<button></button>');
damagedButton.addClass('artTabLinks');
damagedButton.click(switchVariant);
damagedButton.data('variant', "D");
damagedButton.text("Damaged");
var variantswitcher = $('<div></div>');
variantswitcher.addClass('variantswitcher');
variantswitcher.append(normalButton);
variantswitcher.append(damagedButton);
artTabDiv.prepend(variantswitcher);
normalButton.click();
});
});