Techneck/code/source-c/initialization.c

100 lines
3.3 KiB
C

#include "state.h"
#include "world.h"
#include "entity/registration.h"
#include <SDL2/SDL.h>
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_init_renderer(&tc_game_state_g);
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_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_location_s spawn_location;
spawn_location.world = tc_game_state_g.main_world;
spawn_location.position.x = 0.0f;
spawn_location.position.y = 36.0f;
spawn_location.position.z = 0.0f;
tc_teleport_entity(tc_game_state_g.player, spawn_location);
tc_game_state_g.tps = 120;
puts("Finished initializing!");
}
void tc_cleanup()
{
tc_cleanup_chunk_pool();
SDL_GL_DeleteContext(tc_game_state_g.renderer.gl_context);
SDL_DestroyWindow(tc_game_state_g.renderer.window);
}