Support LavaLight and LampLight env color part 1

This commit is contained in:
Goodlyay 2024-05-15 20:41:39 -07:00
parent c4235fa653
commit 40f454b602
5 changed files with 49 additions and 48 deletions

View File

@ -539,8 +539,8 @@ int Block_Parse(const cc_string* name) {
/* 0b_0000_1111 */
#define BRIGHTNESS_MASK MODERN_LIGHTING_MAX_LEVEL
/* Reads network format 0b_US--_LLLL where U = uses modern brightness, S = uses sun brightness, and L = brightness */
/* Into CC's native format 0b_SSSS_BBBB where S = sunlight brightness and B = block brightness */
/* Reads network format 0b_US--_LLLL where U = uses fancy brightness, S = uses lamp brightness, and L = brightness */
/* Into CC's native format 0b_SSSS_BBBB where S = lamp brightness and B = lava brightness */
cc_uint8 Block_ReadBrightness(cc_uint8 fullBright) {
cc_bool useSun;
/* If the fullBright byte does not use the flag, we should interpret it as either completely dark or casting max block light */
@ -555,8 +555,9 @@ cc_uint8 Block_ReadBrightness(cc_uint8 fullBright) {
if (useSun) { fullBright <<= MODERN_LIGHTING_SUN_SHIFT; }
return fullBright;
}
/* Writes CC's native 0b_SSSS_BBBB format where S is sunlight brightness and B is block brightness */
/* into Network format 0b_US--_LLLL format where U is uses modern brightness, S is uses sun brightness, and L is brightness */
/* Writes CC's native format 0b_SSSS_BBBB where S = lamp brightness and B = lava brightness */
/* into network format 0b_US--_LLLL where U = uses fancy brightness, S = uses lamp brightness, and L = brightness */
cc_uint8 Block_WriteFullBright(cc_uint8 brightness) {
cc_uint8 blockBrightness, sunBrightness, fullBright;
blockBrightness = brightness & BRIGHTNESS_MASK;

View File

@ -42,15 +42,14 @@ static LightingChunk* chunkLightingData;
#define Modern_MakePaletteIndex(sun, block) ((sun << MODERN_LIGHTING_SUN_SHIFT) | block)
/* Fill in modernLighting_palette with values based on the current environment colors in lieu of recieving a palette from the server */
/* Fill in a palette with values based on the current environment colors */
static void ModernLighting_InitPalette(PackedCol* palette, float shaded) {
PackedCol darkestShadow, defaultBlockLight, blockColor, sunColor, invertedBlockColor, invertedSunColor, finalColor;
int sunLevel, blockLevel;
float blockLerp;
cc_uint8 R, G, B;
defaultBlockLight = Env.BlockLightCol;
//darkestShadow = PackedCol_Lerp(Env.ShadowCol, 0, 0.75f); /* Use a darkened version of shadow color as the darkest color in sun ramp */
defaultBlockLight = Env.LavaLightCol;
darkestShadow = Env.ShadowCol;
for (sunLevel = 0; sunLevel < MODERN_LIGHTING_LEVELS; sunLevel++) {
@ -59,11 +58,7 @@ static void ModernLighting_InitPalette(PackedCol* palette, float shaded) {
sunColor = Env.SunCol;
}
else {
//sunColor = PackedCol_Lerp(darkestShadow, Env.ShadowCol, sunLevel / (float)(MODERN_LIGHTING_LEVELS - 3));
//used -2 before to go from sun to darkest shadow, thus making sun cloned twice at the start of the ramp
blockLerp = max(sunLevel, MODERN_LIGHTING_LEVELS - SUN_LEVELS) / (float)(MODERN_LIGHTING_LEVELS - 1);
//blockLerp *= blockLerp;
blockLerp *= (MATH_PI / 2);
blockLerp = Math_Cos(blockLerp);
sunColor = PackedCol_Lerp(darkestShadow, Env.SunCol, 1 - blockLerp);
@ -92,9 +87,6 @@ static void ModernLighting_InitPalette(PackedCol* palette, float shaded) {
B = 255 - PackedCol_B(finalColor);
palette[Modern_MakePaletteIndex(sunLevel, blockLevel)] =
PackedCol_Scale(PackedCol_Make(R, G, B, 255), shaded);
// PackedCol_Scale(PackedCol_Make(R, G, B, 255),
// shaded + ((1-shaded) * ((MODERN_LIGHTING_LEVELS - sunLevel+1) / (float)MODERN_LIGHTING_LEVELS))
// );
}
}
}
@ -266,7 +258,6 @@ static void FlushLightQueue(cc_bool isSun, cc_bool refreshChunk) {
ln.coords.z += 2;
Light_TrySpreadInto(z, Z, < , World.MaxZ, isSun, MIN, MAX)
}
//Platform_Log1("Handled %i queue entries.", &handled);
}
cc_uint8 GetBlockBrightness(BlockID curBlock, cc_bool isSun) {
@ -516,12 +507,13 @@ static PackedCol ModernLighting_Color_Core(int x, int y, int z, PackedCol* palet
lightData |= MODERN_LIGHTING_SUN_MASK; /* Force the palette to use full sun color */
}
return palette[lightData];
////palette test
//cc_uint8 thing = y % MODERN_LIGHTING_LEVELS;
//cc_uint8 thing2 = z % MODERN_LIGHTING_LEVELS;
//return modernLighting_palette[thing | (thing2 << 4)];
cc_uint8 thing = y % MODERN_LIGHTING_LEVELS;
cc_uint8 thing2 = z % MODERN_LIGHTING_LEVELS;
return modernLighting_palette[thing | (thing2 << 4)];
return palette[lightData];
}
static PackedCol ModernLighting_Color(int x, int y, int z) {
@ -578,8 +570,8 @@ void ModernLighting_OnEnvVariableChanged(void* obj, int envVar) {
/* This is always called, but should only do anything if modern lighting is on */
if (!Lighting_Modern) { return; }
if (envVar == ENV_VAR_SUN_COLOR || envVar == ENV_VAR_SHADOW_COLOR || envVar == ENV_VAR_BLOCKLIGHT_COLOR) {
if (envVar == ENV_VAR_SUN_COLOR || envVar == ENV_VAR_SHADOW_COLOR || envVar == ENV_VAR_LAVALIGHT_COLOR || envVar == ENV_VAR_LAMPLIGHT_COLOR) {
ModernLighting_InitPalettes();
}
if (envVar == ENV_VAR_BLOCKLIGHT_COLOR) MapRenderer_Refresh();
if (envVar == ENV_VAR_LAVALIGHT_COLOR || envVar == ENV_VAR_LAMPLIGHT_COLOR) MapRenderer_Refresh();
}

View File

@ -1155,19 +1155,21 @@ static void CPE_SetEnvCol(cc_uint8* data) {
c = PackedCol_Make(data[2], data[4], data[6], 255);
if (variable == 0) {
Env_SetSkyCol(invalid ? ENV_DEFAULT_SKY_COLOR : c);
Env_SetSkyCol(invalid ? ENV_DEFAULT_SKY_COLOR : c);
} else if (variable == 1) {
Env_SetCloudsCol(invalid ? ENV_DEFAULT_CLOUDS_COLOR : c);
Env_SetCloudsCol(invalid ? ENV_DEFAULT_CLOUDS_COLOR : c);
} else if (variable == 2) {
Env_SetFogCol(invalid ? ENV_DEFAULT_FOG_COLOR : c);
Env_SetFogCol(invalid ? ENV_DEFAULT_FOG_COLOR : c);
} else if (variable == 3) {
Env_SetShadowCol(invalid ? ENV_DEFAULT_SHADOW_COLOR : c);
Env_SetShadowCol(invalid ? ENV_DEFAULT_SHADOW_COLOR : c);
} else if (variable == 4) {
Env_SetSunCol(invalid ? ENV_DEFAULT_SUN_COLOR : c);
Env_SetSunCol(invalid ? ENV_DEFAULT_SUN_COLOR : c);
} else if (variable == 5) {
Env_SetSkyboxCol(invalid ? ENV_DEFAULT_SKYBOX_COLOR : c);
Env_SetSkyboxCol(invalid ? ENV_DEFAULT_SKYBOX_COLOR : c);
} else if (variable == 6) {
Env_SetBlockLightCol(invalid ? ENV_DEFAULT_BLOCKLIGHT_COLOR : c);
Env_SetLavaLightCol(invalid ? ENV_DEFAULT_LAVALIGHT_COLOR : c);
} else if (variable == 7) {
Env_SetLampLightCol(invalid ? ENV_DEFAULT_LAMPLIGHT_COLOR : c);
}
}

View File

@ -183,11 +183,12 @@ void Env_Reset(void) {
PackedCol_GetShaded(Env.SunCol, &Env.SunXSide,
&Env.SunZSide, &Env.SunYMin);
Env.SkyCol = ENV_DEFAULT_SKY_COLOR;
Env.FogCol = ENV_DEFAULT_FOG_COLOR;
Env.CloudsCol = ENV_DEFAULT_CLOUDS_COLOR;
Env.SkyboxCol = ENV_DEFAULT_SKYBOX_COLOR;
Env.BlockLightCol = ENV_DEFAULT_BLOCKLIGHT_COLOR;
Env.SkyCol = ENV_DEFAULT_SKY_COLOR;
Env.FogCol = ENV_DEFAULT_FOG_COLOR;
Env.CloudsCol = ENV_DEFAULT_CLOUDS_COLOR;
Env.SkyboxCol = ENV_DEFAULT_SKYBOX_COLOR;
Env.LavaLightCol = ENV_DEFAULT_LAVALIGHT_COLOR;
Env.LampLightCol = ENV_DEFAULT_LAMPLIGHT_COLOR;
Env.Weather = WEATHER_SUNNY;
Env.ExpFog = false;
}
@ -248,11 +249,12 @@ void Env_SetCloudsCol(PackedCol color) {
void Env_SetSkyboxCol(PackedCol color) {
Env_Set(color, Env.SkyboxCol, ENV_VAR_SKYBOX_COLOR);
}
void Env_SetBlockLightCol(PackedCol color) {
Env_Set(color, Env.BlockLightCol, ENV_VAR_BLOCKLIGHT_COLOR);
void Env_SetLavaLightCol(PackedCol color) {
Env_Set(color, Env.LavaLightCol, ENV_VAR_LAVALIGHT_COLOR);
}
void Env_SetLampLightCol(PackedCol color) {
Env_Set(color, Env.LampLightCol, ENV_VAR_LAMPLIGHT_COLOR);
}
void Env_SetSunCol(PackedCol color) {
PackedCol_GetShaded(color, &Env.SunXSide, &Env.SunZSide, &Env.SunYMin);
Env_Set(color, Env.SunCol, ENV_VAR_SUN_COLOR);

View File

@ -118,7 +118,8 @@ enum EnvVar {
ENV_VAR_CLOUDS_HEIGHT, ENV_VAR_CLOUDS_SPEED, ENV_VAR_WEATHER_SPEED, ENV_VAR_WEATHER_FADE,
ENV_VAR_WEATHER, ENV_VAR_EXP_FOG, ENV_VAR_SKYBOX_HOR_SPEED, ENV_VAR_SKYBOX_VER_SPEED,
ENV_VAR_SKY_COLOR, ENV_VAR_CLOUDS_COLOR, ENV_VAR_FOG_COLOR,
ENV_VAR_SUN_COLOR, ENV_VAR_SHADOW_COLOR, ENV_VAR_SKYBOX_COLOR, ENV_VAR_BLOCKLIGHT_COLOR
ENV_VAR_SUN_COLOR, ENV_VAR_SHADOW_COLOR, ENV_VAR_SKYBOX_COLOR,
ENV_VAR_LAVALIGHT_COLOR, ENV_VAR_LAMPLIGHT_COLOR
};
CC_VAR extern struct _EnvData {
@ -134,20 +135,21 @@ CC_VAR extern struct _EnvData {
PackedCol SkyCol, FogCol, CloudsCol, SkyboxCol;
PackedCol SunCol, SunXSide, SunZSide, SunYMin;
PackedCol ShadowCol, ShadowXSide, ShadowZSide, ShadowYMin;
PackedCol BlockLightCol;
PackedCol LavaLightCol, LampLightCol;
} Env;
#define Env_SidesHeight (Env.EdgeHeight + Env.SidesOffset)
enum Weather_ { WEATHER_SUNNY, WEATHER_RAINY, WEATHER_SNOWY };
extern const char* const Weather_Names[3];
#define ENV_DEFAULT_SKY_COLOR PackedCol_Make(0x99, 0xCC, 0xFF, 0xFF)
#define ENV_DEFAULT_FOG_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_CLOUDS_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_SKYBOX_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_SUN_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_SHADOW_COLOR PackedCol_Make(0x9B, 0x9B, 0x9B, 0xFF)
#define ENV_DEFAULT_BLOCKLIGHT_COLOR PackedCol_Make(0xFF, 0xEB, 0xC6, 0xFF)
#define ENV_DEFAULT_SKY_COLOR PackedCol_Make(0x99, 0xCC, 0xFF, 0xFF)
#define ENV_DEFAULT_FOG_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_CLOUDS_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_SKYBOX_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_SUN_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
#define ENV_DEFAULT_SHADOW_COLOR PackedCol_Make(0x9B, 0x9B, 0x9B, 0xFF)
#define ENV_DEFAULT_LAVALIGHT_COLOR PackedCol_Make(0xFF, 0xEB, 0xC6, 0xFF)
#define ENV_DEFAULT_LAMPLIGHT_COLOR PackedCol_Make(0xFF, 0xFF, 0xFF, 0xFF)
/* Resets all environment settings to default. */
/* NOTE: Unlike Env_Set functions, DOES NOT raise EnvVarChanged event. */
@ -199,8 +201,10 @@ CC_API void Env_SetSunCol(PackedCol color);
/* Sets colour of shadow. (default #9B9B9B) */
/* This is the colour used for lighting when underground. */
CC_API void Env_SetShadowCol(PackedCol color);
/* Sets colour that blocks cast with fancy lighting. (default #FFEBC6) */
CC_API void Env_SetBlockLightCol(PackedCol color);
/* Sets colour that bright natural blocks cast with fancy lighting. (default #FFEBC6) */
CC_API void Env_SetLavaLightCol(PackedCol color);
/* Sets colour that bright artificial blocks cast with fancy lighting. (default #FFFFFF) */
CC_API void Env_SetLampLightCol(PackedCol color);
#define RESPAWN_NOT_FOUND -100000.0f
/* Finds the highest Y coordinate of any solid block that intersects the given bounding box */