void On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号)

void カスタム::On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号) {
}
  • 引数の補足

    • メインコマンド番号:

      メイン画面中の「機能」「軍事」「内政」といったコマンドの番号
      「メイン画面::メインコマンド::会見」といったenum値との判定が可能である。
    • サブコマンド番号:

      メイン画面中の「披露」「謀略」「訓練」といった、メインコマンドを押した際に出てくるサブのコマンドの番号
      「メイン画面::サブコマンド::一覧::所領」といったenum値との判定が可能である。
  • タイミング

    • プレイヤ操作によりコマンドが選択された瞬間にこのメソッドが実行される。
      「サブコマンド」がある場合には、「メインコマンド」時には実行されず、サブコマンド選択時にこのメソッドが実行される。



    一般的用途

    • 特定のコマンドに機能を付与する際に、何らかの値を毎度初期化する必要がある時、利用する。
    • このコマンドは、該当コマンドの終了ハンドラに相当する、「On_プレイヤコマンド完了直前《メイン画面》」と対で使ってこそ威力を発揮する。
  • 例①

    void カスタム::On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号) {
      デバッグ出力 << "コマンド発生" << endl;
    
    }
    
    void カスタム::On_プレイヤコマンド完了直前《メイン画面》() {
      デバッグ出力 << "コマンド完了" << endl;
    }
    
  • 例②

    int ターゲットコマンド発生 = 0;
    void カスタム::On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号) {
    
      /* 特定のコマンドが発生したのかどうかの判定 */
    
      if ( メインコマンド番号 == メイン画面::メインコマンド名::本城 ) {
        デバッグ出力 << "本城コマンド発生" << endl;
    
        ターゲットコマンド発生 = メインコマンド番号;
      }
    
      else if ( サブコマンド番号 == メイン画面::サブコマンド名::軍事::訓練 ) {
        デバッグ出力 << "軍事->訓練コマンド発生" << endl;
    
        ターゲットコマンド発生 = サブコマンド番号;
      }
    }
    
    void カスタム::On_プレイヤコマンド完了直前《メイン画面》() {
    
      if ( ターゲットコマンド発生 ) {
        ターゲットコマンド発生 = 0;
        デバッグ出力 << "コマンド脱却" << endl;
      }
    }
    
  • 例③

    BOOL iFlagOf金1000 = FALSE;
    void カスタム::On_プレイヤコマンド発生直前《メイン画面》(int メインコマンド番号, int サブコマンド番号) {
      /*
       何かコマンドを実行する度に、今ターン中のプレイヤ大名の軍団の金が1000増える。
       */
      デバッグ出力 << "コマンド発生" << endl;
      iFlagOf金1000 = TRUE;
    
    }
    
    void カスタム::On_プレイヤコマンド完了直前《メイン画面》() {
    
      デバッグ出力 << "コマンド完了" << endl;
    
      if ( iFlagOf金1000 ) {
        iFlagOf金1000 = FALSE; // フラグは下す
    
        // 現在ターンがまわっている軍団。iFlagOf金1000が立ってるということは、事実上プレイヤがコマンド入力で操作している軍団。
        int iGundanID = pターン情報.現在のターン【軍団番号】-1;
    
        // 一応のチェック
        if ( 0 <= iGundanID && iGundanID < 最大数::軍団情報::配列数) {
    
          // オーバーフロー防止のため、一度int型で計算する。
          int 金 = p軍団情報[iGundanID].金;
          金 += 1000;
          金 = min( 60000, 金 ); // 60000以上なら60000とする。
          p軍団情報[iGundanID].金 = 金; // 65535までしかないWORD型に収まっていると保障されたので、値を代入。
    
        }
      }
    }