//
//      このスクリプトの整形に「桜宮の部屋」のまあささんのスクリプトを
//      参考にさせていただきました｡
//      HP  ｢桜宮の部屋｣  http://oukyu.oheya.to/
//

//#############################################################################
//                      Happiness 縦置きボタンボリューム
//#############################################################################

//--------------------初期設定--------------------------------------------------

#include "std.mi"

/*******************************************************************************
//      自作関数宣言
*******************************************************************************/

Function fn_AlphaChange(Layer L,int TargetA,Float Speed); // Layerのフェード

/*******************************************************************************
//      グローバル関数宣言
*******************************************************************************/

Global Group           grpVolume;
Global Group           grpLogo;

Global Group           grpVolumeThumb;
Global Layer           lyrVolume;
Global AnimatedLayer   anmNumber;

Global Timer           tmrNumberTimer;

Global Int             intClickPos_X;
Global Boolean         blnLeftClick;

Global Int             intStartPos_X;
Global Int             intStartPos_Y;
Global Int             intEndPos_X;
Global Int             intEndPos_Y;

Global Int             intVolumeWhidth;
Global Int             intVolumeHigh;

Global Boolean         blnNumber;

/*******************************************************************************
//      #System.onScriptLoaded()
//      スクリプト起動時に実行される｡
//      初期設定
*******************************************************************************/

System.onScriptLoaded(){

        // オブジェクト設定
        grpVolume      = getScriptGroup();
        grpVolumeThumb = grpVolume.findObject("Player.Volume.Group");
        grpLogo        = grpVolume.findObject("Player.Logo.Group");
        lyrVolume      = grpVolumeThumb.findObject("Volume.Thumb");
        anmNumber      = grpVolumeThumb.findObject("VolumeNumber");

        // タイマー設定
        tmrNumberTimer = new Timer;
        tmrNumberTimer.setDelay(5000);

        // 初期設定
        intStartPos_X   = 0;    //      ボリュームのスタート位置
        intStartPos_Y   = 273;    //      ボリュームのスタート位置
        intEndPos_X     = 140;    //      ボリュームの終了位置
        intEndPos_Y     = 321;    //      ボリュームの終了位置
        intVolumeWhidth = 140;     //      ボリュームスライダーの幅
        intVolumeHigh   = 48;     //      ボリュームスライダーの高さ

        // 起動時のスライダーポジションに従いボリュームバーの表示更新
        grpVolumeThumb.setXmlParam("x" , integerToString( (intStartPos_X + (intEndPos_X - intStartPos_X) - (intVolumewhidth * System.getVolume() / 255) ) ) );
        grpVolumeThumb.setXmlParam("y" , integerToString( (intStartPos_Y + (intEndPos_Y - intStartPos_Y) - (intVolumeHigh * System.getVolume() / 255) ) ) );

        anmNumber.gotoFrame(System.getVolume());

}


/*******************************************************************************
//      #System.onScriptUnLoaded()
//      スクリプト終了時に実行される｡
*******************************************************************************/

System.onScriptUnloading() {

        delete tmrNumberTimer;

}


/*******************************************************************************
//      #tmrNumberTimer.onTimer()
//      条件：tmrNumberTimerのスタート5秒後ごとに呼び出される｡
//      機能：再生中のシーク表示更新
*******************************************************************************/

tmrNumberTimer.onTimer() {

        tmrNumberTimer.Stop();
        blnNumber = 0;
        fn_AlphaChange(anmNumber,0,0.8);
}


System.onVolumeChanged(int newvol) {

          grpVolumeThumb.setXmlParam("x" , integerToString( (intStartPos_X + (intEndPos_X - intStartPos_X) - (intVolumewhidth * System.getVolume() / 255) ) ) );
          grpVolumeThumb.setXmlParam("y" , integerToString( (intStartPos_Y + (intEndPos_Y - intStartPos_Y) - (intVolumeHigh * System.getVolume() / 255) ) ) );
          anmNumber.gotoFrame(newvol);

          if (!blnNumber) {
            blnNumber = 1;
            fn_AlphaChange(anmNumber,255,0.3);
            tmrNumberTimer.Start();
          }
}


/*******************************************************************************
//      #lyrVolume.onLeftButtonDown(
//        int x         //X軸
//        int y         //Y軸
//      )
//      条件：ボリュームオブジェクト上で
//            マウスの左ボタンが押された時に呼び出される｡
//      機能：ボリュームの変更を開始
*******************************************************************************/

lyrVolume.onLeftButtonDown(int x, int y) {

        intClickPos_X = x - grpVolumeThumb.getLeft();
        lyrVolume.setXmlParam("image" ,"player.Thumb.Volume.pressed");
        blnLeftClick = 1;
}


/*******************************************************************************
//      #lyrVolume.onLeftButtonUp(
//        int x         //X軸
//        int y         //Y軸
//      )
//      条件：ボリュームオブジェクト上で
//            マウスの左ボタンが離された時に呼び出される｡
//      機能：ボリュームを変更終了
*******************************************************************************/

lyrVolume.onLeftButtonUp(int x, int y) {

        lyrVolume.setXmlParam("image" ,"player.Thumb.Volume");
        blnLeftClick = 0;

}


/*******************************************************************************
//      #lyrVolume.onMouseMove(
//        int x         //X軸
//        int y         //Y軸
//      )
//      条件：ボリュームオブジェクト上でマウスが動いた時に呼び出される｡
//      機能：フラグ(blnLeftClick)がONなら、ボリュームの変更
*******************************************************************************/

lyrVolume.onMouseMove(int x, int y) {

        if (blnLeftClick) {

          int Value;

          Value = x ;
          if      (x <= intStartPos_X)   Value = intStartPos_X;
          else if (x >= intEndPos_X) Value = intEndPos_X;
          Value = x - intStartPos_X - intClickPos_X;

          int Vol;
          Vol = ((intVolumeWhidth - Value) * 255) / intVolumeWhidth;
          if (Vol <= 0) Vol = 0;
          else if (Vol >= 255) Vol = 255;
          System.setVolume(Vol);
        }
}




/*--------------自作関数------------------------------------------------------*/

/*******************************************************************************
//      #fn_AlphaChange(
//        Layer    L        //フェードさせるレイヤー
//        int      TargetA  //フェードするアルファ値
//        float    Speed    //フェードする時間(0.1 = 100ms)
//      )
//      機能：レイヤーのフェード
*******************************************************************************/

fn_AlphaChange(Layer L,int TargetA,Float Speed) {

          L.setTargetA(TargetA);
          L.setTargetSpeed(Speed);
          L.gotoTarget();
}
