Some more hopefully working progress
This commit is contained in:
67
tiles/belt.c
67
tiles/belt.c
@@ -9,16 +9,14 @@
|
||||
#include "../player/player.h"
|
||||
#include "../items/item.h"
|
||||
|
||||
static int scrollFrame = 0;
|
||||
unsigned long beltFrames = 0;
|
||||
|
||||
|
||||
void renderBelt(int x, int y, int w, int h, OrientDirection dir, SDL_Renderer *renderer) {
|
||||
|
||||
void renderBelt(int x, int y, int w, int h, OrientDirection dir, SDL_Rect playerRect, SDL_Renderer *renderer) {
|
||||
int px = x * TILE_SIZE;
|
||||
int py = y * TILE_SIZE;
|
||||
|
||||
uint16_t tileType = tileMap[y][x].type;
|
||||
Tile *t = &tileMap[y][x];
|
||||
|
||||
uint16_t tileType = t->type;
|
||||
|
||||
SDL_Rect src1, src2, dst1, dst2;
|
||||
|
||||
@@ -35,8 +33,8 @@ void renderBelt(int x, int y, int w, int h, OrientDirection dir, SDL_Renderer *r
|
||||
src2 = (SDL_Rect) {0, 0, offset, TILE_SIZE};
|
||||
dst2 = (SDL_Rect) {px + (w - offset), py, offset, h};
|
||||
|
||||
adjustRect(&dst1);
|
||||
adjustRect(&dst2);
|
||||
adjustRect(&dst1, playerRect);
|
||||
adjustRect(&dst2, playerRect);
|
||||
|
||||
SDL_RenderCopy(renderer, TileRegistry[tileType].textures[dir], &src1, &dst1);
|
||||
SDL_RenderCopy(renderer, TileRegistry[tileType].textures[dir], &src2, &dst2);
|
||||
@@ -53,60 +51,19 @@ void renderBelt(int x, int y, int w, int h, OrientDirection dir, SDL_Renderer *r
|
||||
src2 = (SDL_Rect) {0, 0, TILE_SIZE, offset};
|
||||
dst2 = (SDL_Rect) {px, py + (h - offset), w, offset};
|
||||
|
||||
adjustRect(&dst1);
|
||||
adjustRect(&dst2);
|
||||
adjustRect(&dst1, playerRect);
|
||||
adjustRect(&dst2, playerRect);
|
||||
|
||||
|
||||
// Rotate to make the belt vertical
|
||||
SDL_RenderCopy(renderer, TileRegistry[tileType].textures[dir], &src1, &dst1);
|
||||
SDL_RenderCopy(renderer, TileRegistry[tileType].textures[dir], &src2, &dst2);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void renderAllBelts(SDL_Renderer *renderer) {
|
||||
int scrollSpeed = 1; // pixels per step
|
||||
int scrollDelay = 1; // frames between steps
|
||||
|
||||
if (beltFrames++ % scrollDelay == 0) {
|
||||
scrollFrame += scrollSpeed;
|
||||
}
|
||||
|
||||
int tileSize = TILE_SIZE;
|
||||
for (int y = (playerY / TILE_SIZE) - (DISPLAY_MAP_HEIGHT / 2) - 1;
|
||||
y < (playerY / TILE_SIZE) + (DISPLAY_MAP_HEIGHT / 2) + 1; y++) {
|
||||
if (y < 0 || y >= MAP_HEIGHT) {
|
||||
continue;
|
||||
}
|
||||
for (int x = (playerX / TILE_SIZE) - (DISPLAY_MAP_WIDTH / 2) - 1;
|
||||
x < (playerX / TILE_SIZE) + (DISPLAY_MAP_WIDTH / 2) + 1; x++) {
|
||||
if (x < 0 || x >= MAP_WIDTH) {
|
||||
continue;
|
||||
}
|
||||
Tile t = tileMap[y][x];
|
||||
if (t.type != TYPE_BELT) continue;
|
||||
renderBelt(x, y, tileSize, tileSize, t.direction, renderer);
|
||||
}
|
||||
}
|
||||
for (int y = (playerY / TILE_SIZE) - (DISPLAY_MAP_HEIGHT / 2) - 1;
|
||||
y < (playerY / TILE_SIZE) + (DISPLAY_MAP_HEIGHT / 2) + 1; y++) {
|
||||
if (y < 0 || y >= MAP_HEIGHT) {
|
||||
continue;
|
||||
}
|
||||
for (int x = (playerX / TILE_SIZE) - (DISPLAY_MAP_WIDTH / 2) - 1;
|
||||
x < (playerX / TILE_SIZE) + (DISPLAY_MAP_WIDTH / 2) + 1; x++) {
|
||||
if (x < 0 || x >= MAP_WIDTH) {
|
||||
continue;
|
||||
}
|
||||
Tile t = tileMap[y][x];
|
||||
if (t.type != TYPE_BELT) continue;
|
||||
for (uint8_t lane = 0; lane < 2; lane++) {
|
||||
for (uint8_t itemIndex = 0; itemIndex < 2; itemIndex++) {
|
||||
if (t.items[lane][itemIndex].active) {
|
||||
renderItem(t.items[lane][itemIndex], renderer, lane);
|
||||
}
|
||||
}
|
||||
}
|
||||
SDL_SetRenderTarget(renderer, itemsTexture);
|
||||
for (uint8_t lane = 0; lane < 2; lane++) {
|
||||
if (t->items[lane].type != 0) {
|
||||
renderItem(t->items[lane], renderer, lane, playerRect);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user