diff --git a/src/Builder.c b/src/Builder.c index 5fbae7cab..ccb9135dc 100644 --- a/src/Builder.c +++ b/src/Builder.c @@ -760,7 +760,7 @@ static void Builder_SetDefault(void) { Builder_PostStretchTiles = Builder_DefaultPostStretchTiles; } -void NormalBuilder_SetActive(void) { +static void NormalBuilder_SetActive(void) { Builder_SetDefault(); Builder_StretchXLiquid = NormalBuilder_StretchXLiquid; Builder_StretchX = NormalBuilder_StretchX; @@ -1251,7 +1251,7 @@ static void Adv_PreStretchTiles(int x1, int y1, int z1) { } } -void AdvBuilder_SetActive(void) { +static void AdvBuilder_SetActive(void) { Builder_SetDefault(); Builder_StretchXLiquid = Adv_StretchXLiquid; Builder_StretchX = Adv_StretchX; @@ -1273,7 +1273,7 @@ void Builder_ApplyActive(void) { } } -void Builder_Init(void) { +static void Builder_Init(void) { Builder_Offsets[FACE_XMIN] = -1; Builder_Offsets[FACE_XMAX] = 1; Builder_Offsets[FACE_ZMIN] = -EXTCHUNK_SIZE; @@ -1281,11 +1281,19 @@ void Builder_Init(void) { Builder_Offsets[FACE_YMIN] = -EXTCHUNK_SIZE_2; Builder_Offsets[FACE_YMAX] = EXTCHUNK_SIZE_2; - if (Game_ClassicMode) return; - Builder_SmoothLighting = Options_GetBool(OPT_SMOOTH_LIGHTING, false); + if (!Game_ClassicMode) Builder_SmoothLighting = Options_GetBool(OPT_SMOOTH_LIGHTING, false); + Builder_ApplyActive(); } -void Builder_OnNewMapLoaded(void) { +static void Builder_OnNewMapLoaded(void) { Builder_SidesLevel = max(0, Env_SidesHeight); Builder_EdgeLevel = max(0, Env.EdgeHeight); } + +struct IGameComponent Builder_Component = { + Builder_Init, /* Init */ + NULL, /* Free */ + NULL, /* Reset */ + NULL, /* OnNewMap */ + Builder_OnNewMapLoaded /* OnNewMapLoaded */ +}; diff --git a/src/Builder.h b/src/Builder.h index f0fbd156d..d61c2837d 100644 --- a/src/Builder.h +++ b/src/Builder.h @@ -9,17 +9,15 @@ NormalMeshBuilder: Copyright 2014-2019 ClassiCube | Licensed under BSD-3 */ struct ChunkInfo; +struct IGameComponent; +extern struct IGameComponent Builder_Component; extern int Builder_SidesLevel, Builder_EdgeLevel; /* Whether smooth/advanced lighting mesh builder is used. */ extern cc_bool Builder_SmoothLighting; -void Builder_Init(void); -void Builder_OnNewMapLoaded(void); /* Builds the mesh of vertices for the given chunk. */ void Builder_MakeChunk(struct ChunkInfo* info); -void NormalBuilder_SetActive(void); -void AdvBuilder_SetActive(void); void Builder_ApplyActive(void); #endif diff --git a/src/Game.c b/src/Game.c index b8a5400dc..96e75cc5b 100644 --- a/src/Game.c +++ b/src/Game.c @@ -32,6 +32,7 @@ #include "Menus.h" #include "Audio.h" #include "Stream.h" +#include "Builder.h" struct _GameData Game; int Game_Port; @@ -454,6 +455,7 @@ static void Game_Load(void) { Game_AddComponent(&Inventory_Component); World_Reset(); + Game_AddComponent(&Builder_Component); Game_AddComponent(&MapRenderer_Component); Game_AddComponent(&EnvRenderer_Component); Game_AddComponent(&Server_Component); diff --git a/src/MapRenderer.c b/src/MapRenderer.c index 0c262874a..6dec149d3 100644 --- a/src/MapRenderer.c +++ b/src/MapRenderer.c @@ -774,7 +774,6 @@ static void MapRenderer_OnNewMapLoaded(void) { /*}*/ MapRenderer_InitChunks(); - Builder_OnNewMapLoaded(); lastCamPos = Vec3_BigPos(); } @@ -792,9 +791,6 @@ static void MapRenderer_Init(void) { MapRenderer_1DUsedCount = 87; /* Atlas1D_UsedAtlasesCount(); */ chunkPos = IVec3_MaxValue(); MapRenderer_MaxUpdates = Options_GetInt(OPT_MAX_CHUNK_UPDATES, 4, 1024, 30); - - Builder_Init(); - Builder_ApplyActive(); MapRenderer_CalcViewDists(); } @@ -812,8 +808,8 @@ static void MapRenderer_Free(void) { } struct IGameComponent MapRenderer_Component = { - MapRenderer_Init, /* Init */ - MapRenderer_Free, /* Free */ + MapRenderer_Init, /* Init */ + MapRenderer_Free, /* Free */ MapRenderer_OnNewMap, /* Reset */ MapRenderer_OnNewMap, /* OnNewMap */ MapRenderer_OnNewMapLoaded /* OnNewMapLoaded */