#include #include #include #include #include const char *tc_window_title_g = "Techneck"; techneck_s tc_game_state_g; void tc_init_renderer(techneck_s *techneck) { SDL_Init(SDL_INIT_EVERYTHING); techneck->renderer.window = SDL_CreateWindow( tc_window_title_g, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 1200, 800, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE ); techneck->renderer.active_camera = calloc(sizeof(tc_camera_s), 1); techneck->renderer.active_camera->position.x = 0.0f; techneck->renderer.active_camera->position.y = 0.0f; techneck->renderer.active_camera->position.z = 0.0f; techneck->renderer.gl_context = SDL_GL_CreateContext(techneck->renderer.window); gladLoadGLLoader(&SDL_GL_GetProcAddress); gladLoadGL(); techneck->renderer.draw_shader = tc_make_shader_program("vertex_shader.glsl", "fragment_shader.glsl"); glEnable(GL_DEPTH_TEST); //glEnable(GL_CULL_FACE); //glCullFace(GL_BACK); } void tc_load_textures() { tc_game_state_g.block_texture_atlas = tc_load_image_from_disk("assets/block_atlas.png"); tc_game_state_g.block_texture_atlas->name = "Atlas"; tc_upload_image(tc_game_state_g.block_texture_atlas); tc_image_s *dirt = tc_create_subimage(tc_game_state_g.block_texture_atlas, 0, 0, 8, 8); dirt->name = "dirt"; tc_image_s *grass = tc_create_subimage(tc_game_state_g.block_texture_atlas, 8, 0, 8, 8); grass->name = "grass-side"; tc_image_s *grass_top = tc_create_subimage(tc_game_state_g.block_texture_atlas, 8, 8, 8, 8); grass_top->name = "grass-top"; tc_image_s *stone = tc_create_subimage(tc_game_state_g.block_texture_atlas, 16, 0, 8, 8); stone->name = "stone"; } void tc_init() { tc_start_world_updater(); tc_init_renderer (&tc_game_state_g); tc_promise_s main_world_promise = tc_worldupdate_register_world (); tc_game_state_g.asset_storage = tc_init_asset_storage("assets/"); tc_load_textures(); tc_game_state_g.block_registry = tc_init_blocks(); tc_create_blocks(); tc_game_state_g.entity_registry = tc_init_entity_registry(); tc_register_entities(); tc_game_state_g.on_world_create = tc_new_hooklist(16); tc_add_to_hooklist(&tc_game_state_g.on_world_create, (tc_fn_hook) &tc_create_world_physics, NULL); tc_init_worlds(); // tc_game_state_g.main_world = tc_new_world(&tc_default_terrain_generator_g); tc_game_state_g.player = tc_create_entity("player", NULL); tc_game_state_g.viewer = tc_game_state_g.player; tc_set_float_for_entity(tc_game_state_g.player, "pos_x", 0.0f); tc_set_float_for_entity(tc_game_state_g.player, "pos_y", 38.0f); tc_set_float_for_entity(tc_game_state_g.player, "pos_z", 0.0f); tc_game_state_g.tps = 120; puts("Finished initializing!"); } void tc_cleanup() { // tc_unload_world(tc_game_state_g.main_world); tc_cleanup_chunk_pool(); SDL_GL_DeleteContext(tc_game_state_g.renderer.gl_context); SDL_DestroyWindow(tc_game_state_g.renderer.window); }