This commit is contained in:
n0ffie 2025-02-12 23:24:58 +01:00
parent 2dbfa1b99e
commit b1230534c5
22 changed files with 547 additions and 429 deletions

4
.gitignore vendored
View file

@ -7,4 +7,6 @@ bin
build build
.cache .cache
.idea .idea
cmake-** cmake-**
.kdev4
*.kdev4

View file

@ -22,23 +22,30 @@ set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) # Build static libraries by
include(FetchContent) include(FetchContent)
# Raylib 5.5
FetchContent_Declare(
raylib
GIT_REPOSITORY https://github.com/raysan5/raylib.git
GIT_TAG 5.5
)
FetchContent_MakeAvailable(raylib) # Raylib 5.5
find_package(raylib 5.5)
if(NOT raylib_FOUND)
FetchContent_Declare(
raylib
GIT_REPOSITORY https://github.com/raysan5/raylib.git
GIT_TAG 5.5
)
FetchContent_MakeAvailable(raylib)
endif()
# Flecs # Flecs
FetchContent_Declare( find_package(flecs QUIET)
flecs if(NOT flecs_FOUND)
GIT_REPOSITORY https://github.com/SanderMertens/flecs.git FetchContent_Declare(
GIT_TAG v4.0.4 flecs
) GIT_REPOSITORY https://github.com/SanderMertens/flecs.git
GIT_TAG v4.0.4
FetchContent_MakeAvailable(flecs) )
FetchContent_MakeAvailable(flecs)
endif()
## alyson engine (needs flecs and raylib) ## alyson engine (needs flecs and raylib)
set(ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/assets/") set(ASSETS_PATH "${CMAKE_CURRENT_SOURCE_DIR}/assets/")
@ -69,5 +76,10 @@ target_include_directories(colysis PUBLIC include
# put the assets folder path as a C preprocessor define # put the assets folder path as a C preprocessor define
target_compile_definitions(colysis PRIVATE ASSETS_PATH="${ASSETS_PATH}") target_compile_definitions(colysis PRIVATE ASSETS_PATH="${ASSETS_PATH}")
put_targets_into_folder(FOLDER "vendor/raylib" TARGETS raylib uninstall)
# if the os is windows, add the uninstall target to the vendor/raylib folder
if(WIN32)
put_targets_into_folder(FOLDER "vendor/raylib" TARGETS uninstall)
endif()
put_targets_into_folder(FOLDER "vendor/raylib" TARGETS raylib)
put_targets_into_folder(FOLDER "vendor/flecs" TARGETS flecs::flecs flecs::flecs_static) put_targets_into_folder(FOLDER "vendor/flecs" TARGETS flecs::flecs flecs::flecs_static)

View file

@ -26,3 +26,24 @@ target_sources(alyson PRIVATE ${alyson_src})
# set(ALYSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/alyson/include) # set(ALYSON_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/alyson/include)
# google tests
find_package(GTest QUIET)
if(NOT GTest_FOUND)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.12.1
)
FetchContent_MakeAvailable(googletest)
endif()
find_files(alyson_test_src tests cpp hpp cxx hxx c h)
add_executable(alyson_test ${alyson_test_src})
target_link_libraries(alyson_test PRIVATE alyson)
target_link_libraries(alyson_test PRIVATE GTest::gtest)
target_link_libraries(alyson_test PRIVATE GTest::gtest_main)
target_include_directories(alyson_test PRIVATE ${GTEST_INCLUDE_DIRS})

22
alyson/includes/alargs.h Normal file
View file

@ -0,0 +1,22 @@
#ifndef ALARGS_H_INCLUDED
#define ALARGS_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
int argc;
char** argv;
} alyson_args_t, *ALArgs;
ALArgs al_args_create(int argc, char** argv);
void al_args_destroy(ALArgs args);
#ifdef __cplusplus
}
#endif
#endif // ALARGS_H_INCLUDED

View file

