diff --git a/main.c b/main.c index 02f59b0..d9ecda6 100644 --- a/main.c +++ b/main.c @@ -125,6 +125,8 @@ int main(void) Camera2D effect_camera = camera; effect_camera.offset = Vector2Add(effect_camera.offset, cam_shake); + if (player_type == PLAYER_MINIGUN) + process_minigun(Vector2Add(SCREEN_MIDDLE, cam_shake), &camera, &effect_camera); BeginMode2D(effect_camera); { DrawTexture(map.texture, map.box.x, map.box.y, WHITE); diff --git a/minigun.c b/minigun.c index 36cdb8d..06d93a9 100644 --- a/minigun.c +++ b/minigun.c @@ -16,9 +16,29 @@ 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}; @@ -26,15 +46,8 @@ void draw_minigun(Vector2 pos, Camera2D *cam) float angle = -Vector2LineAngle(pos, GetMousePosition()); angle *= 180/PI; - if (key_down(KC_SHOOT)) { - int speed = 5; - Vector2 world = GetScreenToWorld2D(pos, *cam); - Vector2 toward = Vector2Normalize((Vector2) {cos(angle * PI/180), sin(angle * PI/180)}); - 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); - } + if (key_down(KC_SPECIAL)) + DrawLineEx(pos, GetMousePosition(), 10, RED); DrawTexturePro(m, source, dest, origin, angle + 90, WHITE); } diff --git a/minigun.h b/minigun.h index 359bac3..b9cac7f 100644 --- a/minigun.h +++ b/minigun.h @@ -5,6 +5,8 @@ void load_minigun(); float minigun_radius(); +void process_minigun(Vector2 pos, Camera2D *real_cam, Camera2D *effect_cam); + void draw_minigun(Vector2 pos, Camera2D *cam); float minigun_dash_time();