Testing
This commit is contained in:
115
main.c
115
main.c
@@ -9,6 +9,7 @@
|
||||
#include "player/player.h"
|
||||
#include "util/perlin.h"
|
||||
#include "util/atlas.h"
|
||||
#include "entity/entity.h"
|
||||
|
||||
typedef struct GameState {
|
||||
Player player;
|
||||
@@ -16,6 +17,9 @@ typedef struct GameState {
|
||||
BackgroundTile backgroundTileMap[MAP_HEIGHT][MAP_WIDTH];
|
||||
AudioData audioData;
|
||||
TileArray neededUpdates;
|
||||
EntityArray entities;
|
||||
Node openList[MAX_OPEN_NODES];
|
||||
int openCount;
|
||||
} GameState;
|
||||
GameState gameState;
|
||||
|
||||
@@ -40,6 +44,9 @@ int loadGameState(char *filename, Player *plr) {
|
||||
audioData.playerRect = tmp;
|
||||
audioData.totalSamples = 0;
|
||||
memcpy(&neededUpdates, &gameState.neededUpdates, sizeof(gameState.neededUpdates));
|
||||
memcpy(&entities, &gameState.entities, sizeof(gameState.entities));
|
||||
openCount = gameState.openCount;
|
||||
memcpy(&openList, &gameState.openList, sizeof(gameState.openList));
|
||||
plr->cursor.targetTile = NULL;
|
||||
plr->cursor.prevTargetTile = NULL;
|
||||
return 0;
|
||||
@@ -53,6 +60,9 @@ void saveGameState(char *filename, Player *plr) {
|
||||
memcpy(gameState.backgroundTileMap, backgroundMap, sizeof(gameState.backgroundTileMap));
|
||||
memcpy(&gameState.audioData, &audioData, sizeof(gameState.audioData));
|
||||
memcpy(&gameState.neededUpdates, &neededUpdates, sizeof(neededUpdates));
|
||||
memcpy(&gameState.entities, &entities, sizeof(entities));
|
||||
memcpy(&gameState.openList, &openList, sizeof(openList));
|
||||
gameState.openCount = openCount;
|
||||
|
||||
FILE *gameSave = fopen(filename, "wb");
|
||||
if (!gameSave) {
|
||||
@@ -142,6 +152,20 @@ int init() {
|
||||
loadBackgroundTiles(mainRenderer);
|
||||
loadTiles(mainRenderer);
|
||||
loadItems(mainRenderer);
|
||||
loadEntities(mainRenderer);
|
||||
|
||||
Entity entTest;
|
||||
memset(&entTest, 0, sizeof(Entity));
|
||||
entTest.tileRect.x = 4;
|
||||
entTest.tileRect.y = 5;
|
||||
entTest.renderRect.w = TILE_SIZE;
|
||||
entTest.renderRect.h = TILE_SIZE;
|
||||
entTest.target.x = 0;
|
||||
entTest.target.y = 0;
|
||||
entTest.health = 100;
|
||||
entTest.type = GHOST;
|
||||
add_entity(&entities, entTest);
|
||||
|
||||
setupTiles();
|
||||
|
||||
// for (ItemType i = 0; i < ITEMREGISTRY_SIZE; i++) {
|
||||
@@ -226,6 +250,7 @@ int render() {
|
||||
rect2.h = ATLAS_SIZE;
|
||||
|
||||
renderAllTiles(mainRenderer, player.rect);
|
||||
renderEntities(mainRenderer, player.rect);
|
||||
renderPlayer(&player);
|
||||
|
||||
|
||||
@@ -333,6 +358,7 @@ 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->health = TileRegistry[player.inventory.activeSlotIndex].maxHealth;
|
||||
player.cursor.targetTile->rect.x = player.cursor.tileX;
|
||||
player.cursor.targetTile->rect.y = player.cursor.tileY;
|
||||
if (TileRegistry[player.inventory.activeSlotIndex].needsTicks) {
|
||||
@@ -431,46 +457,53 @@ void processKeyboardHeld() {
|
||||
cameraSpeed /= 2;
|
||||
}
|
||||
|
||||
if (player.cursor.breakingProgress == 0) {
|
||||
if (keyboardState[SDL_SCANCODE_W]) {
|
||||
// Example: move up
|
||||
player.rect.y -= cameraSpeed;
|
||||
// if (player.rect.y < (DISPLAY_HEIGHT / 2)) {
|
||||
// player.rect.y = (DISPLAY_HEIGHT / 2);
|
||||
// }
|
||||
if (player.rect.y < 0) {
|
||||
player.rect.y = 0;
|
||||
}
|
||||
}
|
||||
if (keyboardState[SDL_SCANCODE_S]) {
|
||||
player.rect.y += cameraSpeed;
|
||||
// if (player.rect.y > (MAP_HEIGHT * TILE_SIZE) - (DISPLAY_HEIGHT / 2)) {
|
||||
// player.rect.y = (MAP_HEIGHT * TILE_SIZE) - (DISPLAY_HEIGHT / 2);
|
||||
// }
|
||||
if (player.rect.y > (MAP_HEIGHT * TILE_SIZE)) {
|
||||
player.rect.y = (MAP_HEIGHT * TILE_SIZE);
|
||||
}
|
||||
}
|
||||
if (keyboardState[SDL_SCANCODE_A]) {
|
||||
player.rect.x -= cameraSpeed;
|
||||
// if (player.rect.x < (DISPLAY_WIDTH / 2)) {
|
||||
// player.rect.x = (DISPLAY_WIDTH / 2);
|
||||
// }
|
||||
if (player.rect.x < 0) {
|
||||
player.rect.x = 0;
|
||||
}
|
||||
}
|
||||
if (keyboardState[SDL_SCANCODE_D]) {
|
||||
player.rect.x += cameraSpeed;
|
||||
// if (player.rect.x > (MAP_WIDTH * TILE_SIZE) - (DISPLAY_WIDTH / 2)) {
|
||||
// player.rect.x = (MAP_WIDTH * TILE_SIZE) - (DISPLAY_WIDTH / 2);
|
||||
// }
|
||||
if (player.rect.x > (MAP_WIDTH * TILE_SIZE)) {
|
||||
player.rect.x = (MAP_WIDTH * TILE_SIZE);
|
||||
}
|
||||
if (keyboardState[SDL_SCANCODE_F8]) {
|
||||
if (player.cursor.targetTile->health) {
|
||||
player.cursor.targetTile->health--;
|
||||
}
|
||||
}
|
||||
|
||||
if (player.cursor.breakingProgress == 0) {
|
||||
SDL_Rect newRect = player.rect;
|
||||
|
||||
if (keyboardState[SDL_SCANCODE_W]) {
|
||||
newRect.y -= cameraSpeed;
|
||||
if (newRect.y >= 0 && canMoveWithRadius(newRect)) {
|
||||
player.rect = newRect;
|
||||
}
|
||||
}
|
||||
|
||||
if (keyboardState[SDL_SCANCODE_S]) {
|
||||
newRect = player.rect;
|
||||
newRect.y += cameraSpeed;
|
||||
if (newRect.y + newRect.h <= MAP_HEIGHT * TILE_SIZE && canMoveWithRadius(newRect)) {
|
||||
player.rect = newRect;
|
||||
}
|
||||
}
|
||||
|
||||
if (keyboardState[SDL_SCANCODE_A]) {
|
||||
newRect = player.rect;
|
||||
newRect.x -= cameraSpeed;
|
||||
if (newRect.x >= 0 && canMoveWithRadius(newRect)) {
|
||||
player.rect = newRect;
|
||||
}
|
||||
}
|
||||
|
||||
if (keyboardState[SDL_SCANCODE_D]) {
|
||||
newRect = player.rect;
|
||||
newRect.x += cameraSpeed;
|
||||
if (newRect.x + newRect.w <= MAP_WIDTH * TILE_SIZE && canMoveWithRadius(newRect)) {
|
||||
player.rect = newRect;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Update tileRect only after actual movement
|
||||
player.tileRect.x = player.rect.x / TILE_SIZE;
|
||||
player.tileRect.y = player.rect.y / TILE_SIZE;
|
||||
}
|
||||
|
||||
|
||||
if (keyboardState[SDL_SCANCODE_F]) {
|
||||
for (int x = playerTileX - 2; x < playerTileX + 2; x++) {
|
||||
if (x < 0) {
|
||||
@@ -587,7 +620,10 @@ int main(__attribute__((unused)) int argc, __attribute__((unused)) char *args[])
|
||||
running = processEvent(e);
|
||||
}
|
||||
|
||||
entities.entities[0].target = player.tileRect;
|
||||
|
||||
updateItems();
|
||||
updateEntities();
|
||||
updatePlayer(&player);
|
||||
updateTiles();
|
||||
animationStep++;
|
||||
@@ -658,7 +694,7 @@ void genInitMap() {
|
||||
if (oreNrm > oreNrmMax) oreNrmMax = oreNrm;
|
||||
|
||||
// [Same as your original terrain generation logic...]
|
||||
BackgroundType baseType;
|
||||
BackgroundType baseType = BGType_COBBLE0;
|
||||
if (terrain < 0.30) {
|
||||
baseType = (humidity < 0.5) ? BGType_WATER_SHALLOW : BGType_WATER_DEEP;
|
||||
} else if (terrain < 0.35) {
|
||||
@@ -694,6 +730,9 @@ void genInitMap() {
|
||||
}
|
||||
}
|
||||
|
||||
if (finalType > BGType_END) {
|
||||
finalType = BGType_COBBLE0;
|
||||
}
|
||||
backgroundMap[y][x].type = finalType;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user