You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.4 KiB

#include "inputHandler.h"
#include "raylib.h"
#include "../sprite.h"
#include "../IsometricMap/isometricMap.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.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
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, IsometricMap *map){
inputHandler->cursorPos.x = GetMousePosition().x;
inputHandler->cursorPos.y = GetMousePosition().y;
inputHandler->selectedTile = IsometricMapProject(map, camera, inputHandler->cursorPos.x, inputHandler->cursorPos.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){
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();
}
}