added cstring and csprite
This commit is contained in:
@@ -115,3 +115,84 @@ tart_byte tart_add_cells_to_buffer(struct tart_buffer* buffer, struct tart_cell*
|
||||
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
|
||||
struct tart_cstring tart_cstring(char *string, long size, struct tart_cell type){
|
||||
struct tart_cstring str = {0,size};
|
||||
str.data = malloc(size * sizeof(struct tart_cell));
|
||||
return str;
|
||||
}
|
||||
|
||||
tart_byte tart_cstring_free(struct tart_cstring* string) {
|
||||
free(string->data);
|
||||
string->size = 0;
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
struct tart_cstring tart_cstring_append(struct tart_cstring* lhs, struct tart_cstring* rhs) {
|
||||
struct tart_cstring ret = {0,0};
|
||||
ret.size = lhs->size + rhs->size;
|
||||
ret.data = malloc(ret.size * sizeof(struct tart_cell));
|
||||
for(int i = 0; i < lhs->size; i++) {
|
||||
ret.data[i] = lhs->data[i];
|
||||
}
|
||||
for(int i = 0; i < rhs->size; i++) {
|
||||
ret.data[lhs->size + i] = rhs->data[i];
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct tart_csprite tart_csprite(struct tart_cell* cells, struct tart_vec2* positions, long size) {
|
||||
|
||||
struct tart_csprite sprite = {0,0,0,size};
|
||||
sprite.data = cells;
|
||||
sprite.position = positions;
|
||||
for(int i = 0; i < size; i++) {
|
||||
|
||||
if(positions[i].x > sprite.bounds.x) {
|
||||
sprite.bounds.x = positions[i].x;
|
||||
}
|
||||
|
||||
if(positions[i].y > sprite.bounds.y) {
|
||||
sprite.bounds.y = positions[i].y;
|
||||
}
|
||||
}
|
||||
return sprite;
|
||||
};
|
||||
|
||||
tart_byte tart_csprite_free(struct tart_csprite* sprite) {
|
||||
sprite->bounds.x = 0;
|
||||
sprite->bounds.y = 0;
|
||||
sprite->size = 0;
|
||||
free(sprite->data);
|
||||
free(sprite->position);
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
tart_byte tart_draw_cell_position(struct tart_buffer * buffer, struct tart_cell cell, struct tart_vec2 position) {
|
||||
if(buffer->size.y >= position.y && buffer->size.x >= position.x) {
|
||||
buffer->cells[(buffer->size.x * position.y) + position.x] = cell;
|
||||
}
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
tart_byte tart_draw_cstring_position(struct tart_buffer *buffer, struct tart_cstring string, struct tart_vec2 position) {
|
||||
struct tart_vec2 pos = position;
|
||||
for(int i = 0; i < string.size; i++) {
|
||||
tart_draw_cell_position(buffer, string.data[i], pos);
|
||||
pos.x++;
|
||||
}
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
tart_byte tart_draw_csprite_position(struct tart_buffer * buffer, struct tart_csprite sprite, struct tart_vec2 basePosition) {
|
||||
for(int i = 0; i < sprite.size; i++) {
|
||||
struct tart_vec2 position = {sprite.position[i].x + basePosition.x, sprite.position[i].y + basePosition.y};
|
||||
tart_draw_cell_position(buffer, sprite.data[i], position);
|
||||
}
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
tart_byte tart_restore_buffer(struct tart_buffer *buffer) {
|
||||
return TART_OK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user