@ -6,8 +6,6 @@
#define ASSETS_PATH "./assets/" #define ASSETS_PATH "./assets/"
#endif #endif
#define MANGLE_RES_PATH(path) ASSETS_PATH "/" path
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -18,45 +16,19 @@ extern "C" {
#define ALYSIS_ENGINE_WINDOW_TITLE "Alyson Engine" #define ALYSIS_ENGINE_WINDOW_TITLE "Alyson Engine"
typedef struct { #include "alargs.h"
char type[4 + 1];
char group[26 + 1];
char* name;
char* path;
} alyson_path_t, *ALPath;
/* #include "resources/alpath.h"
* @function: demangle_path
* @description: Demangles a path
* @param path: path to resource
* @return: ALPath
*/
ALPath al_demangle_path(const char* path);
char* al_mangle_path(const ALPath path);
ALPath al_create_path(
const char* type,
const char* path,
const char* name,
const char* group
);
void al_destroy_path(ALPath path);
typedef struct { #include "resources/alresource.h"
int argc;
char** argv;
} alyson_args_t, *ALArgs;
ALArgs al_args_create(int argc, char** argv); #if defined(RAYLIB_BACKEND)
void al_args_destroy(ALArgs args); #include <raylib.h>
#include <raymath.h>
typedef struct { #include <rlyson.h>
usx id; #endif
alyson_path_t path;
} alyson_resource_t, *ALResource;
ALResource al_resource_create(ALPath path);
ALResource al_resource_create_from_file(char* name, char* path);
void al_resource_destroy(ALResource resource);
/* TODO : implement /* TODO : implement
typedef struct { typedef struct {

View file

@ -23,7 +23,7 @@ typedef struct {
float time; float time;
} sprite_animation_t, *SpriteAnimation; } sprite_animation_t, *SpriteAnimation;
SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_dimentions, Vector2 sprite_size, float rotation, float scale, int frameCount); SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_dimentions, Vector2 sprite_size, float rotation, float scale, int frameCount, float speed);
void UpdateSpriteAnimation(SpriteAnimation spriteAnimation, float dt); void UpdateSpriteAnimation(SpriteAnimation spriteAnimation, float dt);
@ -35,4 +35,4 @@ void DestroySpriteAnimation(SpriteAnimation spriteAnimation);
} }
#endif #endif
#endif // ANIMATION_SPRITE_H #endif // ANIMATION_SPRITE_H

View file

@ -0,0 +1,36 @@
#ifndef ALPATH_H_INCLUDED
#define ALPATH_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#include "../types.h"
typedef struct {
char type[4 + 1];
char group[26 + 1];
char* name;
char* path;
} alyson_path_t, *ALPath;
/*
* @function: demangle_path
* @description: Demangles a path
* @param path: path to resource
* @return: ALPath
*/
ALPath al_demangle_path(const char* path);
char* al_mangle_path(const ALPath path);
ALPath al_create_path(
const char* type,
const char* path,
const char* name,
const char* group
);
void al_destroy_path(ALPath path);
#ifdef __cplusplus
}
#endif
#endif // ALPATH_H_INCLUDED

View file

@ -0,0 +1,26 @@
#ifndef ALRESOURCE_H_INCLUDED
#define ALRESOURCE_H_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
#include "../types.h"
#include "alpath.h"
typedef struct {
usx id;
alyson_path_t path;
} alyson_resource_t, *ALResource;
ALResource al_resource_create(ALPath path);
ALResource al_resource_create_from_file(char* name, char* path);
void al_resource_destroy(ALResource resource);
#ifdef __cplusplus
}
#endif
#endif // ALRESOURCE_H_INCLUDED

View file

