| @@ -25,6 +25,18 @@ LOLFX_RESOURCE_DECLARE(12_voronoi_distance); | |||||
| LOLFX_RESOURCE_DECLARE(12_distance); | LOLFX_RESOURCE_DECLARE(12_distance); | ||||
| LOLFX_RESOURCE_DECLARE(12_texture_to_screen); | LOLFX_RESOURCE_DECLARE(12_texture_to_screen); | ||||
| enum | |||||
| { | |||||
| KEY_ESC, | |||||
| KEY_PUSH, | |||||
| KEY_POP, | |||||
| KEY_F1, | |||||
| KEY_F2, | |||||
| KEY_F3, | |||||
| KEY_MAX | |||||
| }; | |||||
| enum FboType | enum FboType | ||||
| { | { | ||||
| SrcVoronoiFbo, | SrcVoronoiFbo, | ||||
| @@ -51,6 +63,13 @@ public: | |||||
| m_time = .0f; | m_time = .0f; | ||||
| m_timer = -1.0f; | m_timer = -1.0f; | ||||
| mode = 0; | mode = 0; | ||||
| m_controller = new Controller("Default", KEY_MAX, 0); | |||||
| m_controller->GetKey(KEY_ESC).Bind("Keyboard", "Escape"); | |||||
| m_controller->GetKey(KEY_PUSH).Bind("Keyboard", "p"); | |||||
| m_controller->GetKey(KEY_POP).Bind("Keyboard", "o"); | |||||
| m_controller->GetKey(KEY_F1).Bind("Keyboard", "F1"); | |||||
| m_controller->GetKey(KEY_F2).Bind("Keyboard", "F2"); | |||||
| m_controller->GetKey(KEY_F3).Bind("Keyboard", "F3"); | |||||
| } | } | ||||
| virtual void TickGame(float seconds) | virtual void TickGame(float seconds) | ||||
| @@ -59,17 +78,17 @@ public: | |||||
| { | { | ||||
| //Shutdown logic | //Shutdown logic | ||||
| if (Input::WasReleased(Key::Escape)) | |||||
| if (m_controller->GetKey(KEY_ESC).IsReleased()) | |||||
| Ticker::Shutdown(); | Ticker::Shutdown(); | ||||
| } | } | ||||
| m_time += seconds; | m_time += seconds; | ||||
| m_hotspot = 0.4f * vec3(lol::sin(m_time * 4.f) + lol::cos(m_time * 5.3f), | |||||
| lol::sin(m_time * 5.7f) + lol::cos(m_time * 4.4f), | |||||
| lol::sin(m_time * 5.f)); | |||||
| m_color = 0.25f * vec3(1.1f + lol::sin(m_time * 2.5f + 1.f), | |||||
| 1.1f + lol::sin(m_time * 2.8f + 1.3f), | |||||
| 1.1f + lol::sin(m_time * 2.7f)); | |||||
| m_hotspot = 0.4f * vec3((float)lol::sin(m_time * 4.0) + (float)lol::cos(m_time * 5.3), | |||||
| (float)lol::sin(m_time * 5.7) + (float)lol::cos(m_time * 4.4), | |||||
| (float)lol::sin(m_time * 5.0)); | |||||
| m_color = 0.25f * vec3(1.1f + (float)lol::sin(m_time * 2.5 + 1.0), | |||||
| 1.1f + (float)lol::sin(m_time * 2.8 + 1.3), | |||||
| 1.1f + (float)lol::sin(m_time * 2.7)); | |||||
| /* Saturate dot color */ | /* Saturate dot color */ | ||||
| float x = std::max(m_color.x, std::max(m_color.y, m_color.z)); | float x = std::max(m_color.x, std::max(m_color.y, m_color.z)); | ||||
| m_color /= x; | m_color /= x; | ||||
| @@ -150,16 +169,16 @@ public: | |||||
| { | { | ||||
| //Shutdown logic | //Shutdown logic | ||||
| if (Input::WasReleased(Key::O)) | |||||
| if (m_controller->GetKey(KEY_POP).IsReleased()) | |||||
| voronoi_points.Pop(); | voronoi_points.Pop(); | ||||
| else if (Input::WasReleased(Key::P)) | |||||
| else if (m_controller->GetKey(KEY_PUSH).IsReleased()) | |||||
| voronoi_points.Push(vec3(rand<float>(512.f), rand<float>(512.f), .0f), | voronoi_points.Push(vec3(rand<float>(512.f), rand<float>(512.f), .0f), | ||||
| vec2(64.f + rand<float>(64.f), 64.f + rand<float>(64.f))); | vec2(64.f + rand<float>(64.f), 64.f + rand<float>(64.f))); | ||||
| else if (Input::WasReleased(Key::F1)) | |||||
| else if (m_controller->GetKey(KEY_F1).IsReleased()) | |||||
| m_cur_fbo = SrcVoronoiFbo; | m_cur_fbo = SrcVoronoiFbo; | ||||
| else if (Input::WasReleased(Key::F2)) | |||||
| else if (m_controller->GetKey(KEY_F2).IsReleased()) | |||||
| m_cur_fbo = VoronoiFbo; | m_cur_fbo = VoronoiFbo; | ||||
| else if (Input::WasReleased(Key::F3)) | |||||
| else if (m_controller->GetKey(KEY_F3).IsReleased()) | |||||
| { | { | ||||
| voronoi_points.Empty(); | voronoi_points.Empty(); | ||||
| if (mode == 0) | if (mode == 0) | ||||
| @@ -185,10 +204,13 @@ public: | |||||
| int maxi = 6; | int maxi = 6; | ||||
| for (int i = 0; i < maxi; ++i) | for (int i = 0; i < maxi; ++i) | ||||
| { | { | ||||
| voronoi_points.Push(vec3(256.f) + 196.f * vec3(lol::cos(m_time + i * 2.f * F_PI / maxi), lol::sin(m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||||
| voronoi_points.Push(vec3(256.f) + 128.f * vec3(lol::cos(-m_time + i * 2.f * F_PI / maxi), lol::sin(-m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||||
| voronoi_points.Push(vec3(256.f) + 64.f * vec3(lol::cos(m_time + i * 2.f * F_PI / maxi), lol::sin(m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||||
| voronoi_points.Push(vec3(256.f) + 32.f * vec3(lol::cos(-m_time + i * 2.f * F_PI / maxi), lol::sin(-m_time + i * 2.f * F_PI / maxi), .0f), vec2(.0f)); | |||||
| float mi = (float)maxi; | |||||
| float j = (float)i; | |||||
| float f_time = (float)m_time; | |||||
| voronoi_points.Push(vec3(256.f) + 196.f * vec3(lol::cos( f_time + j * 2.0 * F_PI / mi), lol::sin( f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||||
| voronoi_points.Push(vec3(256.f) + 128.f * vec3(lol::cos(-f_time + j * 2.0 * F_PI / mi), lol::sin(-f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||||
| voronoi_points.Push(vec3(256.f) + 64.f * vec3(lol::cos( f_time + j * 2.0 * F_PI / mi), lol::sin( f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||||
| voronoi_points.Push(vec3(256.f) + 32.f * vec3(lol::cos(-f_time + j * 2.0 * F_PI / mi), lol::sin(-f_time + j * 2.f * F_PI / mi), .0f), vec2(.0f)); | |||||
| } | } | ||||
| voronoi_points.Push(vec3(256.f), vec2(.0f)); | voronoi_points.Push(vec3(256.f), vec2(.0f)); | ||||
| } | } | ||||
| @@ -371,6 +393,7 @@ public: | |||||
| } | } | ||||
| private: | private: | ||||
| Controller* m_controller; | |||||
| Array<vec3, vec2> voronoi_points; | Array<vec3, vec2> voronoi_points; | ||||
| Array<vec2> m_vertices; | Array<vec2> m_vertices; | ||||
| Shader *m_screen_shader; | Shader *m_screen_shader; | ||||