diff --git a/Input/inputHandler.c b/Input/inputHandler.c index 6bf4066..e722d63 100644 --- a/Input/inputHandler.c +++ b/Input/inputHandler.c @@ -4,6 +4,7 @@ #include #include #include +#include "../List/list.h" //TODO: Macht es Sinn ein einzelnes "Game" struct zu haben, das alle möglichen Pointer hat zu allen arrays, camera, textures etc? // Man hat einen Übergabeparameter mit dem man dann alles verändern kann, man muss nicht alles was man verändern will einzeln übergeben @@ -51,7 +52,7 @@ Vector2 GetRectangle(Vector2 rectStart){ return rectStart; } -void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera){ +void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera){ inputHandler->cursorPos.x = GetMousePosition().x; inputHandler->cursorPos.y = GetMousePosition().y; @@ -75,7 +76,8 @@ void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, // Add Sprite if(width + height <= 1){ - SpriteAdd(sprites, spriteAmount, texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2); + //SpriteAdd(sprites, spriteAmount, texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2); + ListInsertBack(sprites, SpriteCreate(texture, inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2, inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2)); } // Berechnung, welche Sprites ausgewählt wurden @@ -85,33 +87,37 @@ void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, printf("Auswahl: x: %f, y: %f, w: %f, h: %f\n", rect.x, rect.y, width, height); - int k; float deltaX; float deltaY; - for(k = 0; k < *spriteAmount; k++){ - deltaX = (sprites+k)->x - (rect.x + camera->target.x); - deltaY = (sprites+k)->y - (rect.y + camera->target.y); + Node *current = sprites->head; + while (current != 0){ + deltaX = current->data.x + current->data.texture->width/2 - (rect.x + camera->target.x); + deltaY = current->data.y + current->data.texture->height/2 - (rect.y + camera->target.y); printf("deltaX: %f, deltaY: %f\n", deltaX, deltaY); if(deltaX > 0 && deltaX < width && deltaY > 0 && deltaY < height){ - (sprites + k)->selected = 1; - printf("%d selected\n", k); + current->data.selected = 1; } else{ - (sprites + k)->selected = 0; + current->data.selected = 0; } + + current = current->next; } } if(IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)){ - int i; - for(i=0;i<*spriteAmount;i++){ - if((sprites+i)->selected){ - (sprites+i)->hasDestination = 1; - (sprites+i)->destX = inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2; - (sprites+i)->destY = inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2; + Node *current = sprites->head; + + while (current != 0){ + if(current->data.selected){ + current->data.hasDestination = 1; + current->data.destX = inputHandler->cursorPos.x + (*camera).target.x - (texture->width)/2; + current->data.destY = inputHandler->cursorPos.y + (*camera).target.y - (texture->height)/2; } + + current = current->next; } } } diff --git a/Input/inputHandler.h b/Input/inputHandler.h index cf0ddc0..6e7194f 100644 --- a/Input/inputHandler.h +++ b/Input/inputHandler.h @@ -2,6 +2,7 @@ #define INPUTHANDLER_H_ #include "raylib.h" #include "../sprite.h" +#include "../List/list.h" typedef struct InputHandler{ int pressed; @@ -9,7 +10,7 @@ typedef struct InputHandler{ Vector2 cursorPos; } InputHandler; -void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera); +void mouseInput(InputHandler *inputHandler, List *sprites, Texture2D *texture, Camera2D *camera); void keyboardInput(InputHandler *inputHandler, Camera2D *camera); diff --git a/List/list.c b/List/list.c index c384914..515eaf5 100644 --- a/List/list.c +++ b/List/list.c @@ -6,6 +6,8 @@ Node * ListCreateNode(Sprite *data){ Node *new = (Node *) malloc(sizeof(Node)); new->data = *data; + new->next = 0; + new->prev = 0; return new; } @@ -64,3 +66,12 @@ List * ListInit(){ newList->tail = 0; return newList; } + +void ListDrawAllSprites(List *list){ + Node *current = list->head; + + while(current != 0){ + DrawSprite(¤t->data); + current = current->next; + } +} diff --git a/List/list.h b/List/list.h index 9b16c40..e8de5a1 100644 --- a/List/list.h +++ b/List/list.h @@ -26,5 +26,6 @@ void ListPrintForward(List *list); void ListInsertFront(List *list, Sprite *data); void ListInsertBack(List *list, Sprite *data); List * ListInit(); +void ListDrawAllSprites(List *list); #endif diff --git a/main.c b/main.c index 8aa18fd..890bce7 100644 --- a/main.c +++ b/main.c @@ -11,21 +11,16 @@ int main(){ InitWindow(800, 450, "basic window"); - - Sprite sprites[100]; - int spriteAmount = 0; Texture2D texture; texture = LoadTexture("assets/amulet.png"); - - List *spritesL = ListInit(); - ListInsertBack(spritesL, SpriteCreate(&texture, 0, 0)); + + List *sprites = ListInit(); + //ListPrintForward(sprites); Sprite cursorSprite = {&texture, 450, 225}; - SpriteAdd(sprites, &spriteAmount, &texture, 0, 0); - InputHandler inputHandler; Camera2D camera = { 0 }; @@ -46,45 +41,44 @@ int main(){ IsometricRendererRenderIsometricMap(map); - int i; - /* - for(i=0; i < spriteAmount; i++){ - DrawSprite(sprites + i); - } - */ - DrawAllSpritesInList(spritesL); + ListDrawAllSprites(sprites); EndMode2D(); - - // Moving cursor Sprite to Mouse Pos and drawing it cursorSprite.x = inputHandler.cursorPos.x - texture.width / 2; cursorSprite.y = inputHandler.cursorPos.y - texture.height / 2; DrawSprite(&cursorSprite); // User Input Handling - mouseInput(&inputHandler, sprites, &spriteAmount, &texture, &camera); + mouseInput(&inputHandler, sprites, &texture, &camera); keyboardInput(&inputHandler, &camera); // Sprites move towards their destination float movementSpeed = 10.0f; - for(i=0; i < spriteAmount; i++){ - if(sprites[i].hasDestination == 1){ - Vector2 movement = {sprites[i].destX - (sprites + i)->x, sprites[i].destY - (sprites + i)->y}; + Node *current = sprites->head; + + while (current != 0){ + if(current->data.hasDestination == 1){ + Vector2 movement = { + current->data.destX - current->data.x, + current->data.destY - current->data.y + }; if(Vector2Length(movement) < movementSpeed){ - (sprites + i)->hasDestination = 0; - (sprites + i)->x = (sprites + i)->destX; - (sprites + i)->y = (sprites + i)->destY; + current->data.hasDestination = 0; + current->data.x = current->data.destX; + current->data.y = current->data.destY; } else{ movement = Vector2Normalize(movement); movement = Vector2Scale(movement, movementSpeed); - (sprites + i)->x += movement.x; - (sprites + i)->y += movement.y; + current->data.x += movement.x; + current->data.y += movement.y; } } + + current = current->next; } EndDrawing(); diff --git a/sprite.c b/sprite.c index f0afaff..36295eb 100644 --- a/sprite.c +++ b/sprite.c @@ -2,7 +2,6 @@ #include "raylib.h" #include #include -#include "List/list.h" void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, int y){ if(*spriteAmount < 100){ @@ -30,22 +29,8 @@ void DrawSprite(Sprite *sprite){ } } -void DrawAllSpritesInList(List *list){ - Node *current = list->head; - - while(current != 0){ - if(current->data.selected){ - DrawTexture(current->data.texture, current->data.x, current->data.y, BLACK); - } - else{ - DrawTexture(current->data.texture, current->data.x, current->data.y, WHITE); - } - current = current->next; - } -} - Sprite * SpriteCreate(Texture2D *texture, int x, int y){ - Sprite newSprite = (Sprite *) malloc(sizeof(Sprite)); + Sprite *newSprite = (Sprite *) malloc(sizeof(Sprite)); newSprite->texture = texture; newSprite->x = x; diff --git a/sprite.h b/sprite.h index cde8c91..a0b0771 100644 --- a/sprite.h +++ b/sprite.h @@ -1,6 +1,5 @@ #ifndef SPRITE_H_ #define SPRITE_H_ -#include "List/list.h" #include "raylib.h" typedef struct Sprite { @@ -17,8 +16,6 @@ void SpriteAdd(Sprite *sprites, int *spriteAmount, Texture2D *texture, int x, in void DrawSprite(Sprite *sprite); -void DrawAllSpritesInList(List *list); - Sprite * SpriteCreate(Texture2D *texture, int x, int y); #endif