しょうかんする

しょうかんする

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
Copied!
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 という位置付けにした
Powered by Helpfeel