#include "raylib.h"
#include "raymath.h"

#include "keys.h"
#include "bullet.h"

Texture minigun_texture;

void load_minigun()
{
    minigun_texture = LoadTexture("data/minigun.png");
}

float minigun_radius()
{
    return fmax(minigun_texture.width, minigun_texture.height)/2;
}

void process_minigun(Vector2 pos, Camera2D *real_cam, Camera2D *effect_cam)
{
    if (key_down(KC_SPECIAL)) {
        int force = 5;
        effect_cam->offset.x += GetRandomValue(-force/2, force/2);
        effect_cam->offset.y += GetRandomValue(-force/2, force/2);
    }
    else if (key_down(KC_SHOOT)) {
        int speed = 5;
        float angle = -Vector2LineAngle(pos, GetMousePosition());
        angle *= 180/PI;
        Vector2 world = GetScreenToWorld2D(pos, *real_cam);
        Vector2 toward = Vector2Normalize((Vector2) {cos(angle * PI/180), sin(angle * PI/180)});
        real_cam->target = Vector2Subtract(world, Vector2Scale(toward, speed));

        bullet_spawn(BULLET_MINIGUN, Vector2Subtract(world, Vector2Scale(toward, speed*1.0)), angle);
        bullet_spawn(BULLET_MINIGUN, Vector2Subtract(world, Vector2Scale(toward, speed*6.0)), angle);
    }
}

void draw_minigun(Vector2 pos, Camera2D *cam)
{
    (void) cam;
    Texture m = minigun_texture;
    Rectangle source = {0, 0, m.width, m.height};
    Rectangle dest = {pos.x, pos.y, m.width, m.height};
    Vector2 origin = {m.width/2, m.height/2};
    float angle = -Vector2LineAngle(pos, GetMousePosition());
    angle *= 180/PI;

    if (key_down(KC_SPECIAL))
        DrawLineEx(pos, GetMousePosition(), 10, RED);

    DrawTexturePro(m, source, dest, origin, angle + 90, WHITE);
}