-
-
Save todorok1/8e169ffa249a6a6d0687d9c8f97b653f to your computer and use it in GitHub Desktop.
シンプルRPGチュートリアル第119回 戦闘中の魔法アクションを処理するクラス
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /// <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