From 0c73d941871af1462ec084544b7d7eee5e81789e Mon Sep 17 00:00:00 2001 From: huaqo-games Date: Mon, 3 Feb 2025 11:19:50 +0100 Subject: [PATCH] refactor seperate files --- bin/game | Bin 108456 -> 142424 bytes bin/game.dSYM/Contents/Resources/DWARF/game | Bin 34920 -> 38996 bytes scripts/animsprite.h | 41 +++ scripts/main.c | 345 ++++---------------- scripts/main_crossplattform.cpp | 26 -- scripts/object.c | 0 scripts/object.h | 128 ++++++++ scripts/sprite.h | 36 ++ scripts/tilesprite.h | 30 ++ scripts/vector.h | 22 ++ 10 files changed, 313 insertions(+), 315 deletions(-) create mode 100644 scripts/animsprite.h delete mode 100644 scripts/main_crossplattform.cpp delete mode 100644 scripts/object.c create mode 100644 scripts/object.h create mode 100644 scripts/sprite.h create mode 100644 scripts/tilesprite.h create mode 100644 scripts/vector.h diff --git a/bin/game b/bin/game index e3847994a17a527307d21f8f1c83f6d86b0582c3..7d8148c970e57670bb9506416067a1d662e1a2ec 100755 GIT binary patch literal 142424 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 diff --git a/bin/game.dSYM/Contents/Resources/DWARF/game b/bin/game.dSYM/Contents/Resources/DWARF/game index 7a7edf6d4becd9b0f303c3e29d6dfd6ec8959544..9cc3b93a2a50ba6c9bd660c6a19bfe6c91185324 100644 GIT binary patch literal 38996 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 literal 34920 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 G@%ul%y=x!< diff --git a/scripts/animsprite.h b/scripts/animsprite.h new file mode 100644 index 0000000..f66f1a3 --- /dev/null +++ b/scripts/animsprite.h @@ -0,0 +1,41 @@ +#ifndef ANIMSPRITE_H +#define ANIMSPRITE_H +#include +#include "sprite.h" + +typedef struct { + Sprite sprite; + int currentFrame; + int maxFrame; + int framesCounter; + int framesSpeed; + float animTimer; + bool isVertical; +} AnimSprite; + +void UpdateAnimSprite(AnimSprite *animSprite) { + animSprite->animTimer += GetFrameTime(); + float frameTime = 1.0f / animSprite->framesSpeed; + + if (animSprite->animTimer < frameTime) { + return; + } + + animSprite->animTimer -= frameTime; + animSprite->currentFrame++; + + if (animSprite->currentFrame >= animSprite->maxFrame) { + animSprite->currentFrame = 0; + } + + Vector2 newFramePos = { + .x = animSprite->isVertical ? animSprite->sprite.sourceRec.x + : animSprite->currentFrame * animSprite->sprite.frameSize.x, + .y = animSprite->isVertical ? animSprite->currentFrame * animSprite->sprite.frameSize.y + : animSprite->sprite.sourceRec.y + }; + + UpdateSpriteSourceRec(&animSprite->sprite, &newFramePos); +} + +#endif // ANIMSPRITE_H diff --git a/scripts/main.c b/scripts/main.c index 49a6ce6..614d79f 100644 --- a/scripts/main.c +++ b/scripts/main.c @@ -7,125 +7,45 @@ // BeginDrawing(), EndDrawing(), ClearBackground(), // Camera2D, BeginMode2D(), EndMode2D() #include // Vector2Length(), Vector2Normalize(), Vector2Add(), Vector2Scale(), Lerp() -#include // rand(), srand() +#include // rand(), srand(), malloc() #include // time() #include // memcpy() -#include +#include "sprite.h" +#include "animsprite.h" +#include "tilesprite.h" +#include "vector.h" +#include "object.h" // Structs -typedef struct { - Vector2 *data; - size_t count; -} Vector2Array; - -typedef struct { - Texture2D texture; // Texture for the sprite - Rectangle sourceRec; // Source rectangle for the texture - Rectangle destRec; // Destination rectangle for the texture - Vector2 frameSize; // Size of the frame in the texture - Vector2 origin; // Origin point for rotation and positioning - float rotation; // Rotation angle - Color color; -} Sprite; - -typedef struct { - Sprite sprite; - Rectangle bounds; -} TileSprite; - -typedef struct { - Sprite sprite; // Base sprite for rendering - int currentFrame; // Current animation frame - int maxFrame; // Total number of frames - int framesCounter; // Counter to control frame speed - int framesSpeed; // Speed of the animation (frames per second) - float animTimer; - bool isVertical; // Whether the animation frames are arranged vertically -} AnimSprite; - -typedef struct { - Sprite sprite; - Vector2 position; -} Object; - -typedef struct { - Object *data; - const Object *prototype; - size_t count; -} ObjectArray; - typedef struct { AnimSprite animSprite; Vector2 position; Vector2 direction; float velocity; -} Entity; +} Player; typedef struct { - Entity entity; + AnimSprite animSprite; + Vector2 position; + Vector2 direction; + float velocity; Object targetFlower; Object hive; } Bee; // Pure functions -bool IsVectorZero(Vector2 v) { - float epsilon = 0.01f; - return (fabs(v.x) < epsilon && fabs(v.y) < epsilon); -} -float GetRandomFloat(const float min, const float max){ - return min + (float)rand() / (float)(RAND_MAX / (max - min)); -} - -Vector2 GetRandomVector(const Rectangle bounds){ - return (Vector2){ - GetRandomFloat(bounds.x, bounds.x + bounds.width), - GetRandomFloat(bounds.y, bounds.y + bounds.height) - }; -} - -ObjectArray CreateObjectArray(const Object *prototype, const size_t count) { - ObjectArray objects = {0}; - - if (count <= 0) { - printf("Objects size must be greater than 0.\n"); - return objects; +void Move(Vector2 *position, Vector2 *direction, float *velocity, float *rotation) { + if(Vector2Length(*direction) <= 0.0f){ + return; } - - objects.count = count; - objects.data = malloc(count * sizeof(Object)); - - if (!objects.data) { - printf("Memory allocation of objects failed.\n"); - return objects; - } - - objects.prototype = prototype; - - for (int i = 0; i < count; i++) { - objects.data[i].position = prototype->position; - objects.data[i].sprite = prototype->sprite; - } - return objects; + float targetRotation = (float)atan2(direction->y, direction->x) * (180.0f / PI) + 90.0f; + *rotation = Lerp(*rotation, targetRotation, 0.1f); + *position = Vector2Add(*position, Vector2Scale(*direction, *velocity * GetFrameTime())); } -void AddObjectToArray(ObjectArray *objects, const Object *prototype, Vector2 position) { - Object *newData = realloc(objects->data, (objects->count + 1) * sizeof(Object)); - if (newData) { - objects->data = newData; - objects->data[objects->count] = *prototype; - objects->data[objects->count].position = position; - objects->data[objects->count].sprite.destRec.x = position.x; - objects->data[objects->count].sprite.destRec.y = position.y; - objects->count++; - } else { - printf("Memory allocation failed while adding an object.\n"); - } -} - - // Mutator Functions void GetDirectionFromInput(Vector2 *direction){ @@ -137,160 +57,8 @@ void GetDirectionFromInput(Vector2 *direction){ if (Vector2Length(*direction) > 0.0f) { *direction = Vector2Normalize(*direction); } } -Object* GetRandomObject(ObjectArray *objects){ - if (objects->count == 0) { - return NULL; - } - return &objects->data[GetRandomValue(0, (int)objects->count-1)]; -} - -Vector2 GetDirectionToObject(Object *object, Vector2 position){ - return Vector2Normalize(Vector2Subtract(object->position, position)); -} - -void SetPositionOnDirectionAndVelocity(const Vector2 *direction, const float *velocity, Vector2 *position) { - *position = Vector2Add(*position, Vector2Scale(*direction, *velocity * GetFrameTime())); -} - -void SetDestRecOnPosition(const Vector2 *position, Sprite *sprite){ - Rectangle newDestRec = { - position->x, - position->y, - sprite->frameSize.x, - sprite->frameSize.y - }; - sprite->destRec = newDestRec; -} - -void SetAnimSpriteOnFrameTime(AnimSprite *animSprite) { - animSprite->animTimer += GetFrameTime(); - float frameTime = 1.0f / animSprite->framesSpeed; - - if (animSprite->animTimer < frameTime) { - return; - } - - animSprite->animTimer -= frameTime; - animSprite->currentFrame++; - - if (animSprite->currentFrame >= animSprite->maxFrame) { - animSprite->currentFrame = 0; - } - - if (animSprite->isVertical) { - animSprite->sprite.sourceRec.y = animSprite->currentFrame * animSprite->sprite.frameSize.y; - } else { - animSprite->sprite.sourceRec.x = animSprite->currentFrame * animSprite->sprite.frameSize.x; - } -} - -void SetRotationOnDirection(const Vector2 *direction, float *rotationDegree){ - if(Vector2Length(*direction) <= 0.0f){ - return; - } - float targetRotationDegree = (float)atan2(direction->y, direction->x) * (180.0f / PI) + 90.0f; - *rotationDegree = Lerp(*rotationDegree, targetRotationDegree, 0.1f); -} - -void SetPositionForObjectArray(ObjectArray *objects, const Vector2Array *positions) { - if (positions->count != objects->count) { - printf("Warning: Position array size (%zu) does not match ObjectArray size (%zu)\n", positions->count, objects->count); - return; - } - - for (size_t i = 0; i < objects->count; i++) { - objects->data[i].position = positions->data[i]; - objects->data[i].sprite.destRec.x = positions->data[i].x; - objects->data[i].sprite.destRec.y = positions->data[i].y; - } -} - -void SetRandomPositionForObjectArray(ObjectArray *objects, const Rectangle bounds){ - srand((unsigned int)time(NULL)); - for (int i = 0; i < objects->count; i++) { - Vector2 position = GetRandomVector(bounds); - objects->data[i].position = position; - objects->data[i].sprite.destRec.x = position.x; - objects->data[i].sprite.destRec.y = position.y; - } -} - -void UpdatePlayer(Entity *player) { - GetDirectionFromInput(&player->direction); - SetRotationOnDirection(&player->direction, &player->animSprite.sprite.rotation); - SetPositionOnDirectionAndVelocity(&player->direction, &player->velocity, &player->position); - SetDestRecOnPosition(&player->position, &player->animSprite.sprite); - SetAnimSpriteOnFrameTime(&player->animSprite); -} - -void UpdateTileSprite(TileSprite *tileSprite, const Camera2D *camera){ - tileSprite->bounds.x = (int)((camera->target.x - (GetScreenWidth() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.x) - 1; - tileSprite->bounds.width = (int)((camera->target.x + (GetScreenWidth() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.x) + 1; - tileSprite->bounds.y = (int)((camera->target.y - (GetScreenHeight() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.y) - 1; - tileSprite->bounds.height = (int)((camera->target.y + (GetScreenHeight() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.y) + 1; -} - -void UpdateCamera2D(Camera2D *camera, const Entity *player, const float smoothness){ - camera->target = Vector2Lerp(camera->target, player->position, smoothness * GetFrameTime()); -} - -void SwapAndPopObjectsArrayOnRecCollision(ObjectArray *objects, const Rectangle rec){ - for (int i = 0; i < objects->count; i++){ - - if (CheckCollisionRecs(rec, objects->data[i].sprite.destRec)){ - if (objects->count == 1) { - objects->count = 0; - break; - } - objects->data[i] = objects->data[objects->count - 1]; - objects->count--; - i--; - } - } -} - -void SwapAndPopObjectsArrayOnPointCollision(ObjectArray *objects, const Vector2 point){ - for (int i = 0; i < objects->count; i++){ - - if (CheckCollisionPointRec(point, objects->data[i].sprite.destRec)){ - if (objects->count == 1) { - objects->count = 0; - break; - } - objects->data[i] = objects->data[objects->count - 1]; - objects->count--; - i--; - } - } -} - -void RenderSprite(const Sprite *sprite){ - DrawTexturePro( - sprite->texture, - sprite->sourceRec, - sprite->destRec, - sprite->origin, - sprite->rotation, - sprite->color - ); -} - -void RenderTileSprite(TileSprite *tileSprite){ - for (float y = tileSprite->bounds.y; y <= tileSprite->bounds.height; y++) - { - for (float x = tileSprite->bounds.x; x <= tileSprite->bounds.width; x++) - { - Vector2 tilePosition = {x * tileSprite->sprite.frameSize.x, y * tileSprite->sprite.frameSize.y}; - SetDestRecOnPosition(&tilePosition, &tileSprite->sprite); - RenderSprite(&tileSprite->sprite); - } - } -} - -void RenderObjectArray(const ObjectArray *objects){ - for (int i = 0; i < objects->count; i++){ - RenderSprite(&objects->data[i].sprite); - } +void UpdateCamera2DTarget(Camera2D *camera, Vector2 *position, const float smoothness){ + camera->target = Vector2Lerp(camera->target, *position, smoothness * GetFrameTime()); } // Main @@ -339,14 +107,14 @@ int main(void) .color = WHITE }, .position = {0.0f, 0.0f} - }, 1); + }, 300); if (!flowers.data) { printf("Memory allocation failed.\n"); exit(1); } Rectangle flowerField = {-50.0f, -50.0f, 100.0f, 100.0f}; SetRandomPositionForObjectArray(&flowers, flowerField); - Entity player = { + Player player = { .animSprite = { .sprite = { .texture = LoadTexture("assets/character_bee.png"), @@ -368,30 +136,27 @@ int main(void) .direction = (Vector2){0.0f,0.0f}, .velocity = 50.0f }; - Bee bee1 = { - .entity = { - .animSprite = { - .sprite = { - .texture = LoadTexture("assets/character_bee.png"), - .frameSize = {16.0f, 16.0f}, - .sourceRec = {0.0f, 0.0f, 16.0f, 16.0f}, - .destRec = {0.0f, 0.0f, 16.0f, 16.0f}, - .origin = {8.0f, 8.0f}, - .rotation = 0.0f, - .color = WHITE - }, - .currentFrame = 0, - .maxFrame = 4, - .framesCounter = 0, - .framesSpeed = 10, - .isVertical = true, - .animTimer = 0.0f + .animSprite = { + .sprite = { + .texture = LoadTexture("assets/character_bee.png"), + .frameSize = {16.0f, 16.0f}, + .sourceRec = {0.0f, 0.0f, 16.0f, 16.0f}, + .destRec = {0.0f, 0.0f, 16.0f, 16.0f}, + .origin = {8.0f, 8.0f}, + .rotation = 0.0f, + .color = WHITE }, - .position = hive.position, - .direction = (Vector2){0.0f,0.0f}, - .velocity = 5.0f + .currentFrame = 0, + .maxFrame = 4, + .framesCounter = 0, + .framesSpeed = 10, + .isVertical = true, + .animTimer = 0.0f }, + .position = hive.position, + .direction = (Vector2){0.0f,0.0f}, + .velocity = 5.0f, .targetFlower = *GetRandomObject(&flowers), .hive = hive }; @@ -401,7 +166,6 @@ int main(void) .rotation = 0.0f, .zoom = 10.0f }; - float followSmoothness = 5.0f; // Update & Render while (!WindowShouldClose()) @@ -413,24 +177,27 @@ int main(void) } UpdateMusicStream(music); - UpdateTileSprite(&floor, &camera); - UpdatePlayer(&player); + UpdateTileSpriteBounds(&floor, &camera); + + GetDirectionFromInput(&player.direction); + Move(&player.position, &player.direction, &player.velocity, &player.animSprite.sprite.rotation); + UpdateSpriteDestRec(&player.animSprite.sprite, &player.position); + UpdateAnimSprite(&player.animSprite); const float tolerance = 1.0f; // Adjust as needed - if (fabs(bee1.entity.position.x - bee1.targetFlower.position.x) < tolerance && - fabs(bee1.entity.position.y - bee1.targetFlower.position.y) < tolerance) { - bee1.entity.velocity = 0.0f; + if (fabs(bee1.position.x - bee1.targetFlower.position.x) < tolerance && + fabs(bee1.position.y - bee1.targetFlower.position.y) < tolerance) { + bee1.velocity = 0.0f; } else { - SetPositionOnDirectionAndVelocity(&bee1.entity.direction, &bee1.entity.velocity, &bee1.entity.position); - bee1.entity.direction = GetDirectionToObject(&bee1.targetFlower, bee1.entity.position); + Move(&bee1.position, &bee1.direction, &bee1.velocity, &bee1.animSprite.sprite.rotation); + bee1.direction = GetDirectionToObject(&bee1.targetFlower, bee1.position); } - SetRotationOnDirection(&bee1.entity.direction, &bee1.entity.animSprite.sprite.rotation); - SetDestRecOnPosition(&bee1.entity.position, &bee1.entity.animSprite.sprite); - SetAnimSpriteOnFrameTime(&bee1.entity.animSprite); + UpdateSpriteDestRec(&bee1.animSprite.sprite, &bee1.position); + UpdateAnimSprite(&bee1.animSprite); - UpdateCamera2D(&camera, &player, followSmoothness); + UpdateCamera2DTarget(&camera, &player.position, 5.0f); float wheel = GetMouseWheelMove(); if (wheel != 0) @@ -449,8 +216,8 @@ int main(void) RenderTileSprite(&floor); RenderSprite(&hive.sprite); RenderObjectArray(&flowers); - RenderSprite(&bee1.entity.animSprite.sprite); - // RenderSprite(&player.animSprite.sprite); + RenderSprite(&bee1.animSprite.sprite); + RenderSprite(&player.animSprite.sprite); EndMode2D(); DrawFPS(10,10); EndDrawing(); @@ -459,7 +226,7 @@ int main(void) UnloadTexture(floor.sprite.texture); UnloadTexture(hive.sprite.texture); UnloadTexture(flower); - UnloadTexture(bee1.entity.animSprite.sprite.texture); + UnloadTexture(bee1.animSprite.sprite.texture); UnloadTexture(player.animSprite.sprite.texture); UnloadMusicStream(music); free(flowers.data); diff --git a/scripts/main_crossplattform.cpp b/scripts/main_crossplattform.cpp deleted file mode 100644 index 20d73ac..0000000 --- a/scripts/main_crossplattform.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "raylib.h" -#include "Game.h" - -#ifdef PLATFORM_WEB - #include -#endif - -Game game; - -void UpdateDrawFrame() { - game.update(); - game.render(); -} - -int main() { - InitWindow(1280, 720, "Lazy Bee"); - SetTargetFPS(60); - game.init(); -#ifdef PLATFORM_WEB - emscripten_set_main_loop(UpdateDrawFrame, 0, 1); -#else - while (!WindowShouldClose()) { game.update(); game.render(); } -#endif - game.close(); - return 0; -} diff --git a/scripts/object.c b/scripts/object.c deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/object.h b/scripts/object.h new file mode 100644 index 0000000..22c7b4a --- /dev/null +++ b/scripts/object.h @@ -0,0 +1,128 @@ +#ifndef OBJECT_H +#define OBJECT_H +#include // Vector2, Rectangle, Color, GetRandomValue(), CheckCollisionRecs(), CheckCollisionPointRec() +#include // printf() +#include // malloc(), realloc() +#include "sprite.h" // Sprite +#include "vector.h" + +typedef struct { + Sprite sprite; + Vector2 position; +} Object; + +typedef struct { + Object *data; + const Object *prototype; + size_t count; +} ObjectArray; + +ObjectArray CreateObjectArray(const Object *prototype, const size_t count) { + ObjectArray objects = {0}; + + if (count <= 0) { + printf("Objects size must be greater than 0.\n"); + return objects; + } + + objects.count = count; + objects.data = malloc(count * sizeof(Object)); + + if (!objects.data) { + printf("Memory allocation of objects failed.\n"); + return objects; + } + + objects.prototype = prototype; + + for (int i = 0; i < count; i++) { + objects.data[i].position = prototype->position; + objects.data[i].sprite = prototype->sprite; + } + return objects; +} + +Object* GetRandomObject(ObjectArray *objects){ + if (objects->count == 0) { + return NULL; + } + return &objects->data[GetRandomValue(0, (int)objects->count-1)]; +} + +void AddObjectToArray(ObjectArray *objects, const Object *prototype, Vector2 position) { + Object *newData = realloc(objects->data, (objects->count + 1) * sizeof(Object)); + if (newData) { + objects->data = newData; + objects->data[objects->count] = *prototype; + objects->data[objects->count].position = position; + objects->data[objects->count].sprite.destRec.x = position.x; + objects->data[objects->count].sprite.destRec.y = position.y; + objects->count++; + } else { + printf("Memory allocation failed while adding an object.\n"); + } +} + +void SetPositionForObjectArray(ObjectArray *objects, const Vector2Array *positions) { + if (positions->count != objects->count) { + printf("Warning: Position array size (%zu) does not match ObjectArray size (%zu)\n", positions->count, objects->count); + return; + } + + for (size_t i = 0; i < objects->count; i++) { + objects->data[i].position = positions->data[i]; + objects->data[i].sprite.destRec.x = positions->data[i].x; + objects->data[i].sprite.destRec.y = positions->data[i].y; + } +} + +void SetRandomPositionForObjectArray(ObjectArray *objects, const Rectangle bounds){ + for (int i = 0; i < objects->count; i++) { + Vector2 position = GetRandomVector(bounds); + objects->data[i].position = position; + objects->data[i].sprite.destRec.x = position.x; + objects->data[i].sprite.destRec.y = position.y; + } +} + +void SwapAndPopObjectsArrayOnRecCollision(ObjectArray *objects, const Rectangle rec){ + for (int i = 0; i < objects->count; i++){ + + if (CheckCollisionRecs(rec, objects->data[i].sprite.destRec)){ + if (objects->count == 1) { + objects->count = 0; + break; + } + objects->data[i] = objects->data[objects->count - 1]; + objects->count--; + i--; + } + } +} + +void SwapAndPopObjectsArrayOnPointCollision(ObjectArray *objects, const Vector2 point){ + for (int i = 0; i < objects->count; i++){ + + if (CheckCollisionPointRec(point, objects->data[i].sprite.destRec)){ + if (objects->count == 1) { + objects->count = 0; + break; + } + objects->data[i] = objects->data[objects->count - 1]; + objects->count--; + i--; + } + } +} + +Vector2 GetDirectionToObject(Object *object, Vector2 position){ + return Vector2Normalize(Vector2Subtract(object->position, position)); +} + +void RenderObjectArray(const ObjectArray *objects){ + for (int i = 0; i < objects->count; i++){ + RenderSprite(&objects->data[i].sprite); + } +} + +#endif // OBJECT_H diff --git a/scripts/sprite.h b/scripts/sprite.h new file mode 100644 index 0000000..a416c09 --- /dev/null +++ b/scripts/sprite.h @@ -0,0 +1,36 @@ +#ifndef SPRITE_H +#define SPRITE_H +#include + +typedef struct { + Texture2D texture; + Rectangle sourceRec; + Rectangle destRec; + Vector2 frameSize; + Vector2 origin; + float rotation; + Color color; +} Sprite; + +void UpdateSpriteSourceRec(Sprite *sprite, const Vector2 *vector){ + sprite->sourceRec.x = vector->x; + sprite->sourceRec.y = vector->y; +} + +void UpdateSpriteDestRec(Sprite *sprite, const Vector2 *vector){ + sprite->destRec.x = vector->x; + sprite->destRec.y = vector->y; +} + +void RenderSprite(const Sprite *sprite){ + DrawTexturePro( + sprite->texture, + sprite->sourceRec, + sprite->destRec, + sprite->origin, + sprite->rotation, + sprite->color + ); +} + +#endif // SPRITE_H diff --git a/scripts/tilesprite.h b/scripts/tilesprite.h new file mode 100644 index 0000000..82bc32c --- /dev/null +++ b/scripts/tilesprite.h @@ -0,0 +1,30 @@ +#ifndef TILESPRITE_H +#define TILESPRITE_H +#include +#include "sprite.h" + +typedef struct { + Sprite sprite; + Rectangle bounds; +} TileSprite; + +void UpdateTileSpriteBounds(TileSprite *tileSprite, const Camera2D *camera){ + tileSprite->bounds.x = (int)((camera->target.x - (GetScreenWidth() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.x) - 1; + tileSprite->bounds.width = (int)((camera->target.x + (GetScreenWidth() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.x) + 1; + tileSprite->bounds.y = (int)((camera->target.y - (GetScreenHeight() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.y) - 1; + tileSprite->bounds.height = (int)((camera->target.y + (GetScreenHeight() / 2.0f / camera->zoom)) / tileSprite->sprite.frameSize.y) + 1; +} + +void RenderTileSprite(TileSprite *tileSprite){ + for (float y = tileSprite->bounds.y; y <= tileSprite->bounds.height; y++) + { + for (float x = tileSprite->bounds.x; x <= tileSprite->bounds.width; x++) + { + Vector2 tilePosition = {x * tileSprite->sprite.frameSize.x, y * tileSprite->sprite.frameSize.y}; + UpdateSpriteDestRec(&tileSprite->sprite, &tilePosition); + RenderSprite(&tileSprite->sprite); + } + } +} + +#endif //TILESPRITE_H diff --git a/scripts/vector.h b/scripts/vector.h new file mode 100644 index 0000000..12d9d99 --- /dev/null +++ b/scripts/vector.h @@ -0,0 +1,22 @@ +#ifndef VECTOR_H +#define VECTOR_H +#include + +typedef struct { + Vector2 *data; + size_t count; +} Vector2Array; + +bool IsVectorZero(Vector2 v) { + float epsilon = 0.01f; + return (fabs(v.x) < epsilon && fabs(v.y) < epsilon); +} + +Vector2 GetRandomVector(const Rectangle bounds) { + return (Vector2){ + bounds.x + (float)GetRandomValue(0, 10000) / 10000.0f * bounds.width, + bounds.y + (float)GetRandomValue(0, 10000) / 10000.0f * bounds.height + }; +} + +#endif // VECTOR_H