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
|
||||
|
||||
[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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
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
|
||||
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
|
||||
|
|
|
@ -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;
|
||||
|
|
38
src/map.cpp
38
src/map.cpp
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -30,5 +30,13 @@ void PRenderTexture(PhoenixTexture *texture, int x, int y) {
|
|||
dstRect.w = TEXTURE_WIDTH;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue