예제 #1
0
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);
	}
}
예제 #2
0
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);
}
예제 #3
0
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;
}
예제 #5
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);
}
예제 #6
0
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;
}
예제 #7
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;
}
예제 #8
0
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);
}