示例#1
0
void init18N(int argc, char *argv[])
{
	int i;
	int languageId = -1;

	setlocale(LC_NUMERIC, "");

	for (i = 1 ; i < argc ; i++)
	{
		if (strcmp(argv[i], "-language") == 0)
		{
			languageId = i + 1;

			if (languageId >= argc)
			{
				SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, "You must specify a language to use with -language. Using default.");
			}
		}
	}

	setLanguage("tbftss", languageId == -1 ? NULL : argv[languageId]);

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Numeric is %s", setlocale(LC_NUMERIC, "C"));
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "atof(2.75) is %f", atof("2.75"));
}
示例#2
0
static void loadCapitalShipDef(char *filename)
{
	cJSON *root;
	char *text;
	Entity *e;

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);

	text = readFile(filename);

	root = cJSON_Parse(text);

	if (root)
	{
		e = malloc(sizeof(Entity));
		memset(e, 0, sizeof(Entity));
		defTail->next = e;
		defTail = e;

		e->type = ET_CAPITAL_SHIP;
		e->active = 1;

		STRNCPY(e->name, cJSON_GetObjectItem(root, "name")->valuestring, MAX_NAME_LENGTH);
		STRNCPY(e->defName, e->name, MAX_NAME_LENGTH);
		e->shield = e->maxShield = cJSON_GetObjectItem(root, "shield")->valueint;
		e->shieldRechargeRate = cJSON_GetObjectItem(root, "shieldRechargeRate")->valueint;
		e->texture = getTexture(cJSON_GetObjectItem(root, "texture")->valuestring);
		e->speed = 1;
		e->systemPower = 3;
		e->flags = EF_NO_HEALTH_BAR;

		e->action = think;
		e->die = die;

		SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h);

		e->separationRadius = MAX(e->w, e->h);

		loadComponents(e, cJSON_GetObjectItem(root, "components"));

		loadGuns(e, cJSON_GetObjectItem(root, "guns"));

		loadEngines(e, cJSON_GetObjectItem(root, "engines"));

		cJSON_Delete(root);
	}
	else
	{
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Failed to load '%s'", filename);
	}

	free(text);
}
示例#3
0
void initResources(void)
{
	char **filenames;
	int i;

	numBackgrounds = numPlanets = numMusicFiles = 0;

	filenames = getFileList("gfx/backgrounds", &numBackgrounds);
	backgrounds = malloc(sizeof(char*) * numBackgrounds);

	for (i = 0 ; i < numBackgrounds ; i++)
	{
		backgrounds[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);
		sprintf(backgrounds[i], "gfx/backgrounds/%s", filenames[i]);

		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Adding AUTO %s", filenames[i]);
		
		free(filenames[i]);
	}

	free(filenames);

	filenames = getFileList("gfx/planets", &numPlanets);
	planets = malloc(sizeof(char*) * numPlanets);

	for (i = 0 ; i < numPlanets ; i++)
	{
		planets[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);
		sprintf(planets[i], "gfx/planets/%s", filenames[i]);
		
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Adding AUTO %s", filenames[i]);
		
		free(filenames[i]);
	}

	free(filenames);

	filenames = getFileList("music/battle/", &numMusicFiles);

	musicFiles = malloc(sizeof(char*) * numMusicFiles);

	for (i = 0 ; i < numMusicFiles ; i++)
	{
		musicFiles[i] = malloc(sizeof(char) * MAX_FILENAME_LENGTH);
		sprintf(musicFiles[i], "music/battle/%s", filenames[i]);
		
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Adding AUTO %s", filenames[i]);
		
		free(filenames[i]);
	}

	free(filenames);
}
示例#4
0
void saveConfig(void)
{
	int i;
	char *out, *configFilename;
	cJSON *root, *controlsJSON, *keysJSON, *mouseJSON, *gameplayJSON;

	configFilename = getSaveFilePath(CONFIG_FILENAME);

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Saving config ...");

	root = cJSON_CreateObject();
	cJSON_AddNumberToObject(root, "winWidth", app.winWidth);
	cJSON_AddNumberToObject(root, "winHeight", app.winHeight);
	cJSON_AddNumberToObject(root, "fullscreen", app.fullscreen);
	cJSON_AddNumberToObject(root, "musicVolume", app.musicVolume);
	cJSON_AddNumberToObject(root, "soundVolume", app.soundVolume);

	keysJSON = cJSON_CreateObject();
	for (i = 0 ; i < CONTROL_MAX ; i++)
	{
		cJSON_AddNumberToObject(keysJSON, getLookupName("CONTROL_", i), app.keyControls[i]);
	}

	mouseJSON = cJSON_CreateObject();
	for (i = 0 ; i < CONTROL_MAX ; i++)
	{
		cJSON_AddNumberToObject(mouseJSON, getLookupName("CONTROL_", i), app.mouseControls[i]);
	}

	controlsJSON = cJSON_CreateObject();
	cJSON_AddItemToObject(controlsJSON, "keys", keysJSON);
	cJSON_AddItemToObject(controlsJSON, "mouse", mouseJSON);
	cJSON_AddItemToObject(root, "controls", controlsJSON);
	
	gameplayJSON = cJSON_CreateObject();
	cJSON_AddNumberToObject(gameplayJSON, "friendlyFire", app.gameplay.friendlyFire);
	cJSON_AddNumberToObject(gameplayJSON, "autoSwitchPlayerTarget", app.gameplay.autoSwitchPlayerTarget);
	cJSON_AddNumberToObject(gameplayJSON, "missileReTarget", app.gameplay.missileReTarget);
	cJSON_AddNumberToObject(gameplayJSON, "healthBars", app.gameplay.healthBars);
	cJSON_AddItemToObject(root, "gameplay", gameplayJSON);

	out = cJSON_Print(root);

	if (!writeFile(configFilename, out))
	{
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_ERROR, "Failed to save config");
	}

	cJSON_Delete(root);
	free(out);
}
示例#5
0
static void loadTrophyData(char *filename)
{
	cJSON *root, *node;
	char *text;
	Trophy *t, *tail;
	int count[TROPHY_MAX];

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);

	text = readFile(filename);
	root = cJSON_Parse(text);

	tail = &game.trophyHead;
	
	memset(count, 0, sizeof(int) * TROPHY_MAX);

	for (node = root->child ; node != NULL ; node = node->next)
	{
		if (cJSON_GetObjectItem(node, "id")->valuestring[0] != '_')
		{
			t = malloc(sizeof(Trophy));
			memset(t, 0, sizeof(Trophy));

			STRNCPY(t->id, cJSON_GetObjectItem(node, "id")->valuestring, MAX_NAME_LENGTH);
			STRNCPY(t->title, _(cJSON_GetObjectItem(node, "title")->valuestring), MAX_DESCRIPTION_LENGTH);
			STRNCPY(t->description, _(cJSON_GetObjectItem(node, "description")->valuestring), MAX_DESCRIPTION_LENGTH);
			t->value = lookup(cJSON_GetObjectItem(node, "value")->valuestring);
			t->hidden = getJSONValue(node, "hidden", 0);
			
			t->stat = -1;
			
			/* can't use the getJSONValue here, as it could lead to false positives */
			if (cJSON_GetObjectItem(node, "stat"))
			{
				t->stat = lookup(cJSON_GetObjectItem(node, "stat")->valuestring);
				t->statValue = cJSON_GetObjectItem(node, "statValue")->valueint;
			}
			
			count[t->value]++;
			count[TROPHY_UNEARNED]++;

			tail->next = t;
			tail = t;
		}
	}
	
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Trophies (%d) [Bronze=%d, Silver=%d, Gold=%d, Platinum=%d]", count[TROPHY_UNEARNED], count[TROPHY_BRONZE], count[TROPHY_SILVER], count[TROPHY_GOLD], count[TROPHY_PLATINUM]);

	cJSON_Delete(root);
	free(text);
}
 bool Texture::loadFromFile(const std::string& path, SDL_Renderer*& renderer, const double zoomX, const double zoomY)
 {
     destroy();
     
     SDL_Texture* newTexture = nullptr;
     SDL_Surface* loadedSurface = IMG_Load( path.c_str() );
     if( loadedSurface == nullptr )
     {
         SDL_LogMessage(SDL_LOG_CATEGORY_VIDEO, SDL_LOG_PRIORITY_ERROR, "Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
     }
     else
     {
         if (zoomX != 1 && zoomY != 1)
         {
             SDL_Surface* zoomedSurface = zoomSurface( loadedSurface, zoomX, zoomY, SMOOTHING_OFF );
             if (zoomedSurface != nullptr)
             {
                 SDL_FreeSurface( loadedSurface );
                 loadedSurface = nullptr;
                 loadedSurface = zoomedSurface;
             }
             else
             {
                 SDL_LogMessage(SDL_LOG_CATEGORY_VIDEO, SDL_LOG_PRIORITY_WARN, "Unable to resize image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
             }
         }
         
         if (SDL_SetColorKey( loadedSurface, SDL_TRUE, SDL_MapRGB( loadedSurface->format, transparentColor.r, transparentColor.g, transparentColor.b ) ) != 0)
         {
             SDL_LogMessage(SDL_LOG_CATEGORY_VIDEO, SDL_LOG_PRIORITY_WARN, "Unable to set transparent color.");
         }
         
         newTexture = SDL_CreateTextureFromSurface( renderer, loadedSurface );
         if( newTexture == nullptr )
         {
             SDL_LogMessage(SDL_LOG_CATEGORY_VIDEO, SDL_LOG_PRIORITY_ERROR, "Unable to create texture from %s! SDL Error: %s\n",
                            path.c_str(), SDL_GetError() );
         }
         else
         {
             pixelWidth = loadedSurface->w;
             pixelHeight = loadedSurface->h;
         }
         
         SDL_FreeSurface( loadedSurface );
         loadedSurface = nullptr;
     }
     
     texture = newTexture;
     return texture != NULL;
 }
示例#7
0
static void addFighterStat(char *key)
{
	Tuple *t, *tail;
	
	tail = &game.fighterStatHead;
	
	for (t = game.fighterStatHead.next ; t != NULL ; t = t->next)
	{
		if (strcmp(t->key, key) == 0)
		{
			return;
		}
		
		tail = t;
	}
	
	t = malloc(sizeof(Tuple));
	memset(t, 0, sizeof(Tuple));
	
	STRNCPY(t->key, key, MAX_NAME_LENGTH);
	t->value = 0;
	
	tail->next = t;
	
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Added '%s' to fighter stats", key);
}
示例#8
0
void awardTrophy(char *id)
{
	Trophy *t;
	int numRemaining;
	
	numRemaining = 0;
	
	for (t = game.trophyHead.next ; t != NULL ; t = t->next)
	{
		if (!t->awarded && strcmp(t->id, id) == 0)
		{
			t->awarded = 1;
			t->awardDate = time(NULL);
			t->notify = SDL_GetTicks();
			
			/* prevent race condition */
			SDL_Delay(1);
			
			SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Awarding trophy '%s'", t->id);
			
			app.saveGame = 1;
		}
		
		if (!t->awarded)
		{
			numRemaining++;
		}
	}
	
	/* the Platinum will always be the last trophy to unlock */
	if (numRemaining == 1)
	{
		awardTrophy("PLATINUM");
	}
}
示例#9
0
SDL2Logger::~SDL2Logger()
{
  this->write( "\n" );

  std::string out( this->output_stream().str() );

  SDL_LogMessage( this->category(), SDL2Logger::SDL_priority( this->priority() ), "%s", out.c_str() );
}
示例#10
0
void cleanup(void)
{
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Cleaning up ...");

	SDL_DestroyRenderer(app.renderer);
	SDL_DestroyWindow(app.window);

	destroyLookups();

	destroyTextures();

	expireTexts(1);

	destroyFonts();

	destroySounds();

	destroyGame();

	destroyFighterDefs();

	destroyCapitalShipDefs();

	destroyBulletDefs();

	destroyItemDefs();

	destroyStarSystems();

	destroyBattle();

	destroyGalacticMap();

	destroyWidgets();

	destroyResources();
	
	destroyCredits();
	
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Done");

	TTF_Quit();

	SDL_Quit();
}
示例#11
0
 void Render::CreateRender(SDL_Renderer*& renderer, Physics* physicsWorld, Camera* camera, Text* texts)
 {
     if (renderer == nullptr)
     {
         SDL_LogMessage(SDL_LOG_CATEGORY_ERROR, SDL_LOG_PRIORITY_ERROR, "Render pointer is null");
         throw error::RENDER_NULL;
     }
     
     if (physicsWorld == nullptr)
     {
         SDL_LogMessage(SDL_LOG_CATEGORY_ERROR, SDL_LOG_PRIORITY_ERROR, "Physics World pointer is null");
         throw error::RENDER_NULL;
     }
     
     this->renderer = renderer;
     this->physicsWorld = physicsWorld;
     this->camera = camera;
     this->texts = texts;
 }
示例#12
0
文件: widgets.c 项目: nnesse/tbftss
static void loadWidgetSet(char *filename)
{
	cJSON *root, *node;
	char *text;
	Widget *w;
	
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);

	text = readFile(filename);
	root = cJSON_Parse(text);

	for (node = root->child ; node != NULL ; node = node->next)
	{
		w = malloc(sizeof(Widget));
		memset(w, 0, sizeof(Widget));
		
		w->type = lookup(cJSON_GetObjectItem(node, "type")->valuestring);
		STRNCPY(w->name, cJSON_GetObjectItem(node, "name")->valuestring, MAX_NAME_LENGTH);
		STRNCPY(w->group, cJSON_GetObjectItem(node, "group")->valuestring, MAX_NAME_LENGTH);
		w->rect.x = cJSON_GetObjectItem(node, "x")->valueint;
		w->rect.y = cJSON_GetObjectItem(node, "y")->valueint;
		w->rect.w = cJSON_GetObjectItem(node, "w")->valueint;
		w->rect.h = cJSON_GetObjectItem(node, "h")->valueint;
		w->enabled = 1;
		w->visible = 1;
		
		if (w->rect.x == -1)
		{
			w->rect.x = SCREEN_WIDTH / 2;
		}
		
		switch (w->type)
		{
			case WT_BUTTON:
				STRNCPY(w->text, cJSON_GetObjectItem(node, "text")->valuestring, MAX_NAME_LENGTH);
				w->rect.x -= w->rect.w / 2;
				w->rect.y -= (w->rect.h / 2) + 8;
				break;
				
			case WT_SELECT:
				STRNCPY(w->text, cJSON_GetObjectItem(node, "text")->valuestring, MAX_NAME_LENGTH);
				w->rect.x -= w->rect.w / 2;
				w->rect.y -= (w->rect.h / 2) + 8;
				createOptions(w, cJSON_GetObjectItem(node, "options")->valuestring);
				break;
		}
	
		tail->next = w;
		tail = w;
	}

	cJSON_Delete(root);
	free(text);
}
示例#13
0
static void resizeDrawList(void)
{
    int n;

    n = drawCapacity + INITIAL_DEBRIS_DRAW_CAPACITY;

    SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing debris draw capacity: %d -> %d", drawCapacity, n);

    debrisToDraw = resize(debrisToDraw, sizeof(Debris*) * drawCapacity, sizeof(Debris*) * n);
    drawCapacity = n;
}
示例#14
0
static void resizeDrawList(void)
{
	int n;

	n = drawCapacity + INITIAL_EFFECT_DRAW_CAPACITY;

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Resizing effect draw capacity: %d -> %d", drawCapacity, n);

	effectsToDraw = resize(effectsToDraw, sizeof(Effect*) * drawCapacity, sizeof(Effect*) * n);
	
	drawCapacity = n;
}
示例#15
0
	void Logger::LogMessage(std::string pMessage)
	{
		std::chrono::system_clock::time_point today = std::chrono::system_clock::now();
		std::time_t tt = std::chrono::system_clock::to_time_t(today);

		std::string timeStr = ctime(&tt);
		timeStr.pop_back();
		pMessage = timeStr + " : " + pMessage;

		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, pMessage.c_str());

		_ofs << pMessage << std::endl;
	}
示例#16
0
/*
 * Prints given message with a timestamp in the TEST category and INFO priority.
 */
void SDLTest_Log(char *fmt, ...)
{
	va_list list;
	char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH];

	// Print log message into a buffer
	memset(logMessage, 0, SDLTEST_MAX_LOGMESSAGE_LENGTH);
	va_start(list, fmt);
	SDL_vsnprintf(logMessage, SDLTEST_MAX_LOGMESSAGE_LENGTH - 1, fmt, list);
	va_end(list);

	// Log with timestamp and newline
	SDL_LogMessage(SDL_LOG_CATEGORY_TEST, SDL_LOG_PRIORITY_INFO, "%s: %s\n", SDLTest_TimestampToString(time(0)), logMessage);
}
示例#17
0
void countNumEnemies(void)
{
	Entity *e;

	for (e = battle.entityHead.next ; e != NULL ; e = e->next)
	{
		if (e->side != SIDE_ALLIES && e->type == ET_FIGHTER)
		{
			battle.numInitialEnemies++;
		}
	}

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "battle.numInitialEnemies=%d", battle.numInitialEnemies);
}
示例#18
0
/*
 * Prints given message with a timestamp in the TEST category and the ERROR priority.
 */
void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...)
{
    va_list list;
    char logMessage[SDLTEST_MAX_LOGMESSAGE_LENGTH];

    /* Print log message into a buffer */
    SDL_memset(logMessage, 0, SDLTEST_MAX_LOGMESSAGE_LENGTH);
    va_start(list, fmt);
    SDL_vsnprintf(logMessage, SDLTEST_MAX_LOGMESSAGE_LENGTH - 1, fmt, list);
    va_end(list);

    /* Log with timestamp and newline */
    SDL_LogMessage(SDL_LOG_CATEGORY_TEST, SDL_LOG_PRIORITY_ERROR, "%s: %s", SDLTest_TimestampToString(time(0)), logMessage);
}
示例#19
0
文件: player.c 项目: akien-mga/tbftss
void loadPlayer(cJSON *node)
{
	char *type;
	int side, addFlags;
	long flags;

	type = cJSON_GetObjectItem(node, "type")->valuestring;
	side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
	flags = -1;

	player = spawnFighter(type, 0, 0, side);
	player->x = BATTLE_AREA_WIDTH / 2;
	player->y = BATTLE_AREA_HEIGHT / 2;

	if (cJSON_GetObjectItem(node, "x"))
	{
		player->x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
		player->y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
	}
	
	if (cJSON_GetObjectItem(node, "flags"))
	{
		flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
	}
	
	if (flags != -1)
	{
		if (addFlags)
		{
			player->flags |= flags;
		}
		else
		{
			player->flags = flags;

			SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Flags for Player replaced");
		}
	}

	if (strcmp(type, "Tug") == 0)
	{
		battle.stats[STAT_TUG]++;
	}

	if (strcmp(type, "Shuttle") == 0)
	{
		battle.stats[STAT_SHUTTLE]++;
	}
}
示例#20
0
void createSaveFolder(void)
{
	char *userHome;
	char dir[MAX_FILENAME_LENGTH];
	
	userHome = getenv("HOME");
	
	if (!userHome)
	{
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Unable to determine user save folder. Will save to current dir.");
		return;
	}
	
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "User home = %s", userHome);
	
	sprintf(dir, "%s/.local/share/tbftss", userHome);
	if (mkdir(dir, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH) != 0 && errno != EEXIST)
	{
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Failed to create save dir '%s'. Will save to current dir.", dir);
		return;
	}
	
	STRNCPY(app.saveDir, dir, MAX_FILENAME_LENGTH);
}
示例#21
0
 void Render::drawBackGround(void)
 {
     auto itPlayer = physicsWorld->bodiesBySpriteType.find(entity::TypeOfSprite::SPRT_CHARACTER);
     if (itPlayer != physicsWorld->bodiesBySpriteType.end())
     {
         camera->cameraFollowObj(utls::Conv::fullConversionCartesianPosToScreenPos(itPlayer->second->GetFixtureList(),
                                                                              itPlayer->second->GetWorldCenter(), itPlayer->second->GetAngle()), camera->cameraPosition);
         SDL_Rect origin = {camera->cameraPosition.x, camera->cameraPosition.y, measure::CAMERA_WIDTH_PX, measure::CAMERA_HEIGHT_PX};
         SDL_Rect destination = {0, 0, measure::CAMERA_WIDTH_PX, measure::CAMERA_HEIGHT_PX};
         SDL_RenderCopy(renderer, camera->backGround.getSDLTexture(), &origin, &destination);
     }
     else
         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Main Players not found");
     
 }
