fix background rendering

This commit is contained in:
Hunter 2023-05-28 12:35:48 -04:00
parent ae1e3e5aa3
commit f04bdc6e31
11 changed files with 335 additions and 18 deletions

View file

@ -4,17 +4,17 @@ Size=400,400
Collapsed=0
[Window][Phoenix Map Editor]
Pos=60,60
Pos=1582,392
Size=521,94
Collapsed=0
[Window][Map Information Editor]
Pos=504,255
Pos=1433,675
Size=549,264
Collapsed=0
[Window][Map Editor Tools]
Pos=405,187
Size=276,197
Pos=995,701
Size=326,231
Collapsed=0

View file

@ -1,8 +1,8 @@
#pragma once
// GFX constants
#define SCREEN_WIDTH 1000
#define SCREEN_HEIGHT 1000
//#define SCREEN_WIDTH 1000
//#define SCREEN_HEIGHT 1000
// 32x32 textures
#define TEXTURE_WIDTH 32

View file

@ -1,4 +1,5 @@
#pragma once
#include <SDL.h>
#include <string>
#include <vector>
@ -27,3 +28,5 @@ Map PLoadMapFromFile(std::string filepath);
Map PCreateNewMap(std::string filepath);
void PSaveMapToFile(Map *map, std::string filepath);
void PRenderMap(Map *map, bool debug = false);
void PRenderMapBackground(Map *map);
SDL_Rect PGetMapRect(Map *map);

View file

@ -15,6 +15,9 @@ struct GlobalState {
std::vector<PCollisionRect> collisions;
PhoenixAssets assets;
int scale = 20;
int screenWidth = 1000;
int screenHeight = 1000;
};
extern GlobalState state;

248
maps/example.map Normal file
View file

@ -0,0 +1,248 @@
MAPNAME ph_exampleMap
MAPVERS b1
MAPAUTH John
MAPSIZE 20x20
MAPSCAL 1x1
MAPSPWN 484,274
MAP
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE FLOOR
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
TILE WALL
ENDMAP

View file

@ -1,9 +1,9 @@
MAPNAME ph_exampleMap
MAPVERS b1
MAPAUTH JohnDoe
MAPSIZE 20x20
MAPSCAL 6x6
MAPSPWN 499,666
MAPAUTH Interfiber
MAPSIZE 20x40
MAPSCAL 5x5
MAPSPWN 297,619
MAP
TILE WALL
TILE WALL

View file

@ -2,6 +2,7 @@
#include "config.hpp"
#include "player.hpp"
#include "state.hpp"
#include <iostream>
void PBuildCollisionFromMap(Map *map) {
SDL_Log("Building collision data from map");
@ -44,6 +45,7 @@ bool PCanMoveTo(int x, int y) {
SDL_Rect playerRect = PGetPlayerRect(&state.player);
playerRect.x = x;
playerRect.y = y;
for (PCollisionRect rect : state.collisions) {
if (SDL_HasIntersection(&playerRect, &rect.rect)) {
return false;

View file

@ -95,7 +95,6 @@ void PRenderMap(Map *map, bool debug) {
row++;
i = 0;
}
int x = i * TEXTURE_WIDTH;
int y = row * TEXTURE_HEIGHT;
@ -175,3 +174,40 @@ Map PCreateNewMap(std::string filepath) {
return map;
}
SDL_Rect PGetMapRect(Map *map) {
SDL_Rect mapRect{};
mapRect.x = 0;
mapRect.y = 0;
mapRect.w = map->mapWidth;
mapRect.h = map->mapHeight;
return mapRect;
}
void PRenderMapBackground(Map *map) {
PhoenixTexture *wallTexture = PGetTextureById(BRICK_WALL_TEXTURE_ID);
for (int x = 0; x < state.screenWidth; x += 32) {
for (int y = 0; y < state.screenHeight; y += 32) {
PRenderTexture(wallTexture, x, y);
}
}
for (int x = 0; x < state.screenWidth; x += 32) {
for (int y = 0; y < state.screenHeight; y += 32) {
}
}
for (int y = 0; y < state.screenHeight; y += 32) {
for (int x = 0; x < state.screenWidth; x += 32) {
PRenderTexture(wallTexture, -x, y);
}
}
for (int y = 0; y < state.screenHeight; y += 32) {
for (int x = -state.screenWidth; x < state.screenWidth; x += 32) {
PRenderTexture(wallTexture, x, -y);
}
}
}

View file

@ -1,5 +1,6 @@
#include "assets.hpp"
#include "collision.hpp"
#include "map.hpp"
#include "texture.hpp"
#include <SDL_image.h>
#include <SDL_pixels.h>
@ -28,10 +29,11 @@ PhoenixGame::PhoenixGame() {
IMG_Init(IMG_INIT_PNG);
state.window = SDL_CreateWindow("Phoenix", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, 1000, 1000, 0);
SDL_WINDOWPOS_CENTERED, 1000, 1000,
SDL_WINDOW_RESIZABLE);
state.renderer = SDL_CreateRenderer(
state.window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_SOFTWARE);
state.window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
// Load textures
PRunBoostrap();
@ -41,8 +43,8 @@ PhoenixGame::PhoenixGame() {
state.camera.x = 0;
state.camera.y = 0;
state.camera.w = SCREEN_WIDTH;
state.camera.h = SCREEN_HEIGHT;
state.camera.w = state.screenWidth;
state.camera.h = state.screenHeight;
state.player.x = m_currentMap.mapPlayerSpawnX;
state.player.y = m_currentMap.mapPlayerSpawnY;
@ -57,6 +59,7 @@ void PhoenixGame::render() {
SDL_SetRenderDrawColor(state.renderer, 0, 0, 0, 255);
SDL_RenderClear(state.renderer);
PRenderMapBackground(&m_currentMap);
PRenderMap(&m_currentMap);
PRenderPlayer(&state.player);
@ -74,6 +77,20 @@ void PhoenixGame::run() {
mb_isOpen = false;
break;
}
if (event.type == SDL_WINDOWEVENT) {
if (event.window.event == SDL_WINDOWEVENT_RESIZED) {
state.screenWidth = event.window.data1;
state.screenHeight = event.window.data2;
// Ajust camera position
state.camera.x = state.player.x -
((state.screenWidth / m_currentMap.mapScaleX) / 2);
state.camera.y = state.player.y -
((state.screenHeight / m_currentMap.mapScaleY) / 2);
break;
}
}
}
unsigned char const *keys = SDL_GetKeyboardState(nullptr);
@ -103,9 +120,9 @@ void PhoenixGame::run() {
}
state.camera.x =
state.player.x - ((SCREEN_WIDTH / m_currentMap.mapScaleX) / 2);
state.player.x - ((state.screenWidth / m_currentMap.mapScaleX) / 2);
state.camera.y =
state.player.y - ((SCREEN_HEIGHT / m_currentMap.mapScaleY) / 2);
state.player.y - ((state.screenHeight / m_currentMap.mapScaleY) / 2);
// Rendering code

View file

@ -30,5 +30,13 @@ void PRenderTexture(PhoenixTexture *texture, int x, int y) {
dstRect.w = TEXTURE_WIDTH;
dstRect.h = TEXTURE_HEIGHT;
SDL_RenderCopy(state.renderer, texture->texture, NULL, &dstRect);
SDL_Rect screenRect{};
screenRect.x = 0;
screenRect.y = 0;
screenRect.w = state.screenWidth;
screenRect.h = state.screenHeight;
if (SDL_HasIntersection(&dstRect, &screenRect)) {
SDL_RenderCopy(state.renderer, texture->texture, NULL, &dstRect);
}
}