TileMaps now render each row correctly

This commit is contained in:
2022-03-27 23:59:12 -04:00
parent 72b4ac9229
commit 871e6d19c6
9 changed files with 152 additions and 162 deletions

View File

@ -41,11 +41,25 @@ public:
{
switch (Game::event.key.keysym.sym)
{
case SDLK_UP:
case SDLK_UP:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.y = -1;
// if(Game::playerIsGrounded){
sprite->Play("Walk");
// }
sprite->spriteFlip = SDL_FLIP_NONE;
}
break;
case SDLK_DOWN:
case SDLK_DOWN:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.y = 1;
// if(Game::playerIsGrounded){
sprite->Play("Walk");
// }
sprite->spriteFlip = SDL_FLIP_NONE;
}
break;
case SDLK_LEFT:
case SDLK_LEFT:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
// if (playerCtrl == NULL){
// printf("No player controller found\n");
@ -56,13 +70,13 @@ public:
// transform->lastSafePos = Vector2D(transform->position.x,transform->position.y);
// printf("lastSafePos .x: %g .y: %g \n",transform->lastSafePos.x,transform->lastSafePos.y);
transform->velocity.x = -1;
if(Game::playerIsGrounded){
// if(Game::playerIsGrounded){
sprite->Play("Walk");
}
// }
sprite->spriteFlip = SDL_FLIP_NONE;
}
break;
case SDLK_RIGHT:
case SDLK_RIGHT:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
// &entity->getComponent<PlayerController>().setLastSafePos(Vector2D(transform->position.x,transform->position.y));
// playerCtrl->lastSafePosition.x = transform->position.x;
@ -72,30 +86,30 @@ public:
// =========
// int intersectionTileX = collider->center.x;
transform->velocity.x = 1;
if(Game::playerIsGrounded){
// if(Game::playerIsGrounded){
sprite->Play("Walk");
}
// }
sprite->spriteFlip = SDL_FLIP_HORIZONTAL;
}
break;
case SDLK_a:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.x = -1;
if(Game::playerIsGrounded){
sprite->Play("Walk");
}
sprite->spriteFlip = SDL_FLIP_NONE;
}
break;
case SDLK_d:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.x = 1;
if(Game::playerIsGrounded){
sprite->Play("Walk");
}
sprite->spriteFlip = SDL_FLIP_HORIZONTAL;
}
break;
// case SDLK_a:
// if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
// transform->velocity.x = -1;
// if(Game::playerIsGrounded){
// sprite->Play("Walk");
// }
// sprite->spriteFlip = SDL_FLIP_NONE;
// }
// break;
// case SDLK_d:
// if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
// transform->velocity.x = 1;
// if(Game::playerIsGrounded){
// sprite->Play("Walk");
// }
// sprite->spriteFlip = SDL_FLIP_HORIZONTAL;
// }
// break;
case SDLK_k:
if (!Game::debugCollisionBoxes)
{ Game::debugCollisionBoxes = true; }
@ -137,44 +151,63 @@ public:
{
switch (Game::event.key.keysym.sym)
{
case SDLK_LEFT:
case SDLK_LEFT:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.x = 0;
sprite->Play("Idle");
if (!Game::gravityOnPlayer){
Game::gravityOnPlayer = true;
// sprite->Play("Fall");
}
// if (!Game::gravityOnPlayer){
// Game::gravityOnPlayer = true;
// // sprite->Play("Fall");
// }
}
break;
case SDLK_RIGHT:
case SDLK_RIGHT:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.x = 0;
sprite->Play("Idle");
if (!Game::gravityOnPlayer){
Game::gravityOnPlayer = true;
}
// if (!Game::gravityOnPlayer){
// Game::gravityOnPlayer = true;
// }
}
break;
case SDLK_a:
case SDLK_UP:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.x = 0;
transform->velocity.y = 0;
sprite->Play("Idle");
if (!Game::gravityOnPlayer){
Game::gravityOnPlayer = true;
// sprite->Play("Fall");
}
// if (!Game::gravityOnPlayer){
// Game::gravityOnPlayer = true;
// // sprite->Play("Fall");
// }
}
break;
case SDLK_d:
case SDLK_DOWN:
if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
transform->velocity.x = 0;
transform->velocity.y = 0;
sprite->Play("Idle");
if (!Game::gravityOnPlayer){
Game::gravityOnPlayer = true;
}
// if (!Game::gravityOnPlayer){
// Game::gravityOnPlayer = true;
// }
}
break;
break;
// case SDLK_a:
// if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
// transform->velocity.x = 0;
// sprite->Play("Idle");
// if (!Game::gravityOnPlayer){
// Game::gravityOnPlayer = true;
// // sprite->Play("Fall");
// }
// }
// break;
// case SDLK_d:
// if(Game::gsm->currentState == GameStateManager::ST_COREGAME){
// transform->velocity.x = 0;
// sprite->Play("Idle");
// if (!Game::gravityOnPlayer){
// Game::gravityOnPlayer = true;
// }
// }
// break;
case SDLK_k:
break;
case SDLK_j:

View File

@ -23,11 +23,13 @@ public:
// TransformComponent *transform;
SDL_Texture* texture;
SDL_Rect srcRect, destRect;
Vector2D position;
// Vector2D position;
// std::tuple <SDL_Rect,SDL_Rect> tile;
tmxparser::TmxMap map;
int globalScale;
std::vector<SDL_Rect> tileSet;
std::vector<SDL_Rect> destRects;
int totalTiles;
TileMapComponent() = default;
@ -40,10 +42,10 @@ public:
{
map = loadedMap;
std::string texturePath = "assets/textures/tiles/" + loadedMap.tilesetCollection[0].name + ".png";
Game::assets->AddTexture(loadedMap.tilesetCollection[0].name, texturePath.c_str());
Game::assets->AddTexture(map.tilesetCollection[0].name, texturePath.c_str());
setTex(map.tilesetCollection[0].name);
globalScale = gScale;
int totalTiles = map.tilesetCollection[0].colCount*map.tilesetCollection[0].rowCount;
totalTiles = map.tilesetCollection[0].colCount*map.tilesetCollection[0].rowCount;
// std::cout << "Number of Tiles: " << totalTiles << std::endl;
tileSet.resize(totalTiles);
for (int r=0;r<map.tilesetCollection[0].rowCount;r++){
@ -57,25 +59,37 @@ public:
tileSet[element] = srcRect;
}
}
destRects.resize(totalTiles);
for (int i=0;i<totalTiles-1;i++){
SDL_Rect myRect = SDL_Rect();
myRect.w = myRect.h = map.tileWidth * gScale;
myRect.x = myRect.y = 0;
destRects[i] = myRect;
}
destRect.w = destRect.h = map.tileWidth * gScale;
}
void update() override
{
destRect.x = position.x - Game::camera.x;
destRect.y = position.y - Game::camera.y;
// for (int i=0;i<totalTiles-1;i++){
// destRects[i].x = destRects[i].x - Game::camera.x;
// destRects[i].y = destRects[i].y - Game::camera.y;
// }
}
void draw() override
{
//iterate through rows and columns of the map to draw the tiles
// First cycle through rows
for (int r = 0;r<map.height;r++){
for (int r = 0;r<map.height-1;r++){
// Next cycle through each column or tile in that row:
for (int c = 0;c<map.width;c++){
int tileToDraw = map.layerCollection[0].tiles[c].gid-1;
for (int c = 0;c<map.width-1;c++){
int i = r*map.width+c;
int tileToDraw = map.layerCollection[0].tiles[i].gid-1;
destRect.x = c*map.tilesetCollection[0].tileWidth*globalScale;
destRect.y = r*map.tilesetCollection[0].tileWidth*globalScale;
// destRects[i].x = 8;
// destRects[i].y = 32;
TextureManager::Draw(texture, tileSet[tileToDraw], destRect, SDL_FLIP_NONE);
}
}