Camera lerp now working, first debug visualisation implemented. A lot of other misc stuff.

This commit is contained in:
KikooDX 2020-09-14 14:37:46 +02:00
parent f58a212652
commit d8e23cd844
6 changed files with 35 additions and 12 deletions

View File

@ -2,15 +2,19 @@
#define _DEF_CAMERA
#include "vec.h"
#include "debug.h"
typedef struct Camera
{
Vec position;
Vec pos;
Vec *target; /* the target position to lerp on */
float speed; /* camera lerp speed with 0 < speed <= 1 */
} Camera;
void camera_step(Camera *camera);
/* camera is invisible */
#ifdef DEBUG
/* draw a dot corresponding to camera position */
void camera_draw(Camera *camera);
#endif
#endif /* _DEF_CAMERA */

1
include/debug.h Normal file
View File

@ -0,0 +1 @@
#define DEBUG

View File

@ -6,7 +6,7 @@
typedef struct Player
{
Vec position;
Vec pos;
} Player;
void player_step(Player *player);

View File

@ -1,7 +1,17 @@
#include <gint/display.h>
#include "camera.h"
#include "vec.h"
#include "debug.h"
void camera_step(Camera *camera)
{
vec_lerp(&camera->position, *camera->target, camera->speed);
vec_lerp(&camera->pos, *camera->target, camera->speed);
}
#ifdef DEBUG
void camera_draw(Camera *camera)
{
dpixel((int)camera->pos.x, (int)camera->pos.y, C_BLACK);
}
#endif

View File

@ -3,6 +3,7 @@
#include <gint/std/string.h>
#include "main.h"
#include "debug.h"
#include "init.h"
#include "vec.h"
#include "player.h"
@ -15,7 +16,7 @@ int main(void)
/* create player */
Player player = {
.position = {32, 32}
.pos = {0, 0}
};
/* create level */
@ -26,15 +27,19 @@ int main(void)
/* create camera */
Camera camera = {
.target = &player.position
.pos = {127, 63},
.target = &player.pos,
.speed = 0.0005
};
vec_cpy(&camera.position, player.position);
//vec_cpy(&camera.pos, player.pos);
/* main game loop */
step_event(&player, &level, &camera);
draw_event(&player, &level, &camera);
getkey();
while ((int)camera.pos.x != (int)player.pos.x)
{
step_event(&player, &level, &camera);
draw_event(&player, &level, &camera);
}
/* return to menu */
return 1;
}
@ -50,5 +55,8 @@ void draw_event(Player *player, Level *level, Camera *camera)
dclear(C_WHITE);
level_draw(level, camera);
player_draw(player, camera);
#ifdef DEBUG
camera_draw(camera);
#endif
dupdate();
}

View File

@ -9,5 +9,5 @@ void player_step(Player *player)
void player_draw(Player *player, Camera *camera)
{
dpixel(player->position.x, player->position.y, C_BLACK);
dpixel(player->pos.x, player->pos.y, C_BLACK);
}