failed to add orbiting camera
This commit is contained in:
parent
67101e29f9
commit
a096c3b02c
13 changed files with 315 additions and 20 deletions
63
src/util/dynarray.c
Normal file
63
src/util/dynarray.c
Normal file
|
@ -0,0 +1,63 @@
|
|||
#include "dynarray.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <memory.h>
|
||||
|
||||
DynamicArray create_dynamic_array_from_size(size_t type_size)
|
||||
{
|
||||
DynamicArray array;
|
||||
|
||||
array.capacity = 5;
|
||||
array.size = 0;
|
||||
array.element_size = type_size;
|
||||
|
||||
array.data = malloc(type_size * array.capacity);
|
||||
if (array.data == NULL)
|
||||
{
|
||||
array.capacity = 0;
|
||||
fprintf(stderr, "Failed to allocate memory for dynamic array\n");
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
void destroy_dynamic_array(DynamicArray array)
|
||||
{
|
||||
assert(array.capacity > 0);
|
||||
|
||||
free(array.data);
|
||||
array.capacity = 0;
|
||||
}
|
||||
|
||||
void* dynamic_array_get(DynamicArray* array, size_t i)
|
||||
{
|
||||
return (void*)((char*)array->data + (i * array->element_size));
|
||||
}
|
||||
|
||||
void dynamic_array_push(DynamicArray* array, void* element)
|
||||
{
|
||||
assert(array->capacity > 0);
|
||||
|
||||
if (array->size == array->capacity)
|
||||
{
|
||||
array->capacity *= (3 / 2);
|
||||
array->data = realloc(array->data, array->element_size * array->capacity);
|
||||
}
|
||||
|
||||
memcpy((void*)((char*)array->data + (array->size * array->element_size)), element, array->element_size);
|
||||
array->size++;
|
||||
}
|
||||
|
||||
void dynamic_array_pop(DynamicArray* array)
|
||||
{
|
||||
assert(array->capacity > 0);
|
||||
|
||||
array->size -= 1;
|
||||
if (array->size <= array->capacity / 2 && array->capacity > 5)
|
||||
{
|
||||
array->capacity = (2 / 3) * array->capacity + 1;
|
||||
array->data = realloc(array->data, array->capacity);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue