マップ視界フルオープン

視界フルオープンの複数手段

ゲーム中のプレイヤーの視界をマップ全域に広げる場合
デバッグコンソールの reveal all コマンドや
既存パネルのMap.ltpのRevealコントロールなどが使われるが
これをやると毎度、自然遺産発見のムービーが都度流れたり指導者が全員挨拶してくる

これが面倒な場合
別の方法で視界フルオープンすることでムービーを回避できる
(別に面倒でないなら reveal all で充分)

オブザーバー視点

既存パネルのMap.ltpSet Observer To OBSERVERというコントロールがあり
これを起動すると、ゲーム画面がオブザーバー視点に切り替わる

オブザーバー視点はどの文明の視界でもなくマップ全域を見通している視界で
オートプレイなどで使用する視点である

■オブザーバー視点切り替えの関数

PlayerManager.SetLocalObserverTo(PlayerTypes.OBSERVER);

コントロールを押すだけでマップ全域が見通せるが
別視界への切り替えなので、操作している文明の視界の扱いはそのままで
また画面内のグラフィックの更新も、操作している文明分しかされない

そこで

オブザーバー視点に切り替えてる間に
同じMap.ltp内のRevealコントロールで操作文明の視界を全開にしてから
視点を操作文明の視界に戻せば、自然遺産のムービーは流れない

視点を自分が操作している文明に戻すにはSet Observer To OBSERVERの上にあるリストで
自分の文明を選択してSet Observer To Selectedのコントロールを押せばいい

■Revealコントロールの内容

if (Game.GetLocalPlayer() ~= -1) then
	local pVis = PlayersVisibility[Game.GetLocalPlayer()];
	for iPlotIndex = 0, Map.GetPlotCount()-1, 1 do
			pVis:ChangeVisibilityCount(iPlotIndex, 1);
	end
end

全指導者と遭遇

指導者の挨拶に関しては
視界を全域に広げる際に他の指導者を発見して、挨拶が始まるので
視界を広げる前に、全指導者と遭遇済みにしてしまえば発生しない

■全指導者と遭遇済みにするLua

for _, id in ipairs( PlayerManager.GetAliveMajorIDs() ) do
	Players[Game.GetLocalPlayer()]:GetDiplomacy():SetHasMet(id);
end

一括起動コントロール

以上の動作を全て一つのコントロールにまとめれば
クリック一つで視界フルオープンにしつつ自然遺産発見と指導者挨拶のムービーも流れない

■一括起動の内容

local lp = Game.GetLocalPlayer();
if (lp ~= -1) then
	PlayerManager.SetLocalObserverTo(PlayerTypes.OBSERVER);
	for _, id in ipairs( PlayerManager.GetAliveMajorIDs() ) do
		Players[lp]:GetDiplomacy():SetHasMet(id);
	end
	local pVis = PlayersVisibility[lp];
	for iPlotIndex = 0, Map.GetPlotCount()-1, 1 do
		pVis:ChangeVisibilityCount(iPlotIndex, 1);
	end
	PlayerManager.SetLocalObserverTo(lp);
end

パネルからアクセスするLuaファイルは、
既存パネルのMap.ltpと同じTunerMapPanelあたりが無難