メモ書き
SubtypeIdについて
同じような機能のブロックだとInterfaceが同じ場合がある。
例)Oxygen TankとHydrogen Tank
大きさが違うだけのブロックでもそういうことがある。
Large Ship用とSmall Ship用みたいな
例)Oxygen TankとHydrogen Tank
大きさが違うだけのブロックでもそういうことがある。
Large Ship用とSmall Ship用みたいな
ブロックのListを取得するとき、Interfaceでフィルタをかけてるので、たとえばIMyOxygenTankで
取得すると
大型船・ステーション用Oxygen Tank、小型船用Oxygen Tank、大型船・ステーション用Hydrogen Tank、小型船用Hydrogen Tank
が混ざって取得されてしまう。
取得すると
大型船・ステーション用Oxygen Tank、小型船用Oxygen Tank、大型船・ステーション用Hydrogen Tank、小型船用Hydrogen Tank
が混ざって取得されてしまう。
こんなときはSubtypeIdをつかって判別する。
var blocks = new List<IMyTerminalBlock>(); GridTerminalSystem.GetBlocksOfType<IMyOxygenTank>(blocks); string subtype = (blocks[0] as IMyOxygenTank).BlockDefinition.SubtypeId;
これでsubtypeにSubtypeIdが取得できる。各ブロックの定義はCubeBlocks.sbcにあるっぽい。
大型船用 酸素タンク : SubtypeId = ""
小型船用 酸素タンク : SubtypeId = "OxygenTankSmall"
大型船用 水素タンク : SubtypeId = "LargeHydrogenTank"
小型船用 水素タンク : SubtypeId = "SmallHydrogenTank"
小型船用 酸素タンク : SubtypeId = "OxygenTankSmall"
大型船用 水素タンク : SubtypeId = "LargeHydrogenTank"
小型船用 水素タンク : SubtypeId = "SmallHydrogenTank"
あとは自分で調べてね
なお、アイテムにもSubtypeIdがあるよ。