Compare commits

...

4 Commits

Author SHA1 Message Date
nemo 6e45a0ce11 cooldown main attack 2024-09-30 15:11:54 +02:00
nemo db592bdb70 rm test param 2024-09-30 14:43:39 +02:00
nemo bbb631f633 speed bullet var 2024-09-30 14:38:23 +02:00
nemo d4e02f01b5 bullet 2024-09-30 14:24:11 +02:00
8 changed files with 83 additions and 3 deletions

View File

@ -1,4 +1,4 @@
SRC=main.c ninja.c keys.c SRC=main.c ninja.c keys.c bullet.c
EXE=voleur EXE=voleur
CC=gcc CC=gcc

52
bullet.c Normal file
View File

@ -0,0 +1,52 @@
#include <stdio.h>
#include "raylib.h"
#include "raymath.h"
#include "bullet.h"
typedef struct Bullet {
BulletType type;
Vector2 pos;
float time;
float angle;
} Bullet;
#define BULLET_MAX 500
Bullet bullets[BULLET_MAX] = {0};
Texture textures[BULLET_COUNT];
void bullet_load()
{
textures[BULLET_SHURIKEN] = LoadTexture("data/shuriken.png");
}
void bullet_spawn(BulletType type, Vector2 pos, float angle)
{
for (int i = 0; i < BULLET_MAX; i++) {
if (bullets[i].time >= EPSILON)
continue;
bullets[i].time = 5;
bullets[i].angle = angle;
bullets[i].pos.x = pos.x - textures[type].width/2;
bullets[i].pos.y = pos.y - textures[type].height/2;
bullets[i].type = type;
break;
}
}
void draw_bullets()
{
for (int i = 0; i < BULLET_MAX; i++) {
if (bullets[i].time <= EPSILON)
continue;
float speed = 50;
float angle = bullets[i].angle * PI/180;
Vector2 toward = Vector2Normalize((Vector2) {cos(angle), sin(angle)});
bullets[i].pos = Vector2Add(bullets[i].pos, Vector2Scale(toward, speed));
bullets[i].time -= GetFrameTime();
DrawTexture(textures[bullets[i].type], bullets[i].pos.x, bullets[i].pos.y, WHITE);
}
}

15
bullet.h Normal file
View File

@ -0,0 +1,15 @@
#ifndef BULLET_H
#define BULLET_H
typedef enum BulletType {
BULLET_SHURIKEN,
BULLET_COUNT,
} BulletType;
void bullet_load();
void bullet_spawn(BulletType type, Vector2 pos, float angle);
void draw_bullets();
#endif // BULLET_H

BIN
data/bullet.aseprite Normal file

Binary file not shown.

BIN
data/shuriken.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

BIN
data/shurkien.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 400 B

3
main.c
View File

@ -3,6 +3,7 @@
#include "raylib.h" #include "raylib.h"
#include "raymath.h" #include "raymath.h"
#include "bullet.h"
#include "keys.h" #include "keys.h"
#include "ninja.h" #include "ninja.h"
@ -70,6 +71,7 @@ int main(void)
change_layout_azerty(); change_layout_azerty();
load_ninja(); load_ninja();
bullet_load();
while (!WindowShouldClose()) { while (!WindowShouldClose()) {
float DT = GetFrameTime(); float DT = GetFrameTime();
@ -109,6 +111,7 @@ int main(void)
BeginMode2D(effect_camera); BeginMode2D(effect_camera);
{ {
DrawTexture(map.texture, map.box.x, map.box.y, WHITE); DrawTexture(map.texture, map.box.x, map.box.y, WHITE);
draw_bullets();
} }
EndMode2D(); EndMode2D();
draw_ninja(Vector2Add(SCREEN_MIDDLE, cam_shake), &camera); draw_ninja(Vector2Add(SCREEN_MIDDLE, cam_shake), &camera);

14
ninja.c
View File

@ -3,12 +3,15 @@
#include "stdio.h" #include "stdio.h"
#include "keys.h" #include "keys.h"
#include "bullet.h"
Texture ninja_texture; Texture ninja_texture;
Texture ninja_attack_texture; Texture ninja_attack_texture;
float dash_time = 0; float dash_time = 0;
float main_attack_cooldown = 0;
void load_ninja() void load_ninja()
{ {
ninja_texture = LoadTexture("data/ninja.png"); ninja_texture = LoadTexture("data/ninja.png");
@ -26,7 +29,8 @@ Vector2 ninja_dash(Vector2 pos, Vector2 to, float sec)
Vector2 dash = {0}; Vector2 dash = {0};
if (sec <= EPSILON) if (sec <= EPSILON)
return dash; return dash;
if (key_pressed(KC_SHOOT)) { if (main_attack_cooldown <= EPSILON && key_pressed(KC_SHOOT)) {
main_attack_cooldown = sec + 0.069;
dash_time = sec; dash_time = sec;
Vector2 diff = Vector2Subtract(to, pos); Vector2 diff = Vector2Subtract(to, pos);
Vector2 scale = Vector2Normalize(diff); Vector2 scale = Vector2Normalize(diff);
@ -35,12 +39,14 @@ Vector2 ninja_dash(Vector2 pos, Vector2 to, float sec)
scale.y *= dist; scale.y *= dist;
target = Vector2Add(pos, scale); target = Vector2Add(pos, scale);
} }
if (dash_time > 0) { if (dash_time > EPSILON) {
float dt = GetFrameTime(); float dt = GetFrameTime();
dash_time -= dt; dash_time -= dt;
dash.x = Lerp(pos.x, target.x, dt/sec) - pos.x; dash.x = Lerp(pos.x, target.x, dt/sec) - pos.x;
dash.y = Lerp(pos.y, target.y, dt/sec) - pos.y; dash.y = Lerp(pos.y, target.y, dt/sec) - pos.y;
} }
if (main_attack_cooldown > EPSILON)
main_attack_cooldown -= GetFrameTime();
return dash; return dash;
} }
@ -91,6 +97,10 @@ void draw_ninja(Vector2 pos, Camera2D *cam)
float angle = -Vector2LineAngle(pos, GetMousePosition()); float angle = -Vector2LineAngle(pos, GetMousePosition());
angle *= 180/PI; angle *= 180/PI;
angle += 90; angle += 90;
if (main_attack_cooldown <= EPSILON && key_pressed(KC_SPECIAL))
bullet_spawn(BULLET_SHURIKEN, GetScreenToWorld2D(pos, *cam), angle - 90);
DrawTexturePro(n, source, dest, origin, angle, WHITE); DrawTexturePro(n, source, dest, origin, angle, WHITE);
// hit_hitbox(pos, angle); // hit_hitbox(pos, angle);