示例#22
0
文件: widgets.c 项目: nnesse/tbftss
Widget *getWidget(const char *name, const char *group)
{
	Widget *w;

	for (w = head.next; w != NULL ; w = w->next)
	{
		if (strcmp(w->name, name) == 0 && strcmp(w->group, group) == 0)
		{
			return w;
		}
	}

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "No such widget ('%s', '%s')", name, group);

	return NULL;
}
示例#23
0
static void va_log_message(enum log_priority priority, const char *fmt, va_list args)
{
	SDL_LogPriority sdl_priority;
	int size;
	char *buffer;
	va_list temp;

	if (priority >= LOG_PRIORITY_NUM_PRIORITIES)
		priority = LOG_PRIORITY_INFO;

	sdl_priority = priority_info[priority].sdl_priority;

	va_copy(temp, args);
	size = vsnprintf(NULL, 0, fmt, temp) + 1;
	va_end(temp);

	buffer = NULL;

	if (size) {
		buffer = malloc(size);

		if (!buffer)
			return;
	}


	va_copy(temp, args);
	vsnprintf(buffer, size, fmt, temp);
	va_end(temp);

#if GUI_ENABLED
	if (gui_enabled && (priority == LOG_PRIORITY_ERROR)) {
		gui_error(buffer);
	}
#endif

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, sdl_priority, buffer, "");

	free(buffer);

}
示例#24
0
文件: player.c 项目: akien-mga/tbftss
static void setPilotName(void)
{
	int i, pos;
	
	pos = -1;
	
	for (i = 0 ; i < strlen(game.currentMission->pilot) ; i++)
	{
		if (game.currentMission->pilot[i] == ' ')
		{
			pos = i;
		}
	}
	
	memset(player->name, '\0', MAX_NAME_LENGTH);
	
	if (pos != -1)
	{
		memcpy(player->name, game.currentMission->pilot + pos + 1, strlen(game.currentMission->pilot) - pos - 1);
	}
	
	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Pilot name = '%s'", player->name);
}
示例#25
0
void loadFighters(cJSON *node)
{
	Entity *e;
	char **types, *name, *groupName, *type, *strpos;
	int side, scatter, number, active;
	int i, numTypes, addFlags, addAIFlags, id;
	long flags, aiFlags;
	float x, y;

	if (node)
	{
		id = 0;
		
		node = node->child;

		while (node)
		{
			name = NULL;
			groupName = NULL;
			flags = -1;
			aiFlags = -1;

			types = toTypeArray(cJSON_GetObjectItem(node, "types")->valuestring, &numTypes);
			side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
			x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
			y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
			name = getJSONValueStr(node, "name", NULL);
			groupName = getJSONValueStr(node, "groupName", NULL);
			number = getJSONValue(node, "number", 1);
			scatter = getJSONValue(node, "scatter", 1);
			active = getJSONValue(node, "active", 1);

			if (cJSON_GetObjectItem(node, "flags"))
			{
				flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
			}

			if (cJSON_GetObjectItem(node, "aiFlags"))
			{
				aiFlags = flagsToLong(cJSON_GetObjectItem(node, "aiFlags")->valuestring, &addAIFlags);
			}

			for (i = 0 ; i < number ; i++)
			{
				type = types[rand() % numTypes];

				e = spawnFighter(type, x, y, side);

				if (scatter > 1)
				{
					e->x += (rand() % scatter) - (rand() % scatter);
					e->y += (rand() % scatter) - (rand() % scatter);
				}

				e->active = active;

				if (flags != -1)
				{
					if (addFlags)
					{
						e->flags |= flags;
					}
					else
					{
						e->flags = flags;

						SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Flags for '%s' (%s) replaced", e->name, e->defName);
					}
					
					if (e->flags & EF_DISABLED)
					{
						e->speed = 0;
					}
				}

				if (aiFlags != -1)
				{
					if (addAIFlags)
					{
						e->aiFlags |= aiFlags;
					}
					else
					{
						e->aiFlags = aiFlags;

						SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "AI Flags for '%s' (%s) replaced", e->name, e->defName);
					}
				}

				if (name)
				{
					STRNCPY(e->name, name, MAX_NAME_LENGTH);
					
					/* update 'name #?' to 'name #1', etc. */
					strpos = strstr(e->name, "#?");
					
					if (strpos)
					{
						*(++strpos) = ('0' + ++id);
					}
				}

				if (groupName)
				{
					STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH);
				}
			}

			node = node->next;

			for (i = 0 ; i < numTypes ; i++)
			{
				free(types[i]);
			}

			free(types);
		}
	}
}
 bool Controller::handleGameState(SDL_Event* event)
 {
     bool quit = flag::CONTINUE_GAME;
     static Uint32 ms = 0;
     while( SDL_PollEvent( event ) != 0 )
     {
         if( event->type == SDL_QUIT )
         {
             quit = flag::QUIT_GAME;
         }
         else if ( event->type == SDL_KEYDOWN && event->key.keysym.sym == SDLK_ESCAPE)
         {
             quit = flag::QUIT_GAME;
         }
         else if( event->type == SDL_MOUSEBUTTONDOWN )
         {
             SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "Mouse click position: [%d, %d]", camera->cameraPosition.x + event->button.x, event->button.y);
         }
         else
         {
             if (event->type == SDL_WINDOWEVENT)
             {
                 switch (event->window.event)
                 {
                     case SDL_WINDOWEVENT_SHOWN:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d shown", event->window.windowID);
                         ms = 0;
                         break;
                     case SDL_WINDOWEVENT_HIDDEN:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d hidden", event->window.windowID);
                         ms = measure::RESUME_STATE_DELAY_IN_MS;
                         break;
                     case SDL_WINDOWEVENT_EXPOSED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d exposed", event->window.windowID);
                         ms = 0;
                         break;
                     case SDL_WINDOWEVENT_MOVED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d moved to %d,%d",
                                        event->window.windowID, event->window.data1,
                                        event->window.data2);
                         ms = 0;
                         break;
                     case SDL_WINDOWEVENT_RESIZED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d resized to %dx%d",
                                        event->window.windowID, event->window.data1,
                                        event->window.data2);
                         ms = 0;
                         break;
                     case SDL_WINDOWEVENT_MINIMIZED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d minimized", event->window.windowID);
                         ms = measure::RESUME_STATE_DELAY_IN_MS;
                         break;
                     case SDL_WINDOWEVENT_MAXIMIZED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE,"Window %d maximized", event->window.windowID);
                         ms = 0;
                         break;
                     case SDL_WINDOWEVENT_RESTORED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d restored", event->window.windowID);
                         ms = 0;;
                         break;
                     case SDL_WINDOWEVENT_FOCUS_GAINED:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d gained keyboard focus",
                                        event->window.windowID);
                         ms = 0;
                         break;
                     case SDL_WINDOWEVENT_FOCUS_LOST:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d lost keyboard focus",
                                        event->window.windowID);
                         ms = measure::RESUME_STATE_DELAY_IN_MS;
                         break;
                     case SDL_WINDOWEVENT_CLOSE:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_VERBOSE, "Window %d closed", event->window.windowID);
                         ms = measure::RESUME_STATE_DELAY_IN_MS;
                         break;
                     default:
                         SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Window %d got unknown event %d",
                                        event->window.windowID, event->window.event);
                         ms = 0;
                         break;
                 }
             }
         }
     }
     
     SDL_Delay(ms);
     return quit;
 }
