「Signs and markers」の編集履歴(バックアップ)一覧はこちら
「Signs and markers」(2012/11/11 (日) 22:17:34) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*Signs and Markers
看板とマーカー
Overviewrは看板やマーカー、ポイント(原文points of interest:以下POI)をマップに表示できます。
普通の設定とはちょっと違うので、注意して見てみましょう。
*設定ファイル
**フィルタ関数
フィルタ関数とはpythonの関数で、POIがどのにmarkerSetに属するかを決め、どのように表示するかを設定します。
引数は一つ(辞書:連想配列のようなもの)で、返り値は表示するために用意された文字列です。
例
#highlight(python){{
def signFilter(poi):
if poi['id'] == 'Sign':
return "\n".join([poi['Text1'], poi['Text2'], poi['Text3'], poi['Text4']])
}}
もしPOIが合わなければ、何も返しません。
(Pythonの関数の仕様で、'return'無しに関数が終わった時にこうなります。)
引数はチャンクファイルから直接取得したTileEntityやEntityです。
プレイヤーの場所やスポーンのような特殊なEntitiyであることもあるでしょう。
上の例ではEntityが看板(sign)だった場合、書かれている4行を返します。
TileEntityやEntityについてもっと知りたければ、[[MinecraftWikiのChunk Format>http://www.minecraftwiki.net/wiki/Chunk_format]]を見て下さい。
ちょっと違う例
#highlight(python){{
def chestFilter(poi):
if poi['id'] == "Chest":
return "Chest with %d items" % len(poi['Items'])
}}
idがChest(チェスト)なら、チェスト内のアイテム数を取得していますね。
**特殊なPOI
2種類の特殊なPOIがあり、それぞれ特殊なIDをもっています。
:PlayerSpawn|スポーン位置を示しています。
プレイヤー名はEntityIdキーに、場所はx,y,zキーに格納されています。
:Player|プレイヤーの最後の位置を示しています。
プレイヤー名はEntityIdキーに、場所はx,y,zキーに格納されています。
>注
>プレイヤーの位置は、シングルであればlevel.datマルチであればplayer.datファイルから取得されます。
>位置情報はワールドをセーブした時のみ書き込まれますので、リアルタイムの情報というわけではありません。
player関係の例
#highlight(python){{
def playerIcons(poi):
if poi['id'] == 'Player':
poi['icon'] = "http://overviewer.org/avatar/%s" % poi['EntityId']
return "Last known location for %s" % poi['EntityId']
}}
idがPlayerならiconに使用しているスキンの画像を取得して(上のURLの%sに自分がminecraftで使っているIDを入れてみるとわかります)
誰々の最後の位置はここだというメッセージを返してますね。
**レンダー辞書キー
それぞれのレンダーでフィルターを使わなくても、複数使っても良いです。
設定したフィルタ関数は、レンダリングしたマップの'Signs'ドロップダウンメニューから選ぶことができるようになります。
例
#highlight(python){{
renders['myrender'] = {
'world': 'myworld',
'title': "Example",
'markers': [dict(name="All signs", filterFunction=signFilter),
dict(name="Chests", filterFunction=chestFilter, icon="chest.png", createInfoWindow=False)]
}
}}
以下マーカー辞書で使えるキーの解説
:name|'Signs'ドロップダウンメニューで表示される名前。
:filterFunction|使用するフィルター関数。最低1つは引数が必要で、その返り値は文字列か何も無し。
;icon|任意で追加。POIを表示するためのアイコンを指定。省略すると看板アイコン。
POIごとに違うアイコンを設定することの可能(上のPlayerの例を参照)。
:createInfoWindow|任意で追加。アイコンをクリックして情報ウィンドウを開くか否か。デフォルトはTrue。
:checked|任意で追加。マップを開いた時にこのマーカーグループが見えるかどうか。デフォルトはFalse。
*POIマーカーを生成
注
通常のoverviwer.pyでのマップレンダーではマーカーが更新&追加されません!
以下のオプションのどれかを使って、マップを生成しましょう
**--genpoi オプション
overviewer.pyを実行するときに--genpoiオプションを付けるとPOIマーカーを生成できます。
例
/path/to/overviewer.py --config /path/to/your/config/file.conf --genpoi
>注:--genpoiオプションを付けるとマップは生成されません。マーカーのみの生成になります。
**genPOI.py
genPOI.pyというスクリプトもあり、直接使う事ができます。
例
/path/to/overviewer/genpoi.py --config=/path/to/your/config.file
アウトプットディレクトリに必要なJavaScriptファイルも生成してくれます。
*Signs and Markers
看板とマーカー
Overviewrは看板やマーカー、ポイント(原文points of interest:以下POI)をマップに表示できます。
普通の設定とはちょっと違うので、注意して見てみましょう。
*設定ファイル
**フィルタ関数
フィルタ関数とはpythonの関数で、POIがどのmarkerSetに属するかを決め、どのように表示するかを設定します。
引数は一つ(辞書:連想配列のようなもの)で、返り値は表示するために用意された文字列です。
例
#highlight(python){{
def signFilter(poi):
if poi['id'] == 'Sign':
return "\n".join([poi['Text1'], poi['Text2'], poi['Text3'], poi['Text4']])
}}
もしPOIが合わなければ、何も返しません。
(Pythonの関数の仕様で、'return'無しに関数が終わった時にこうなります。)
引数はチャンクファイルから直接取得したTileEntityやEntityです。
プレイヤーの場所やスポーンのような特殊なEntitiyであることもあるでしょう。
上の例ではEntityが看板(sign)だった場合、書かれている4行を返します。
TileEntityやEntityについてもっと知りたければ、[[MinecraftWikiのChunk Format>http://www.minecraftwiki.net/wiki/Chunk_format]]を見て下さい。
ちょっと違う例
#highlight(python){{
def chestFilter(poi):
if poi['id'] == "Chest":
return "Chest with %d items" % len(poi['Items'])
}}
idがChest(チェスト)なら、チェスト内のアイテム数を取得していますね。
**特殊なPOI
2種類の特殊なPOIがあり、それぞれ特殊なIDをもっています。
:PlayerSpawn|スポーン位置を示しています。
プレイヤー名はEntityIdキーに、場所はx,y,zキーに格納されています。
:Player|プレイヤーの最後の位置を示しています。
プレイヤー名はEntityIdキーに、場所はx,y,zキーに格納されています。
>注
>プレイヤーの位置は、シングルであればlevel.datマルチであればplayer.datファイルから取得されます。
>位置情報はワールドをセーブした時のみ書き込まれますので、リアルタイムの情報というわけではありません。
player関係の例
#highlight(python){{
def playerIcons(poi):
if poi['id'] == 'Player':
poi['icon'] = "http://overviewer.org/avatar/%s" % poi['EntityId']
return "Last known location for %s" % poi['EntityId']
}}
idがPlayerならiconに使用しているスキンの画像を取得して(上のURLの%sに自分がminecraftで使っているIDを入れてみるとわかります)
誰々の最後の位置はここだというメッセージを返してますね。
**レンダー辞書キー
それぞれのレンダーでフィルターを使わなくても、複数使っても良いです。
設定したフィルタ関数は、レンダリングしたマップの'Signs'ドロップダウンメニューから選ぶことができるようになります。
例
#highlight(python){{
renders['myrender'] = {
'world': 'myworld',
'title': "Example",
'markers': [dict(name="All signs", filterFunction=signFilter),
dict(name="Chests", filterFunction=chestFilter, icon="chest.png", createInfoWindow=False)]
}
}}
以下マーカー辞書で使えるキーの解説
:name|'Signs'ドロップダウンメニューで表示される名前。
:filterFunction|使用するフィルター関数。最低1つは引数が必要で、その返り値は文字列か何も無し。
;icon|任意で追加。POIを表示するためのアイコンを指定。省略すると看板アイコン。
POIごとに違うアイコンを設定することの可能(上のPlayerの例を参照)。
:createInfoWindow|任意で追加。アイコンをクリックして情報ウィンドウを開くか否か。デフォルトはTrue。
:checked|任意で追加。マップを開いた時にこのマーカーグループが見えるかどうか。デフォルトはFalse。
*POIマーカーを生成
注
通常のoverviwer.pyでのマップレンダーではマーカーが更新&追加されません!
以下のオプションのどれかを使って、マップを生成しましょう
**--genpoi オプション
overviewer.pyを実行するときに--genpoiオプションを付けるとPOIマーカーを生成できます。
例
/path/to/overviewer.py --config /path/to/your/config/file.conf --genpoi
>注:--genpoiオプションを付けるとマップは生成されません。マーカーのみの生成になります。
**genPOI.py
genPOI.pyというスクリプトもあり、直接使う事ができます。
例
/path/to/overviewer/genpoi.py --config=/path/to/your/config.file
アウトプットディレクトリに必要なJavaScriptファイルも生成してくれます。