Knight made to move independently, relative screen dimensions
This commit is contained in:
parent
1ff06abdd4
commit
05c86f8284
2
Makefile
2
Makefile
@ -5,7 +5,7 @@ CC=gcc
|
|||||||
|
|
||||||
all: main dod
|
all: main dod
|
||||||
|
|
||||||
main: main.c sprites.o sprites.h game_data.h ./lib/libraylib.a
|
main: main.c lib.h sprites.o sprites.h game_data.h ./lib/libraylib.a
|
||||||
$(CC) $(CFLAGS) -Iinclude/ -lm main.c -o main sprites.o ./lib/libraylib.a
|
$(CC) $(CFLAGS) -Iinclude/ -lm main.c -o main sprites.o ./lib/libraylib.a
|
||||||
|
|
||||||
sprites.o: sprites.c sprites.h lib.h
|
sprites.o: sprites.c sprites.h lib.h
|
||||||
|
47
main.c
47
main.c
@ -6,7 +6,9 @@
|
|||||||
|
|
||||||
#define TEXTURES_BUF_SIZE 16
|
#define TEXTURES_BUF_SIZE 16
|
||||||
#define TARGET_FPS 60
|
#define TARGET_FPS 60
|
||||||
#define MAX_KNIGHTS 1024
|
#define MAX_KNIGHTS 512
|
||||||
|
#define SCREEN_WIDTH 1300
|
||||||
|
#define SCREEN_HEIGHT 1080
|
||||||
|
|
||||||
#define DEBUG_MODE_ENABLED
|
#define DEBUG_MODE_ENABLED
|
||||||
|
|
||||||
@ -36,9 +38,11 @@ typedef enum Direction {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Point position;
|
Point position;
|
||||||
|
Point move_target_point;
|
||||||
u8 look_dir;
|
u8 look_dir;
|
||||||
u8 state;
|
u8 state;
|
||||||
u8 selected;
|
u8 selected;
|
||||||
|
u8 ordered_to_move;
|
||||||
} Knight;
|
} Knight;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -153,8 +157,18 @@ void Update(GameState *game, Camera2D *cam, float dt) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IsMouseButtonPressed(1)) {
|
if (IsMouseButtonPressed(1)) {
|
||||||
Point mouse_pos = GetScreenToWorld2D(GetMousePosition(), *cam);
|
Point target_pos = GetScreenToWorld2D(GetMousePosition(), *cam);
|
||||||
game->selected_point = (PointOption){ .tag = SOME, .some.point = mouse_pos };
|
bool any = false;
|
||||||
|
for (int i = 0; i < game->entity_count; i++) {
|
||||||
|
if (game->knights[i].selected) {
|
||||||
|
game->knights[i].move_target_point = target_pos;
|
||||||
|
game->knights[i].ordered_to_move = true;
|
||||||
|
any = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (any) {
|
||||||
|
game->selected_point = (PointOption){ .tag = SOME, .some.point = target_pos };
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const float cam_move_speed = 1050.0f * dt;
|
const float cam_move_speed = 1050.0f * dt;
|
||||||
@ -192,10 +206,10 @@ void Update(GameState *game, Camera2D *cam, float dt) {
|
|||||||
for (int i = 0; i < game->entity_count; i++) {
|
for (int i = 0; i < game->entity_count; i++) {
|
||||||
Vector2 input_vel = {0};
|
Vector2 input_vel = {0};
|
||||||
Knight *knight = &game->knights[i];
|
Knight *knight = &game->knights[i];
|
||||||
if (game->selected_point.tag == SOME && knight->selected) {
|
if (knight->ordered_to_move) {
|
||||||
Vector2 target = game->selected_point.some.point;
|
Vector2 target = knight->move_target_point;
|
||||||
if (Vector2DistanceSqr(target, knight->position) < 2.5f) {
|
if (Vector2DistanceSqr(target, knight->position) < 2.5f) {
|
||||||
game->selected_point.tag = NONE;
|
knight->ordered_to_move = false;
|
||||||
} else {
|
} else {
|
||||||
input_vel.x = knight->position.x - target.x < 0.0f ? 1 : -1;
|
input_vel.x = knight->position.x - target.x < 0.0f ? 1 : -1;
|
||||||
knight->position = Vector2MoveTowards(knight->position, target, 4.0f);
|
knight->position = Vector2MoveTowards(knight->position, target, 4.0f);
|
||||||
@ -247,8 +261,8 @@ void Draw(GameState *game, Assets assets, Camera2D cam, float dt) {
|
|||||||
ClearBackground((Color){100, 149, 237, 255});
|
ClearBackground((Color){100, 149, 237, 255});
|
||||||
|
|
||||||
int size = 32;
|
int size = 32;
|
||||||
int topx = 300;
|
int topx = SCREEN_WIDTH / 2 - size * 32 / 2;
|
||||||
int topy = 32;
|
int topy = SCREEN_HEIGHT / 2 - size * 32 / 2;
|
||||||
for (int col = 0; col < size; col++) {
|
for (int col = 0; col < size; col++) {
|
||||||
for (int row = 0; row < size; row++) {
|
for (int row = 0; row < size; row++) {
|
||||||
int atlas_col = 0;
|
int atlas_col = 0;
|
||||||
@ -323,14 +337,11 @@ void Draw(GameState *game, Assets assets, Camera2D cam, float dt) {
|
|||||||
Vector2 pointer_pos = Vector2Subtract(world, (Vector2){24, 19});
|
Vector2 pointer_pos = Vector2Subtract(world, (Vector2){24, 19});
|
||||||
D_DrawTextureV(assets.textures[TEX_MOUSE_CURSOR], pointer_pos, WHITE);
|
D_DrawTextureV(assets.textures[TEX_MOUSE_CURSOR], pointer_pos, WHITE);
|
||||||
|
|
||||||
DrawRectangle(1492, 4, 88, 30, WHITE);
|
DrawRectangle(SCREEN_WIDTH - 106, 4, 88, 30, WHITE);
|
||||||
DrawFPS(1500, 10);
|
DrawFPS(SCREEN_WIDTH - 100, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
const int screen_width = 1600;
|
|
||||||
const int screen_height = 1080;
|
|
||||||
|
|
||||||
printf("Knight Size: %ld \n", sizeof(Knight));
|
printf("Knight Size: %ld \n", sizeof(Knight));
|
||||||
printf("SpriteAnimationPlayback Size: %ld \n", sizeof(SpriteAnimationPlayback));
|
printf("SpriteAnimationPlayback Size: %ld \n", sizeof(SpriteAnimationPlayback));
|
||||||
printf("Point Size: %ld \n", sizeof(Point));
|
printf("Point Size: %ld \n", sizeof(Point));
|
||||||
@ -338,13 +349,13 @@ int main(void) {
|
|||||||
printf("Direction Size: %ld \n", sizeof(Direction));
|
printf("Direction Size: %ld \n", sizeof(Direction));
|
||||||
printf("KnightState Size: %ld \n", sizeof(KnightState));
|
printf("KnightState Size: %ld \n", sizeof(KnightState));
|
||||||
|
|
||||||
InitWindow(screen_width, screen_height, "raylib [core] example - basic window");
|
InitWindow(SCREEN_WIDTH, SCREEN_HEIGHT, "raylib [core] example - basic window");
|
||||||
|
|
||||||
int monitor = GetCurrentMonitor();
|
int monitor = GetCurrentMonitor();
|
||||||
int monitor_width = GetMonitorWidth(monitor);
|
int monitor_width = GetMonitorWidth(monitor);
|
||||||
int monitor_height = GetMonitorHeight(monitor);
|
int monitor_height = GetMonitorHeight(monitor);
|
||||||
int win_pos_x = monitor_width / 2 - screen_width / 2;
|
int win_pos_x = monitor_width / 2 - SCREEN_WIDTH / 2;
|
||||||
int win_pos_y = monitor_height / 2 - screen_height / 2;
|
int win_pos_y = monitor_height / 2 - SCREEN_HEIGHT / 2;
|
||||||
SetWindowPosition(win_pos_x, win_pos_y);
|
SetWindowPosition(win_pos_x, win_pos_y);
|
||||||
|
|
||||||
SetTargetFPS(TARGET_FPS);
|
SetTargetFPS(TARGET_FPS);
|
||||||
@ -362,8 +373,8 @@ int main(void) {
|
|||||||
const int entities = MAX_KNIGHTS;
|
const int entities = MAX_KNIGHTS;
|
||||||
for (int i = 0; i < entities; i++) {
|
for (int i = 0; i < entities; i++) {
|
||||||
|
|
||||||
int rand_x = GetRandomValue(360, 1250);
|
int rand_x = GetRandomValue(165, 1130);
|
||||||
int rand_y = 100 + ((float)930 / (float)entities) * i;
|
int rand_y = 100 + ((float)950 / (float)entities) * i;
|
||||||
game.knights[i].position = (Vector2){rand_x,rand_y};
|
game.knights[i].position = (Vector2){rand_x,rand_y};
|
||||||
|
|
||||||
PlayAnimation(ANIM_KNIGHT_IDLE, knight_anims, &game.anim_playbacks[i]);
|
PlayAnimation(ANIM_KNIGHT_IDLE, knight_anims, &game.anim_playbacks[i]);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user