示例#27
0
void loadCapitalShips(cJSON *node)
{
	Entity *e;
	char **types, *name, *groupName, *type;
	int side, scatter, number, active;
	int i, numTypes, addFlags;
	long flags;
	float x, y;

	if (node)
	{
		node = node->child;

		while (node)
		{
			name = NULL;
			groupName = NULL;
			flags = -1;

			types = toTypeArray(cJSON_GetObjectItem(node, "types")->valuestring, &numTypes);
			side = lookup(cJSON_GetObjectItem(node, "side")->valuestring);
			x = (cJSON_GetObjectItem(node, "x")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_WIDTH;
			y = (cJSON_GetObjectItem(node, "y")->valuedouble / BATTLE_AREA_CELLS) * BATTLE_AREA_HEIGHT;
			name = getJSONValueStr(node, "name", NULL);
			groupName = getJSONValueStr(node, "groupName", NULL);
			number = getJSONValue(node, "number", 1);
			scatter = getJSONValue(node, "scatter", 1);
			active = getJSONValue(node, "active", 1);

			if (cJSON_GetObjectItem(node, "flags"))
			{
				flags = flagsToLong(cJSON_GetObjectItem(node, "flags")->valuestring, &addFlags);
			}

			for (i = 0 ; i < number ; i++)
			{
				type = types[rand() % numTypes];

				e = spawnCapitalShip(type, x, y, side);

				if (scatter > 1)
				{
					e->x += (rand() % scatter) - (rand() % scatter);
					e->y += (rand() % scatter) - (rand() % scatter);
				}

				e->active = active;

				if (name)
				{
					STRNCPY(e->name, name, MAX_NAME_LENGTH);
				}

				if (groupName)
				{
					STRNCPY(e->groupName, groupName, MAX_NAME_LENGTH);
				}

				if (flags != -1)
				{
					if (addFlags)
					{
						e->flags |= flags;
					}
					else
					{
						e->flags = flags;

						SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Flags for '%s' (%s) replaced", e->name, e->defName);
					}
				}
				
				updateCapitalShipComponentProperties(e, flags);
				
				SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "%s (%d / %d)", e->name, e->health, e->maxHealth);
			}

			node = node->next;

			for (i = 0 ; i < numTypes ; i++)
			{
				free(types[i]);
			}

			free(types);
		}
	}
}
示例#28
0
static void loadFighterDef(char *filename)
{
	cJSON *root, *node;
	char *text;
	Entity *e;
	int i;

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Loading %s", filename);

	text = readFile(filename);

	root = cJSON_Parse(text);

	if (root)
	{
		e = malloc(sizeof(Entity));
		memset(e, 0, sizeof(Entity));
		defTail->next = e;
		defTail = e;

		e->type = ET_FIGHTER;
		e->active = 1;

		STRNCPY(e->name, cJSON_GetObjectItem(root, "name")->valuestring, MAX_NAME_LENGTH);
		STRNCPY(e->defName, e->name, MAX_NAME_LENGTH);
		e->health = e->maxHealth = cJSON_GetObjectItem(root, "health")->valueint;
		e->shield = e->maxShield = getJSONValue(root, "shield", 0);
		e->speed = cJSON_GetObjectItem(root, "speed")->valuedouble;
		e->reloadTime = getJSONValue(root, "reloadTime", 0);
		e->shieldRechargeRate = getJSONValue(root, "shieldRechargeRate", 0);
		e->texture = getTexture(cJSON_GetObjectItem(root, "texture")->valuestring);

		SDL_QueryTexture(e->texture, NULL, NULL, &e->w, &e->h);

		if (cJSON_GetObjectItem(root, "guns"))
		{
			i = 0;

			for (node = cJSON_GetObjectItem(root, "guns")->child ; node != NULL ; node = node->next)
			{
				e->guns[i].type = lookup(cJSON_GetObjectItem(node, "type")->valuestring);
				e->guns[i].x = cJSON_GetObjectItem(node, "x")->valueint;
				e->guns[i].y = cJSON_GetObjectItem(node, "y")->valueint;

				i++;

				if (i >= MAX_FIGHTER_GUNS)
				{
					printf("ERROR: cannot assign more than %d guns to a fighter\n", MAX_FIGHTER_GUNS);
					exit(1);
				}
			}

			e->combinedGuns = getJSONValue(root, "combinedGuns", 0);
		}

		e->selectedGunType = e->guns[0].type;

		e->missiles = getJSONValue(root, "missiles", 0);

		if (cJSON_GetObjectItem(root, "flags"))
		{
			e->flags = flagsToLong(cJSON_GetObjectItem(root, "flags")->valuestring, NULL);
		}

		if (cJSON_GetObjectItem(root, "aiFlags"))
		{
			e->aiFlags = flagsToLong(cJSON_GetObjectItem(root, "aiFlags")->valuestring, NULL);
		}

		if (cJSON_GetObjectItem(root, "deathType"))
		{
			e->deathType = lookup(cJSON_GetObjectItem(root, "deathType")->valuestring);
		}
		
		if (e->flags & EF_COMMON_FIGHTER)
		{
			addFighterStat(e->name);
		}

		e->separationRadius = MAX(e->w, e->h) * 3;

		e->systemPower = MAX_SYSTEM_POWER;

		cJSON_Delete(root);
	}
	else
	{
		SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Failed to load '%s'", filename);
	}

	free(text);
}
示例#29
0
void initSDL(void)
{
	int rendererFlags, windowFlags;

	/* do this here, so we don't destroy the save dir stored in app */
	memset(&app, 0, sizeof(App));

	/* done in src/plat/ */
	createSaveFolder();

	rendererFlags = SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC;
	windowFlags = 0;

	loadConfig();

	if (app.fullscreen)
	{
		windowFlags |= SDL_WINDOW_FULLSCREEN;
	}

	if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0)
	{
		printf("Couldn't initialize SDL: %s\n", SDL_GetError());
		exit(1);
	}

	SDL_ShowCursor(0);

	if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) == -1)
    {
        printf("Couldn't initialize SDL Mixer\n");
		exit(1);
    }

    Mix_AllocateChannels(64);

	Mix_Volume(-1, app.soundVolume * MIX_MAX_VOLUME / 10);
	Mix_VolumeMusic(app.musicVolume * MIX_MAX_VOLUME / 10);

	app.window = SDL_CreateWindow("TBFTSS - The Pandoran War", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, app.winWidth, app.winHeight, windowFlags);

	SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "linear");

	app.renderer = SDL_CreateRenderer(app.window, -1, rendererFlags);

	IMG_Init(IMG_INIT_PNG | IMG_INIT_JPG);

	if (TTF_Init() < 0)
	{
		printf("Couldn't initialize SDL TTF: %s\n", SDL_GetError());
		exit(1);
	}

	app.backBuffer = SDL_CreateTexture(app.renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, SCREEN_WIDTH, SCREEN_HEIGHT);

	app.scaleX = SCREEN_WIDTH;
	app.scaleX /= app.winWidth;
	app.scaleY = SCREEN_HEIGHT;
	app.scaleY /= app.winHeight;

	SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO, "Game scale factor: %.2f,%.2f\n", app.scaleX, app.scaleY);
}
示例#30
0
 void Render::drawPhysicWorld(void)
 {
     b2Body* ptr = physicsWorld->getWorld()->GetBodyList();
     b2Fixture* fixture = nullptr;
     b2Shape::Type shapeType;
     
     while(ptr)
     {
         fixture = ptr->GetFixtureList();
         shapeType = fixture->GetType();
         
         if (shapeType == b2Shape::e_polygon)
         {
             for (b2Fixture* fixtureElement = ptr->GetFixtureList(); fixtureElement; fixtureElement = fixtureElement->GetNext())
             {
                 SDL_SetRenderDrawColor( renderer, 0x00, 0x00, 0xFF, 0xFF );
                 b2Vec2 points[4];
                 for(int i=0;i<4;i++)
                 {
                     //points[i]=((b2PolygonShape*)ptr->GetFixtureList()->GetShape())->GetVertex(i);
                     points[i]=((b2PolygonShape*)fixtureElement->GetShape())->GetVertex(i);
                     utls::Conv::rotateTranslate(points[i], ptr->GetWorldCenter(), ptr->GetAngle());
                 }
                 
                 SDL_Point pointA = utls::Conv::convCartesianPosToScreennPos(points[0]);
                 SDL_Point pointB = utls::Conv::convCartesianPosToScreennPos(points[1]);
                 pointA.x = pointA.x - camera->cameraPosition.x;
                 pointB.x = pointB.x - camera->cameraPosition.x;
                 SDL_RenderDrawLine(renderer, pointA.x, pointA.y, pointB.x, pointB.y);
                 
                 pointA = utls::Conv::convCartesianPosToScreennPos(points[1]);
                 pointB = utls::Conv::convCartesianPosToScreennPos(points[2]);
                 pointA.x = pointA.x - camera->cameraPosition.x;
                 pointB.x = pointB.x - camera->cameraPosition.x;
                 SDL_RenderDrawLine(renderer, pointA.x, pointA.y, pointB.x, pointB.y);
                 
                 pointA = utls::Conv::convCartesianPosToScreennPos(points[2]);
                 pointB = utls::Conv::convCartesianPosToScreennPos(points[3]);
                 pointA.x = pointA.x - camera->cameraPosition.x;
                 pointB.x = pointB.x - camera->cameraPosition.x;
                 SDL_RenderDrawLine(renderer, pointA.x, pointA.y, pointB.x, pointB.y);
                 
                 pointA = utls::Conv::convCartesianPosToScreennPos(points[3]);
                 pointB = utls::Conv::convCartesianPosToScreennPos(points[0]);
                 pointA.x = pointA.x - camera->cameraPosition.x;
                 pointB.x = pointB.x - camera->cameraPosition.x;
                 SDL_RenderDrawLine(renderer, pointA.x, pointA.y, pointB.x, pointB.y);
             }
         }
         else if (shapeType == b2Shape::e_chain)
         {
             SDL_SetRenderDrawColor( renderer, 0x00, 0xFF, 0xFF, 0xFF );
             b2Vec2 point;
             b2ChainShape* chain = (b2ChainShape*)ptr->GetFixtureList()->GetShape();
             int numEdges = chain->GetChildCount();
             //int numVertices = chain->m_hasNextVertex ? numEdges : numEdges + 1;
             
             b2EdgeShape edgeShape;
             for (int i = 0; i < numEdges; i++)
             {
                 chain->GetChildEdge( &edgeShape, i );
                 SDL_Point pointA = utls::Conv::convCartesianPosToScreennPos(edgeShape.m_vertex0);
                 SDL_Point pointB = utls::Conv::convCartesianPosToScreennPos(edgeShape.m_vertex1);
                 pointA.x = pointA.x - camera->cameraPosition.x;
                 pointB.x = pointB.x - camera->cameraPosition.x;
                 SDL_RenderDrawLine(renderer, pointA.x, pointA.y, pointB.x, pointB.y);
             }
         }
         else if (shapeType == b2Shape::e_circle)
         {
             SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Draw Physics: Circle is not implemented, yet");
         }
         else
         {
             SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_WARN, "Draw Physics: Shape no implemented");
         }
         
         ptr = ptr->GetNext();
     }
     
 }