@ -12,7 +12,7 @@ extern "C" {
#include <stdint.h> #include <stdint.h>
#include <stddef.h> #include <stddef.h>
#include <stdbool.h>
/* /*
* Basic types * Basic types
* *
@ -48,6 +48,8 @@ extern "C" {
typedef size_t usx; typedef size_t usx;
typedef ptrdiff_t isx; typedef ptrdiff_t isx;
typedef bool boolean;
/* /*
* Vectors and Matrices * Vectors and Matrices
*/ */

20
alyson/src/alargs.c Normal file
View file

@ -0,0 +1,20 @@
#include <alargs.h>
#include <stdlib.h>
/*
* ALArgs
*/
ALArgs al_args_create(int argc, char** argv)
{
ALArgs args = malloc(sizeof(alyson_args_t));
args->argc = argc;
args->argv = argv;
return args;
}
void al_args_destroy(ALArgs args)
{
free(args);
}

View file

@ -1,287 +1,8 @@
#include <alyson.h> #include <alyson.h>
#include <raylib.h>
#include <raymath.h>
#include <rlyson.h>
#include <stdio.h> #include <stdio.h>
#include <assert.h> #include <assert.h>
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
/*
* ALArgs
*/
ALArgs al_args_create(int argc, char** argv)
{
ALArgs args = malloc(sizeof(alyson_args_t));
args->argc = argc;
args->argv = argv;
return args;
}
void al_args_destroy(ALArgs args)
{
free(args);
}
/*
* ALResource
*/
ALPath al_demangle_path(const char* path)
{
/*
* mangled path format:
* <type>://(<group>/)<name>:<path>
*
* e.g. res://test:/tests/test.png
* type: "res"
* group: ""
* name: "test"
* path: "/tests/test.png"
*
*
* demangled path format:
* ./<type_path>/<demangled_path>
*
* e.g.
* type_path: res -> ./assets/
* demangled_path: tests/test.png
* -> ./assets/tests/test.png
*
* type max length: 4
*
* smallest possible path: ://:a (5 chars)
*
* groups max length: 26
* groups:
* e.g. res://image/test:/tests/test.png
* type: "res"
* group: "image"
* name: "test"
* path: "/tests/test.png"
* -> ./assets/tests/test.png
*/
const ALPath res = malloc(sizeof(alyson_path_t));
res->type[0] = '\0';
res->group[0] = '\0';
res->name = NULL;
res->path = NULL;
const usx len = strlen(path);
usx back_ptr = 0;
if (len < 5)
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; too short\n", path);
al_destroy_path(res);
return NULL;
}
// type
for (usx i = 0; i < 4; i++)
{
if (path[i] == ':')
{
res->type[i] = '\0';
back_ptr = i + 1;
break;
}
res->type[i] = path[i];
}
if (back_ptr == 0)
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; type not found\n", path);
al_destroy_path(res);
return NULL;
}
if (path[back_ptr] != '/' || path[back_ptr+1] != '/') {
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; type not followed by '://'\n", path);
al_destroy_path(res);
return NULL;
}
back_ptr += 2;
// group + name
for (usx i = back_ptr; i < len; i++)
{
if (path[i] == '/')
{
if (res->group[0] != '\0')
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; group already set\n", path);
al_destroy_path(res);
return NULL;
}
if (back_ptr == i) break;
strncpy(res->group, (char*)path + back_ptr, i - back_ptr);
res->group[i-back_ptr] = '\0';
back_ptr = i + 1;
}
if (path[i] == ':')
{
res->name = malloc(sizeof(char) * (i - back_ptr + 1));
strncpy(res->name, (char*)path + back_ptr, i - back_ptr);
res->name[i - back_ptr] = '\0';
back_ptr = i + 1;
break;
}
}
// path
if (back_ptr == len)
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; path not found\n", path);
al_destroy_path(res);
return NULL;
}
res->path = malloc(sizeof(char) * (len - back_ptr + 1));
strncpy(res->path, (char*)path + back_ptr, len - back_ptr);
res->path[len - back_ptr] = '\0';
return res;
}
char* al_mangle_path(const ALPath path)
{
char* str = malloc(sizeof(char) * (
strlen(path->type) +
strlen(path->group) +
strlen(path->name) +
strlen(path->path) +
5 ));
if (path->group[0] != '\0')
{
sprintf(str, "%s://%s/%s:%s", path->type, path->group, path->name, path->path);
}
else
{
sprintf(str, "%s://%s:%s", path->type, path->name, path->path);
}
return str;
}
ALPath al_create_path(const char* type, const char* path, const char* name, const char* group)
{
const ALPath res = malloc(sizeof(alyson_path_t));
res->type[0] = '\0';
res->name = NULL;
res->path = NULL;
if (type != NULL)
{
if (strlen(type) > 4)
{
fprintf(stderr, "[ALResource] Type name too long: %s\n", type);
return NULL;
}
strncpy(res->type, type, strlen(type));
res->type[4] = '\0';
}
if (path != NULL)
{
res->path = strdup(path);
res->path[strlen(path)] = '\0';
}
if (name != NULL)
{
res->name = malloc(sizeof(char) * (strlen(name) + 1));
strncpy(res->name, name, strlen(name));
res->name[strlen(name)] = '\0';
}
if (group != NULL)
{
if (strlen(group) > 26)
{
fprintf(stderr, "[ALResource] Group name too long: %s\n", group);
al_destroy_path(res);
return NULL;
}
strncpy(res->group, group, strlen(group));
res->group[strlen(group)] = '\0';
}
return res;
}
void al_destroy_path(ALPath path)
{
if (path->name != NULL)
{
free(path->name);
path->name = NULL;
}
if (path->path != NULL)
{
free(path->path);
path->path = NULL;
}
free(path);
path = NULL;
}
ALResource al_resource_create(ALPath path)
{
ALResource resource = malloc(sizeof(alyson_resource_t));
resource->id = 0;
memcpy(&resource->path, path, sizeof(alyson_path_t));
return resource;
}
ALResource al_resource_create_from_file(char* name, char* path)
{
ALResource resource = malloc(sizeof(alyson_resource_t));
resource->id = 0;
usx len = strlen(path);
resource->path.path = malloc(sizeof(char) * (len + 1));
memcpy(resource->path.path, path, sizeof(char) * len);
resource->path.path[len] = '\0';
memcpy(&resource->path.type, "res", 4);
resource->path.type[4] = '\0';
len = strlen(name);
resource->path.name = malloc(sizeof(char) * len + 1);
memcpy(resource->path.name, name, sizeof(char) * len);
resource->path.name[len] = '\0';
memcpy(&resource->path.group, "runtime", 7);
resource->path.group[7] = '\0';
return resource;
}
void al_destroy_resource(ALResource resource)
{
if (resource->path.name != NULL)
{
free(resource->path.name);
resource->path.name = NULL;
}
if (resource->path.path != NULL)
{
free(resource->path.path);
resource->path.path = NULL;
}
free(resource);
resource = NULL;
}

