#include "inputHandler.h" #include "raylib.h" #include "sprite.h" #include #include #include //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 void DrawRect(Vector2 rectStart, Vector2 *mousePosition){ float width = GetMousePosition().x - rectStart.x; float height = GetMousePosition().y - rectStart.y; if(width < 0 && height >= 0){ width *= -1; rectStart.x -= width; } else if(height < 0 && width >= 0){ height *= -1; rectStart.y -= height; } else if(height < 0 && width < 0){ height *= -1; width *= -1; rectStart.x -= width; rectStart.y -= height; } DrawRectangleLines(rectStart.x, rectStart.y, width, height, GREEN); } Vector2 GetRectangle(Vector2 rectStart){ float width = GetMousePosition().x - rectStart.x; float height = GetMousePosition().y - rectStart.y; if(width < 0 && height >= 0){ width *= -1; rectStart.x -= width; } else if(height < 0 && width >= 0){ height *= -1; rectStart.y -= height; } else if(height < 0 && width < 0){ height *= -1; width *= -1; rectStart.x -= width; rectStart.y -= height; } return rectStart; } void mouseInput(InputHandler *inputHandler, Sprite *sprites, int *spriteAmount, Texture2D *texture, Camera2D *camera){ inputHandler->cursorPos.x = GetMousePosition().x; inputHandler->cursorPos.y = GetMousePosition().y; if(IsMouseButtonPressed(MOUSE_BUTTON_LEFT)){ if(inputHandler->pressed == 0){ inputHandler->rectStart.x = GetMousePosition().x; inputHandler->rectStart.y = GetMousePosition().y; inputHandler->pressed = 1; } } if(inputHandler->pressed){ DrawRect(inputHandler->rectStart, &(inputHandler->cursorPos)); } if(IsMouseButtonReleased(MOUSE_BUTTON_LEFT)){ inputHandler->pressed = 0; float width = GetMousePosition().x - inputHandler->rectStart.x; float height = GetMousePosition().y - inputHandler->rectStart.y; // Add Sprite if(width + height <= 1){ //printf("Klick\n"); SpriteAdd(sprites, spriteAmount, 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 Vector2 rect = GetRectangle(inputHandler->rectStart); width = abs(width); height = abs(height); 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); 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); } else{ (sprites + k)->selected = 0; } } } 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; } } } } void keyboardInput(InputHandler *inputHandler, Camera2D *camera){ if(IsKeyDown(KEY_W)){ (*camera).target.y -= 100.0f * GetFrameTime(); } if(IsKeyDown(KEY_S)){ (*camera).target.y += 100.0f * GetFrameTime(); } if(IsKeyDown(KEY_D)){ (*camera).target.x += 100.0f * GetFrameTime(); } if(IsKeyDown(KEY_A)){ (*camera).target.x -= 100.0f * GetFrameTime(); } }