kuriuminoki / DuplicationHeart

複製のHeart
0 stars 0 forks source link

CharacterControllerの役割について #11

Closed kuriuminoki closed 1 year ago

kuriuminoki commented 1 year ago

現状CharacterControllerはCharacterActionを使ってキャラを操作するための処理をすべて受け持っている。 しかしその実装では、操作方法(キーボード or AI or DualShock?)等の切り替えをする場合Controllerごと変える必要がある。

キーボードの入力受付やAIはControllerから完全に分離して別のクラス(Player とか Brainクラスと命名)にし、それをControllerにインジェクションする方がよさそう。

変更後のUML図

classDiagram
  class CharacterAction {
    +void キャラを動かす()
  }

  class CharacterController {
    # CharacterAction* action
    # Brain* brain
    +void Actionを使ってキャラを操作()
  }

  class StickController {
    +void 棒人間を操作()
  }

  class Brain {
    +virtual void 指示()
  }

  class Keyboard {
    +void キーボードによる指示()
  }

  class BattleAI {
    +void 敵対するキャラに攻撃するよう指示()
  }

  class FollowAI {
    +void あるキャラについていくよう指示()
  }

  CharacterController o-- CharacterAction
  CharacterController o-- Brain

  CharacterController <|-- StickController
  Brain <|-- Keyboard
  Brain <|-- BattleAI
  Brain<|-- FollowAI
kuriuminoki commented 1 year ago

15 において実装完了。

Brainクラスの派生クラスとしてAIを実装。後々の実装が楽になりそう。