From c27ada53525d2dba229f5921e6c2b336960ed1c8 Mon Sep 17 00:00:00 2001 From: huaqo-games Date: Mon, 29 Jun 2026 18:13:31 +0200 Subject: [PATCH] feat: add Cross2D for Kreuzprodukt vector calculation --- include/engine.h | 239 +++++++++++++++++++++++---------------------- src/engineVector.c | 31 +++--- 2 files changed, 137 insertions(+), 133 deletions(-) diff --git a/include/engine.h b/include/engine.h index 6aa987d..3049ef7 100644 --- a/include/engine.h +++ b/include/engine.h @@ -1,190 +1,189 @@ #ifndef ENGINE_H #define ENGINE_H +#include +#include #include #include -#include #include -#include #include +#include #include -#include -typedef struct -{ - Texture2D texture; - Rectangle sourceRec; - Rectangle destRec; - Vector2 frameSize; - Vector2 origin; - float rotation; - Color color; +typedef struct { + Texture2D texture; + Rectangle sourceRec; + Rectangle destRec; + Vector2 frameSize; + Vector2 origin; + float rotation; + Color color; } Sprite; -typedef struct { - int state; - int currentFrame; - int maxFrame; - int framesCounter; - int framesSpeed; - float animTimer; +typedef struct { + int state; + int currentFrame; + int maxFrame; + int framesCounter; + int framesSpeed; + float animTimer; } Animation; typedef struct { - void** elements; - unsigned int count; - unsigned int capacity; + void **elements; + unsigned int count; + unsigned int capacity; } Array; typedef struct { - const char* path; - float frameWidth; - float frameHeight; - float rotation; + const char *path; + float frameWidth; + float frameHeight; + float rotation; } TextureAsset; typedef struct { - const char* path; + const char *path; } ShaderAsset; typedef struct { - const char* path; + const char *path; } SoundtrackAsset; typedef struct { - const char* path; + const char *path; } SoundAsset; typedef struct { - const TextureAsset *textureAssets; - const ShaderAsset *shaderAssets; - const SoundtrackAsset *soundtrackAssets; - const SoundAsset *soundAssets; + const TextureAsset *textureAssets; + const ShaderAsset *shaderAssets; + const SoundtrackAsset *soundtrackAssets; + const SoundAsset *soundAssets; } Assets; typedef struct { - char *path; - rini_config rini; + char *path; + rini_config rini; } Config; -typedef enum { - NOT_CLICKED, - HOVER, - CLICKED -} ButtonState; +typedef enum { NOT_CLICKED, HOVER, CLICKED } ButtonState; -typedef struct -{ - Sprite sprite; - Vector2 notClicked; - Vector2 hover; - Vector2 clicked; - bool isHovered; - bool isClicked; +typedef struct { + Sprite sprite; + Vector2 notClicked; + Vector2 hover; + Vector2 clicked; + bool isHovered; + bool isClicked; } ImageButton; -typedef struct -{ - Sprite sprite; +typedef struct { + Sprite sprite; } ImageElement; -typedef struct -{ - Rectangle rec; - char *text; +typedef struct { + Rectangle rec; + char *text; } Button; typedef struct { - Vector2 screenPosition; - Vector2 worldPosition; - float zoomSpeed; - float minZoom; - float maxZoom; - float scaleFactor; - float wheelMove; - bool leftButton; - bool rightButton; - Texture2D cursorTexture; + Vector2 screenPosition; + Vector2 worldPosition; + float zoomSpeed; + float minZoom; + float maxZoom; + float scaleFactor; + float wheelMove; + bool leftButton; + bool rightButton; + Texture2D cursorTexture; } Mouse; typedef struct { - Sprite sprite; - Vector2 position; + Sprite sprite; + Vector2 position; } Object; typedef struct { - Object *data; - const Object *prototype; - size_t count; + Object *data; + const Object *prototype; + size_t count; } ObjectArray; -typedef struct -{ - Vector2 position; - Vector2 direction; - Vector2 velocity; - float speed; +typedef struct { + Vector2 position; + Vector2 direction; + Vector2 velocity; + float speed; + float weight; } Physics; typedef struct { - Shader shader; - int resolutionLoc; - int strengthLoc; - float strength; + Shader shader; + int resolutionLoc; + int strengthLoc; + float strength; } PostProcessing; typedef struct { - Music music; - bool playing; - bool paused; + Music music; + bool playing; + bool paused; } Soundtrack; typedef struct { - Vector2 *data; - size_t count; + Vector2 *data; + size_t count; } Vector2Array; typedef struct { - int width; - int height; - const char* title; + int width; + int height; + const char *title; } Window; void UpdateAnimation(Animation *animation, float deltaTime); -Array* CreateArray(unsigned int initCapacity); -int AddElementToArray(Array* array, void* element); -int RemoveElementFromArray(Array* array, unsigned int index); -void* GetRandomElementFromArray(Array* array); -void UpdateArray(Array* array, void (*updateFunc)(void*)); -void RenderArray(Array* array, void (*renderFunc)(void*)); -void FreeArray(Array** array); +Array *CreateArray(unsigned int initCapacity); +int AddElementToArray(Array *array, void *element); +int RemoveElementFromArray(Array *array, unsigned int index); +void *GetRandomElementFromArray(Array *array); +void UpdateArray(Array *array, void (*updateFunc)(void *)); +void RenderArray(Array *array, void (*renderFunc)(void *)); +void FreeArray(Array **array); -Camera2D* GetCamera(void); +Camera2D *GetCamera(void); Rectangle GetCameraRectangle(void); void CreateCamera(Vector2 playerPosition, float initZoom); void UpdateCameraTarget(Vector2 *position, const float smoothness); -void UpdateCameraZoom(const float *scaleFactor, const float *minZoom, const float *maxZoom); -void UpdateCamera2D(Vector2* position, Mouse* mouse); +void UpdateCameraZoom(const float *scaleFactor, const float *minZoom, + const float *maxZoom); +void UpdateCamera2D(Vector2 *position, Mouse *mouse); -void InitConfig(Config *config, const char* path); +void InitConfig(Config *config, const char *path); int GetConfigInt(Config *config, const char *key); int GetConfigIntOrDefault(Config *config, const char *key, int default_value); -const char* GetConfigString(Config *config, const char *key); -const char* GetConfigStringOrDefault(Config *config, const char *key, const char *default_value); -const char* GetConfigDescription(Config *config, const char *key); +const char *GetConfigString(Config *config, const char *key); +const char *GetConfigStringOrDefault(Config *config, const char *key, + const char *default_value); +const char *GetConfigDescription(Config *config, const char *key); int SetConfigInt(Config *config, const char *key, int value, const char *desc); -int SetConfigString(Config *config, const char *key, const char *text, const char *desc); +int SetConfigString(Config *config, const char *key, const char *text, + const char *desc); int SetConfigDescription(Config *config, const char *key, const char *desc); int AddCommentLine(Config *config, const char *comment); void SaveConfig(Config *config); void CleanUpConfig(Config *config); -void InitFont(Font *font, const char* path); +void InitFont(Font *font, const char *path); void CleanupFont(Font *font); -ImageButton CreateImageButton(ButtonState state, Texture2D *texture, const TextureAsset *asset, Vector2 *source, Vector2 *clicked, Vector2 *hover, Rectangle *destRec); -ImageElement CreateImageElement(Texture2D *texture, const TextureAsset *asset, Vector2 *source, Rectangle *destRec); +ImageButton CreateImageButton(ButtonState state, Texture2D *texture, + const TextureAsset *asset, Vector2 *source, + Vector2 *clicked, Vector2 *hover, + Rectangle *destRec); +ImageElement CreateImageElement(Texture2D *texture, const TextureAsset *asset, + Vector2 *source, Rectangle *destRec); int isImageButtonClicked(ImageButton *b, Sound soundHover, Sound soundClick); void renderImageButton(ImageButton *b); void renderImageElement(ImageElement *e); @@ -193,18 +192,24 @@ Button initButton(char *text, Vector2 dimensions, Vector2 position); int isButtonClicked(Button *b); void renderButton(Button *b); -Mouse CreateMouse(float zoomSpeed, float minZoom, float maxZoom, Texture2D *texture); +Mouse CreateMouse(float zoomSpeed, float minZoom, float maxZoom, + Texture2D *texture); void UpdateMouseScreen(Mouse *mouse); void UpdateMouse(Mouse *mouse); Vector2 GetDirectionVector(void); ObjectArray CreateObjectArray(const Object *prototype, const size_t count); -Object* GetRandomObject(ObjectArray *objects); -void AddObjectToArray(ObjectArray *objects, const Object *prototype, Vector2 position); -void SetPositionForObjectArray(ObjectArray *objects, const Vector2Array *positions); -void SetRandomPositionForObjectArray(ObjectArray *objects, const Rectangle bounds); -void SwapAndPopObjectsArrayOnRecCollision(ObjectArray *objects, const Rectangle rec); -void SwapAndPopObjectsArrayOnPointCollision(ObjectArray *objects, const Vector2 point); +Object *GetRandomObject(ObjectArray *objects); +void AddObjectToArray(ObjectArray *objects, const Object *prototype, + Vector2 position); +void SetPositionForObjectArray(ObjectArray *objects, + const Vector2Array *positions); +void SetRandomPositionForObjectArray(ObjectArray *objects, + const Rectangle bounds); +void SwapAndPopObjectsArrayOnRecCollision(ObjectArray *objects, + const Rectangle rec); +void SwapAndPopObjectsArrayOnPointCollision(ObjectArray *objects, + const Vector2 point); void RenderObjectArray(const ObjectArray *objects); Vector2 GetDirectionBetweenTwoVectors(Vector2 vec1, Vector2 vec2); @@ -215,12 +220,12 @@ void UpdatePhysicsPosition(Vector2 *position, Vector2 *velocity); void UpdatePhysicsSpeed(float *speed, float *newSpeed); void UpdatePhysics(Physics *physics, Vector2 direction); -PostProcessing CreatePostFX(const char* shaderPath); +PostProcessing CreatePostFX(const char *shaderPath); void UpdatePostFX(PostProcessing *postFX); void RenderPostFX(PostProcessing *postFX, RenderTexture2D *target); void UnloadPostFX(PostProcessing *postFX); -Soundtrack LoadSoundtrack(const char* musicPath); +Soundtrack LoadSoundtrack(const char *musicPath); void UpdateSoundtrack(Soundtrack *soundtrack, bool playing); void UpdateSpriteSourceRec(Sprite *sprite, const Vector2 *vector); @@ -233,9 +238,9 @@ bool IsVectorZero(Vector2 v); Vector2 GetRandomVector(const Rectangle bounds); Vector2 RotationToVector2(float rotation); float Vector2ToRotation(Vector2 vec); +float Cross2D(Vector2 a, Vector2 b); Vector2 GetPositionInsideRectangle(Rectangle rec); Vector2 GetPositionOutsideRectangle(Rectangle rec, int min, int max); -#endif //ENGINE_H - +#endif // ENGINE_H diff --git a/src/engineVector.c b/src/engineVector.c index 38a141f..40481ba 100644 --- a/src/engineVector.c +++ b/src/engineVector.c @@ -1,27 +1,26 @@ #include "engine.h" bool IsVectorZero(Vector2 v) { - float epsilon = 0.01f; - return (fabs(v.x) < epsilon && fabs(v.y) < epsilon); + 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 - }; + return (Vector2){ + bounds.x + (float)GetRandomValue(0, 10000) / 10000.0f * bounds.width, + bounds.y + (float)GetRandomValue(0, 10000) / 10000.0f * bounds.height}; } -Vector2 RotationToVector2(float rotation) -{ - float rad = rotation * (PI / 180.0f); - Vector2 vec = { cosf(rad), sinf(rad) }; - return vec; +Vector2 RotationToVector2(float rotation) { + float rad = rotation * (PI / 180.0f); + Vector2 vec = {cosf(rad), sinf(rad)}; + return vec; } -float Vector2ToRotation(Vector2 vec) -{ - float rad = atan2f(vec.y, vec.x); - float deg = rad * (180.0f / PI); - return deg; +float Vector2ToRotation(Vector2 vec) { + float rad = atan2f(vec.y, vec.x); + float deg = rad * (180.0f / PI); + return deg; } + +float Cross2D(Vector2 a, Vector2 b) { return a.x * b.y - a.y * b.x; }