This commit is contained in:
2025-04-30 19:01:44 +02:00
parent 451e80f750
commit 429627c095
10 changed files with 100 additions and 73 deletions

View File

@@ -16,56 +16,60 @@ void updateItems() {
for (int y = 0; y < MAP_HEIGHT; y++) {
for (int x = 0; x < MAP_WIDTH; x++) {
Tile *t = &tileMap[y][x];
if (t->type != TYPE_BELT || !t->item.active) continue;
for (uint8_t lane = 0; lane < 2; lane++) {
for (uint8_t itemIndex = 0; itemIndex < 2; itemIndex++) {
if (t->type != TYPE_BELT || !t->items[lane][itemIndex].active) continue;
if (
(t->item.x < 0 && t->direction == ORIENT_LEFT) ||
(t->item.x > 0.75f && t->direction == ORIENT_RIGHT) ||
(t->item.y < 0.25f && t->direction == ORIENT_UP) ||
(t->item.y > 0.625f && t->direction == ORIENT_DOWN)
) {
int nx = x, ny = y;
if (t->direction == ORIENT_LEFT) nx--;
if (t->direction == ORIENT_RIGHT) nx++;
if (t->direction == ORIENT_UP) ny--;
if (t->direction == ORIENT_DOWN) ny++;
if (nx >= 0 && nx < MAP_WIDTH && ny >= 0 && ny < MAP_HEIGHT) {
Tile *next = &tileMap[ny][nx];
if (next->type == TYPE_BELT && !next->item.active) {
memcpy(&next->item, &t->item, sizeof(ItemOnBelt));
printf("Moved to X=%d, Y=%d", nx, ny);
next->item.tileX = nx;
next->item.tileY = ny;
if (t->direction == ORIENT_LEFT) next->item.x = 0.5f;
if (t->direction == ORIENT_RIGHT) next->item.x = 0.25f;
if (t->direction == ORIENT_UP) next->item.y = 0.5f;
if (t->direction == ORIENT_DOWN) next->item.y = 0;
next->item.active = true;
t->item.active = false;
} else {
continue;
if (
(t->items[lane][itemIndex].x < -0.5 && t->direction == ORIENT_LEFT) ||
(t->items[lane][itemIndex].x > 1 && t->direction == ORIENT_RIGHT) ||
(t->items[lane][itemIndex].y < -0.5 && t->direction == ORIENT_UP) ||
(t->items[lane][itemIndex].y > 1 && t->direction == ORIENT_DOWN)
) {
int nx = x, ny = y;
if (t->direction == ORIENT_LEFT) nx--;
if (t->direction == ORIENT_RIGHT) nx++;
if (t->direction == ORIENT_UP) ny--;
if (t->direction == ORIENT_DOWN) ny++;
if (nx >= 0 && nx < MAP_WIDTH && ny >= 0 && ny < MAP_HEIGHT) {
Tile *next = &tileMap[ny][nx];
if (next->type == TYPE_BELT && !next->items[lane][itemIndex].active) {
memcpy(&next->items[lane][itemIndex], &t->items[lane][itemIndex], sizeof(ItemOnBelt));
printf("Moved to X=%d, Y=%d\n", nx, ny);
next->items[lane][itemIndex].tileX = nx;
next->items[lane][itemIndex].tileY = ny;
if (t->direction == ORIENT_LEFT) next->items[lane][itemIndex].x = 0.5f;
if (t->direction == ORIENT_RIGHT) next->items[lane][itemIndex].x = 0;
if (t->direction == ORIENT_UP) next->items[lane][itemIndex].y = 0.5f;
if (t->direction == ORIENT_DOWN) next->items[lane][itemIndex].y = 0;
next->items[lane][itemIndex].active = true;
t->items[lane][itemIndex].active = false;
} else {
continue;
}
} else {
t->items[lane][itemIndex].active = false;
}
}
} else {
t->item.active = false;
}
}
float speed = 0.02f;
switch (t->direction) {
case ORIENT_LEFT:
t->item.x -= speed;
break;
case ORIENT_RIGHT:
t->item.x += speed;
break;
case ORIENT_UP:
t->item.y -= speed;
break;
case ORIENT_DOWN:
t->item.y += speed;
break;
default:
break;
float speed = 0.002f;
switch (t->direction) {
case ORIENT_LEFT:
t->items[lane][itemIndex].x -= speed;
break;
case ORIENT_RIGHT:
t->items[lane][itemIndex].x += speed;
break;
case ORIENT_UP:
t->items[lane][itemIndex].y -= speed;
break;
case ORIENT_DOWN:
t->items[lane][itemIndex].y += speed;
break;
default:
break;
}
}
}
}
}
@@ -100,17 +104,17 @@ void renderBeltItems(SDL_Renderer *renderer) {
}
void putItem(int x, int y, uint16_t itemType) {
tileMap[y][x].item.type = itemType;
tileMap[y][x].item.x = 0.25f;
tileMap[y][x].item.y = 0.25f;
if (tileMap[y][x].direction == ORIENT_LEFT) tileMap[y][x].item.x = 0.5f;
if (tileMap[y][x].direction == ORIENT_RIGHT) tileMap[y][x].item.x = 0.25f;
if (tileMap[y][x].direction == ORIENT_UP) tileMap[y][x].item.y = 0.5f;
if (tileMap[y][x].direction == ORIENT_DOWN) tileMap[y][x].item.y = 0.25f;
tileMap[y][x].item.active = true;
tileMap[y][x].item.tileX = x;
tileMap[y][x].item.tileY = y;
void putItem(int x, int y, uint16_t itemType, uint8_t lane, uint8_t itemIndex) {
tileMap[y][x].items[lane][itemIndex].type = itemType;
tileMap[y][x].items[lane][itemIndex].x = 0.25f;
tileMap[y][x].items[lane][itemIndex].y = 0.25f;
if (tileMap[y][x].direction == ORIENT_LEFT) tileMap[y][x].items[lane][itemIndex].x = 0.5f;
if (tileMap[y][x].direction == ORIENT_RIGHT) tileMap[y][x].items[lane][itemIndex].x = 0.25f;
if (tileMap[y][x].direction == ORIENT_UP) tileMap[y][x].items[lane][itemIndex].y = 0.5f;
if (tileMap[y][x].direction == ORIENT_DOWN) tileMap[y][x].items[lane][itemIndex].y = 0.25f;
tileMap[y][x].items[lane][itemIndex].active = true;
tileMap[y][x].items[lane][itemIndex].tileX = x;
tileMap[y][x].items[lane][itemIndex].tileY = y;
}
void loadItems(SDL_Renderer *renderer) {

View File

@@ -23,6 +23,7 @@ typedef struct {
int tileX, tileY;
bool active;
uint16_t type;
uint8_t place;
} ItemOnBelt;
void updateItems();
@@ -31,5 +32,5 @@ void loadItems(SDL_Renderer *renderer);
void renderItem(ItemOnBelt item, SDL_Renderer *renderer);
void putItem(int x, int y, uint16_t itemType);
void putItem(int x, int y, uint16_t itemType, uint8_t lane, uint8_t itemIndex);
#endif //FACTORYGAME_ITEM_H