タイル
ハックフォープレイのマップエディタはオートレイヤー方式を採用している
オートレイヤーとは、タイルがどのレイヤーに位置するのかを自動的に判定すること
一般的なアルゴリズムを採用している訳ではなく、それらしく使えるよう素材とアルゴリズムを少しずつ改善している
床タイル問題
マップエディタは内部的に3つのレイヤーを持っている
3つまでタイルを重ねられるという意味。逆にいうと、4つ以上のタイルを重ねることができない
レイヤーを増やすことはマップのデータ量に直接的なインパクトを与えるので、データ量の観点から制限をかけている
また、最下層のレイヤーは地面しか置けないことに決め打ちしている
木を置いた後に地面を変えたい場合に、木を塗り直す必要がなくなる
このアルゴリズムで本当に良いのかは検討が必要
ここで、地面と床を分けるかどうかという問題が発生する
地面→床→テーブル→食器 という順番でタイルを並べた場合、合計4レイヤー必要なので、1つ消す必要がある
地面は決め打ちなので消さないとすれば、消えるのは床という事になる
もしもテーブルに透過ピクセルが含まれている場合、床が消えて地面が剥き出しになる
あるタイルが地面なのか床なのかという情報はあらかじめ決められているため、ユーザーにはどうしようもない
解決策
4レイヤーにする ❌
データ量とのトレードオフはあるものの、1レイヤー増やすくらいなら不可能ではない
4レイヤーで解決するのか(そのうち5、6と欲しくなるのでは?)は、まだ分からない
地面レイヤーを決め打ちにするのをやめる
地面レイヤーは特別なペンにする方法
つまり「奥に描けるペン」
操作が煩雑になるので微妙。バケツと組み合わせられない
地面レイヤーのタイルをいっぺんに塗り替える機能として「はいけい」を選べるようにしても良いのでは? ✅
そのための
base
プロパティを追加したではないか! base
+ 3レイヤーで実質4レイヤーあるはずなのに、今は base
を描画していない これは common を先にアップデートする必要がある
v0.38 で実装した
base
があるおかげで、3レイヤー全てをフレキシブルに使うことができるようになった