stuff
This commit is contained in:
parent
2dbfa1b99e
commit
b1230534c5
22 changed files with 547 additions and 429 deletions
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -7,4 +7,6 @@ bin
|
||||||
build
|
build
|
||||||
.cache
|
.cache
|
||||||
.idea
|
.idea
|
||||||
cmake-**
|
cmake-**
|
||||||
|
.kdev4
|
||||||
|
*.kdev4
|
|
@ -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)
|
||||||
|
|
|
@ -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
22
alyson/includes/alargs.h
Normal 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
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
36
alyson/includes/resources/alpath.h
Normal file
36
alyson/includes/resources/alpath.h
Normal 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
|
26
alyson/includes/resources/alresource.h
Normal file
26
alyson/includes/resources/alresource.h
Normal 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
|
0
alyson/includes/resources/alresource_manager.h
Normal file
0
alyson/includes/resources/alresource_manager.h
Normal 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
20
alyson/src/alargs.c
Normal 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);
|
||||||
|
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
210
alyson/src/resources/alpath.c
Normal file
210
alyson/src/resources/alpath.c
Normal 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;
|
||||||
|
}
|
54
alyson/src/resources/alresource.c
Normal file
54
alyson/src/resources/alresource.c
Normal 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;
|
||||||
|
}
|
0
alyson/src/resources/alresource_manager.c
Normal file
0
alyson/src/resources/alresource_manager.c
Normal 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);
|
||||||
|
|
|
@ -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
65
alyson/tests/ALPath.cpp
Normal 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
BIN
assets/gery.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 697 B |
BIN
assets/gery_hand.png
Normal file
BIN
assets/gery_hand.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 870 B |
41
src/main.c
41
src/main.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue