Skip to content

Instantly share code, notes, and snippets.

@todorok1
Created August 16, 2025 03:19
Show Gist options
  • Select an option

  • Save todorok1/8e169ffa249a6a6d0687d9c8f97b653f to your computer and use it in GitHub Desktop.

Select an option

Save todorok1/8e169ffa249a6a6d0687d9c8f97b653f to your computer and use it in GitHub Desktop.
シンプルRPGチュートリアル第119回 戦闘中の魔法アクションを処理するクラス
/// <summary>
/// 魔法のアクションを処理するコルーチンです。
/// </summary>
IEnumerator ProcessMagicActionCoroutine(BattleAction action, MagicData magicData)
{
// 魔法の詠唱時の効果音を再生します。
AudioManager.Instance.PlaySe(SeNames.Magic);
// 魔法の効果を処理します。
foreach (var magicEffect in magicData.magicEffects)
{
// メッセージ表示用の行動を生成します。
BattleAction messageAction = new()
{
actorId = action.actorId,
targetId = action.targetId,
isActorFriend = action.isActorFriend,
isTargetFriend = action.isTargetFriend
};
if (magicEffect.magicCategory == MagicCategory.Recovery)
{
int hpDelta = BattleCalculator.CalculateHealValue(magicEffect.value);
int mpDelta = 0;
bool isMagicTargetFriend = IsMagicTargetFriend(magicEffect);
if (isMagicTargetFriend)
{
messageAction.targetId = action.actorId;
messageAction.isTargetFriend = action.isActorFriend;
}
else
{
messageAction.targetId = action.targetId;
messageAction.isTargetFriend = !action.isActorFriend;
}
if (messageAction.isTargetFriend)
{
CharacterStatusManager.ChangeCharacterStatus(messageAction.targetId, hpDelta, mpDelta);
}
else
{
_enemyStatusManager.ChangeEnemyStatus(messageAction.targetId, hpDelta, mpDelta);
}
_pauseMagicEffect = true;
StartCoroutine(ShowMagicHealMessage(messageAction, magicData.magicName, hpDelta));
}
else if (magicEffect.magicCategory == MagicCategory.None)
{
// 効果がない場合のメッセージを表示します。
_pauseMagicEffect = true;
StartCoroutine(ShowNoEffectMessage(messageAction, magicData.magicName));
}
else
{
SimpleLogger.Instance.LogWarning($"未定義の魔法効果です。 ID: {magicData.magicId}");
// 効果がない場合のメッセージを表示します。
_pauseMagicEffect = true;
StartCoroutine(ShowNoEffectMessage(messageAction, magicData.magicName));
}
while (_pauseMagicEffect)
{
yield return null;
}
}
_actionProcessor.SetPauseProcess(false);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment