More progress on audio and rendering
This commit is contained in:
84
main.c
84
main.c
@@ -14,7 +14,8 @@ typedef struct GameState {
|
||||
Player player;
|
||||
Tile tileMap[MAP_HEIGHT][MAP_WIDTH];
|
||||
BackgroundTile backgroundTileMap[MAP_HEIGHT][MAP_WIDTH];
|
||||
SynthVoice voices[NUM_SYNTH_VOICES];
|
||||
AudioData audioData;
|
||||
TileArray neededUpdates;
|
||||
} GameState;
|
||||
GameState gameState;
|
||||
|
||||
@@ -34,7 +35,10 @@ int loadGameState(char *filename, Player *plr) {
|
||||
memcpy(plr, &gameState.player, sizeof(gameState.player));
|
||||
memcpy(tileMap, gameState.tileMap, sizeof(tileMap));
|
||||
memcpy(backgroundMap, gameState.backgroundTileMap, sizeof(backgroundMap));
|
||||
memcpy(audioData.synthVoices, gameState.voices, sizeof(gameState.voices));
|
||||
SDL_Rect *tmp = audioData.playerRect;
|
||||
memcpy(&audioData, &gameState.audioData, sizeof(gameState.audioData));
|
||||
audioData.playerRect = tmp;
|
||||
memcpy(&neededUpdates, &gameState.neededUpdates, sizeof(gameState.neededUpdates));
|
||||
plr->cursor.targetTile = NULL;
|
||||
plr->cursor.prevTargetTile = NULL;
|
||||
return 0;
|
||||
@@ -46,7 +50,8 @@ void saveGameState(char *filename, Player *plr) {
|
||||
memcpy(&gameState.player, plr, sizeof(gameState.player));
|
||||
memcpy(gameState.tileMap, tileMap, sizeof(gameState.tileMap));
|
||||
memcpy(gameState.backgroundTileMap, backgroundMap, sizeof(gameState.backgroundTileMap));
|
||||
memcpy(gameState.voices, audioData.synthVoices, sizeof(gameState.voices));
|
||||
memcpy(&gameState.audioData, &audioData, sizeof(gameState.audioData));
|
||||
memcpy(&gameState.neededUpdates, &neededUpdates, sizeof(neededUpdates));
|
||||
|
||||
FILE *gameSave = fopen(filename, "wb");
|
||||
if (!gameSave) {
|
||||
@@ -98,9 +103,11 @@ int init() {
|
||||
srand(time(NULL));
|
||||
|
||||
memset(tileMap, 0, sizeof(tileMap));
|
||||
memset(&neededUpdates, 0, sizeof(neededUpdates));
|
||||
|
||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, NULL);
|
||||
SDL_SetHint(SDL_HINT_VIDEO_HIGHDPI_DISABLED, "1");
|
||||
SDL_SetHint(SDL_HINT_RENDER_BATCHING, "1");
|
||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengl");
|
||||
SDL_SetHint(SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE, "1");
|
||||
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) {
|
||||
@@ -161,13 +168,16 @@ int init() {
|
||||
spec.callback = audio_callback;
|
||||
spec.userdata = &audioData;
|
||||
|
||||
// SDL_AudioDeviceID dev = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0);
|
||||
// if (dev == 0) {
|
||||
// printf("Failed to open audio: %s\n", SDL_GetError());
|
||||
// SDL_Quit();
|
||||
// }
|
||||
//
|
||||
// SDL_PauseAudioDevice(dev, 1);
|
||||
SDL_AudioDeviceID dev = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0);
|
||||
if (dev == 0) {
|
||||
printf("Failed to open audio: %s\n", SDL_GetError());
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
load_midi_file("assets/audio/testaid.mid");
|
||||
|
||||
SDL_PauseAudioDevice(dev, 0);
|
||||
|
||||
|
||||
SDL_SetRenderDrawColor(mainRenderer, 0, 0, 0, 255);
|
||||
SDL_RenderClear(mainRenderer);
|
||||
@@ -203,19 +213,23 @@ int render() {
|
||||
SDL_Rect rect2;
|
||||
rect2.x = 0;
|
||||
rect2.y = 0;
|
||||
rect2.w = 0;
|
||||
rect2.h = 0;
|
||||
rect2.w = ATLAS_SIZE;
|
||||
rect2.h = ATLAS_SIZE;
|
||||
|
||||
renderAllTiles(mainRenderer, player.rect);
|
||||
renderPlayer(&player);
|
||||
|
||||
// SDL_RenderCopy(mainRenderer, backgroundTexture, &screenRect, &screenRect);
|
||||
// SDL_RenderCopy(mainRenderer, tilesTexture, &screenRect, &screenRect);
|
||||
// SDL_RenderCopy(mainRenderer, itemsTexture, &screenRect, &screenRect);
|
||||
// SDL_RenderCopy(mainRenderer, entityTexture, &screenRect, &screenRect);
|
||||
// SDL_RenderCopy(mainRenderer, hudTexture, &screenRect, &screenRect);
|
||||
SDL_QueryTexture(atlasTexture, NULL, NULL, &rect2.w, &rect2.h);
|
||||
SDL_RenderCopy(mainRenderer, atlasTexture, &rect2, &rect2);
|
||||
|
||||
if (!renderAtlas) {
|
||||
SDL_RenderCopy(mainRenderer, backgroundTexture, &screenRect, &screenRect);
|
||||
SDL_RenderCopy(mainRenderer, tilesTexture, &screenRect, &screenRect);
|
||||
SDL_RenderCopy(mainRenderer, itemsTexture, &screenRect, &screenRect);
|
||||
SDL_RenderCopy(mainRenderer, entityTexture, &screenRect, &screenRect);
|
||||
SDL_RenderCopy(mainRenderer, hudTexture, &screenRect, &screenRect);
|
||||
|
||||
} else {
|
||||
SDL_RenderCopy(mainRenderer, atlasTexture, &rect2, &rect2);
|
||||
}
|
||||
|
||||
|
||||
SDL_RenderPresent(mainRenderer);
|
||||
@@ -246,11 +260,12 @@ int processEvent(SDL_Event e) {
|
||||
speed = speed == 0 ? 0.004f : 0;
|
||||
break;
|
||||
case SDLK_r:
|
||||
if (player.cursor.canReach && player.cursor.targetTile->type != TYPE_AIR) {
|
||||
if (player.inventory.activeSlotIndex == 0 && player.cursor.canReach &&
|
||||
player.cursor.targetTile->type != TYPE_AIR) {
|
||||
player.cursor.direction = player.cursor.targetTile->direction;
|
||||
}
|
||||
player.cursor.direction = (player.cursor.direction + 2) % ORIENT_DIRECTION_COUNT;
|
||||
if (player.cursor.canReach) {
|
||||
if (player.inventory.activeSlotIndex == 0 && player.cursor.canReach) {
|
||||
player.cursor.targetTile->direction = player.cursor.direction;
|
||||
}
|
||||
break;
|
||||
@@ -260,6 +275,9 @@ int processEvent(SDL_Event e) {
|
||||
case SDLK_F3:
|
||||
debugMode = !debugMode;
|
||||
break;
|
||||
case SDLK_F10:
|
||||
renderAtlas = !renderAtlas;
|
||||
break;
|
||||
case SDLK_F4:
|
||||
Tile *tile = &tileMap[playerTileY][playerTileX];
|
||||
break;
|
||||
@@ -306,6 +324,12 @@ void processMousePosition() {
|
||||
if (player.inventory.slotCounts[player.inventory.activeSlotIndex] > 0) {
|
||||
player.inventory.slotCounts[player.inventory.activeSlotIndex]--;
|
||||
player.cursor.targetTile->type = player.inventory.activeSlotIndex;
|
||||
player.cursor.targetTile->rect.x = player.cursor.tileX;
|
||||
player.cursor.targetTile->rect.y = player.cursor.tileY;
|
||||
if (TileRegistry[player.inventory.activeSlotIndex].needsTicks) {
|
||||
player.cursor.targetTile->neededUpdateIndex = add_tile(&neededUpdates,
|
||||
player.cursor.targetTile->rect);
|
||||
}
|
||||
player.cursor.targetTile->direction = player.cursor.direction;
|
||||
}
|
||||
} else if (player.cursor.targetTile->type == player.inventory.activeSlotIndex) {
|
||||
@@ -329,6 +353,12 @@ void processMousePosition() {
|
||||
player.cursor.targetTile->items[lane].type = 0;
|
||||
}
|
||||
}
|
||||
int neededIndex = player.cursor.targetTile->neededUpdateIndex;
|
||||
if (TileRegistry[player.cursor.targetTile->type].needsTicks &&
|
||||
neededUpdates.tiles[neededIndex].x == player.cursor.targetTile->rect.x &&
|
||||
neededUpdates.tiles[neededIndex].y == player.cursor.targetTile->rect.y) {
|
||||
remove_tile(&neededUpdates, neededIndex);
|
||||
}
|
||||
player.cursor.targetTile->type = TYPE_AIR;
|
||||
player.cursor.breakingProgress = 0;
|
||||
} else {
|
||||
@@ -461,8 +491,10 @@ void processKeyboardHeld() {
|
||||
}
|
||||
|
||||
if (keyboardState[SDL_SCANCODE_Q]) {
|
||||
if (player.cursor.targetTile->type > 0) {
|
||||
if (player.cursor.targetTile->type > 0 && player.inventory.activeSlotIndex == 0) {
|
||||
setActivePlayerSlot(&player, player.cursor.targetTile->type);
|
||||
} else {
|
||||
setActivePlayerSlot(&player, 0);
|
||||
}
|
||||
}
|
||||
if (keyboardState[SDL_SCANCODE_Y]) {
|
||||
@@ -519,6 +551,14 @@ int main(__attribute__((unused)) int argc, __attribute__((unused)) char *args[])
|
||||
genInitMap();
|
||||
}
|
||||
|
||||
// audioData.synthVoices[0].frequency = 1000;
|
||||
// audioData.synthVoices[0].phase = 0;
|
||||
// audioData.synthVoices[0].sourceRect.w = TILE_SIZE;
|
||||
// audioData.synthVoices[0].sourceRect.h = TILE_SIZE;
|
||||
// audioData.synthVoices[0].sourceRect.x = 100 * TILE_SIZE;
|
||||
// audioData.synthVoices[0].sourceRect.y = 100 * TILE_SIZE;
|
||||
// audioData.synthVoices[0].volume = 255;
|
||||
// audioData.synthVoices[0].waveform = WAVE_SINE;
|
||||
|
||||
//Hack to get window to stay up
|
||||
SDL_Event e;
|
||||
|
Reference in New Issue
Block a user