Heatbugs実行の流れ

かなり適当なメモ
実行の流れはHeatbugModelSwarmのbuildActions内で定義

大事なのは下の2行

  [modelActions createActionTo:      heat        message: M(stepRule)];
  actionForEach =
    [modelActions createActionForEach: heatbugList message: M(step)];


まずHeatSpaceのインターフェースであるDiffuse2dのstepRule関数を実行
この関数で周囲のマスから温度の伝搬を行う
詳細はDiffuse2d.m内の実装を参照
Diffuse2d.mはhttp://pj.freefaculty.org/Swarm/Swarm-src/からダウンロードした
ソースコード内にある
Diffuse2dで出てくるdiscrete2dSiteAtというマクロはDiscrete2d.hに以下のように定義されていて

#define discrete2dSiteAt(l, offsets, x, y) ((l) + (offsets)[(y)] + (x))

座標x, yのポインタを返すマクロになっている
これでx, y上の温度を取得している


次にHeatbugのstep関数を実行
この関数でHeatbugの移動をし,温度を自分がいたマスに残す
詳細はHeatbug.m内の実装を参照