#include "BasicScene.h" #include "stdafx.h" #include "GLUtil.h" #include "MeshFactory.h" namespace charcoal { namespace builtin { BasicScene::BasicScene(Application& application) : Scene(application), m_shape(MeshFactory::gen( DrawMode::DRAW_TRIANGLES, BasicVertex({ -50.0f, 50.0f, 0.0f }), BasicVertex({ 50.0f, 150.0f, 0.0f }), BasicVertex({ -100.0f, -50.0f, 0.0f }), BasicVertex({ 100.0f, -50.0f, 0.0f }) ), DrawMode::DRAW_TRIANGLES), m_batch(&m_shape, 2), m_camera(m_screen_size) {} BasicScene::~BasicScene() {} void BasicScene::init() { sizeof(BasicVertex); sizeof(vec3); m_batch.init(); } void BasicScene::use() { // TODO: move to glutil glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); } void BasicScene::unuse() { } void BasicScene::update(float delta_time, clock_t clock) { float brightness; float radians; clock_t c; const clock_t intervals = 512 * CLOCKS_PER_SEC / 100; const clock_t half_interval = 256 * CLOCKS_PER_SEC / 100; c = clock % intervals; if (c < half_interval) brightness = (float)c / half_interval; else brightness = (float)(intervals - c) / half_interval; radians = (float)TAU * c / intervals; { Poseable& pose = m_batch.get_pose(0); pose.update_position(vec3(cos(radians) * 50, 0.0f, 0.0f)); } { Poseable& pose = m_batch.get_pose(1); pose.update_position(vec3(0.0f, sin(radians) * 50, 0.0f)); } vec2 camera_translation(0.0f, 0.0f); if (m_input_manager.is_key_down(GLFW_KEY_W)) camera_translation.y += 1; if (m_input_manager.is_key_down(GLFW_KEY_S)) camera_translation.y -= 1; if (m_input_manager.is_key_down(GLFW_KEY_A)) camera_translation.x -= 1; if (m_input_manager.is_key_down(GLFW_KEY_D)) camera_translation.x += 1; m_camera.translate(camera_translation * delta_time * 100.0f); } void BasicScene::prerender() { m_camera.prerender(); m_batch.prerender(); } void BasicScene::render() { // TODO: This is not rendering :( glutil::clear_screen(); m_shader_program.use(); glutil::uniform_matrix(0, m_camera.get_world_to_view_matrix()); m_batch.render(); } } }