mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-14 10:05:44 -04:00
Support LavaLight and LampLight env color part 1
This commit is contained in:
parent
c4235fa653
commit
40f454b602
@ -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;
|
||||
|
@ -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();
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
20
src/World.c
20
src/World.c
@ -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);
|
||||
|
26
src/World.h
26
src/World.h
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user