1/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2/* If you are missing that file, acquire a complete release at teeworlds.com. */
3#include "maplayers.h"
4
5#include <game/client/gameclient.h>
6#include <game/localization.h>
7
8CMapLayers::CMapLayers(ERenderType Type, bool OnlineOnly)
9{
10 m_Type = Type;
11 m_OnlineOnly = OnlineOnly;
12
13 // static parameters for ingame rendering
14 m_Params.m_RenderType = m_Type;
15 m_Params.m_RenderInvalidTiles = false;
16 m_Params.m_TileAndQuadBuffering = true;
17 m_Params.m_RenderTileBorder = true;
18}
19
20void CMapLayers::OnInit()
21{
22 m_pLayers = Layers();
23 m_pImages = &GameClient()->m_MapImages;
24 m_MapRenderer.Clear();
25}
26
27CCamera *CMapLayers::GetCurCamera()
28{
29 return &GameClient()->m_Camera;
30}
31
32void CMapLayers::OnMapLoad()
33{
34 FRenderUploadCallback FRenderCallback = [&](const char *pTitle, const char *pMessage, int IncreaseCounter) { GameClient()->m_Menus.RenderLoading(pCaption: pTitle, pContent: pMessage, IncreaseCounter); };
35 auto FRenderCallbackOptional = std::make_optional<FRenderUploadCallback>(args&: FRenderCallback);
36
37 const char *pLoadingTitle = Localize(pStr: "Loading map");
38 const char *pLoadingMessage = Localize(pStr: "Uploading map data to GPU");
39 GameClient()->m_Menus.RenderLoading(pCaption: pLoadingTitle, pContent: pLoadingMessage, IncreaseCounter: 0);
40
41 // can't do that in CMapLayers::OnInit, because some of this interfaces are not available yet
42 m_MapRenderer.OnInit(pGraphics: Graphics(), pTextRender: TextRender(), pRenderMap: RenderMap());
43
44 m_EnvEvaluator = CEnvelopeState(m_pLayers->Map(), m_OnlineOnly);
45 m_EnvEvaluator.OnInterfacesInit(pClient: GameClient());
46 m_MapRenderer.Load(Type: m_Type, pLayers: m_pLayers, pMapImages: m_pImages, pEnvelopeEval: &m_EnvEvaluator, RenderCallbackOptional: FRenderCallbackOptional);
47}
48
49void CMapLayers::OnRender()
50{
51 if(m_OnlineOnly && Client()->State() != IClient::STATE_ONLINE && Client()->State() != IClient::STATE_DEMOPLAYBACK)
52 return;
53
54 // dynamic parameters for ingame rendering
55 m_Params.m_EntityOverlayVal = m_Type == RENDERTYPE_FULL_DESIGN ? 0 : g_Config.m_ClOverlayEntities;
56 m_Params.m_Center = GetCurCamera()->m_Center;
57 m_Params.m_Zoom = GetCurCamera()->m_Zoom;
58 m_Params.m_RenderText = g_Config.m_ClTextEntities;
59 m_Params.m_DebugRenderGroupClips = g_Config.m_DbgRenderGroupClips;
60 m_Params.m_DebugRenderQuadClips = g_Config.m_DbgRenderQuadClips;
61 m_Params.m_DebugRenderClusterClips = g_Config.m_DbgRenderClusterClips;
62 m_Params.m_DebugRenderTileClips = g_Config.m_DbgRenderTileClips;
63
64 m_MapRenderer.Render(Params: m_Params);
65}
66