untitled-rhythm-game/js/libpointerfx.js
2025-04-23 00:02:59 +08:00

131 lines
5.0 KiB
JavaScript

(async function() {
if(typeof PIXI!="object") {
if(typeof loadfail=="function") {
loadfail("libpointerfx.js: PIXI(type of "+(typeof PIXI)+") is not an object");
} else {
window.alert("libpointerfx.js: PIXI(type of "+(typeof PIXI)+") is not an object");
}
return;
}
if(typeof Transition!="function") {
if(typeof loadfail=="function") {
loadfail("libpointerfx.js: Transition(type of "+(typeof Transition)+") is not an function");
} else {
window.alert("libpointerfx.js: Transition(type of "+(typeof Transition)+") is not an function");
}
return;
}
if(typeof libmain!="object") {
if(typeof loadfail=="function") {
loadfail("libpointerfx.js: libmain(type of "+(typeof libmain)+") is not an object");
} else {
window.alert("libpointerfx.js: libmain(type of "+(typeof libmain)+") is not an object");
}
return;
}
var libpointerfx= {};
libpointerfx.fx_template_list=[];
libpointerfx.fx_instance_map= {};
libpointerfx.fx_pointer_texture=PIXI.Texture.WHITE;
// pack sprite sheet into PIXI.GifSprite
libpointerfx.fx_tail_anim_textures=[];
var tail_base=await PIXI.Assets.load({"src":await AssetManager.loadWithCache("./assets/sprite-pointer_tail.png"), "loadParser":"loadTextures"});
for(var i=9; i>=0; i--) {
var crop_rect = new PIXI.Rectangle(i*32, 0, 32, 32);
var t=PIXI.Texture.from(tail_base.source);
t.frame.x=i*32;
t.frame.y=0;
t.frame.width=32;
t.frame.height=32;
t.updateUvs();
libpointerfx.fx_tail_anim_textures.push(t);
}
var on_pointer_down=function(event) {
var pointer_id=event.pointerType+event.pointerId;
var fx_instance = new PIXI.Sprite(libpointerfx.fx_pointer_texture);
fx_instance.anchor.set(0.5, 0.5);
fx_instance.position.copyFrom(event.global);
fx_instance.width=4;
fx_instance.height=4;
libpointerfx.fx_instance_map[pointer_id] = fx_instance;
libmain.scenes.pointer_fx.root.addChild(fx_instance);
};
var on_pointer_move=function(event) {
var pointer_id=event.pointerType+event.pointerId;
if(!(pointer_id in libpointerfx.fx_instance_map)) {
//console.warn("warn: pointer_id `"+pointer_id+"` is NOT in libpointerfx.fx_instance_map");
return;
}
libpointerfx.fx_instance_map[pointer_id].position.copyFrom(event.global);
var fx_instance = new PIXI.AnimatedSprite(libpointerfx.fx_tail_anim_textures);
fx_instance.anchor.set(0.5, 0.5);
fx_instance.position.copyFrom(event.global);
fx_instance.width=32;
fx_instance.height=32;
fx_instance.animationSpeed=0.4;
fx_instance.autoUpdate=true;
fx_instance.currentFrame=0;
fx_instance.loop=true;
fx_instance.play();
var func_remove=function() {
libmain.scenes.pointer_fx.root.removeChild(fx_instance);
};
libmain.scenes.pointer_fx.root.addChild(fx_instance);
var fx_end_transition=new Transition();
fx_end_transition.obj=fx_instance;
fx_end_transition.key="alpha";
fx_end_transition.startval=1.0;
fx_end_transition.endval=0.0;
fx_end_transition.duration=300;
fx_end_transition.onend=func_remove;
fx_end_transition.start();
};
var on_pointer_up=function(event) {
var pointer_id=event.pointerType+event.pointerId;
if(!(pointer_id in libpointerfx.fx_instance_map)) {
//console.warn("warn: pointer_id `"+pointer_id+"` is NOT in libpointerfx.fx_instance_map");
return;
}
var fx_instance_toend=libpointerfx.fx_instance_map[pointer_id];
delete(libpointerfx.fx_instance_map[pointer_id]);
var func_remove=function() {
libmain.scenes.pointer_fx.root.removeChild(fx_instance_toend);
};
var fx_end_transition=new Transition();
fx_end_transition.obj=fx_instance_toend;
fx_end_transition.key="alpha";
fx_end_transition.startval=1.0;
fx_end_transition.endval=0.0;
fx_end_transition.duration=300;
fx_end_transition.onend=func_remove;
fx_end_transition.start();
};
libmain.scenes.pointer_fx.root.interactiveChildren=false;
libmain.scenes.pointer_fx.judge_rect.eventMode="static";
libmain.scenes.pointer_fx.judge_rect.alpha=0.0;
libmain.scenes.pointer_fx.judge_rect.on("pointerdown", on_pointer_down);
libmain.scenes.pointer_fx.judge_rect.on("pointermove", on_pointer_move);
libmain.scenes.pointer_fx.judge_rect.on("pointerup", on_pointer_up);
libmain.scenes.pointer_fx.judge_rect.on("pointerout", on_pointer_up);
libmain.scenes.pointer_fx.judge_rect.x=0;
libmain.scenes.pointer_fx.judge_rect.y=0;
libmain.scenes.pointer_fx.judge_rect.anchor.set(0, 0);
//libmain.settings.hud.show_pointerfx
window.libpointerfx=libpointerfx;
console.log("[libpointerfx] initialized successfully.");
})();