diff options
author | BoredGuy <osome3717@gmail.com> | 2024-12-30 18:46:31 +0300 |
---|---|---|
committer | BoredGuy <osome3717@gmail.com> | 2024-12-30 18:46:31 +0300 |
commit | 6f7d1bb16ff266f4126a46c6acb132dd9f80cd86 (patch) | |
tree | 126fc32cfae7dc53f3f4b1769453ff1b1fb336b4 | |
parent | 6f3fe42d5888e70fe195b6bbf32b7bdd4059415b (diff) |
Smoother Movement
Tis all
-rw-r--r-- | Week1-Pacman/assets/Maps/maze.csv | 58 | ||||
-rw-r--r-- | Week1-Pacman/src/animation.c | 5 | ||||
-rw-r--r-- | Week1-Pacman/src/animation.h | 1 | ||||
-rw-r--r-- | Week1-Pacman/src/main.c | 20 | ||||
-rw-r--r-- | Week1-Pacman/src/map.c | 4 | ||||
-rw-r--r-- | Week1-Pacman/src/pacman.c | 67 | ||||
-rw-r--r-- | Week1-Pacman/src/pacman.h | 3 |
7 files changed, 103 insertions, 55 deletions
diff --git a/Week1-Pacman/assets/Maps/maze.csv b/Week1-Pacman/assets/Maps/maze.csv index fa517af..3cb43bb 100644 --- a/Week1-Pacman/assets/Maps/maze.csv +++ b/Week1-Pacman/assets/Maps/maze.csv @@ -1,31 +1,29 @@ -283,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,286 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 -319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,358 +283,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,286 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,192,194,-1,-1,-1,-1,-1,197,199,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,228,265,-1,-1,-1,-1,-1,-1,271,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,228,265,-1,-1,-1,-1,-1,-1,271,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,336,337,337,337,337,337,337,337,343,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 +319,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,322 391,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,394 diff --git a/Week1-Pacman/src/animation.c b/Week1-Pacman/src/animation.c index 0747ba1..7e4bb57 100644 --- a/Week1-Pacman/src/animation.c +++ b/Week1-Pacman/src/animation.c @@ -64,3 +64,8 @@ void draw_animation(struct demo* demo, NULL, SDL_FLIP_NONE); } + +void reset_animation(struct animation* animation) { + animation->current_frame = 0; + animation->current_time = 0; +} diff --git a/Week1-Pacman/src/animation.h b/Week1-Pacman/src/animation.h index e6c717a..390e3f5 100644 --- a/Week1-Pacman/src/animation.h +++ b/Week1-Pacman/src/animation.h @@ -34,5 +34,6 @@ void free_animation(struct animation* animation); void draw_animation(struct demo* demo, const struct animation* animation, const SDL_Rect* d_rect); +void reset_animation(struct animation* animation); #endif // ANIMATION_H_ diff --git a/Week1-Pacman/src/main.c b/Week1-Pacman/src/main.c index 90e085b..041dfb8 100644 --- a/Week1-Pacman/src/main.c +++ b/Week1-Pacman/src/main.c @@ -10,7 +10,6 @@ #define WINDOW_HEIGHT 600 int main() { - int counter = 0; SDL_Init(SDL_INIT_EVERYTHING); struct demo demo = {0}; @@ -64,6 +63,8 @@ int main() { } }); pacman.facing = FACING_DOWN; + pacman.xpos = 100; + pacman.ypos = 200; int then = SDL_GetTicks(); @@ -81,26 +82,11 @@ int main() { then = now; SDL_RenderClear(demo.ren); - update_pacman(&pacman, dt); + update_pacman(&pacman, dt, &map); update_demo(&demo); draw_map(&demo, &map); draw_pacman(&demo, &pacman); SDL_RenderPresent(demo.ren); - - SDL_Rect r = { - .x = pacman.xpos, - .y = pacman.ypos, - .w = 40, - .h = 40 - }; - - for(int i = 0; i < map.collider_count; i++) { - if(is_colliding(&r, &map.colliders[i])) { - printf("%d: Collision!\n", counter); - counter++; - break; - } - } } SDL_DestroyRenderer(demo.ren); diff --git a/Week1-Pacman/src/map.c b/Week1-Pacman/src/map.c index 7df77af..d5efc9d 100644 --- a/Week1-Pacman/src/map.c +++ b/Week1-Pacman/src/map.c @@ -77,9 +77,9 @@ void add_map_row(const char* line, struct map* map) { map->colliders[map->collider_count - 1] = (SDL_Rect) { .x = i * 26, - .y = (map->height - 1) * 26, + .y = (map->height - 1) * 20, .w = 26, - .h = 26 + .h = 20 }; } diff --git a/Week1-Pacman/src/pacman.c b/Week1-Pacman/src/pacman.c index f3a4769..de9774d 100644 --- a/Week1-Pacman/src/pacman.c +++ b/Week1-Pacman/src/pacman.c @@ -1,10 +1,13 @@ #include <SDL2/SDL.h> #include <stdbool.h> #include "pacman.h" +#include "collision.h" #define PACMAN_SPEED 261 #define PACMAN_SIDE 40 +SDL_Rect* get_colliding_tile(struct pacman* pacman, struct map* map); + void handle_pacman_input(SDL_Event* e, struct pacman* pacman) { if(e->type == SDL_KEYDOWN) { @@ -25,19 +28,56 @@ void handle_pacman_input(SDL_Event* e, struct pacman* pacman) { } } -void update_pacman(struct pacman* pacman, float dt) { - +void update_pacman(struct pacman* pacman, float dt, struct map* map) { if(pacman->facing == FACING_UP) { pacman->ypos -= PACMAN_SPEED * dt; + + SDL_Rect* colliding_tile = + get_colliding_tile(pacman, map); + + if(colliding_tile != NULL) { + pacman->ypos = + colliding_tile->y + colliding_tile->h; + } else { + update_animation(&pacman->animations[pacman->facing], dt); + } } else if(pacman->facing == FACING_DOWN) { pacman->ypos += PACMAN_SPEED * dt; + + SDL_Rect* colliding_tile = + get_colliding_tile(pacman, map); + + if(colliding_tile != NULL) { + pacman->ypos = + colliding_tile->y - PACMAN_SIDE; + } else { + update_animation(&pacman->animations[pacman->facing], dt); + } } else if(pacman->facing == FACING_LEFT) { pacman->xpos -= PACMAN_SPEED * dt; - } else { + + SDL_Rect* colliding_tile = + get_colliding_tile(pacman, map); + + if(colliding_tile != NULL) { + pacman->xpos = + colliding_tile->x + colliding_tile->w; + } else { + update_animation(&pacman->animations[pacman->facing], dt); + } + } else if(pacman->facing == FACING_RIGHT) { pacman->xpos += PACMAN_SPEED * dt; - } - update_animation(&pacman->animations[pacman->facing], dt); + SDL_Rect* colliding_tile = + get_colliding_tile(pacman, map); + + if(colliding_tile != NULL) { + pacman->xpos = + colliding_tile->x - PACMAN_SIDE; + } else { + update_animation(&pacman->animations[pacman->facing], dt); + } + } } void draw_pacman(struct demo* demo, const struct pacman* pacman) { @@ -53,3 +93,20 @@ void draw_pacman(struct demo* demo, const struct pacman* pacman) { draw_animation(demo, current_animation, &d_rect); } + +SDL_Rect* get_colliding_tile(struct pacman* pacman, struct map* map) { + SDL_Rect r = (SDL_Rect){ + .x = pacman->xpos, + .y = pacman->ypos, + .w = PACMAN_SIDE, + .h = PACMAN_SIDE + }; + + for(int i = 0; i < map->collider_count; i++) { + if(is_colliding(&r, &map->colliders[i])) { + return &map->colliders[i]; + } + } + + return NULL; +} diff --git a/Week1-Pacman/src/pacman.h b/Week1-Pacman/src/pacman.h index e1610af..3bb0681 100644 --- a/Week1-Pacman/src/pacman.h +++ b/Week1-Pacman/src/pacman.h @@ -4,6 +4,7 @@ #include <SDL2/SDL.h> #include "animation.h" #include "demo.h" +#include "map.h" enum facing { FACING_RIGHT, @@ -26,7 +27,7 @@ struct pacman { }; void handle_pacman_input(SDL_Event* e, struct pacman* pacman); -void update_pacman(struct pacman* pacman, float dt); +void update_pacman(struct pacman* pacman, float dt, struct map* map); void draw_pacman(struct demo* demo, const struct pacman* pacman); #endif // PACMAN_H_ |