しょうかんする
v0.23 で仕様変更 (v0.23.24 で重大なバグフィックスあり)
「十字のはか」からしょうかんされた「緑色のゾンビ」
キャラクターを1つ作って、自分の目の前に置くメソッド
召喚されたキャラクターは自分と同じファミリーに属しており、争わない
メソッドを呼び出すときのパラメータを変更すると、召喚場所を変えられる
ただし、このパラメータは X, Y ではない。
内部的には、
forward, right
と呼んでいる this.しょうかんする('緑色のゾンビ', 1, 0)
:自分の目の前に出す(初期値) this.しょうかんする('緑色のゾンビ', 0, 0)
:自分と同じ場所に出す this.しょうかんする('緑色のゾンビ', 1, 1)
:自分から見て右斜め前のマスに出す this.しょうかんする('緑色のゾンビ', -1, 0)
:自分の背後に出す 第二引数は正面方向の距離を、第三引数は右手方向の距離を表している
図示するとこんな感じである
それぞれの「はか」は下を向いている
自分の向いている方向を基準に考えるので、
(1, 0)
は、下になる 下というより「前」と言った方がいいかも知れない
実装
しょうかんする.ts
public しょうかんする(
name: string,
forward = 1,
right = 0,
map?: string,
dir?: Dir.IDir
) {
// ...略...
const { x, y } = this.forward; // 現在の自分の向きを表すプロパティ
const appended = _ruleInstance.つくる(
name,
this.mapX + forward * x - right * y, // 召喚されるキャラクターの X 座標
this.mapY + forward * y + right * x, // 召喚されるキャラクターの Y 座標
opt(map, this.map ? this.map.name : undefined),
opt(dir, () => Vector2.from(this.forward)),
this
);
// ...略...
}
どうしてこんなややこしい仕様なのか?
「プレイヤーが爆弾を床に置く」というような利用ケースを想定しているから
プレイヤーの向きは可変なので、右を向いている時には右に、上を向いている時は上に爆弾が出て欲しい
その処理をユーザーが書くのは難しいので、回転による変化をメソッド内部で吸収したい
最初は
forward
(前にいくつ進むか)だけでいいと思っていた しかし「自分の周囲9マスに爆弾を置きたい」と言ったニーズがあることに気づいて、
right
も追加した forward, right
と right, forward
どちらが良いか悩んだが、利用頻度の高い forward
を先に持ってくることで、 right
を optional という位置付けにした