俺もガンダムだ!

Twitterで任されたので簡単に書いてみたけど,意外に難しい.

module GNDrive
  def transam; end
end

class Gundam
  def initialize(meister)
    @meister = meister
  end
end

class Exia < Gundam
  include GNDrive
end

class Dynames < Gundam
  include GNDrive
end

class Kyrios < Gundam
  include GNDrive

  def transform; end
end

class Virtue < Gundam
  class Nadleeh < Gundam
    include GNDrive

    def trial; end
  end

  def initialize(meister)
    @self = Nadleeh.new(meister)
  end

  def purge
    @self
  end
end

class Meister
  def initialize(name, serif)
    @name  = name
    @serif = serif
  end

  attr_reader :name, :serif
end

で,こんな感じ.

exia    = Exia.new(Meister.new('刹那',           '俺がガンダムだ!'))
dynames = Dynames.new(Meister.new('ロックオン',  '目標を狙い打つぜ!'))
kyrios  = Kyrios.new(Meister.new('アレルヤ',     'セリフがないよ!'))
virtue  = Virtue.new(Meister.new('ティエリア',   '万死に値する!'))

武器とかの情報がないので本当にベースしか書いてないのだけど,GNDriveがOOみたいに複数ある場合はこれだと厳しいかもしれない(GNDriveを構造体みたいなもので表現した方がいいかも?).ナドレのトライアルシステムに対しても,他のガンダムに通知する上手い方法が思いつかない.各クラスに対してオブザーバでも用意するべきかと思うけど,でもガンダムOOのアニメ内だと,その場のガンダムの影響範囲を絞れるようだし,少し工夫が必要か.
こういう設定をいかにコードに落とすかというのも,暇潰しにはいいかもしれない.今回はRubyだけど多重継承とかだとまた違ったアプローチが出来るかな.