/// <summary> /// 指定された状態に遷移可能かを返す /// </summary> /// <param name="newState">遷移したい状態の値</param> /// <returns>状態遷移可能かどうか</returns> protected bool CanTransitionState(Unit.STATES newState) { // @TODO: ドメインに関する実装として切り出す switch (GetState()) { case Unit.STATES.NEUTRAL: return(true); case Unit.STATES.WALKING: return(true); case Unit.STATES.ATTACK: if (newState == Unit.STATES.WALKING) { return(false); } return(true); case Unit.STATES.DAMAGE: if (newState != Unit.STATES.NEUTRAL) { return(false); } return(true); case Unit.STATES.DEAD: return(false); } throw new NotSupportedException($"無効な状態が指定されました: {GetState()}"); }
/// <summary> /// 指定された状態への遷移が可能かどうかを調べて可能な場合に状態遷移する /// </summary> /// <param name="newState">遷移したい状態の値</param> /// <returns>状態遷移が出来たかどうか</returns> public bool TrySetState(Unit.STATES newState) { if (CanTransitionState(newState)) { SetState(newState); return(true); } return(false); }