fix background rendering
This commit is contained in:
parent
ae1e3e5aa3
commit
f04bdc6e31
Binary file not shown.
|
@ -4,17 +4,17 @@ Size=400,400
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Phoenix Map Editor]
|
[Window][Phoenix Map Editor]
|
||||||
Pos=60,60
|
Pos=1582,392
|
||||||
Size=521,94
|
Size=521,94
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Map Information Editor]
|
[Window][Map Information Editor]
|
||||||
Pos=504,255
|
Pos=1433,675
|
||||||
Size=549,264
|
Size=549,264
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
[Window][Map Editor Tools]
|
[Window][Map Editor Tools]
|
||||||
Pos=405,187
|
Pos=995,701
|
||||||
Size=276,197
|
Size=326,231
|
||||||
Collapsed=0
|
Collapsed=0
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
// GFX constants
|
// GFX constants
|
||||||
#define SCREEN_WIDTH 1000
|
//#define SCREEN_WIDTH 1000
|
||||||
#define SCREEN_HEIGHT 1000
|
//#define SCREEN_HEIGHT 1000
|
||||||
|
|
||||||
// 32x32 textures
|
// 32x32 textures
|
||||||
#define TEXTURE_WIDTH 32
|
#define TEXTURE_WIDTH 32
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
#include <SDL.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
@ -27,3 +28,5 @@ Map PLoadMapFromFile(std::string filepath);
|
||||||
Map PCreateNewMap(std::string filepath);
|
Map PCreateNewMap(std::string filepath);
|
||||||
void PSaveMapToFile(Map *map, std::string filepath);
|
void PSaveMapToFile(Map *map, std::string filepath);
|
||||||
void PRenderMap(Map *map, bool debug = false);
|
void PRenderMap(Map *map, bool debug = false);
|
||||||
|
void PRenderMapBackground(Map *map);
|
||||||
|
SDL_Rect PGetMapRect(Map *map);
|
||||||
|
|
|
@ -15,6 +15,9 @@ struct GlobalState {
|
||||||
std::vector<PCollisionRect> collisions;
|
std::vector<PCollisionRect> collisions;
|
||||||
PhoenixAssets assets;
|
PhoenixAssets assets;
|
||||||
int scale = 20;
|
int scale = 20;
|
||||||
|
|
||||||
|
int screenWidth = 1000;
|
||||||
|
int screenHeight = 1000;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern GlobalState state;
|
extern GlobalState state;
|
||||||
|
|
248
maps/example.map
Normal file
248
maps/example.map
Normal 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
|
|
@ -1,9 +1,9 @@
|
||||||
MAPNAME ph_exampleMap
|
MAPNAME ph_exampleMap
|
||||||
MAPVERS b1
|
MAPVERS b1
|
||||||
MAPAUTH JohnDoe
|
MAPAUTH Interfiber
|
||||||
MAPSIZE 20x20
|
MAPSIZE 20x40
|
||||||
MAPSCAL 6x6
|
MAPSCAL 5x5
|
||||||
MAPSPWN 499,666
|
MAPSPWN 297,619
|
||||||
MAP
|
MAP
|
||||||
TILE WALL
|
TILE WALL
|
||||||
TILE WALL
|
TILE WALL
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include "config.hpp"
|
#include "config.hpp"
|
||||||
#include "player.hpp"
|
#include "player.hpp"
|
||||||
#include "state.hpp"
|
#include "state.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
void PBuildCollisionFromMap(Map *map) {
|
void PBuildCollisionFromMap(Map *map) {
|
||||||
SDL_Log("Building collision data from map");
|
SDL_Log("Building collision data from map");
|
||||||
|
@ -44,6 +45,7 @@ bool PCanMoveTo(int x, int y) {
|
||||||
SDL_Rect playerRect = PGetPlayerRect(&state.player);
|
SDL_Rect playerRect = PGetPlayerRect(&state.player);
|
||||||
playerRect.x = x;
|
playerRect.x = x;
|
||||||
playerRect.y = y;
|
playerRect.y = y;
|
||||||
|
|
||||||
for (PCollisionRect rect : state.collisions) {
|
for (PCollisionRect rect : state.collisions) {
|
||||||
if (SDL_HasIntersection(&playerRect, &rect.rect)) {
|
if (SDL_HasIntersection(&playerRect, &rect.rect)) {
|
||||||
return false;
|
return false;
|
||||||
|
|
38
src/map.cpp
38
src/map.cpp
|
@ -95,7 +95,6 @@ void PRenderMap(Map *map, bool debug) {
|
||||||
row++;
|
row++;
|
||||||
i = 0;
|
i = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int x = i * TEXTURE_WIDTH;
|
int x = i * TEXTURE_WIDTH;
|
||||||
int y = row * TEXTURE_HEIGHT;
|
int y = row * TEXTURE_HEIGHT;
|
||||||
|
|
||||||
|
@ -175,3 +174,40 @@ Map PCreateNewMap(std::string filepath) {
|
||||||
|
|
||||||
return map;
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
#include "assets.hpp"
|
#include "assets.hpp"
|
||||||
#include "collision.hpp"
|
#include "collision.hpp"
|
||||||
|
#include "map.hpp"
|
||||||
#include "texture.hpp"
|
#include "texture.hpp"
|
||||||
#include <SDL_image.h>
|
#include <SDL_image.h>
|
||||||
#include <SDL_pixels.h>
|
#include <SDL_pixels.h>
|
||||||
|
@ -28,10 +29,11 @@ PhoenixGame::PhoenixGame() {
|
||||||
IMG_Init(IMG_INIT_PNG);
|
IMG_Init(IMG_INIT_PNG);
|
||||||
|
|
||||||
state.window = SDL_CreateWindow("Phoenix", SDL_WINDOWPOS_CENTERED,
|
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.renderer = SDL_CreateRenderer(
|
||||||
state.window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_SOFTWARE);
|
state.window, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
|
||||||
|
|
||||||
// Load textures
|
// Load textures
|
||||||
PRunBoostrap();
|
PRunBoostrap();
|
||||||
|
@ -41,8 +43,8 @@ PhoenixGame::PhoenixGame() {
|
||||||
|
|
||||||
state.camera.x = 0;
|
state.camera.x = 0;
|
||||||
state.camera.y = 0;
|
state.camera.y = 0;
|
||||||
state.camera.w = SCREEN_WIDTH;
|
state.camera.w = state.screenWidth;
|
||||||
state.camera.h = SCREEN_HEIGHT;
|
state.camera.h = state.screenHeight;
|
||||||
|
|
||||||
state.player.x = m_currentMap.mapPlayerSpawnX;
|
state.player.x = m_currentMap.mapPlayerSpawnX;
|
||||||
state.player.y = m_currentMap.mapPlayerSpawnY;
|
state.player.y = m_currentMap.mapPlayerSpawnY;
|
||||||
|
@ -57,6 +59,7 @@ void PhoenixGame::render() {
|
||||||
SDL_SetRenderDrawColor(state.renderer, 0, 0, 0, 255);
|
SDL_SetRenderDrawColor(state.renderer, 0, 0, 0, 255);
|
||||||
SDL_RenderClear(state.renderer);
|
SDL_RenderClear(state.renderer);
|
||||||
|
|
||||||
|
PRenderMapBackground(&m_currentMap);
|
||||||
PRenderMap(&m_currentMap);
|
PRenderMap(&m_currentMap);
|
||||||
PRenderPlayer(&state.player);
|
PRenderPlayer(&state.player);
|
||||||
|
|
||||||
|
@ -74,6 +77,20 @@ void PhoenixGame::run() {
|
||||||
mb_isOpen = false;
|
mb_isOpen = false;
|
||||||
break;
|
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);
|
unsigned char const *keys = SDL_GetKeyboardState(nullptr);
|
||||||
|
@ -103,9 +120,9 @@ void PhoenixGame::run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
state.camera.x =
|
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.camera.y =
|
||||||
state.player.y - ((SCREEN_HEIGHT / m_currentMap.mapScaleY) / 2);
|
state.player.y - ((state.screenHeight / m_currentMap.mapScaleY) / 2);
|
||||||
|
|
||||||
// Rendering code
|
// Rendering code
|
||||||
|
|
||||||
|
|
|
@ -30,5 +30,13 @@ void PRenderTexture(PhoenixTexture *texture, int x, int y) {
|
||||||
dstRect.w = TEXTURE_WIDTH;
|
dstRect.w = TEXTURE_WIDTH;
|
||||||
dstRect.h = TEXTURE_HEIGHT;
|
dstRect.h = TEXTURE_HEIGHT;
|
||||||
|
|
||||||
|
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);
|
SDL_RenderCopy(state.renderer, texture->texture, NULL, &dstRect);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue