ゲーム中のプレイヤーの視界をマップ全域に広げる場合
デバッグコンソールの reveal all コマンドや
既存パネルのMap.ltpのRevealコントロールなどが使われるが
これをやると毎度、自然遺産発見のムービーが都度流れたり、指導者が全員挨拶してくる
これが面倒な場合
別の方法で視界フルオープンすることでムービーを回避できる
(別に面倒でないなら reveal all で充分)
既存パネルのMap.ltpにSet Observer To OBSERVERというコントロールがあり
これを起動すると、ゲーム画面がオブザーバー視点に切り替わる
オブザーバー視点はどの文明の視界でもなくマップ全域を見通している視界で
オートプレイなどで使用する視点である
PlayerManager.SetLocalObserverTo(PlayerTypes.OBSERVER);
コントロールを押すだけでマップ全域が見通せるが
別視界への切り替えなので、操作している文明の視界の扱いはそのままで
また画面内のグラフィックの更新も、操作している文明分しかされない
そこで
オブザーバー視点に切り替えてる間に
同じMap.ltp内のRevealコントロールで操作文明の視界を全開にしてから
視点を操作文明の視界に戻せば、自然遺産のムービーは流れない
視点を自分が操作している文明に戻すにはSet Observer To OBSERVERの上にあるリストで
自分の文明を選択してSet Observer To Selectedのコントロールを押せばいい
if (Game.GetLocalPlayer() ~= -1) then local pVis = PlayersVisibility[Game.GetLocalPlayer()]; for iPlotIndex = 0, Map.GetPlotCount()-1, 1 do pVis:ChangeVisibilityCount(iPlotIndex, 1); end end
指導者の挨拶に関しては
視界を全域に広げる際に他の指導者を発見して、挨拶が始まるので
視界を広げる前に、全指導者と遭遇済みにしてしまえば発生しない
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あたりが無難