From 422ede0c3e3e0428724dd3988549d5674ea4f7e4 Mon Sep 17 00:00:00 2001 From: Renato Fermi Date: Tue, 26 Dec 2023 18:56:48 -0300 Subject: [PATCH] 1.0 --- GXRF/GXRF.c | 53 ++++++++++++++++++++++++++++++++++++++++--------- GXRF/GXRF.h | 6 +++--- include/board.h | 3 --- src/cattie.c | 21 ++++++++++---------- 4 files changed, 58 insertions(+), 25 deletions(-) diff --git a/GXRF/GXRF.c b/GXRF/GXRF.c index f17c46b..8568e49 100644 --- a/GXRF/GXRF.c +++ b/GXRF/GXRF.c @@ -22,12 +22,13 @@ // globals PSTRUCT_GXRF_RENDER_LIST gpstGXRF_RenderList; +PSTRUCT_GXRF_OBJFNC_ARG_LIST gpstGXRF_FncArgList; // // Finds some specific object // STRUCT_GXRF_RENDER *pstGXRF_FindRenderizable(void *vGXRF_Renderizable){ - STRUCT_GXRF_RENDER *pstGXRF_WrkRender; + STRUCT_GXRF_RENDER *pstGXRF_WrkRender = NULL; // Looking for the Object // Running All of'em, until we get vGXRF_Renderizable for ( @@ -108,7 +109,7 @@ int bGXRF_EnableRenderizable(void *vGXRF_Renderizable){ } int iGXRF_AllocList(STRUCT_GXRF_RENDER_LIST **ppstGXRF_RenderizableList){ - ppstGXRF_RenderizableList = (STRUCT_GXRF_RENDER_LIST **) malloc(sizeof(STRUCT_GXRF_RENDER_LIST)); + ppstGXRF_RenderizableList = (STRUCT_GXRF_RENDER_LIST **) malloc(sizeof(STRUCT_GXRF_RENDER_LIST *) * sizeof(STRUCT_GXRF_RENDER_LIST)); if ( ppstGXRF_RenderizableList == NULL ) // gg return -1; @@ -122,14 +123,48 @@ int iGXRF_AllocList(STRUCT_GXRF_RENDER_LIST **ppstGXRF_RenderizableList){ // 0: OK //-1: Out of memory :( // -int iGXRF_AllocFncArgList(STRUCT_GXRF_OBJFNC_ARG **ppstGXRF_FncArgList){ - *ppstGXRF_FncArgList = (STRUCT_GXRF_OBJFNC_ARG *) malloc(sizeof(STRUCT_GXRF_OBJFNC_ARG)); - if ( *ppstGXRF_FncArgList == NULL ) // gg :( +int iGXRF_AllocFncArgList(STRUCT_GXRF_OBJFNC_ARG_LIST **ppstGXRF_FncArgList){ + + ppstGXRF_FncArgList = (STRUCT_GXRF_OBJFNC_ARG_LIST **) malloc(sizeof(STRUCT_GXRF_OBJFNC_ARG_LIST)); + if ( ppstGXRF_FncArgList == NULL ) // gg return -1; + + (*ppstGXRF_FncArgList) = (STRUCT_GXRF_OBJFNC_ARG_LIST *) malloc(sizeof(STRUCT_GXRF_RENDER_LIST)); + (*ppstGXRF_FncArgList)->pstGXRF_FirstObjFncArg = NULL; + (*ppstGXRF_FncArgList)->pstGXRF_LastObjFncArg = NULL; return 0; } +int iGXRF_ADD2ArgList(void *vGXRF_Renderizable, void *vArgType, void *vArg){ + STRUCT_GXRF_OBJFNC_ARG *pstWrkObjArg; + STRUCT_GXRF_OBJFNC_ARG_LIST *pstWrkArgList; + STRUCT_GXRF_RENDER *pstGXRF_WrkRender; + + if ( (pstGXRF_WrkRender = pstGXRF_FindRenderizable(vGXRF_Renderizable)) != NULL ) + return RENDERIZABLE_EXISTS; // Already Exists + + pstWrkArgList = pstGXRF_WrkRender->pstArgList; + if ( pstWrkArgList == NULL ) // gg + return -1; + + if ( (pstWrkObjArg = pstWrkArgList->pstGXRF_FirstObjFncArg) != NULL ){ + for ( ; pstWrkObjArg->pNextArg != NULL ; pstWrkObjArg = pstWrkObjArg->pNextArg ); + + pstWrkObjArg->pNextArg = (STRUCT_GXRF_OBJFNC_ARG *) malloc(sizeof(STRUCT_GXRF_OBJFNC_ARG)); + pstWrkObjArg = pstWrkObjArg->pNextArg; + } + else { + (*pstWrkArgList).pstGXRF_FirstObjFncArg = (STRUCT_GXRF_OBJFNC_ARG *) malloc(sizeof(STRUCT_GXRF_OBJFNC_ARG)); + pstWrkObjArg = (*pstWrkArgList).pstGXRF_FirstObjFncArg; + } + pstWrkObjArg->vArgType = vArgType; + pstWrkObjArg->vArg = vArg; + pstWrkObjArg->pNextArg = NULL; + pstWrkArgList->pstGXRF_LastObjFncArg = pstWrkObjArg; + return 0; +} + int iGXRF_Init(){ if ( DEBUG_MSGS ) vTraceMsg("iGXRF_Init --- Ok\n"); @@ -146,8 +181,7 @@ int iGXRF_Add2RenderList( int bIs2Render, eSDLT_Renderizable eSDLTy, void *vRenderObject, - void *vpfnRenderFnc, - PSTRUCT_GXRF_OBJFNC_ARG_LIST pstGXRF_ObjArgList){ + void *vpfnRenderFnc){ STRUCT_GXRF_RENDER *pstGXRF_WrkRender; if ( (pstGXRF_WrkRender = pstGXRF_FindRenderizable(vRenderObject)) != NULL ) @@ -163,12 +197,13 @@ int iGXRF_Add2RenderList( memset (pstGXRF_WrkRender, 0, sizeof(STRUCT_GXRF_RENDER)); } + iGXRF_AllocFncArgList(&pstGXRF_WrkRender->pstArgList); + pstGXRF_WrkRender->bEnabled2Render = bIs2Render; pstGXRF_WrkRender->eSDLTy = eSDLTy; pstGXRF_WrkRender->vSDL_ObjToRender = vRenderObject; pstGXRF_WrkRender->vpfnRenderMethod = vpfnRenderFnc; pstGXRF_WrkRender->pSDL_Renderer = renderer; - pstGXRF_WrkRender->pstArgList = pstGXRF_ObjArgList; pstGXRF_WrkRender->pNextObj = NULL; return 0; @@ -216,7 +251,7 @@ void vGXRF_FreeRenderList(){ } int iGXRF_End(){ - //vGXRF_FreeRenderList(); + vGXRF_FreeRenderList(); return 0; } diff --git a/GXRF/GXRF.h b/GXRF/GXRF.h index 2512442..a34d576 100644 --- a/GXRF/GXRF.h +++ b/GXRF/GXRF.h @@ -50,7 +50,7 @@ } eSDLT_Renderizable; // Creates the generic render callback function - typedef void (*GXRFCALLBACK)(SDL_Renderer *renderer); + typedef void (*GXRFCALLBACK)(SDL_Renderer *renderer, ...); // // Renderizable Object List typedef struct STRUCT_GXRF_RENDER_LIST{ @@ -105,12 +105,12 @@ int bIs2Render, eSDLT_Renderizable eSDLTy, void *vRenderObject, - void *vpfnRenderFnc, - STRUCT_GXRF_OBJFNC_ARG_LIST *pstArgList + void *vpfnRenderFnc ); STRUCT_GXRF_RENDER *pstGXRF_FindFirstRenderizableByType(eSDLT_Renderizable eSDLTy); STRUCT_GXRF_RENDER *pstGXRF_FindNextRenderizableByType (STRUCT_GXRF_RENDER *pstGXRF_CurrRenderObj, eSDLT_Renderizable eSDLTy); + int iGXRF_ADD2ArgList(void *vGXRF_Renderizable, void *vArgType, void *vArg); int bGXRF_EnableRenderizable(void *vGXRF_Renderizable); void vGXRF_RenderObject(void *vGXRF_Renderizable); void vGXRF_RenderAll(); diff --git a/include/board.h b/include/board.h index f3d58e3..166625b 100644 --- a/include/board.h +++ b/include/board.h @@ -46,9 +46,6 @@ int ii; int jj; - // printf("ROW_RATIO: %d\n", ROW_RATIO); - // printf("COL_RATIO : %d\n", COL_RATIO); - for (ii = 0; ii < BOARD_ROWS; ii++) { for (jj = 0; jj < BOARD_COLS; jj++) { const int iSquare = giBOARD_Main[ii][jj]; diff --git a/src/cattie.c b/src/cattie.c index b967d6f..1dda018 100644 --- a/src/cattie.c +++ b/src/cattie.c @@ -534,6 +534,7 @@ int SDL_main(int argc, char *argv[]){ SDL_Rect SDL_RECT_ButtonUndoLast; SDL_Rect SDL_RECT_ButtonConfirmAction; SDL_Rect *pSDL_RECT_Menu = NULL; + eSDLT_Renderizable eSDLTypes; SDL_Window* window; SDL_Renderer* renderer; // int iRsl = 0; @@ -684,18 +685,18 @@ int SDL_main(int argc, char *argv[]){ // vDrawButton(renderer, &SDL_RECT_ButtonFireLaser, BUTTON_DIRECTION); // vDrawButton(renderer, &SDL_RECT_ButtonUndoLast, BUTTON_ERASE); // vDrawButton(renderer, &SDL_RECT_ButtonConfirmAction, BUTTON_CONFIRM); - // - /*iGXRF_Add2RenderList( + + iGXRF_Add2RenderList( renderer, TRUE, SDL_RECT, &SDL_RECT_ButtonArrowRight, - //pszFmt, - vDrawButton, - 2, - &SDL_RECT_ButtonArrowRight, - BUTTON_DIRECTION - );*/ + vDrawButton + ); + + iGXRF_ADD2ArgList(&SDL_RECT_ButtonArrowRight, (void *)(eSDLTypes=SDL_RECT), &SDL_RECT_ButtonArrowRight); + iGXRF_ADD2ArgList(&SDL_RECT_ButtonArrowRight, (void *)"int", (void *)BUTTON_DIRECTION); + // Main loop SDL_Event event; while (gbRunning) { @@ -782,8 +783,8 @@ int SDL_main(int argc, char *argv[]){ // vDrawButtons(renderer); // vGXRF_RenderAll(); - //vGXRF_RenderObject(&SDL_RECT_ButtonArrowRight); - // vDrawButton(renderer, &SDL_RECT_ButtonArrowRight, BUTTON_DIRECTION); + // vGXRF_RenderObject(&SDL_RECT_ButtonArrowRight); + // vDrawButton(renderer, &SDL_RECT_ButtonArrowRight, BUTTON_DIRECTION); // vDrawButton(renderer, &SDL_RECT_ButtonTurnArrow, BUTTON_DIRECTION); // vDrawButton(renderer, &SDL_RECT_ButtonFireLaser, BUTTON_DIRECTION); // vDrawButton(renderer, &SDL_RECT_ButtonUndoLast, BUTTON_ERASE);