/BattleActionProcessorItem.cs Secret
Created
March 27, 2025 07:00
シンプルRPGチュートリアル第56回 戦闘中のアイテムアクションを処理するクラス
This file contains 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
using System.Collections; | |
using UnityEngine; | |
namespace SimpleRpg | |
{ | |
/// <summary> | |
/// 戦闘中のアイテムアクションを処理するクラスです。 | |
/// </summary> | |
public class BattleActionProcessorItem : MonoBehaviour, IBattleActionProcessor | |
{ | |
/// <summary> | |
/// 戦闘中のアクションを処理するクラスへの参照です。 | |
/// </summary> | |
BattleActionProcessor _actionProcessor; | |
/// <summary> | |
/// 戦闘に関する機能を管理するクラスへの参照です。 | |
/// </summary> | |
BattleManager _battleManager; | |
/// <summary> | |
/// メッセージウィンドウを制御するクラスへの参照です。 | |
/// </summary> | |
MessageWindowController _messageWindowController; | |
/// <summary> | |
/// 戦闘中の敵キャラクターの管理を行うクラスへの参照です。 | |
/// </summary> | |
EnemyStatusManager _enemyStatusManager; | |
/// <summary> | |
/// 参照をセットします。 | |
/// </summary> | |
public void SetReferences(BattleManager battleManager, BattleActionProcessor actionProcessor) | |
{ | |
_battleManager = battleManager; | |
_actionProcessor = actionProcessor; | |
_messageWindowController = _battleManager.GetWindowManager().GetMessageWindowController(); | |
_enemyStatusManager = _battleManager.GetEnemyStatusManager(); | |
} | |
/// <summary> | |
/// アイテムのアクションを処理します。 | |
/// </summary> | |
public void ProcessAction(BattleAction action) | |
{ | |
var itemData = ItemDataManager.GetItemDataById(action.itemId); | |
if (itemData == null) | |
{ | |
SimpleLogger.Instance.LogWarning($"アイテムデータが見つかりませんでした。 ID: {action.itemId}"); | |
return; | |
} | |
// 消費アイテムの場合、所持数を減らします。 | |
if (action.isActorFriend && itemData.itemCategory == ItemCategory.ConsumableItem) | |
{ | |
CharacterStatusManager.UseItem(action.itemId); | |
} | |
_actionProcessor.SetPauseProcess(true); | |
if (itemData.itemEffect.itemEffectCategory == ItemEffectCategory.Recovery) | |
{ | |
int hpDelta = BattleCalculator.CalculateHealValue(itemData.itemEffect.value); | |
int mpDelta = 0; | |
if (action.isActorFriend) | |
{ | |
CharacterStatusManager.ChangeCharacterStatus(action.targetId, hpDelta, mpDelta); | |
} | |
else | |
{ | |
_enemyStatusManager.ChangeEnemyStatus(action.targetId, hpDelta, mpDelta); | |
} | |
StartCoroutine(ShowItemHealMessage(action, itemData.itemName, hpDelta)); | |
} | |
else | |
{ | |
Debug.LogWarning($"未定義のアイテム効果です。 ID: {itemData.itemId}"); | |
} | |
} | |
/// <summary> | |
/// 回復アイテムのメッセージを表示します。 | |
/// </summary> | |
IEnumerator ShowItemHealMessage(BattleAction action, string itemName, int healValue) | |
{ | |
string actorName = _actionProcessor.GetCharacterName(action.actorId, action.isActorFriend); | |
string targetName = _actionProcessor.GetCharacterName(action.targetId, action.isTargetFriend); | |
_actionProcessor.SetPauseMessage(true); | |
_messageWindowController.GenerateUseItemMessage(actorName, itemName); | |
while (_actionProcessor.IsPausedMessage) | |
{ | |
yield return null; | |
} | |
_actionProcessor.SetPauseMessage(true); | |
_messageWindowController.GenerateHpHealMessage(targetName, healValue); | |
_battleManager.OnUpdateStatus(); | |
while (_actionProcessor.IsPausedMessage) | |
{ | |
yield return null; | |
} | |
_actionProcessor.SetPauseProcess(false); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment