Classic mode should preserve selected block in inventory across inventory menu opens

Also remove older versions from flatpak yml that caused problems for me when trying to build it
This commit is contained in:
UnknownShadow200 2024-04-07 16:45:44 +10:00
parent 536ec594e5
commit b27f86384f
4 changed files with 36 additions and 39 deletions

View File

@ -108,17 +108,6 @@
<release version="1.1.1" date="2019-12-16" type="stable">
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.1.1</url>
</release>
<release version="1.10" date="2019-11-09" type="stable">
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.10</url>
</release>
<release version="1.0.9" date="2019-11-02" type="stable">
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.9</url>
</release>
<release version="1.0.8" date="2019-10-02" type="stable">
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.8</url>
</release>
<release version="1.0.7" date="2019-08-29" type="stable">
<url>https://github.com/ClassiCube/ClassiCube/releases/tag/1.0.7</url>
</release>
</releases>
<url type="homepage">https://www.classicube.net/</url>

View File

@ -1636,19 +1636,20 @@ static void InventoryScreen_ContextRecreated(void* screen) {
s->table.vb = s->vb;
Gui_MakeBodyFont(&s->font);
TableWidget_Recreate(&s->table);
TableWidget_RecreateTitle(&s->table, true);
}
static void InventoryScreen_MoveToSelected(struct InventoryScreen* s) {
struct TableWidget* table = &s->table;
TableWidget_SetBlockTo(table, Inventory_SelectedBlock);
TableWidget_Recreate(table);
s->deferredSelect = false;
/* User is holding invalid block */
if (table->selectedIndex == -1) {
InventoryScreen_UpdateTitle(s, Inventory_SelectedBlock);
if (Game_ClassicMode) {
/* Original classic preserves selected block across inventory menu opens */
TableWidget_SetToIndex(table, table->selectedIndex);
} else {
TableWidget_SetToBlock(table, Inventory_SelectedBlock);
}
TableWidget_RecreateTitle(table, true);
}
static void InventoryScreen_Init(void* screen) {

View File

@ -743,9 +743,9 @@ static void TableWidget_MoveCursorToSelected(struct TableWidget* w) {
Cursor_SetPosition(x, y);
}
static void TableWidget_RecreateTitle(struct TableWidget* w) {
void TableWidget_RecreateTitle(struct TableWidget* w, cc_bool force) {
BlockID block;
if (w->selectedIndex == w->lastCreatedIndex) return;
if (!force && w->selectedIndex == w->lastCreatedIndex) return;
if (w->blocksCount == 0) return;
w->lastCreatedIndex = w->selectedIndex;
@ -858,11 +858,6 @@ static int TableWidget_MaxVertices(void* w) { return TABLE_MAX_VERTICES; }
static void TableWidget_Free(void* widget) { }
void TableWidget_Recreate(struct TableWidget* w) {
w->lastCreatedIndex = -1000;
TableWidget_RecreateTitle(w);
}
static void TableWidget_Reposition(void* widget) {
struct TableWidget* w = (struct TableWidget*)widget;
cc_bool classic = Gui.ClassicInventory;
@ -907,7 +902,7 @@ static void TableWidget_ScrollRelative(struct TableWidget* w, int delta) {
w->scroll.topRow += (index / w->blocksPerRow) - (start / w->blocksPerRow);
ScrollbarWidget_ClampTopRow(&w->scroll);
TableWidget_RecreateTitle(w);
TableWidget_RecreateTitle(w, false);
TableWidget_MoveCursorToSelected(w);
}
@ -949,7 +944,7 @@ static int TableWidget_MouseScroll(void* widget, float delta) {
if (index >= w->blocksCount) index = -1;
w->selectedIndex = index;
TableWidget_RecreateTitle(w);
TableWidget_RecreateTitle(w, false);
return true;
}
@ -977,7 +972,7 @@ static int TableWidget_PointerMove(void* widget, int id, int x, int y) {
}
}
}
TableWidget_RecreateTitle(w);
TableWidget_RecreateTitle(w, false);
return true;
}
@ -1033,6 +1028,11 @@ void TableWidget_Create(struct TableWidget* w, int sbWidth) {
w->scale = 1;
w->padXAcc = 0; w->padYAcc = 0;
if (!w->everCreated) {
w->everCreated = true;
w->selectedIndex = -1;
}
classic = Gui.ClassicInventory;
w->paddingL = Display_ScaleX(classic ? 20 : 15);
w->paddingR = Display_ScaleX(classic ? 28 : 15);
@ -1040,21 +1040,27 @@ void TableWidget_Create(struct TableWidget* w, int sbWidth) {
w->paddingB = Display_ScaleY(classic ? 14 : 15);
}
void TableWidget_SetBlockTo(struct TableWidget* w, BlockID block) {
int i;
w->selectedIndex = -1;
void TableWidget_SetToBlock(struct TableWidget* w, BlockID block) {
int i, index = -1;
for (i = 0; i < w->blocksCount; i++) {
if (w->blocks[i] == block) w->selectedIndex = i;
for (i = 0; i < w->blocksCount; i++)
{
if (w->blocks[i] == block) index = i;
}
/* When holding air, inventory should open at middle */
if (block == BLOCK_AIR) w->selectedIndex = -1;
if (block == BLOCK_AIR) index = -1;
TableWidget_SetToIndex(w, index);
}
void TableWidget_SetToIndex(struct TableWidget* w, int index) {
w->selectedIndex = index;
w->scroll.topRow = w->selectedIndex / w->blocksPerRow;
w->scroll.topRow -= (w->rowsVisible - 1);
ScrollbarWidget_ClampTopRow(&w->scroll);
TableWidget_MoveCursorToSelected(w);
TableWidget_RecreateTitle(w);
TableWidget_RecreateTitle(w, true);
}
void TableWidget_OnInventoryChanged(struct TableWidget* w) {
@ -1066,7 +1072,7 @@ void TableWidget_OnInventoryChanged(struct TableWidget* w) {
w->scroll.topRow = w->selectedIndex / w->blocksPerRow;
ScrollbarWidget_ClampTopRow(&w->scroll);
TableWidget_RecreateTitle(w);
TableWidget_RecreateTitle(w, true);
}

View File

@ -102,7 +102,7 @@ struct TableWidget {
int selectedIndex, cellSizeX, cellSizeY;
float normBlockSize, selBlockSize;
GfxResourceID vb;
cc_bool pendingClose;
cc_bool pendingClose, everCreated;
float scale;
float padXAcc, padYAcc;
@ -119,10 +119,11 @@ struct TableWidget {
CC_NOINLINE void TableWidget_Create(struct TableWidget* w, int sbWidth);
/* Sets the selected block in the table to the given block. */
/* Also adjusts scrollbar and moves cursor to be over the given block. */
CC_NOINLINE void TableWidget_SetBlockTo(struct TableWidget* w, BlockID block);
CC_NOINLINE void TableWidget_SetToBlock(struct TableWidget* w, BlockID block);
CC_NOINLINE void TableWidget_SetToIndex(struct TableWidget* w, int index);
CC_NOINLINE void TableWidget_RecreateBlocks(struct TableWidget* w);
CC_NOINLINE void TableWidget_OnInventoryChanged(struct TableWidget* w);
CC_NOINLINE void TableWidget_Recreate(struct TableWidget* w);
CC_NOINLINE void TableWidget_RecreateTitle(struct TableWidget* w, cc_bool force);
#define INPUTWIDGET_MAX_LINES 3