View file

@ -4,7 +4,8 @@
#include "raylib.h" #include "raylib.h"
#include "raymath.h" #include "raymath.h"
SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_dimentions, Vector2 sprite_size, float rotation, float scale, int frameCount) { SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_dimentions, Vector2 sprite_size, float rotation, float scale, int frameCount, float speed)
{
SpriteAnimation spriteAnimation = malloc(sizeof(sprite_animation_t)); SpriteAnimation spriteAnimation = malloc(sizeof(sprite_animation_t));
spriteAnimation->texture = texture; spriteAnimation->texture = texture;
spriteAnimation->dimentions = sprite_texture_dimentions; spriteAnimation->dimentions = sprite_texture_dimentions;
@ -15,7 +16,7 @@ SpriteAnimation CreateSpriteAnimation(Texture2D texture, Vector2 sprite_texture_
spriteAnimation->frameCount = frameCount; spriteAnimation->frameCount = frameCount;
spriteAnimation->currentFrame = 0; spriteAnimation->currentFrame = 0;
spriteAnimation->time = 0.f; spriteAnimation->time = 0.f;
spriteAnimation->speed = 1.f; spriteAnimation->speed = speed;
return spriteAnimation; return spriteAnimation;
} }
@ -55,4 +56,10 @@ void DrawSpriteAnimation(SpriteAnimation spriteAnimation, Vector2 position) {
spriteAnimation->rotation, spriteAnimation->rotation,
WHITE WHITE
); );
} }
void DestroySpriteAnimation(SpriteAnimation spriteAnimation)
{
free(spriteAnimation);
}

