しょうかんする
v0.23 で仕様変更 (v0.23.24 で重大なバグフィックスあり)
「十字のはか」からしょうかんされた「緑色のゾンビ」
キャラクターを1つ作って、自分の目の前に置くメソッド
召喚されたキャラクターは自分と同じファミリーに属しており、争わない
メソッドを呼び出すときのパラメータを変更すると、召喚場所を変えられる
ただし、このパラメータは X, Y ではない。
内部的には、
forward, right と呼んでいる this.しょうかんする('緑色のゾンビ', 1, 0) :自分の目の前に出す(初期値) this.しょうかんする('緑色のゾンビ', 0, 0) :自分と同じ場所に出す this.しょうかんする('緑色のゾンビ', 1, 1) :自分から見て右斜め前のマスに出す this.しょうかんする('緑色のゾンビ', -1, 0) :自分の背後に出す 第二引数は正面方向の距離を、第三引数は右手方向の距離を表している
図示するとこんな感じである
それぞれの「はか」は下を向いている
自分の向いている方向を基準に考えるので、
(1, 0) は、下になる 下というより「前」と言った方がいいかも知れない
実装
しょうかんする.tspublic しょうかんする( 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 という位置付けにした