mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 10:05:44 -04:00
Update lighting appropriately when block definitions are changed
This commit is contained in:
parent
f1e7cad094
commit
a994bf367c
@ -102,7 +102,7 @@ static PackedCol ClassicLighting_Color_ZSide_Fast(int x, int y, int z) {
|
|||||||
return y > classic_heightmap[Lighting_Pack(x, z)] ? Env.SunZSide : Env.ShadowZSide;
|
return y > classic_heightmap[Lighting_Pack(x, z)] ? Env.SunZSide : Env.ShadowZSide;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ClassicLighting_Refresh(void) {
|
void ClassicLighting_Refresh(void) {
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < World.Width * World.Length; i++) {
|
for (i = 0; i < World.Width * World.Length; i++) {
|
||||||
classic_heightmap[i] = HEIGHT_UNCALCULATED;
|
classic_heightmap[i] = HEIGHT_UNCALCULATED;
|
||||||
|
@ -65,6 +65,7 @@ void Lighting_ApplyActive(void);
|
|||||||
void ModernLighting_SetActive(void);
|
void ModernLighting_SetActive(void);
|
||||||
void ModernLighting_OnEnvVariableChanged(void* obj, int envVar);
|
void ModernLighting_OnEnvVariableChanged(void* obj, int envVar);
|
||||||
|
|
||||||
|
void ClassicLighting_Refresh(void);
|
||||||
void ClassicLighting_FreeState(void);
|
void ClassicLighting_FreeState(void);
|
||||||
void ClassicLighting_AllocState(void);
|
void ClassicLighting_AllocState(void);
|
||||||
int ClassicLighting_GetLightHeight(int x, int z);
|
int ClassicLighting_GetLightHeight(int x, int z);
|
||||||
|
@ -486,8 +486,9 @@ static void ModernLighting_OnBlockChanged(int x, int y, int z, BlockID oldBlock,
|
|||||||
/* Invalidates/Resets lighting state for all of the blocks in the world */
|
/* Invalidates/Resets lighting state for all of the blocks in the world */
|
||||||
/* (e.g. because a block changed whether it is full bright or not) */
|
/* (e.g. because a block changed whether it is full bright or not) */
|
||||||
static void ModernLighting_Refresh(void) {
|
static void ModernLighting_Refresh(void) {
|
||||||
ModernLighting_InitPalettes();
|
ClassicLighting_Refresh();
|
||||||
/* Set all the chunk lighting data flags to CHUNK_UNCALCULATED? */
|
ModernLighting_FreeState();
|
||||||
|
ModernLighting_AllocState();
|
||||||
}
|
}
|
||||||
static cc_bool ModernLighting_IsLit(int x, int y, int z) { return true; }
|
static cc_bool ModernLighting_IsLit(int x, int y, int z) { return true; }
|
||||||
static cc_bool ModernLighting_IsLit_Fast(int x, int y, int z) { return true; }
|
static cc_bool ModernLighting_IsLit_Fast(int x, int y, int z) { return true; }
|
||||||
|
@ -1718,10 +1718,17 @@ static void CustomModels_Reset(void) { }
|
|||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*------------------------------------------------------Custom blocks------------------------------------------------------*
|
*------------------------------------------------------Custom blocks------------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static void BlockDefs_OnBlockUpdated(BlockID block, cc_bool didBlockLight) {
|
static void BlockDefs_OnBlocksLightPropertyUpdated(BlockID block, cc_bool oldProp) {
|
||||||
if (!World.Loaded) return;
|
if (!World.Loaded) return;
|
||||||
/* Need to refresh lighting when a block's light blocking state changes */
|
/* Need to refresh lighting when a block's light blocking state changes */
|
||||||
if (Blocks.BlocksLight[block] != didBlockLight) Lighting.Refresh();
|
if (Blocks.BlocksLight[block] != oldProp) Lighting.Refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void BlockDefs_OnBrightnessPropertyUpdated(BlockID block, cc_uint8 oldProp) {
|
||||||
|
if (!World.Loaded) return;
|
||||||
|
if (!Lighting_Modern) return;
|
||||||
|
/* Need to refresh modern lighting when a block's brightness changes */
|
||||||
|
if (Blocks.Brightness[block] != oldProp) Lighting.Refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
static TextureLoc BlockDefs_Tex(cc_uint8** ptr) {
|
static TextureLoc BlockDefs_Tex(cc_uint8** ptr) {
|
||||||
@ -1740,13 +1747,15 @@ static TextureLoc BlockDefs_Tex(cc_uint8** ptr) {
|
|||||||
static BlockID BlockDefs_DefineBlockCommonStart(cc_uint8** ptr, cc_bool uniqueSideTexs) {
|
static BlockID BlockDefs_DefineBlockCommonStart(cc_uint8** ptr, cc_bool uniqueSideTexs) {
|
||||||
cc_string name;
|
cc_string name;
|
||||||
BlockID block;
|
BlockID block;
|
||||||
cc_bool didBlockLight;
|
cc_bool oldBlocksLight;
|
||||||
|
cc_uint8 oldBrightness;
|
||||||
float speedLog2;
|
float speedLog2;
|
||||||
cc_uint8 sound;
|
cc_uint8 sound;
|
||||||
cc_uint8* data = *ptr;
|
cc_uint8* data = *ptr;
|
||||||
|
|
||||||
ReadBlock(data, block);
|
ReadBlock(data, block);
|
||||||
didBlockLight = Blocks.BlocksLight[block];
|
oldBlocksLight = Blocks.BlocksLight[block];
|
||||||
|
oldBrightness = Blocks.Brightness[block];
|
||||||
Block_ResetProps(block);
|
Block_ResetProps(block);
|
||||||
|
|
||||||
name = UNSAFE_GetString(data); data += STRING_SIZE;
|
name = UNSAFE_GetString(data); data += STRING_SIZE;
|
||||||
@ -1768,7 +1777,7 @@ static BlockID BlockDefs_DefineBlockCommonStart(cc_uint8** ptr, cc_bool uniqueSi
|
|||||||
Block_Tex(block, FACE_YMIN) = BlockDefs_Tex(&data);
|
Block_Tex(block, FACE_YMIN) = BlockDefs_Tex(&data);
|
||||||
|
|
||||||
Blocks.BlocksLight[block] = *data++ == 0;
|
Blocks.BlocksLight[block] = *data++ == 0;
|
||||||
BlockDefs_OnBlockUpdated(block, didBlockLight);
|
BlockDefs_OnBlocksLightPropertyUpdated(block, oldBlocksLight);
|
||||||
|
|
||||||
sound = *data++;
|
sound = *data++;
|
||||||
Blocks.StepSounds[block] = sound;
|
Blocks.StepSounds[block] = sound;
|
||||||
@ -1776,6 +1785,7 @@ static BlockID BlockDefs_DefineBlockCommonStart(cc_uint8** ptr, cc_bool uniqueSi
|
|||||||
if (sound == SOUND_GLASS) Blocks.StepSounds[block] = SOUND_STONE;
|
if (sound == SOUND_GLASS) Blocks.StepSounds[block] = SOUND_STONE;
|
||||||
|
|
||||||
Blocks.Brightness[block] = Block_ReadBrightness(*data++);
|
Blocks.Brightness[block] = Block_ReadBrightness(*data++);
|
||||||
|
BlockDefs_OnBrightnessPropertyUpdated(block, oldBrightness);
|
||||||
*ptr = data;
|
*ptr = data;
|
||||||
return block;
|
return block;
|
||||||
}
|
}
|
||||||
@ -1812,7 +1822,7 @@ static void BlockDefs_UndefineBlock(cc_uint8* data) {
|
|||||||
didBlockLight = Blocks.BlocksLight[block];
|
didBlockLight = Blocks.BlocksLight[block];
|
||||||
|
|
||||||
Block_UndefineCustom(block);
|
Block_UndefineCustom(block);
|
||||||
BlockDefs_OnBlockUpdated(block, didBlockLight);
|
BlockDefs_OnBlocksLightPropertyUpdated(block, didBlockLight);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BlockDefs_DefineBlockExt(cc_uint8* data) {
|
static void BlockDefs_DefineBlockExt(cc_uint8* data) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user