string arrays and started work on ecs
This commit is contained in:
parent
5a0d1af942
commit
d4731d3961
6 changed files with 186 additions and 59 deletions
|
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef ARC_ENGINE_ECS_H_
|
||||||
|
#define ARC_ENGINE_ECS_H_
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "arc/std/vector.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief a type that keeps permanice of data for when loading and unloading config files
|
||||||
|
*/
|
||||||
|
typedef struct ARC_ECS ARC_ECS;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief creates ARC_Config type
|
||||||
|
*
|
||||||
|
* @param ecs ARC_ECS
|
||||||
|
*/
|
||||||
|
void ARC_ECS_Create(ARC_ECS **ecs);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief destroys ARC_ECS type
|
||||||
|
*/
|
||||||
|
void ARC_ECS_Destroy(ARC_ECS *ecs);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif //ARC_ENGINE_ECS_H_
|
||||||
11
include/arc/std/array.h
Normal file
11
include/arc/std/array.h
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef ARC_STD_ARRAY_H_
|
||||||
|
#define ARC_STD_ARRAY_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct ARC_Array {
|
||||||
|
uint32_t *size;
|
||||||
|
void *data;
|
||||||
|
} ARC_Array;
|
||||||
|
|
||||||
|
#endif //ARC_STD_ARRAY_H_
|
||||||
|
|
@ -25,6 +25,7 @@ int32_t ARC_ConfigKey_Read_Uint64_t(ARC_Config* config, const char *data, ARC_St
|
||||||
int32_t ARC_ConfigKey_Read_Int64_t (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
int32_t ARC_ConfigKey_Read_Int64_t (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
int32_t ARC_ConfigKey_Read_Long (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
int32_t ARC_ConfigKey_Read_Long (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
int32_t ARC_ConfigKey_Read_String (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
int32_t ARC_ConfigKey_Read_String (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
|
int32_t ARC_ConfigKey_Read_StringArray(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
|
|
||||||
int32_t ARC_ConfigKey_Delete_Uint8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
int32_t ARC_ConfigKey_Delete_Uint8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
||||||
int32_t ARC_ConfigKey_Delete_Int8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
int32_t ARC_ConfigKey_Delete_Int8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
||||||
|
|
@ -38,6 +39,7 @@ int32_t ARC_ConfigKey_Delete_Uint64_t(ARC_Config* config, const char* data, ARC_
|
||||||
int32_t ARC_ConfigKey_Delete_Int64_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
int32_t ARC_ConfigKey_Delete_Int64_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
||||||
int32_t ARC_ConfigKey_Delete_Long (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
int32_t ARC_ConfigKey_Delete_Long (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
||||||
int32_t ARC_ConfigKey_Delete_String (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
int32_t ARC_ConfigKey_Delete_String (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
||||||
|
int32_t ARC_ConfigKey_Delete_StringArray(ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "arc/engine/ecs.h"
|
||||||
|
#include "arc/std/vector.h"
|
||||||
|
|
||||||
|
struct ARC_ECS {
|
||||||
|
ARC_Vector *components;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct ARC_ECSComponent {
|
||||||
|
ARC_Vector *functions;
|
||||||
|
ARC_Vector *data;
|
||||||
|
};
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <SDL_image.h>
|
#include <SDL_image.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "arc/std/array.h"
|
||||||
#include "arc/std/string.h"
|
#include "arc/std/string.h"
|
||||||
#include "arc/std/errno.h"
|
#include "arc/std/errno.h"
|
||||||
#include "arc/graphics/sdl/renderer.h"
|
#include "arc/graphics/sdl/renderer.h"
|
||||||
|
|
@ -18,11 +19,6 @@
|
||||||
|
|
||||||
SDL_Renderer *global_renderer;
|
SDL_Renderer *global_renderer;
|
||||||
|
|
||||||
typedef struct ARC_Array {
|
|
||||||
uint32_t *size;
|
|
||||||
void *data;
|
|
||||||
} ARC_Array;
|
|
||||||
|
|
||||||
int32_t ARC_Point_Read (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
int32_t ARC_Point_Read (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
int32_t ARC_Rect_Read (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
int32_t ARC_Rect_Read (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
int32_t ARC_RectArray_Read (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
int32_t ARC_RectArray_Read (ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value);
|
||||||
|
|
@ -41,7 +37,7 @@ void ARC_GraphicsConfig_Init(ARC_Config *config, ARC_Renderer *renderer){
|
||||||
global_renderer = renderer->renderer;
|
global_renderer = renderer->renderer;
|
||||||
ARC_ConfigKey_Add(config, (char *)"ARC_Point" , (ARC_ConfigKeyRead) ARC_Point_Read , (ARC_ConfigKeyDelete) ARC_Point_Delete );
|
ARC_ConfigKey_Add(config, (char *)"ARC_Point" , (ARC_ConfigKeyRead) ARC_Point_Read , (ARC_ConfigKeyDelete) ARC_Point_Delete );
|
||||||
ARC_ConfigKey_Add(config, (char *)"ARC_Rect" , (ARC_ConfigKeyRead) ARC_Rect_Read , (ARC_ConfigKeyDelete) ARC_Rect_Delete );
|
ARC_ConfigKey_Add(config, (char *)"ARC_Rect" , (ARC_ConfigKeyRead) ARC_Rect_Read , (ARC_ConfigKeyDelete) ARC_Rect_Delete );
|
||||||
ARC_ConfigKey_Add(config, (char *)"ARC_RectArray" , (ARC_ConfigKeyRead) ARC_RectArray_Read , (ARC_ConfigKeyDelete) ARC_RectArray_Delete );
|
ARC_ConfigKey_Add(config, (char *)"ARC_Rect[]" , (ARC_ConfigKeyRead) ARC_RectArray_Read , (ARC_ConfigKeyDelete) ARC_RectArray_Delete );
|
||||||
ARC_ConfigKey_Add(config, (char *)"SDL_Texture" , (ARC_ConfigKeyRead) ARC_SDL_Texture_Read, (ARC_ConfigKeyDelete) ARC_SDL_Texture_Delete);
|
ARC_ConfigKey_Add(config, (char *)"SDL_Texture" , (ARC_ConfigKeyRead) ARC_SDL_Texture_Read, (ARC_ConfigKeyDelete) ARC_SDL_Texture_Delete);
|
||||||
ARC_ConfigKey_Add(config, (char *)"ARC_Spritesheet", (ARC_ConfigKeyRead) ARC_Spritesheet_Read, (ARC_ConfigKeyDelete) ARC_Spritesheet_Delete);
|
ARC_ConfigKey_Add(config, (char *)"ARC_Spritesheet", (ARC_ConfigKeyRead) ARC_Spritesheet_Read, (ARC_ConfigKeyDelete) ARC_Spritesheet_Delete);
|
||||||
ARC_ConfigKey_Add(config, (char *)"ARC_Sprite" , (ARC_ConfigKeyRead) ARC_Sprite_Read , (ARC_ConfigKeyDelete) ARC_Sprite_Delete );
|
ARC_ConfigKey_Add(config, (char *)"ARC_Sprite" , (ARC_ConfigKeyRead) ARC_Sprite_Read , (ARC_ConfigKeyDelete) ARC_Sprite_Delete );
|
||||||
|
|
@ -109,7 +105,7 @@ int32_t ARC_Rect_Read(ARC_Config* config, const char *data, ARC_StringSubstr *su
|
||||||
if(err){ return err; }
|
if(err){ return err; }
|
||||||
if(split == ~((uint64_t)0) || split > subdata->length){ return ARC_ERRNO_DATA; }
|
if(split == ~((uint64_t)0) || split > subdata->length){ return ARC_ERRNO_DATA; }
|
||||||
temp.length = split;
|
temp.length = split;
|
||||||
((SDL_Rect *) *value)->y = (int)ARC_String_ToUint64_t(data, &temp);
|
((ARC_Rect *) *value)->y = (int)ARC_String_ToUint64_t(data, &temp);
|
||||||
ttt = ((ARC_Rect *) *value)->y;
|
ttt = ((ARC_Rect *) *value)->y;
|
||||||
|
|
||||||
//w
|
//w
|
||||||
|
|
@ -118,12 +114,12 @@ int32_t ARC_Rect_Read(ARC_Config* config, const char *data, ARC_StringSubstr *su
|
||||||
if(err){ return err; }
|
if(err){ return err; }
|
||||||
if(split == ~((uint64_t)0) || split > subdata->length){ return ARC_ERRNO_DATA; }
|
if(split == ~((uint64_t)0) || split > subdata->length){ return ARC_ERRNO_DATA; }
|
||||||
temp.length = split;
|
temp.length = split;
|
||||||
((SDL_Rect *) *value)->w = (int)ARC_String_ToUint64_t(data, &temp);
|
((ARC_Rect *) *value)->w = (int)ARC_String_ToUint64_t(data, &temp);
|
||||||
ttt = ((ARC_Rect *) *value)->w;
|
ttt = ((ARC_Rect *) *value)->w;
|
||||||
|
|
||||||
//h
|
//h
|
||||||
temp = (ARC_StringSubstr){ temp.index + split + 1, subdata->length - split - 1 };
|
temp = (ARC_StringSubstr){ temp.index + split + 1, subdata->length - split - 1 };
|
||||||
((SDL_Rect *) *value)->h = (int)ARC_String_ToUint64_t(data, &temp);
|
((ARC_Rect *) *value)->h = (int)ARC_String_ToUint64_t(data, &temp);
|
||||||
ttt = ((ARC_Rect *) *value)->h;
|
ttt = ((ARC_Rect *) *value)->h;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "arc/std/defaults/config.h"
|
#include "arc/std/defaults/config.h"
|
||||||
|
|
||||||
|
#include "arc/std/array.h"
|
||||||
#include "arc/std/config.h"
|
#include "arc/std/config.h"
|
||||||
#include "arc/std/errno.h"
|
#include "arc/std/errno.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
@ -21,6 +22,7 @@ int32_t ARC_Defaults_ConfigKey_Create(ARC_Config *config){
|
||||||
ARC_ConfigKey_Add(config, "int64_t" , ARC_ConfigKey_Read_Int64_t , ARC_ConfigKey_Delete_Int64_t );
|
ARC_ConfigKey_Add(config, "int64_t" , ARC_ConfigKey_Read_Int64_t , ARC_ConfigKey_Delete_Int64_t );
|
||||||
ARC_ConfigKey_Add(config, "long" , ARC_ConfigKey_Read_Long , ARC_ConfigKey_Delete_Long );
|
ARC_ConfigKey_Add(config, "long" , ARC_ConfigKey_Read_Long , ARC_ConfigKey_Delete_Long );
|
||||||
ARC_ConfigKey_Add(config, "string" , ARC_ConfigKey_Read_String , ARC_ConfigKey_Delete_String );
|
ARC_ConfigKey_Add(config, "string" , ARC_ConfigKey_Read_String , ARC_ConfigKey_Delete_String );
|
||||||
|
ARC_ConfigKey_Add(config, "string[]", ARC_ConfigKey_Read_StringArray, ARC_ConfigKey_Delete_StringArray);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -92,7 +94,10 @@ int32_t ARC_ConfigKey_Read_Long(ARC_Config* config, const char *data, ARC_String
|
||||||
|
|
||||||
int32_t ARC_ConfigKey_Read_String(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
int32_t ARC_ConfigKey_Read_String(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||||
ARC_StringSubstr_StripWhitespaceEnds((char *)data, subdata);
|
ARC_StringSubstr_StripWhitespaceEnds((char *)data, subdata);
|
||||||
if(data[subdata->index] != '"' || data[subdata->index + subdata->length] != '"'){ return ARC_ERRNO_DATA; }
|
if(data[subdata->index] != '"' || data[subdata->index + subdata->length - 1] != '"'){
|
||||||
|
arc_errno = ARC_ERRNO_DATA;
|
||||||
|
return arc_errno;
|
||||||
|
}
|
||||||
ARC_StringSubstr_StripEnds((char *)data, (char *)"\"", subdata);
|
ARC_StringSubstr_StripEnds((char *)data, (char *)"\"", subdata);
|
||||||
*value = (char *) malloc(sizeof(char) * (subdata->length + 1));
|
*value = (char *) malloc(sizeof(char) * (subdata->length + 1));
|
||||||
strncpy((char *)(*value), data + subdata->index, subdata->length);
|
strncpy((char *)(*value), data + subdata->index, subdata->length);
|
||||||
|
|
@ -100,6 +105,75 @@ int32_t ARC_ConfigKey_Read_String(ARC_Config* config, const char *data, ARC_Stri
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int32_t ARC_ConfigKey_Read_StringArray(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||||
|
ARC_StringSubstr_StripWhitespaceEnds((char *)data, subdata);
|
||||||
|
if(data[subdata->index] != '{' || data[subdata->index + subdata->length - 1] != '}'){ return ARC_ERRNO_DATA; }
|
||||||
|
subdata->index++;
|
||||||
|
subdata->length -= 2;
|
||||||
|
|
||||||
|
uint32_t arraySize = 1;
|
||||||
|
for(uint32_t i = subdata->index; i < subdata->index + subdata->length; i++){
|
||||||
|
if(data[i] == ','){
|
||||||
|
arraySize++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*value = malloc(sizeof(char *));
|
||||||
|
((ARC_Array *) *value)->data = malloc(sizeof(char *) * arraySize);
|
||||||
|
((ARC_Array *) *value)->size = malloc(sizeof(uint32_t));
|
||||||
|
*((ARC_Array *) *value)->size = arraySize;
|
||||||
|
|
||||||
|
ARC_StringSubstr temp = { subdata->index, 0 };
|
||||||
|
arraySize = 0;
|
||||||
|
for(uint64_t i = subdata->index; i < subdata->index + subdata->length; i++){
|
||||||
|
if(data[i] != ','){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
temp.length = i - temp.index;
|
||||||
|
|
||||||
|
char *tempStr = (char *)ARC_Config_GetReference(config, (char *)data, &temp);
|
||||||
|
if(!tempStr){
|
||||||
|
ARC_ConfigKey_Read_String(config, data, &temp, (void **) &tempStr);
|
||||||
|
if(arc_errno){
|
||||||
|
return arc_errno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((char **)((ARC_Array *) *value)->data)[arraySize] = tempStr;
|
||||||
|
|
||||||
|
// ARC_ConfigKey_Delete_String(config, data, &temp, (void *)tempStr);
|
||||||
|
// if(arc_errno){
|
||||||
|
// return arc_errno;
|
||||||
|
// }
|
||||||
|
|
||||||
|
arraySize++;
|
||||||
|
temp = (ARC_StringSubstr){ i + 1, 0 };
|
||||||
|
|
||||||
|
if(arraySize == *((ARC_Array *) *value)->size){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
temp.length = (subdata->index + subdata->length) - temp.index;
|
||||||
|
char *tempStr = (char *)ARC_Config_GetReference(config, (char *)data, &temp);
|
||||||
|
if(!tempStr){
|
||||||
|
ARC_ConfigKey_Read_String(config, data, &temp, (void **) &tempStr);
|
||||||
|
if(arc_errno){
|
||||||
|
return arc_errno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((char **)((ARC_Array *) *value)->data)[arraySize] = tempStr;
|
||||||
|
|
||||||
|
// ARC_ConfigKey_Delete_String(config, data, &temp, (void *)tempStr);
|
||||||
|
// if(arc_errno){
|
||||||
|
// return arc_errno;
|
||||||
|
// }
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int32_t ARC_ConfigKey_Delete_Uint8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((uint8_t *)value){ free((uint8_t *)value); } return 0; }
|
int32_t ARC_ConfigKey_Delete_Uint8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((uint8_t *)value){ free((uint8_t *)value); } return 0; }
|
||||||
int32_t ARC_ConfigKey_Delete_Int8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((int8_t *)value){ free((int8_t *)value); } return 0; }
|
int32_t ARC_ConfigKey_Delete_Int8_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((int8_t *)value){ free((int8_t *)value); } return 0; }
|
||||||
int32_t ARC_ConfigKey_Delete_Char (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((char *)value){ free((char *)value); } return 0; }
|
int32_t ARC_ConfigKey_Delete_Char (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((char *)value){ free((char *)value); } return 0; }
|
||||||
|
|
@ -112,5 +186,6 @@ int32_t ARC_ConfigKey_Delete_Uint64_t(ARC_Config* config, const char* data, ARC_
|
||||||
int32_t ARC_ConfigKey_Delete_Int64_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((int64_t *)value){ free((int64_t *)value); } return 0; }
|
int32_t ARC_ConfigKey_Delete_Int64_t (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((int64_t *)value){ free((int64_t *)value); } return 0; }
|
||||||
int32_t ARC_ConfigKey_Delete_Long (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((long *)value){ free((long *)value); } return 0; }
|
int32_t ARC_ConfigKey_Delete_Long (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((long *)value){ free((long *)value); } return 0; }
|
||||||
int32_t ARC_ConfigKey_Delete_String (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((char *)value){ free((char *)value); } return 0; }
|
int32_t ARC_ConfigKey_Delete_String (ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((char *)value){ free((char *)value); } return 0; }
|
||||||
|
int32_t ARC_ConfigKey_Delete_StringArray(ARC_Config* config, const char* data, ARC_StringSubstr *subdata, void *value){ if((ARC_Array *)value){ free((ARC_Array *)value); } return 0; }
|
||||||
|
|
||||||
#endif //ARC_DEFAULT_CONFIG
|
#endif //ARC_DEFAULT_CONFIG
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue