void loadModel(gltron_Mesh **ppMesh, int *pToken) { nebu_assert(!*pToken); nebu_assert(!*ppMesh); scripting_GetValue("model"); if(scripting_IsNil()) { scripting_Pop(); // model *ppMesh = loadMesh(); } else { char *pFilename, *path; scripting_GetStringResult(&pFilename); path = getPath(PATH_DATA, pFilename); scripting_StringResult_Free(pFilename); if(!path) { fprintf(stderr, "fatal: could not find model - exiting...\n"); nebu_assert(0); exit(1); // OK: critical, installation corrupt } *pToken = resource_GetToken(path, eRT_GLtronTriMesh); free(path); if(!*pToken) { fprintf(stderr, "fatal: could not load arena - exiting...\n"); nebu_assert(0); exit(1); // OK: critical, installation corrupt } *ppMesh = resource_Get(*pToken, eRT_GLtronTriMesh); } }
void Sound_reloadTrack(void) { char *song; char *path; scripting_GetGlobal("settings", "current_track", NULL); scripting_GetStringResult(&song); fprintf(stderr, "[sound] loading song %s\n", song); path = getPath( PATH_MUSIC, song ); scripting_StringResult_Free(song); if(path == NULL) { fprintf(stderr, "[sound] can't find song...exiting\n"); nebu_assert(0); exit(1); // TODO: handle missing song somewhere else } Sound_load(path); Sound_play(); free(path); }
int level_LoadTexture() { int rid; char *filename; int filter[] = { GL_NEAREST, GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR }; int wrap[] = { GL_CLAMP_TO_EDGE, GL_CLAMP_TO_EDGE, GL_REPEAT }; nebu_Texture2D_meta meta; int result; // int iAnisotropy; meta.format = GL_RGBA; scripting_GetValue("min_filter"); scripting_GetIntegerResult(&result); meta.min_filter = filter[result]; scripting_GetValue("mag_filter"); scripting_GetIntegerResult(&result); meta.mag_filter = filter[result]; scripting_GetValue("wrap_s"); scripting_GetIntegerResult(&result); meta.wrap_s = wrap[result]; scripting_GetValue("wrap_t"); scripting_GetIntegerResult(&result); meta.wrap_t = wrap[result]; scripting_GetValue("anisotropic_filtering"); if(scripting_IsNil()) { meta.anisotropy = 1.0f; scripting_Pop(); } else { scripting_GetFloatResult(&meta.anisotropy); } scripting_GetValue("file"); scripting_GetStringResult(& filename); rid = resource_GetTokenMeta(filename, eRT_Texture, &meta, sizeof(nebu_Texture2D_meta)); scripting_StringResult_Free(filename); return rid; }
int c_setArtPath(lua_State *l) { char *artpack; scripting_GetGlobal("settings", "current_artpack", NULL); scripting_GetStringResult(&artpack); fprintf(stderr, "[status] loading artpack '%s'\n", artpack); sprintf(art_dir_default, "%s%c%s", "art", SEPARATOR, "default"); sprintf(art_dir_artpack, "%s%c%s", "art", SEPARATOR, artpack); free(artpack); art_dirs[0] = art_dir_artpack; art_dirs[1] = art_dir_default; nebu_FS_SetupPath(PATH_ART, 2, art_dirs); return 0; }
void Sound_reloadTrack(void) { char *song; char *path; scripting_GetGlobal("settings", "current_track", NULL); scripting_GetStringResult(&song); // TODO: fix the song loading free(song); song = "song_revenge_of_cats.it"; fprintf(stderr, "[sound] loading song %s\n", song); path = getPath( PATH_MUSIC, song ); // free(song); if(path == NULL) { fprintf(stderr, "[sound] can't find song...exiting\n"); exit(1); // FIXME: handle missing song somewhere else } Sound_load(path); Sound_play(); free(path); }
int c_drawTextFitIntoRect(lua_State *l) { // text, width, height, flags char *text; float width; float height; int flags; box2 box; scripting_GetIntegerResult(&flags); scripting_GetFloatResult(&height); scripting_GetFloatResult(&width); scripting_GetStringResult(&text); // these are ignored! box.vMin.v[0] = 0; box.vMin.v[1] = 0; box.vMax.v[0] = width; box.vMax.v[1] = height; nebu_Font_RenderToBox(gameFtx, text, strlen(text), &box, flags); free(text); return 0; }
int level_LoadTexture() { int id; char *filename; int filter[] = { GL_NEAREST, GL_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR }; int wrap[] = { GL_CLAMP, GL_CLAMP_TO_EDGE, GL_REPEAT }; int result; // FIXME: error checking glGenTextures(1, & id); glBindTexture(GL_TEXTURE_2D, id); // printf("binding texture %d\n", id); scripting_GetValue("file"); scripting_GetStringResult(& filename); loadTexture(filename, GL_RGBA); free(filename); scripting_GetValue("min_filter"); scripting_GetIntegerResult(&result); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter[result]); scripting_GetValue("mag_filter"); scripting_GetIntegerResult(&result); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter[result]); scripting_GetValue("wrap_s"); scripting_GetIntegerResult(&result); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap[result]); scripting_GetValue("wrap_t"); scripting_GetIntegerResult(&result); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap[result]); return id; }
void keyboardGui(int state, int key, int x, int y) { char *pMenuName; if(state == SYSTEM_KEYSTATE_UP) return; scripting_Run("return Menu.current"); scripting_GetStringResult(&pMenuName); switch(key) { case 27: if(strcmp(pMenuName, "RootMenu")) { // not in the root menu -> go up one menu scripting_Run("Menu.GotoParent()"); } else { // is a game already in process? then resume if(game->pauseflag != PAUSE_NO_GAME) SystemExitLoop(RETURN_GUI_ESCAPE); } break; case ' ': case SYSTEM_KEY_RETURN: case SYSTEM_JOY_BUTTON_0: case SYSTEM_JOY_BUTTON_1: case SYSTEM_JOY_BUTTON_2: case SYSTEM_JOY_BUTTON_3: case SYSTEM_JOY_BUTTON_4: case SYSTEM_JOY_BUTTON_5: case SYSTEM_JOY_BUTTON_6: case SYSTEM_JOY_BUTTON_7: case SYSTEM_JOY_BUTTON_8: case SYSTEM_JOY_BUTTON_9: case SYSTEM_JOY_BUTTON_0 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_1 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_2 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_3 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_4 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_5 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_6 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_7 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_8 + SYSTEM_JOY_OFFSET: case SYSTEM_JOY_BUTTON_9 + SYSTEM_JOY_OFFSET: scripting_Run("Menu.Action()"); break; case SYSTEM_KEY_UP: case SYSTEM_JOY_UP: case SYSTEM_JOY_UP + SYSTEM_JOY_OFFSET: scripting_Run("Menu.Previous()"); break; case SYSTEM_KEY_DOWN: case SYSTEM_JOY_DOWN: case SYSTEM_JOY_DOWN + SYSTEM_JOY_OFFSET: scripting_Run("Menu.Next()"); break; case SYSTEM_KEY_RIGHT: case SYSTEM_JOY_RIGHT: case SYSTEM_JOY_RIGHT + SYSTEM_JOY_OFFSET: scripting_Run("Menu.Right()"); break; case SYSTEM_KEY_LEFT: case SYSTEM_JOY_LEFT: case SYSTEM_JOY_LEFT + SYSTEM_JOY_OFFSET: scripting_Run("Menu.Left()"); break; case SYSTEM_KEY_F11: doBmpScreenShot(gScreen); break; case SYSTEM_KEY_F12: doPngScreenShot(gScreen); break; default: // printf("got key %d\n", key); break; } free(pMenuName); }