Move SaveLevelScreen to new rendering method

This commit is contained in:
UnknownShadow200 2020-02-04 20:49:20 +11:00
parent e686f0b403
commit e7f17b7119
4 changed files with 45 additions and 40 deletions

View File

@ -83,11 +83,6 @@ static void Gfx_RecreateContext(void) {
}
void Gfx_UpdateDynamicVb_Lines(GfxResourceID vb, void* vertices, int vCount) {
Gfx_SetDynamicVbData(vb, vertices, vCount);
Gfx_DrawVb_Lines(vCount);
}
void Gfx_UpdateDynamicVb_IndexedTris(GfxResourceID vb, void* vertices, int vCount) {
Gfx_SetDynamicVbData(vb, vertices, vCount);
Gfx_DrawVb_IndexedTris(vCount);

View File

@ -62,7 +62,7 @@ CC_API void Gfx_SetTexturing(cc_bool enabled);
/* Turns on mipmapping. (if Gfx_Mipmaps is enabled) */
/* NOTE: You must have created textures with mipmaps true for this to work. */
CC_API void Gfx_EnableMipmaps(void);
/* Turns off mipmapping. (if GfX_Mipmaps is enabled) */
/* Turns off mipmapping. (if Gfx_Mipmaps is enabled) */
/* NOTE: You must have created textures with mipmaps true for this to work. */
CC_API void Gfx_DisableMipmaps(void);
@ -176,9 +176,6 @@ void Gfx_LoseContext(const char* reason);
/* Attempts to restore a lost context. Raises ContextRecreated event on success. */
cc_bool Gfx_TryRestoreContext(void);
/* Binds and draws the specified subset of the vertices in the current dynamic vertex buffer. */
/* NOTE: This replaces the dynamic vertex buffer's data first with the given vertices before drawing. */
void Gfx_UpdateDynamicVb_Lines(GfxResourceID vb, void* vertices, int vCount);
/* Binds and draws the specified subset of the vertices in the current dynamic vertex buffer. */
/* NOTE: This replaces the dynamic vertex buffer's data first with the given vertices before drawing. */
void Gfx_UpdateDynamicVb_IndexedTris(GfxResourceID vb, void* vertices, int vCount);

View File

@ -239,11 +239,11 @@ static struct Widget* list_widgets[10] = {
(struct Widget*)&ListScreen.right, (struct Widget*)&ListScreen.title,
(struct Widget*)&ListScreen.page, (struct Widget*)&ListScreen.done
};
#define LIST_MAX_VERTICES (8 * BUTTONWIDGET_MAX + 2 * TEXTWIDGET_MAX)
#define LIST_SCREEN_EMPTY "-----"
#define LISTSCREEN_MAX_VERTICES (8 * BUTTONWIDGET_MAX + 2 * TEXTWIDGET_MAX)
#define LISTSCREEN_EMPTY "-----"
static STRING_REF String ListScreen_UNSAFE_Get(struct ListScreen* s, int index) {
static const String str = String_FromConst(LIST_SCREEN_EMPTY);
static const String str = String_FromConst(LISTSCREEN_EMPTY);
if (index >= 0 && index < s->entries.count) {
return StringsBuffer_UNSAFE_Get(&s->entries, index);
@ -376,7 +376,7 @@ static void ListScreen_Init(void* screen) {
s->numWidgets = Array_Elems(list_widgets);
s->wheelAcc = 0.0f;
s->currentIndex = 0;
s->maxVertices = LIST_MAX_VERTICES;
s->maxVertices = LISTSCREEN_MAX_VERTICES;
for (i = 0; i < LIST_SCREEN_ITEMS; i++) {
ButtonWidget_Make(&s->btns[i], 300, s->EntryClick,
@ -1177,7 +1177,14 @@ static struct SaveLevelScreen {
struct ButtonWidget save, alt, cancel;
struct MenuInputWidget input;
struct TextWidget mcEdit, desc;
} SaveLevelScreen_Instance;
} SaveLevelScreen;
static struct Widget* save_widgets[6] = {
(struct Widget*)&SaveLevelScreen.save, (struct Widget*)&SaveLevelScreen.alt,
(struct Widget*)&SaveLevelScreen.mcEdit, (struct Widget*)&SaveLevelScreen.cancel,
(struct Widget*)&SaveLevelScreen.input, (struct Widget*)&SaveLevelScreen.desc,
};
#define SAVESCREEN_MAX_VERTICES (3 * BUTTONWIDGET_MAX + MENUINPUTWIDGET_MAX + 2 * TEXTWIDGET_MAX)
static void SaveLevelScreen_UpdateSave(struct SaveLevelScreen* s) {
ButtonWidget_SetConst(&s->save,
@ -1334,10 +1341,15 @@ static void SaveLevelScreen_Save(void* screen, void* widget, const char* ext) {
static void SaveLevelScreen_Main(void* a, void* b) { SaveLevelScreen_Save(a, b, ".cw"); }
static void SaveLevelScreen_Alt(void* a, void* b) { SaveLevelScreen_Save(a, b, ".schematic"); }
static void SaveLevelScreen_Update(void* screen, double delta) {
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
s->input.base.caretAccumulator += delta;
}
static void SaveLevelScreen_Render(void* screen, double delta) {
PackedCol grey = PackedCol_Make(150, 150, 150, 255);
int x, y;
MenuScreen_Render(screen, delta);
MenuScreen_Render2(screen, delta);
#ifndef CC_BUILD_WEB
x = Window_Width / 2; y = Window_Height / 2;
@ -1381,6 +1393,8 @@ static void SaveLevelScreen_ContextRecreated(void* screen) {
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
Menu_MakeTitleFont(&s->titleFont);
Menu_MakeBodyFont(&s->textFont);
Screen_CreateVb(screen);
SaveLevelScreen_UpdateSave(s);
SaveLevelScreen_UpdateAlt(s);
@ -1391,51 +1405,50 @@ static void SaveLevelScreen_ContextRecreated(void* screen) {
ButtonWidget_SetConst(&s->cancel, "Cancel", &s->titleFont);
}
static void SaveLevelScreen_BuildMesh(void* screen) { }
static void SaveLevelScreen_Init(void* screen) {
static struct Widget* widgets[6];
struct SaveLevelScreen* s = (struct SaveLevelScreen*)screen;
struct MenuInputDesc desc;
s->widgets = widgets;
s->numWidgets = Array_Elems(widgets);
s->widgets = save_widgets;
s->numWidgets = Array_Elems(save_widgets);
s->maxVertices = SAVESCREEN_MAX_VERTICES;
MenuInput_Path(desc);
Menu_Button(s, 0, &s->save, 300, SaveLevelScreen_Main,
ButtonWidget_Make(&s->save, 300, SaveLevelScreen_Main,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 20);
#ifdef CC_BUILD_WEB
Menu_Button(s, 1, &s->alt, 300, SaveLevelScreen_Alt,
ButtonWidget_Make(&s->alt, 300, SaveLevelScreen_Alt,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 70);
s->widgets[2] = NULL; /* null mcEdit widget */
#else
Menu_Button(s, 1, &s->alt, 200, SaveLevelScreen_Alt,
ButtonWidget_Make(&s->alt, 200, SaveLevelScreen_Alt,
ANCHOR_CENTRE, ANCHOR_CENTRE, -150, 120);
Menu_Label(s, 2, &s->mcEdit,
TextWidget_Make( &s->mcEdit,
ANCHOR_CENTRE, ANCHOR_CENTRE, 110, 120);
#endif
Menu_Back(s, 3, &s->cancel, Menu_SwitchPause);
Menu_MakeBack( &s->cancel, Menu_SwitchPause);
Menu_Input(s, 4, &s->input, 500, &String_Empty, &desc,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, -30);
#ifdef CC_BUILD_WEB
Menu_Label(s, 5, &s->desc,
TextWidget_Make( &s->desc,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 115);
#else
Menu_Label(s, 5, &s->desc,
TextWidget_Make( &s->desc,
ANCHOR_CENTRE, ANCHOR_CENTRE, 0, 65);
#endif
Window_OpenKeyboard();
}
static const struct ScreenVTABLE SaveLevelScreen_VTABLE = {
SaveLevelScreen_Init, Screen_NullUpdate, Menu_CloseKeyboard,
SaveLevelScreen_Render, SaveLevelScreen_BuildMesh,
SaveLevelScreen_KeyDown, Screen_TInput, SaveLevelScreen_KeyPress, SaveLevelScreen_TextChanged,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
SaveLevelScreen_Init, SaveLevelScreen_Update, Menu_CloseKeyboard,
SaveLevelScreen_Render, Screen_BuildMesh,
SaveLevelScreen_KeyDown, Screen_TInput, SaveLevelScreen_KeyPress, SaveLevelScreen_TextChanged,
Menu_PointerDown, Screen_TPointer, Menu_PointerMove, Screen_TMouseScroll,
Screen_Layout, SaveLevelScreen_ContextLost, SaveLevelScreen_ContextRecreated
};
void SaveLevelScreen_Show(void) {
struct SaveLevelScreen* s = &SaveLevelScreen_Instance;
struct SaveLevelScreen* s = &SaveLevelScreen;
s->grabsInput = true;
s->closable = true;
s->VTABLE = &SaveLevelScreen_VTABLE;
@ -1494,7 +1507,7 @@ static void FontListScreen_EntryClick(void* screen, void* widget) {
struct ListScreen* s = (struct ListScreen*)screen;
String fontName = ListScreen_UNSAFE_GetCur(s, widget);
if (String_CaselessEqualsConst(&fontName, LIST_SCREEN_EMPTY)) return;
if (String_CaselessEqualsConst(&fontName, LISTSCREEN_EMPTY)) return;
String_Copy(&Drawer2D_FontName, &fontName);
Options_Set(OPT_FONT_NAME, &fontName);
Event_RaiseVoid(&ChatEvents.FontChanged);
@ -1504,7 +1517,7 @@ static void FontListScreen_UpdateEntry(struct ListScreen* s, struct ButtonWidget
struct FontDesc font;
cc_result res;
if (String_CaselessEqualsConst(text, LIST_SCREEN_EMPTY)) {
if (String_CaselessEqualsConst(text, LISTSCREEN_EMPTY)) {
ButtonWidget_Set(button, text, &s->font); return;
}
@ -1551,7 +1564,7 @@ static void HotkeyListScreen_EntryClick(void* screen, void* widget) {
int i, flags = 0;
text = ListScreen_UNSAFE_GetCur(s, widget);
if (String_CaselessEqualsConst(&text, LIST_SCREEN_EMPTY)) {
if (String_CaselessEqualsConst(&text, LISTSCREEN_EMPTY)) {
EditHotkeyScreen_Show(original);
return;
}
@ -1577,7 +1590,7 @@ static void HotkeyListScreen_MakeFlags(int flags, String* str) {
}
static void HotkeyListScreen_LoadEntries(struct ListScreen* s) {
static const String empty = String_FromConst(LIST_SCREEN_EMPTY);
static const String empty = String_FromConst(LISTSCREEN_EMPTY);
String text; char textBuffer[STRING_SIZE];
struct HotkeyData hKey;
int i;
@ -1620,7 +1633,7 @@ static void LoadLevelScreen_EntryClick(void* screen, void* widget) {
String relPath;
relPath = ListScreen_UNSAFE_GetCur(s, widget);
if (String_CaselessEqualsConst(&relPath, LIST_SCREEN_EMPTY)) return;
if (String_CaselessEqualsConst(&relPath, LISTSCREEN_EMPTY)) return;
String_InitArray(path, pathBuffer);
String_Format1(&path, "maps/%s", &relPath);

View File

@ -379,7 +379,7 @@ static void Models_ContextRecreated(void* obj) {
Models.Vb = Gfx_CreateDynamicVb(VERTEX_FORMAT_P3FT2FC4B, Models.MaxVertices);
}
static void Model_Make(struct Model* model) {
static void MakeModel(struct Model* model) {
struct Model* active = Models.Active;
Models.Active = model;
model->MakeParts();
@ -395,7 +395,7 @@ struct Model* Model_Get(const String* name) {
for (model = models_head; model; model = model->next) {
if (!String_CaselessEqualsConst(name, model->name)) continue;
if (!model->initalised) Model_Make(model);
if (!model->initalised) MakeModel(model);
return model;
}
return NULL;
@ -1663,7 +1663,7 @@ static void Model_RegisterDefaultModels(void) {
Model_RegisterTexture(&zombie_tex);
Model_Register(HumanoidModel_GetInstance());
Model_Make(&human_model);
MakeModel(&human_model);
Models.Human = &human_model;
Model_Register(ChickenModel_GetInstance());