View file

@ -0,0 +1,210 @@
#include <resources/alpath.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/*
* mangled path format:
* <type>://(<group>/)<name>:<path>
*
* e.g. res://test:/tests/test.png
* type: "res"
* group: ""
* name: "test"
* path: "/tests/test.png"
*
*
* demangled path format:
* ./<type_path>/<demangled_path>
*
* e.g.
* type_path: res -> ./assets/
* demangled_path: tests/test.png
* -> ./assets/tests/test.png
*
* type max length: 4
*
* smallest possible path: ://:a (5 chars)
*
* groups max length: 26
* groups:
* e.g. res://image/test:/tests/test.png
* type: "res"
* group: "image"
* name: "test"
* path: "/tests/test.png"
* -> ./assets/tests/test.png
*/
// Path
ALPath al_demangle_path(const char* path)
{
const ALPath res = malloc(sizeof(alyson_path_t));
res->type[0] = '\0';
res->group[0] = '\0';
res->name = NULL;
res->path = NULL;
const usx len = strlen(path);
usx back_ptr = 0;
if (len < 5)
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; too short\n", path);
al_destroy_path(res);
return NULL;
}
// type
for (usx i = 0; i < sizeof(res->type); i++)
{
if (path[i] == ':')
{
res->type[i] = '\0';
back_ptr = i + 1;
break;
}
res->type[i] = path[i];
}
if (back_ptr == 0)
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; type not found\n", path);
al_destroy_path(res);
return NULL;
}
if (path[back_ptr] != '/' || path[back_ptr+1] != '/') {
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; type not followed by '://'\n", path);
al_destroy_path(res);
return NULL;
}
back_ptr += 2;
// group + name
for (usx i = back_ptr; i < len; i++)
{
if (path[i] == '/')
{
if (res->group[0] != '\0')
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; group already set\n", path);
al_destroy_path(res);
return NULL;
}
if (back_ptr == i) break;
strncpy(res->group, (char*)path + back_ptr, i - back_ptr);
res->group[i-back_ptr] = '\0';
back_ptr = i + 1;
}
if (path[i] == ':')
{
res->name = malloc(sizeof(char) * (i - back_ptr + 1));
strncpy(res->name, (char*)path + back_ptr, i - back_ptr);
res->name[i - back_ptr] = '\0';
back_ptr = i + 1;
break;
}
}
// path
if (back_ptr == len)
{
fprintf(stderr, "[ALResource] Invalid path: \"%s\"; path not found\n", path);
al_destroy_path(res);
return NULL;
}
res->path = malloc(sizeof(char) * (len - back_ptr + 1));
strncpy(res->path, (char*)path + back_ptr, len - back_ptr);
res->path[len - back_ptr] = '\0';
return res;
}
char* al_mangle_path(const ALPath path)
{
char* str = malloc(sizeof(char) * (
strlen(path->type) +
strlen(path->group) +
strlen(path->name) +
strlen(path->path) +
5 ));
if (path->group[0] != '\0')
{
sprintf(str, "%s://%s/%s:%s", path->type, path->group, path->name, path->path);
}
else
{
sprintf(str, "%s://%s:%s", path->type, path->name, path->path);
}
return str;
}
ALPath al_create_path(const char* type, const char* path, const char* name, const char* group)
{
const ALPath res = malloc(sizeof(alyson_path_t));
res->type[0] = '\0';
res->name = NULL;
res->path = NULL;
if (type != NULL)
{
if (strlen(type) > 4)
{
fprintf(stderr, "[ALResource] Type name too long: %s\n", type);
return NULL;
}
strncpy(res->type, type, strlen(type));
res->type[4] = '\0';
}
if (path != NULL)
{
usx len = strlen(path);
res->path = malloc(sizeof(char) * (len + 1));
strncpy(res->path, path, len);
res->path[len] = '\0';
}
if (name != NULL)
{
res->name = malloc(sizeof(char) * (strlen(name) + 1));
strncpy(res->name, name, strlen(name));
res->name[strlen(name)] = '\0';
}
if (group != NULL)
{
if (strlen(group) > 26)
{
fprintf(stderr, "[ALResource] Group name too long: %s\n", group);
al_destroy_path(res);
return NULL;
}
strncpy(res->group, group, strlen(group));
res->group[strlen(group)] = '\0';
}
return res;
}
void al_destroy_path(ALPath path)
{
if (path->name != NULL)
{
free(path->name);
path->name = NULL;
}
if (path->path != NULL)
{
free(path->path);
path->path = NULL;
}
free(path);
path = NULL;
}

View file

@ -0,0 +1,54 @@
#include <resources/alresource.h>
#include <stdlib.h>
#include <string.h>
ALResource al_resource_create(ALPath path)
{
ALResource resource = malloc(sizeof(alyson_resource_t));
resource->id = 0;
memcpy(&resource->path, path, sizeof(alyson_path_t));
return resource;
}
ALResource al_resource_create_from_file(char* name, char* path)
{
ALResource resource = malloc(sizeof(alyson_resource_t));
resource->id = 0;
usx len = strlen(path);
resource->path.path = malloc(sizeof(char) * (len + 1));
memcpy(resource->path.path, path, sizeof(char) * len);
resource->path.path[len] = '\0';
memcpy(&resource->path.type, "res", 4);
resource->path.type[4] = '\0';
len = strlen(name);
resource->path.name = malloc(sizeof(char) * len + 1);
memcpy(resource->path.name, name, sizeof(char) * len);
resource->path.name[len] = '\0';
memcpy(&resource->path.group, "runtime", 7);
resource->path.group[7] = '\0';
return resource;
}
void al_destroy_resource(ALResource resource)
{
if (resource->path.name != NULL)
{
free(resource->path.name);
resource->path.name = NULL;
}
if (resource->path.path != NULL)
{
free(resource->path.path);
resource->path.path = NULL;
}
free(resource);
resource = NULL;
}

View file

