最終更新日 2024-09-25

On_戦略_軍団ターン変更時

On_戦略_軍団ターン変更時

行動する軍団が変わったタイミングと、
どの軍団も行動しなくなったタイミングの
双方で呼ばれるイベントハンドラとなります。

注意点

「どの軍団も行動しなくなったタイミング」でもこのイベントハンドラが呼ばれるということをは重要です。
どの軍団も行動していない時には、通常、軍団番号に「0xFFFF」が入った状態で、
このイベントハンドラが呼ばれます。

使い処

各軍団ターンの頭で、このイベントハンドラが呼ばれるという特性は、
大名・軍団・武将・城など、いずれの値を更新するとしても、
とても都合の良いタイミングであるため、
値の取得と書き換え等は、ほとんどがこのイベントハンドラに集約されると思います。

実際に各種SDKの解説も、このイベントハンドラを用いたものが多くなっています。

使用例①

まずは、このイベントハンドラがどのような時に呼ばれるのか、
天翔記HDの画面とModDebuggerを両方見ながら確認しましょう。

On_戦略_軍団ターン変更時がどのようなタイミングで呼ばれるのかを知る
void 天翔記クラス::On_戦略_軍団ターン変更時(int 軍団番号) {
  デバッグ出力 << 軍団番号 << endl;

  if (0 <= 軍団番号 && 軍団番号 < 軍団->配列->Count) {
    int iBushouID = 軍団->配列[軍団番号]->軍団長_武将番号;
    if (0 <= iBushouID && iBushouID < 武将->配列->Count) {
      デバッグ出力 << 武将->配列[iBushouID]->姓名 << "軍団のターン" << endl;
    }
  }
  else {
    デバッグ出力 << "どの軍団のターンでもない隙間ターン" << endl;
  }

}

使用例②

回ってきた軍団ターンが、プレイヤが直接担当している軍団なのか?
というのは最もよく利用する記述となることでしょう。

プレイヤに関係している軍団のターンを判定する
void 天翔記クラス::On_戦略_軍団ターン変更時(int 軍団番号) {

    if (0 <= 軍団番号 && 軍団番号 < 軍団->配列->Count) {

        auto g = 軍団->配列[軍団番号];

        // プレイヤが直接担当している軍団(プレイヤが操作する大名の第1軍団のこと)
        if (g->Is_プレイヤ担当軍団) {
            デバッグ出力 << "プレイヤが直接操作する軍団のターンです。" << endl;
        }

        // プレイヤ支配下の軍団全て。プレイヤが担当している大名麾下(第1軍団含む)の軍団全て。
        if (g->Is_プレイヤ麾下軍団) {
            デバッグ出力 << "プレイヤの支配下(=第1軍団含む)にある軍団のターンです。" << endl;
        }
    }

}

使用例③

この「On_戦略_軍団ターン変更時」が呼び出された瞬間は、
ダイアログや吹き出しなどが表示されていないことが保証されています。
このため、「独自のイベント」を記述するのに最も適した場所は、このイベントハンドラ内ということになります。

プレイヤに関係している軍団のターンを判定する
void 天翔記クラス::On_戦略_軍団ターン変更時(int 軍団番号) {

  int 選択結果 = ダイアログ->Show_実行か取消_中央("何かイベントが発生!!");

  if (選択結果 == 列挙::ダイアログ::実行か取消::実行) {
    ダイアログ->Show_情報_中央("実行を選択しました");
  }
  else {
    ダイアログ->Show_情報_中央("取消を選択しました");
  }

}

その他

ソースサンプルの多くは、「On_戦略_軍団ターン変更時」内で記述するサンプルとなっていますので、
それらを参考としてください。

「On_戦略_軍団ターン変更時」イベントハンドラについて、主な解説は以上となります。