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[1] = LoadTexture("assets/bigtower.png");
map->width = 100;
map->height = 100;
map->width = 200;
map->height = 200;
map->textureWidth = map->tileTextures[0].width;
map->textureHeight = map->tileTextures[0].height;
map->worldPixelWidth = map->width * map->textureWidth;
@ -60,6 +60,13 @@ Vector2 * IsometricMapCalcOffsetForTileAt(int x, int y, int textureSize){
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
Tile * IsometricMapGetTileFromArrayPosition(IsometricMap *map, int x, int 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
// Only works for tiles with texture width == height (and for 22.5 degree?)
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
Tile * IsometricMapGetMostUpperTile(IsometricMap **isometricMap, Tile *tile);

@ -48,10 +48,15 @@ void IsometricRendererRenderIsometricMap(Game *game){
for(i=0; i < game->layers[n]->width; i++){
for(j=0; j < game->layers[n]->height; j++){
// if tile had texture id -1, it would be empty tile
if(game->layers[n]->tiles[i][j]->textureId != -1){
Vector2 *offset = IsometricMapCalcOffsetForTileAt(i,j, game->layers[n]->textureWidth);
if(game->layers[n]->tiles[i][j]->textureId == -1){
}
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
offset->y -= n * (game->layers[n]->textureHeight/4);
offset->y -= n * quarterTextureSize;
int textureId = game->layers[n]->tiles[i][j]->textureId;

@ -27,7 +27,8 @@ Fantasy Welt oder Realistisch?
+ 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
+ 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

@ -70,9 +70,9 @@ Game *GameInit()
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){
IsometricMapChangeTextureIdOfTile(game->layers, i, j, n, 0);

@ -22,6 +22,7 @@ int main(){
//SetTargetFPS(60);
// GAME MAIN ROUTINE
int c = 0;
while(!WindowShouldClose()){
ListActAllSprites(game);
@ -34,6 +35,20 @@ int main(){
IsometricRendererRenderIsometricMap(game);
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();
// Moving cursor Sprite to Mouse Pos and drawing it

Loading…
Cancel
Save