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

//#############################################################################
//                      Peace@Pieces
//#############################################################################

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

#include "std.mi"

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

Function fn_MoveLayer(Layer L,int TargetX,int TargetY,int TargetA,Float Speed);
Function fn_FadeLayer(Layer L,int TargetA,Float Speed); //レイヤーのフェード

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

//グローバル関数//

Global Group          grpCharaGroup;
Global Group          grpCharaSubGroup;
Global Group          grpmain;

Global Layer          lyrChara;
Global Layer          lyrShading;
Global Layer          lyrCharaName;

Global Timer          tmrShading;
Global Timer          tmrMoving;

Global Int            intCount;
Global Boolean        blnShading;
Global Boolean        blnMoving;

Global Int            intBaseX;
Global Int            intBaseY;
Global Int            intRandomX;
Global Int            intRandomY;
Global Int            intCameraPos;     // カメラポジション 0:ヒカル 1:ナギ

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

System.onScriptLoaded(){

        //オブジェクト設定
        grpCharaGroup    = getScriptGroup();
        grpCharaSubGroup = grpCharaGroup.findObject("Player.BackGround.Chara.Group");

        lyrChara         = grpCharaGroup.findObject("BG.Chara");
        lyrShading       = grpCharaGroup.findObject("BG.Shading");
        lyrCharaName     = grpCharaGroup.findObject("CharaName");

        //タイマー設定
        tmrShading = new Timer;
        tmrShading.setDelay(50);
        tmrMoving = new Timer;
        tmrMoving.setDelay(50);

        //キャラのカメラ位置をロード
        intCameraPos = System.getPrivateInt("Trans_Peace@Pieces", "CameraPosition", 0);

        //intBaseX = -41;
        //intBaseY = -100;

        //blnMoving = 1;
        //intCount = 0;
        //fn_MoveLayer(lyrChara,intBaseX,intBaseY,255,0.5);
        //fn_MoveLayer(lyrShading,intBaseX,intBaseY,0,1);


}


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

System.onScriptUnloading() {

        System.setPrivateInt("Trans_Peace@Pieces", "CameraPosition", intCameraPos);//時間の表示状態の保存

        Delete tmrShading;
        Delete tmrMoving;
}


/*******************************************************************************
//      #lyrChara.onLeftButtonDblClk(
//        int x         //X軸
//        int y         //Y軸
//      )
//      条件：lyrChara上で、
//            マウス左ボタンをWクリック時に呼び出される｡
//      機能：カメラ位置の切り替え
*******************************************************************************/

lyrChara.onLeftButtonDblClk(int x, int y) {

        if (intCameraPos == 0) {
          intCameraPos = 1;
          intBaseX = -41;
          intBaseY = -100;
        } else if (intCameraPos == 1) {
          intCameraPos = 0;
          intBaseX = -189;
          intBaseY = -27;
        }

        blnMoving = 1;
        intCount = 0;
        int x = random(297);
        int y = random(203);

        fn_FadeLayer(lyrCharaName,0,0.8);
        fn_MoveLayer(lyrChara,x - 297,y - 203,255,0.8);
        fn_MoveLayer(lyrShading,x - 297,y - 203,128 + random(128),0.9);

}


/*******************************************************************************
//      #tmrShading.onTimer()
//      条件：tmrShadingのスタート後50ミリ秒ごとに呼び出される｡
//      機能：ぼかしのランダム処理
*******************************************************************************/

tmrShading.onTimer() {

        tmrShading.Stop();

        fn_FadeLayer(lyrShading,random(255),((0.3) + random(10)/30));
        blnShading = 1;

}



/*******************************************************************************
//      #tmrMoving.onTimer()
//      条件：tmrMovingのスタート後50ミリ秒ごとに呼び出される｡
//      機能：カメラぶれのランダム処理
*******************************************************************************/

tmrMoving.onTimer() {

        //if (blnMoving == 0) {
        tmrMoving.Stop();

        if (intCount <= 2 || intCount == 8) {
          intRandomX = random(50);
          intRandomY = random(50);
        } else if (intCount <= 4) {
          intRandomX = random(35);
          intRandomY = random(35);
        } else {
          intRandomX = random(10);
          intRandomY = random(10);
        }

        fn_MoveLayer(lyrChara,intBaseX + intRandomX,intBaseY + intRandomY,255,0.3 + ((intRandomX + intRandomY) / 200));
        fn_MoveLayer(lyrShading,intBaseX + intRandomX,intBaseY + intRandomY,128 + random(128),0.3 + ((intRandomX + intRandomY) / 200));
        blnMoving = 1;
        //tmrMoving.start();
        //}
}


/*******************************************************************************
//      #lyrShading.onTargetReached()
//      条件：lyrShading のフェードが止まった時
//      機能：再フェード
*******************************************************************************/

lyrShading.onTargetReached() {

        if (blnShading) {//切り替え時のフェードチェックが ON の時
          blnShading = 0;

                if (intCount >= 8) {
                  fn_FadeLayer(lyrShading,0,0.5);
                  tmrShading.Stop();
                } else {
                  tmrShading.start();
                }
        }
}


/*******************************************************************************
//      #lyrChara.onTargetReached()
//      条件：lyrChara のフェードが止まった時
//      機能：再ムーブ
*******************************************************************************/

lyrChara.onTargetReached() {

        if (blnMoving) {//切り替え時のフェードチェックが ON の時
          blnMoving = 0;
          //intCount ++;

                if (intCount == 0) {
                  tmrMoving.start();

                  if (intCameraPos == 0) lyrCharaName.setXMLparam("image" , "player.charaname.hikaru");
                  else if (intCameraPos == 1) lyrCharaName.setXMLparam("image" , "player.charaname.nagi");

                  //tmrShading.start();
                }

                if (intCount == 8) {
                  intCount = 0;
                  fn_FadeLayer(lyrCharaName,255,0.8);
                  fn_MoveLayer(lyrChara,intBaseX,intBaseY,255,0.5);
                  fn_MoveLayer(lyrShading,intBaseX,intBaseY,0,0.7);
                  tmrMoving.Stop();
                } else {
                  tmrMoving.start();
                }

          intCount ++;

        }
}


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

/*******************************************************************************
//      #fn_MoveLayer(
//        Layer  L              //移動させるレイヤー
//        int    TargetX        //レイヤーを移動させるX軸の座標
//        int    TargetY        //レイヤーを移動させるY軸の座標
//        int    TargetA        //移動するレイヤーの透明度
//        Float  Speed          //レイヤーを移動させる時間(0.1=100ms)
//      )
//      機能：レイヤーを指定の位置へスライド移動させる
*******************************************************************************/

fn_MoveLayer(Layer L,int TargetX,int TargetY,int TargetA,Float Speed) {

        L.setTargetX(TargetX);
        L.setTargetY(TargetY);
        L.setTargetA(TargetA);
        L.setTargetSpeed(Speed);
        L.gotoTarget();
}


/*******************************************************************************
//      #fn_FadeLayer(
//        Layer  L              //フェードするレイヤー
//        int    TargetA        //フェードするレイヤーの透明度
//        Float  Speed          //レイヤーをフェードさせる時間(0.1=100ms)
//      )
//      機能：レイヤーをフェードさせる
*******************************************************************************/

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

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