#include "raylib.h" #include "raymath.h" #include "keys.h" #include "bullet.h" Texture minigun_texture; #define DEFAULT_BACK_SPEED 5 float back_speed = DEFAULT_BACK_SPEED; 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)) { back_speed += GetFrameTime() * 1.2; if (back_speed >= 25) back_speed = 25; 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, back_speed)); Vector2 b1 = Vector2Scale(toward, 5*1.0); Vector2 b2 = Vector2Scale(toward, 5*6.0); b1.x += GetRandomValue(-7, 7); b1.y += GetRandomValue(-7, 7); b2.x += GetRandomValue(-7, 7); b2.y += GetRandomValue(-7, 7); bullet_spawn(BULLET_MINIGUN, Vector2Subtract(world, b1), angle); bullet_spawn(BULLET_MINIGUN, Vector2Subtract(world, b2), angle); } if (key_down(KC_SPECIAL) || !key_down(KC_SHOOT)) { back_speed = DEFAULT_BACK_SPEED; } } 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); }