var m_beginPosX = [215, 238, 271, 294, 294, 271, 238, 215];
var m_beginPosY = [176, 152, 152, 174, 208, 231, 231, 208];
var m_hitPosX = [ 93, 184, 317, 408, 410, 319, 185, 93];
var m_hitPosY = [128, 34, 32, 122, 257, 348, 348, 257];
var m_arrowPosX = [116, 140, 364, 392, 392, 364, 140, 116];
var m_arrowPosY = [ 84, 60, 60, 84, 296, 324, 324, 296];
var m_arr2PosX = [ 88, 232, 276, 420, 420, 276, 232, 88];
var m_arr2PosY = [168, 24, 24, 168, 208, 356, 356, 208];
function getAngle(x1,y1,x2,y2)
{
return Math.atan2((y1-y2),(x1-x2));
}
function mai001(time,pos,fiT)
{
var addX = 64;
var addY = 56;
var png = "ring.png";
var o = "Sprite,Foreground,Centre,\"" + png + "\",320,240\r\n";
o += " C,0," + Math.round(time-fiT) + ",,255,255,128\r\n";
o += " M,0," + Math.round(time-fiT) + "," + Math.round(time) + "," + (addX+m_beginPosX[pos]) + "," + (addY+m_beginPosY[pos]) + "," + (addX+m_hitPosX[pos]) + "," + (addY+m_hitPosY[pos]) + "\r\n";
o += " F,0," + Math.round(time-fiT*3/2) + "," + Math.round(time-fiT) + ",0,1\r\n";
o += " F,0," + Math.round(time-fiT) + "," + Math.round(time) + ",1\r\n";
o += " F,0," + Math.round(time) + "," + Math.round(time+fiT/4) + ",1,0\r\n";
return o;
}
function mai002(time1,time2,pos1,pos2,fiT)
{
var addX = 64;
var addY = 56;
var png = "lt.png";
var o = "Sprite,Foreground,Centre,\"" + png + "\",320,240\r\n";
o += " C,0," + Math.round(time1) + ",,128,255,255\r\n";
if((pos2-pos1+8)%8 == 4)
{
o += " M,0," + Math.round(time1) + "," + Math.round(time2) + "," + (addX+m_arrowPosX[pos1]) + "," + (addY+m_arrowPosY[pos1]) + "," + (addX+m_arr2PosX[pos2]) + "," + (addY+m_arr2PosY[pos2]) + "\r\n";
o += " R,0," + Math.round(time1) + ",," + getAngle(m_arrowPosX[pos1],m_arrowPosY[pos1],m_arr2PosX[pos2],m_arr2PosY[pos2]) + "\r\n";
}
else
{
o += " M,0," + Math.round(time1) + "," + Math.round(time2) + "," + (addX+m_arrowPosX[pos1]) + "," + (addY+m_arrowPosY[pos1]) + "," + (addX+m_arrowPosX[pos2]) + "," + (addY+m_arrowPosY[pos2]) + "\r\n";
o += " R,0," + Math.round(time1) + ",," + getAngle(m_arrowPosX[pos1],m_arrowPosY[pos1],m_arrowPosX[pos2],m_arrowPosY[pos2]) + "\r\n";
}
o += " F,0," + Math.round(time1-fiT) + "," + Math.round(time1) + ",0,1\r\n";
return o;
}
function maimai()
{
var sData = "";
var o = "";
var maxDist = 20;
var fadeInTime = 150;
if(hitObjectArray.length == 0) { output("No object!"); return 0; }
var dTimeStart = parseInt($("additional_timestart").value);
var dTimeEnd = parseInt($("additional_timeend").value);
for(var i=0;i<hitObjectArray.length;i++)
{
var obj = hitObjectArray[i];
if(obj.time >= dTimeStart && obj.time <= dTimeEnd)
{
if(obj.type & 1)
{
for(var k=0;k<m_hitPosX.length;k++)
{
if(distance(obj.x,obj.y,m_hitPosX[k],m_hitPosY[k]) < maxDist)
{
sData += mai001(obj.time,k,fadeInTime);
obj.x = m_hitPosX[k];
obj.y = m_hitPosY[k];
break;
}
}
}
else if(obj.type & 2)
{
var endPos = obj.sliderPoints[obj.sliderPoints.length-1].split(":");
var endX = parseInt(endPos[0],10);
var endY = parseInt(endPos[1],10);
for(var k1=0;k1<m_hitPosX.length;k1++)
{
if(distance(obj.x,obj.y,m_hitPosX[k1],m_hitPosY[k1]) < maxDist)
{
break;
}
}
for(var k2=0;k2<m_hitPosX.length;k2++)
{
if(distance(endX,endY,m_hitPosX[k2],m_hitPosY[k2]) < maxDist)
{
break;
}
}
// get the endpoint tick
var ticks = obj.sliderLength / getSliderLen(obj.time);
var tickLength = getTickLen(obj.time);
var endTick = Math.round(obj.time + ticks * tickLength);
// make an arrow going through k1,k2
sData += mai002(obj.time,endTick,k1,k2,fadeInTime);
}
}
}
eventsData += "\r\n"+sData;
output("bm_maimai complete!")
diffname_buff("maimai");
br_close();
}
当然比脑补更好的办法是看音效工具里的函数