Integrated Dynamics 備忘録

Integrated Dynamics の個人的メモを雑に記す.
気が向いたらしっかりとまとめるかも?
公式なコードの文法は未履修なのであしからず.

ここに記載したコード プログラムを利用して生じた損害について,
クリエイター(著者)は一切責任を負いません.
また,記載したコード プログラムに誤りがある場合や,
期待する動作をしない場合,期待しない動作をする場合もあります.
自己責任で利用してください.

環境

Minecraft 1.12
Integrated Dynamics シリーズ ※アドオンを含む
2023/10/24 現在 最新バージョン

メモ

Operatorのあれこれ

  • 各種Tunnelの緑色のところには, Operator型 かつ Boolean が返るカードを入れる.
    ※ Operator型 ≠ Operator を利用して作ったカードではない. Operator を利用しても Apply によって型が変わってしまうことがある.

  • Operator に 定数 を入れたい場合は Apply を使う.

  • Operator B の 入力1 に Operator A を 入れる場合 Apply ではなく Pipe . を使う.

  • Operator B :: 入力1 入力2 -> 出力1 のような入力が2つあり, 入力1 に Operator A , 入力2 に 定数 を入れたい場合
    Operator B に Flip を使い Operator B :: 入力2 入力1 のように順序を入れ替えて 定数 を Apply し,その後 Pipe . で Operator A を入れる -> Operator型のカードができる.
    ※ Flipを使わず先に Operator A を Pipe . その後 定数 を Apply すると Operator型のカードにならない.

Integrated Proxy (Forked Proxy)のあれこれ

  • Access Proxy は対象のブロック・空間となる (開けるGUIからはカードを作れない)
    通常と同じように Access Proxy に Reader Writer 等を貼り付けて使う.

  • 3次元の範囲のブロックをスキャンする方法

    • 方針 : 3次元配列と考えるのではなく, 範囲に通し番号(インデックス)を与え,3次元配列を1次元配列として考える.

    • 注意 : この機構に関わる全ての動作Tick数は合わせる必要がある

    • 原点となる座標 x y z の Integer カードを作る
      ※絶対距離(いわゆる座標 F3等で表示される座標) 相対距離(Access Proxyを基準とした座標) 使いたい方に合わせる

      Integer :: x -> OX
      Integer :: y -> OY
      Integer :: z -> OZ

    • 範囲の辺の長さ(原点からの距離) i j k の Integer カードを作る

      Integer :: i -> X
      Integer :: j -> Y
      Integer :: k ->Z

    • 任意の面を作る ここでは XZ面とする.
      ※これによりスキャンの方向(向き)が変わる.

      Multiplication :: X Z -> XZ

    • 範囲の総数を求める

      Multiplication :: XZ Y -> XYZ

    • World Reader で Total Time(Long型) を取得し Integer型 に変換する.

      World Reader :: Total Time -> TotalTime
      Cast(Long to Integer) :: TotalTime -> TotalTimeInt

    • 1Tick 以外で動かす場合 動かしたいTick数で TotalTimeInt を割る必要がある.
      (1Tickで動かす場合でも後で遅くしようと変更しようとすると面倒なので1で割ることを推奨.)

      Integer :: tick -> Tick
      Division :: TotalTimeInt Tick ->LoopTime

    • LoopTimeXYZ で Mod する. (LoopTime % XYZ)
      これにより0から(XYZ-1)までの数値をループするカードが得られる.
      これを通し番号とする. 

      Modulus :: LoopTime XYZ -> Index

      ※ Display に Index を入れて 0から(XYZ-1) のループになっていることを確認することを推奨

    • Index を 面 XZ で割ると現在(Current)のYが得られる. 

      Division :: Index XZ -> CY

    • Index を 面 XZ でModすると現在のXZが得られる.
      ※Yの値によらず常に0から(XZ-1)の値になる.
      つまり3次元として考えてたものが2次元になり,
      2次元配列を1次元配列として考えているのと同じ.

      Modulus :: Index XZ -> CXZ

    • CXZ を 面に使った辺で割る.  (XZ面なので今回はXまたはZ)
      ここでは とする.
      これにより現在のZが得られる.
      ※これによりスキャンの方向(向き)が変わる.

      Division :: CXZ X -> CZ

    • CXZ を上記で使った辺で Modする.
      これにより現在のXが得られる.

      Modulus :: CXZ X -> CX

    • 得られた CX CY CZOX OY OZ で 足す または 引く
      ※基準座標からどのように動くか注意

      Addition :: OX CX -> PX ( or Subtraction :: OX CX -> PX )
      Addition :: OY CY -> PY ( or Subtraction :: OY CY -> PY )
      Addition :: OZ CZ -> PZ ( or Subtraction :: OZ CZ -> PZ )

    • PX PY PZ を Access Proxy に入れる
      想定していた範囲を枠が移動していれば成功
      Access Proxy に Block Reader World Block Importer/Exporter 等を貼り付け 範囲内のブロックが同じかを調べたり,クァーリーやフィラーのような機構を作ることができる.(動作Tickを合わせることを忘れずに)

      ※範囲内のブロックが全て同じかどうかは Delayer を 動作Tickを合わせて Capacity を XYZ と同じにすれば期待する動作が得られる.



この記事が気に入ったらサポートをしてみませんか?