@ -18,8 +18,6 @@ void DrawTextFull(
{ {
const Vector2 textSize = MeasureTextEx(font, text, fontSize, spacing); const Vector2 textSize = MeasureTextEx(font, text, fontSize, spacing);
DrawCircleV(origin, 10, RED);
const Vector2 pos = origin; const Vector2 pos = origin;
origin = (Vector2){0,0}; origin = (Vector2){0,0};
@ -37,9 +35,6 @@ void DrawTextFull(
} }
origin.y += textSize.y / 2; origin.y += textSize.y / 2;
DrawCircleV(Vector2Add(origin, pos), 10, DARKGREEN);
SetTextLineSpacing((int)lineSpacing); SetTextLineSpacing((int)lineSpacing);
DrawTextPro(font, text, pos, origin, rotation, fontSize, spacing, tint); DrawTextPro(font, text, pos, origin, rotation, fontSize, spacing, tint);

View file

@ -1,86 +0,0 @@
//
// Created by n0ffie on 10/02/2025.
//
#include <alyson.h>
#include <stdio.h>
int main(int argc, char** argv)
{
ALPath path = al_demangle_path("res://test:/test.png");
printf("1. %s\n", al_mangle_path(path));
al_destroy_path(path);
fflush(stdout);
fflush(stderr);
path = al_demangle_path("res://image/test:/gay/test.png");
printf("2. %s\n", al_mangle_path(path));
al_destroy_path(path);
fflush(stdout);
fflush(stderr);
path = al_demangle_path("res:/test:/test.png");
if (path != NULL)
{
printf("3. %s\n", al_mangle_path(path));
al_destroy_path(path);
}
fflush(stdout);
fflush(stderr);
path = al_demangle_path("://test:/test.png");
if (path != NULL)
{
printf("4. %s\n", al_mangle_path(path));
al_destroy_path(path);
}
fflush(stdout);
fflush(stderr);
path = al_demangle_path("img://:/test.png");
if (path != NULL)
{
printf("6. %s\n", al_mangle_path(path));
al_destroy_path(path);
}
fflush(stdout);
fflush(stderr);
path = al_demangle_path("://:a");
if (path != NULL)
{
printf("7. %s\n", al_mangle_path(path));
al_destroy_path(path);
}
fflush(stdout);
fflush(stderr);
path = al_demangle_path("g://a:");
if (path != NULL)
{
printf("8. %s\n", al_mangle_path(path));
al_destroy_path(path);
}
fflush(stdout);
fflush(stderr);
path = al_demangle_path("image://gay/guy:/a/b");
if (path != NULL)
{
printf("9. %s\n", al_mangle_path(path));
al_destroy_path(path);
}
fflush(stdout);
fflush(stderr);
return 0;
}

65
alyson/tests/ALPath.cpp Normal file
View file

@ -0,0 +1,65 @@
//
// Created by n0ffie on 10/02/2025.
//
#include <alyson.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// gtests
#include <gtest/gtest.h>
bool test_path(const char* path)
{
if (path == NULL)
return false;
ALPath al_path = al_demangle_path(path);
if (al_path == NULL)
return false;
if (al_path->path == NULL)
return false;
printf("Path: %s\n", al_path->path);
char* string = al_mangle_path(al_path);
if (strcmp(string, path) != 0) {
printf("%s : %s\n", path, string);
return false;
}
printf("\t%s\n", string);
free(string);
al_destroy_path(al_path);
return true;
}
void pathEQ_test(const char* string) {
ALPath al_path = al_demangle_path(string);
char* s2 = al_mangle_path(al_path);
EXPECT_STREQ(string, s2);
free(s2);
al_destroy_path(al_path);
}
TEST(PathEqual, normal) {
pathEQ_test("res://normal:path/this.is");
}
TEST(PathEqual, group_long_type) {
pathEQ_test("gays://i/love:gays/iam.one/kind.of");
}
TEST(PathEqual, group_type) {
pathEQ_test("g/es://this/is:shit");
}
int main(int argc, char** argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

BIN
assets/gery.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

BIN
assets/gery_hand.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

View file

@ -1,11 +1,50 @@
#include <colysis.h> #include <colysis.h>
#define RAYLIB_BACKEND
#include <alyson.h> #include <alyson.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <raylib.h>
#include <raymath.h>
#include <rlyson.h>
#include <animation/sprite.h>
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
ALArgs args = al_args_create(argc, argv); InitWindow(900, 600, "Colysis");
SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_WINDOW_UNDECORATED);
Texture2D gery = LoadTexture(ASSETS_PATH "/gery_hand.png");
SpriteAnimation geryanim = CreateSpriteAnimation(gery, (Vector2){64*5,64}, (Vector2){64,64}, 0.f, 1.f, 5, 0.2f);
while (!WindowShouldClose()) {
ClearBackground((Color){ 0x00, 0x6d, 0xfb });
float dt = GetFrameTime();
UpdateSpriteAnimation(geryanim, dt);
BeginDrawing();
{
DrawTextFull(GetFontDefault(), "Darling, I'm Home!", (Vector2){20,20}, TEXT_ORIENTATION_RIGHT, 0, 24, 5, 5, RAYWHITE);
DrawSpriteAnimation(geryanim, (Vector2){GetScreenWidth()/2.f, GetScreenHeight()/2.f});
}
EndDrawing();
}
DestroySpriteAnimation(geryanim);
UnloadTexture(gery);
return 0;
} }