static void test_vector(void) { MemoryManager memory = create_standard_memory_manager(); { Vector v; Vector_init(&v); TEST(Vector_empty(&v)); TEST(Vector_size(&v) == 0); Vector_free(&v, memory.deallocator); } { Vector v; Vector_init(&v); TEST(Vector_reserve(&v, 100, memory.allocator)); TEST(Vector_reserve(&v, 200, memory.allocator)); TEST(Vector_reserve(&v, 50, memory.allocator)); TEST(Vector_reserve(&v, 0, memory.allocator)); Vector_free(&v, memory.deallocator); } { Vector v; Vector_init(&v); TEST(Vector_resize(&v, 100, memory.allocator)); TEST(Vector_resize(&v, 200, memory.allocator)); TEST(Vector_resize(&v, 50, memory.allocator)); TEST(Vector_resize(&v, 0, memory.allocator)); Vector_free(&v, memory.deallocator); } { size_t i; size_t const count = 1000; Vector v; Vector_init(&v); for (i = 0; i < count; ++i) { char c = (char)('0' + (i % 10)); ASSERT(Vector_push_back(&v, &c, 1, memory.allocator)); } for (i = 0; i < count; ++i) { char c = (char)('0' + (i % 10)); ASSERT(Vector_data(&v)[i] == c); } Vector_free(&v, memory.deallocator); } }
void ImageManager_init(ImageManager *im, char *directory, SDL_PixelFormat *format) { im->directory = directory; im->format = format; Vector_init(&im->images); }
void AntiDOS_init(AntiDOS *dos) { assert(dos!=0); dos->min_time = 0; Vector_init(&dos->data, sizeof(struct Data)); }
NBody* NBody_new() { NBody* self = calloc(1, sizeof(NBody)); self->window = Window_new(); if (self->window == NULL) { goto error; } self->player = Player_new(); self->player->position = Vector_init(0.0f, 0.0f, 5.0f); // Turn on alpha blending for transparency glEnable(GL_BLEND); // Turn Blending On glEnable(GL_TEXTURE_2D); // Turn on textures glDisable(GL_DEPTH_TEST); // Turn Depth Testing Off glBlendFunc(GL_SRC_ALPHA, GL_ONE); // Load up star texture glGenTextures(1, &self->star_texture); glBindTexture(GL_TEXTURE_2D, self->star_texture); float* pixels = load_star_texture(); glTexImage2D( GL_TEXTURE_2D, // target 0, // level GL_ALPHA, // internalFormat STAR_TEXTURE_SIZE, // width STAR_TEXTURE_SIZE, // height 0, // border GL_ALPHA, // format GL_FLOAT, // type pixels // data ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); free(pixels); for (size_t i = 0; i < NUM_STARS; ++i) { self->stars[i] = Star_random(); } return self; error: NBody_destroy(self); return NULL; }
void NBody_tick(NBody* self, uint32_t dt) { self->player->acceleration = Vector_init(0.0f, 0.0f, 0.0f); Vector accelerations[NUM_STARS] = {{0.0f, 0.0f, 0.0f}}; // Update player for (size_t i = 0; i < NUM_STARS; ++i) { Star* star = &self->stars[i]; Vector delta = Vector_subtract(star->position, self->player->position); float distance = Vector_mag(delta) + 0.00001f; // Add small amount to avoid collision Vector force = Vector_scale(delta, 0.001f / (distance * distance * distance)); self->player->acceleration = Vector_add(self->player->acceleration, Vector_scale(force, star->mass)); } self->player->velocity = Vector_add(self->player->velocity, Vector_scale(self->player->acceleration, 0.001f * dt)); self->player->position = Vector_add(self->player->position, Vector_scale(self->player->velocity, 0.001f * dt)); // Update stars for (size_t i = 0; i < NUM_STARS; ++i) { Star* star_i = &self->stars[i]; for (size_t j = i + 1; j < NUM_STARS; ++j) { Star* star_j = &self->stars[j]; Vector delta = Vector_subtract(star_j->position, star_i->position); float distance = Vector_mag(delta) + 0.00001f; // Add small amount to avoid collision Vector force = Vector_scale(delta, 0.001f / (distance * distance * distance)); accelerations[i] = Vector_add(accelerations[i], Vector_scale(force, star_j->mass)); accelerations[j] = Vector_add(accelerations[j], Vector_scale(force, -star_i->mass)); } star_i->velocity = Vector_add(star_i->velocity, Vector_scale(accelerations[i], 0.001f * dt)); star_i->position = Vector_add(star_i->position, Vector_scale(star_i->velocity, 0.001f * dt)); } }
void Fauna_init(Fauna *fauna) { Vector_init(&fauna->npcs); }
void Vector_clear(struct Vector *self, const int size) { Vector_delete(self); Vector_init(self, size); }
static inline void StackVectorString_init (StackVectorString* v) { Vector_init(&v->rep); }
static inline void VectorVectorString_init (VectorVectorString* v) { Vector_init(&v->rep); }