From 15f9ee0365cd9a68ce42d552ea9cbef2c1455d00 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Thu, 15 Nov 2018 11:45:42 +1100 Subject: [PATCH] Fix edge/sides of air not working. (thanks tornato) --- src/Builder.c | 1 - src/Deflate.c | 55 +++++++++++++++++++++++++++++------------------ src/EnvRenderer.c | 4 +++- src/Gui.h | 1 + src/Menus.c | 4 ++-- src/Platform.c | 10 ++++++--- src/Screens.c | 12 ++++++----- 7 files changed, 54 insertions(+), 33 deletions(-) diff --git a/src/Builder.c b/src/Builder.c index 9b109d8fe..0e55862bb 100644 --- a/src/Builder.c +++ b/src/Builder.c @@ -701,7 +701,6 @@ void NormalBuilder_SetActive(void) { *-------------------------------------------------Advanced mesh builder---------------------------------------------------* *#########################################################################################################################*/ static Vector3 adv_minBB, adv_maxBB; -static bool adv_isTranslucent; static int adv_initBitFlags, adv_lightFlags, adv_baseOffset; static int* adv_bitFlags; static float adv_x1, adv_y1, adv_z1, adv_x2, adv_y2, adv_z2; diff --git a/src/Deflate.c b/src/Deflate.c index 6f4a94ec6..760c2f808 100644 --- a/src/Deflate.c +++ b/src/Deflate.c @@ -427,11 +427,17 @@ static void Inflate_InflateFast(struct InflateState* state) { } void Inflate_Process(struct InflateState* state) { + uint32_t len, dist, nlen; + uint32_t count, bits; + uint32_t blockHeader; + uint32_t copyLen, windowCopyLen; + uint32_t distIdx, lenIdx; + for (;;) { switch (state->State) { case INFLATE_STATE_HEADER: { Inflate_EnsureBits(state, 3); - uint32_t blockHeader = Inflate_ReadBits(state, 3); + blockHeader = Inflate_ReadBits(state, 3); state->LastBlock = blockHeader & 1; switch (blockHeader >> 1) { @@ -460,8 +466,8 @@ void Inflate_Process(struct InflateState* state) { case INFLATE_STATE_UNCOMPRESSED_HEADER: { Inflate_EnsureBits(state, 32); - uint32_t len = Inflate_ReadBits(state, 16); - uint32_t nlen = Inflate_ReadBits(state, 16); + len = Inflate_ReadBits(state, 16); + nlen = Inflate_ReadBits(state, 16); if (len != (nlen ^ 0xFFFFUL)) { ErrorHandler_Fail("DEFLATE - Uncompressed block LEN check failed"); @@ -481,11 +487,11 @@ void Inflate_Process(struct InflateState* state) { } if (!state->AvailIn || !state->AvailOut) return; - uint32_t copyLen = min(state->AvailIn, state->AvailOut); + copyLen = min(state->AvailIn, state->AvailOut); copyLen = min(copyLen, state->Index); if (copyLen > 0) { Mem_Copy(state->Output, state->NextIn, copyLen); - uint32_t windowCopyLen = INFLATE_WINDOW_SIZE - state->WindowIndex; + windowCopyLen = INFLATE_WINDOW_SIZE - state->WindowIndex; windowCopyLen = min(windowCopyLen, copyLen); Mem_Copy(&state->Window[state->WindowIndex], state->Output, windowCopyLen); @@ -496,7 +502,7 @@ void Inflate_Process(struct InflateState* state) { state->WindowIndex = (state->WindowIndex + copyLen) & INFLATE_WINDOW_MASK; state->Output += copyLen; state->AvailOut -= copyLen; state->Index -= copyLen; - state->NextIn += copyLen; state->AvailIn -= copyLen; + state->NextIn += copyLen; state->AvailIn -= copyLen; } if (!state->Index) { state->State = Inflate_NextBlockState(state); } @@ -530,7 +536,7 @@ void Inflate_Process(struct InflateState* state) { } case INFLATE_STATE_DYNAMIC_LITSDISTS: { - uint32_t count = state->NumLits + state->NumDists; + count = state->NumLits + state->NumDists; while (state->Index < count) { int bits = Huffman_Decode(state, &state->Table.CodeLens); if (bits < 16) { @@ -578,7 +584,7 @@ void Inflate_Process(struct InflateState* state) { break; } - uint32_t count = state->NumLits + state->NumDists; + count = state->NumLits + state->NumDists; if (state->Index + repeatCount > count) { ErrorHandler_Fail("DEFLATE - Tried to repeat past end"); } @@ -605,16 +611,16 @@ void Inflate_Process(struct InflateState* state) { break; } else { state->TmpLit = lit - 257; - state->State = INFLATE_STATE_COMPRESSED_LITREPEAT; + state->State = INFLATE_STATE_COMPRESSED_LITREPEAT; } } case INFLATE_STATE_COMPRESSED_LITREPEAT: { - uint32_t lenIdx = state->TmpLit; - uint32_t bits = len_bits[lenIdx]; + lenIdx = state->TmpLit; + bits = len_bits[lenIdx]; Inflate_EnsureBits(state, bits); state->TmpLit = len_base[lenIdx] + Inflate_ReadBits(state, bits); - state->State = INFLATE_STATE_COMPRESSED_DIST; + state->State = INFLATE_STATE_COMPRESSED_DIST; } case INFLATE_STATE_COMPRESSED_DIST: { @@ -624,16 +630,16 @@ void Inflate_Process(struct InflateState* state) { } case INFLATE_STATE_COMPRESSED_DISTREPEAT: { - uint32_t distIdx = state->TmpDist; - uint32_t bits = dist_bits[distIdx]; + distIdx = state->TmpDist; + bits = dist_bits[distIdx]; Inflate_EnsureBits(state, bits); state->TmpDist = dist_base[distIdx] + Inflate_ReadBits(state, bits); - state->State = INFLATE_STATE_COMPRESSED_DATA; + state->State = INFLATE_STATE_COMPRESSED_DATA; } case INFLATE_STATE_COMPRESSED_DATA: { if (!state->AvailOut) return; - uint32_t len = state->TmpLit, dist = state->TmpDist; + len = state->TmpLit; dist = state->TmpDist; len = min(len, state->AvailOut); /* TODO: Should we test outside of the loop, whether a masking will be required or not? */ @@ -647,7 +653,7 @@ void Inflate_Process(struct InflateState* state) { } state->WindowIndex = (curIdx + len) & INFLATE_WINDOW_MASK; - state->TmpLit -= len; + state->TmpLit -= len; state->AvailOut -= len; if (!state->TmpLit) { state->State = Inflate_NextCompressState(state); } break; @@ -847,8 +853,12 @@ static ReturnCode Deflate_FlushBlock(struct DeflateState* state, int len) { } static ReturnCode Deflate_StreamWrite(struct Stream* stream, uint8_t* data, uint32_t count, uint32_t* modified) { - struct DeflateState* state = stream->Meta.Inflate; + struct DeflateState* state; + ReturnCode res; + + state = stream->Meta.Inflate; *modified = 0; + while (count > 0) { uint8_t* dst = &state->Input[state->InputPosition]; uint32_t toWrite = count; @@ -863,7 +873,7 @@ static ReturnCode Deflate_StreamWrite(struct Stream* stream, uint8_t* data, uint data += toWrite; if (state->InputPosition == DEFLATE_BUFFER_SIZE) { - ReturnCode res = Deflate_FlushBlock(state, DEFLATE_BUFFER_SIZE); + res = Deflate_FlushBlock(state, DEFLATE_BUFFER_SIZE); if (res) return res; } } @@ -871,8 +881,11 @@ static ReturnCode Deflate_StreamWrite(struct Stream* stream, uint8_t* data, uint } static ReturnCode Deflate_StreamClose(struct Stream* stream) { - struct DeflateState* state = stream->Meta.Inflate; - ReturnCode res = Deflate_FlushBlock(state, state->InputPosition); + struct DeflateState* state; + ReturnCode res; + + state = stream->Meta.Inflate; + res = Deflate_FlushBlock(state, state->InputPosition); if (res) return res; /* Write huffman encoded "literal 256" to terminate symbols */ diff --git a/src/EnvRenderer.c b/src/EnvRenderer.c index 082d3c2c9..485379e69 100644 --- a/src/EnvRenderer.c +++ b/src/EnvRenderer.c @@ -30,7 +30,7 @@ static float EnvRenderer_BlendFactor(float x) { #define EnvRenderer_AxisSize() (EnvRenderer_Legacy ? 128 : 65536) /* Returns the number of vertices needed to subdivide a quad */ -int EnvRenderer_Vertices(int axis1Len, int axis2Len) { +static int EnvRenderer_Vertices(int axis1Len, int axis2Len) { int axisSize = EnvRenderer_AxisSize(); return Math_CeilDiv(axis1Len, axisSize) * Math_CeilDiv(axis2Len, axisSize) * 4; } @@ -871,8 +871,10 @@ static void EnvRenderer_ViewDistanceChanged(void* obj) { static void EnvRenderer_EnvVariableChanged(void* obj, int envVar) { if (envVar == ENV_VAR_EDGE_BLOCK) { EnvRenderer_MakeBorderTex(&edges_tex, Env_EdgeBlock); + EnvRenderer_UpdateMapEdges(); } else if (envVar == ENV_VAR_SIDES_BLOCK) { EnvRenderer_MakeBorderTex(&sides_tex, Env_SidesBlock); + EnvRenderer_UpdateMapSides(); } else if (envVar == ENV_VAR_EDGE_HEIGHT || envVar == ENV_VAR_SIDES_OFFSET) { EnvRenderer_UpdateMapEdges(); EnvRenderer_UpdateMapSides(); diff --git a/src/Gui.h b/src/Gui.h index e6e4e953b..b46fb6615 100644 --- a/src/Gui.h +++ b/src/Gui.h @@ -71,6 +71,7 @@ struct Widget { Widget_Layout }; void Widget_SetLocation(void* widget, uint8_t horAnchor, uint8_t verAnchor, int xOffset, int yOffset); void Widget_CalcPosition(void* widget); void Widget_Reset(void* widget); +/* Whether the given point is located within the bounds of the widget. */ bool Widget_Contains(void* widget, int x, int y); diff --git a/src/Menus.c b/src/Menus.c index 2bb4caff4..ca53e9ce2 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -1604,12 +1604,12 @@ static void KeyBindingsScreen_GetText(struct KeyBindingsScreen* s, int i, String } static void KeyBindingsScreen_OnBindingClick(void* screen, void* widget) { + String text; char textBuffer[STRING_SIZE]; struct KeyBindingsScreen* s = screen; struct ButtonWidget* btn = widget; struct ButtonWidget* cur; - char textBuffer[STRING_SIZE]; - String text = String_FromArray(textBuffer); + String_InitArray(text, textBuffer); /* previously selected a different button for binding */ if (s->CurI >= 0) { KeyBindingsScreen_GetText(s, s->CurI, &text); diff --git a/src/Platform.c b/src/Platform.c index d0d4b92c6..7536a0529 100644 --- a/src/Platform.c +++ b/src/Platform.c @@ -880,6 +880,10 @@ void Font_GetNames(StringsBuffer* buffer) { } void Font_Make(FontDesc* desc, const String* fontName, int size, int style) { + StringsBuffer* entries; + int idx; + String path; + FT_Stream stream; FT_Open_Args args; FT_Face face; @@ -889,8 +893,8 @@ void Font_Make(FontDesc* desc, const String* fontName, int size, int style) { desc->Style = style; if (!norm_fonts.Count) Font_Init(); - int idx = -1; - StringsBuffer* entries = &bold_fonts; + idx = -1; + entries = &bold_fonts; if (style & FONT_STYLE_BOLD) { idx = Font_Find(fontName, entries); } if (idx == -1) { @@ -899,7 +903,7 @@ void Font_Make(FontDesc* desc, const String* fontName, int size, int style) { } if (idx == -1) ErrorHandler_Fail("Unknown font"); - String path = StringsBuffer_UNSAFE_Get(entries, idx - 1); + path = StringsBuffer_UNSAFE_Get(entries, idx - 1); stream = Mem_AllocCleared(1, sizeof(FT_StreamRec), "leaky font"); /* TODO: LEAKS MEMORY!!! */ if (!Font_MakeArgs(&path, stream, &args)) return; diff --git a/src/Screens.c b/src/Screens.c index e2854310f..1cb75b836 100644 --- a/src/Screens.c +++ b/src/Screens.c @@ -993,7 +993,10 @@ static bool ChatScreen_MouseScroll(void* screen, float delta) { } static bool ChatScreen_MouseDown(void* screen, int x, int y, MouseButton btn) { + String text; char textBuffer[STRING_SIZE * 4]; struct ChatScreen* s = screen; + struct Screen* overlay; + int height, chatY; if (!s->HandlesAllInput || Game_HideGui) return false; if (!Widget_Contains(&s->Chat, x, y)) { @@ -1006,17 +1009,16 @@ static bool ChatScreen_MouseDown(void* screen, int x, int y, MouseButton btn) { return true; } - int height = TextGroupWidget_UsedHeight(&s->Chat); - int chatY = s->Chat.Y + s->Chat.Height - height; + height = TextGroupWidget_UsedHeight(&s->Chat); + chatY = s->Chat.Y + s->Chat.Height - height; if (!Gui_Contains(s->Chat.X, chatY, s->Chat.Width, height, x, y)) return false; - char textBuffer[STRING_SIZE * 4]; - String text = String_FromArray(textBuffer); + String_InitArray(text, textBuffer); TextGroupWidget_GetSelected(&s->Chat, &text, x, y); if (!text.length) return false; if (Utils_IsUrlPrefix(&text, 0)) { - struct Screen* overlay = UrlWarningOverlay_MakeInstance(&text); + overlay = UrlWarningOverlay_MakeInstance(&text); Gui_ShowOverlay(overlay, false); } else if (Game_ClickableChat) { InputWidget_AppendString(&s->Input.Base, &text);