branching out

main
JanEhehalt 3 years ago
parent 2f5dad7c8a
commit 5a7fa96cf4

@ -16,8 +16,8 @@ IsometricMap * IsometricMapInit(int layer){
//map->tileTextures[0] = LoadTexture("assets/desert.png"); //map->tileTextures[0] = LoadTexture("assets/desert.png");
//map->tileTextures[1] = LoadTexture("assets/bigtower.png"); //map->tileTextures[1] = LoadTexture("assets/bigtower.png");
map->width = 100; map->width = 200;
map->height = 100; map->height = 200;
map->textureWidth = map->tileTextures[0].width; map->textureWidth = map->tileTextures[0].width;
map->textureHeight = map->tileTextures[0].height; map->textureHeight = map->tileTextures[0].height;
map->worldPixelWidth = map->width * map->textureWidth; map->worldPixelWidth = map->width * map->textureWidth;
@ -60,6 +60,13 @@ Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){
return offset; return offset;
} }
Vector2 * IsometricMapCalcOffsetForTileAtEfficient(int x, int y, int halfTextureSize, int quarterTextureSize){
Vector2* offset = (Vector2 *)malloc(sizeof(Vector2));
offset->x = x * halfTextureSize - y * halfTextureSize;
offset->y = x * quarterTextureSize + y * quarterTextureSize;
return offset;
}
// returns Tile at x y on layer isometricMap // returns Tile at x y on layer isometricMap
Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){ Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int y){
return map->tiles[x][y]; return map->tiles[x][y];

@ -38,6 +38,8 @@ IsometricMap * IsometricMapInit(int layer);
// For Rendering: calculates coordinate offset for a single tile at arrayPosition x y // For Rendering: calculates coordinate offset for a single tile at arrayPosition x y
// Only works for tiles with texture width == height (and for 22.5 degree?) // Only works for tiles with texture width == height (and for 22.5 degree?)
Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize); Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize);
// saves many divisions
Vector2 * IsometricMapCalcOffsetForTileAtEfficient(int x, int y, int halfTextureSize, int quarterTextureSize);
// Gives the most upper Tile above *tile // Gives the most upper Tile above *tile
Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile); Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile);

@ -48,10 +48,15 @@ void IsometricRendererRenderIsometricMap(Game *game){
for(i=0; i < game->layers[n]->width; i++){ for(i=0; i < game->layers[n]->width; i++){
for(j=0; j < game->layers[n]->height; j++){ for(j=0; j < game->layers[n]->height; j++){
// if tile had texture id -1, it would be empty tile // if tile had texture id -1, it would be empty tile
if(game->layers[n]->tiles[i][j]->textureId != -1){ if(game->layers[n]->tiles[i][j]->textureId == -1){
Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, game->layers[n]->textureWidth); }
else{
int quarterTextureSize = game->layers[n]->textureWidth / 4;
int halfTextureSize = game->layers[n]->textureWidth / 2;
// SHOULD BE SET ONCE INITIALLY
Vector2 *offset = IsometricMapCalcOffsetForTileAtEfficient(i,j, halfTextureSize, quarterTextureSize);
// the higher the layer the higher it needs to be drawed // the higher the layer the higher it needs to be drawed
offset->y -= n * (game->layers[n]->textureHeight/4); offset->y -= n * quarterTextureSize;
int textureId = game->layers[n]->tiles[i][j]->textureId; int textureId = game->layers[n]->tiles[i][j]->textureId;

@ -27,7 +27,8 @@ Fantasy Welt oder Realistisch?
+ MapEditor + MapEditor
* Rendering Reihenfolge: layer 0, Sprites auf layer 0, layer 1, Sprites auf layer 1; Theoretisch müssen die einzelnen Layer Reihenweise gedrawed werden mit den Sprites zwischendrin * Rendering Reihenfolge: layer 0, Sprites auf layer 0, layer 1, Sprites auf layer 1; Theoretisch müssen die einzelnen Layer Reihenweise gedrawed werden mit den Sprites zwischendrin
+ IsometricMap struct erstellen, das den IsometricMap(+Layer) Array speichert ? + IsometricMap struct erstellen, das den IsometricMap(+Layer) Array speichert ?
+ TODO: Das rendern der IsometricMap wird bei größeren Maps sehr ineffizient;
+ Add offset x and y to each tile to be calculated ONCE, not every frame
### WiP ### WiP

@ -70,9 +70,9 @@ Game *GameInit()
for (n = 0; n < 10; n++) for (n = 0; n < 10; n++)
{ {
for (i = 0; i < 100; i++) for (i = 0; i < game->layers[n]->width; i++)
{ {
for (j = 0; j < 100; j++) for (j = 0; j < game->layers[n]->height; j++)
{ {
if(i > 50 && i < 70 && j == 50){ if(i > 50 && i < 70 && j == 50){
IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0); IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0);

@ -22,6 +22,7 @@ int main(){
//SetTargetFPS(60); //SetTargetFPS(60);
// GAME MAIN ROUTINE // GAME MAIN ROUTINE
int c = 0;
while(!WindowShouldClose()){ while(!WindowShouldClose()){
ListActAllSprites(game); ListActAllSprites(game);
@ -34,6 +35,20 @@ int main(){
IsometricRendererRenderIsometricMap(game); IsometricRendererRenderIsometricMap(game);
ListDrawAllSprites(game->sprites, game->layers, game->camera); ListDrawAllSprites(game->sprites, game->layers, game->camera);
/*
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
ListInsertBack(game->sprites, SpriteCreate(game->textures, 1, 250 + c % 500, 250 + c % 500));
c+=10;
printf("Sprites: %d\n", c);
*/
EndMode2D(); EndMode2D();
// Moving cursor Sprite to Mouse Pos and drawing it // Moving cursor Sprite to Mouse Pos and drawing it

Loading…
Cancel
Save