From dfc387644939aada1edb69f8f730e62f116f1ae3 Mon Sep 17 00:00:00 2001 From: mattkae Date: Sun, 1 May 2022 18:37:59 -0400 Subject: Fetching bunny model --- themes/main.cpp | 79 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 72 insertions(+), 7 deletions(-) (limited to 'themes/main.cpp') diff --git a/themes/main.cpp b/themes/main.cpp index 8f908a3..ad78f31 100644 --- a/themes/main.cpp +++ b/themes/main.cpp @@ -6,11 +6,15 @@ #include "TreeShape.h" #include "LeafParticleRender.h" #include "Snowflake.h" +#include +#include + enum Theme { Default = 0, Autumn, - Winter + Winter, + Spring }; struct AutumnTheme { @@ -18,7 +22,7 @@ struct AutumnTheme { LeafParticleRender leafParticles; void load(Renderer2d* renderer); - void update(float32 dtSeconds); + void update(f32 dtSeconds); void render(Renderer2d* renderer); void unload(); }; @@ -27,17 +31,25 @@ struct WinterTheme { SnowflakeParticleRenderer spr; void load(Renderer2d* renderer); - void update(float32 dtSeconds); + void update(f32 dtSeconds); + void render(Renderer2d* renderer); + void unload(); +}; + +struct SpringTheme { + void load(Renderer2d* renderer); + void update(f32 dtSeconds); void render(Renderer2d* renderer); void unload(); }; void load(Theme theme); void unload(); -void update(float32 dtSeconds, void* userData); +void update(f32 dtSeconds, void* userData); EM_BOOL selectNone(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData); EM_BOOL selectAutumn(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData); EM_BOOL selectWinter(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData); +EM_BOOL selectSpring(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData); WebglContext context; Renderer2d renderer; @@ -45,12 +57,14 @@ MainLoop mainLoop; Theme activeTheme = Theme::Default; AutumnTheme autumnTheme; WinterTheme winterTheme; +SpringTheme springTheme; int main() { context.init("#theme_canvas"); emscripten_set_click_callback("#theme_button_default", NULL, false, selectNone); emscripten_set_click_callback("#theme_button_autumn", NULL, false, selectAutumn); emscripten_set_click_callback("#theme_button_winter", NULL, false, selectWinter); + emscripten_set_click_callback("#theme_button_spring", NULL, false, selectSpring); return 0; } @@ -75,12 +89,15 @@ void load(Theme theme) { case Theme::Winter: winterTheme.load(&renderer); break; + case Theme::Spring: + springTheme.load(&renderer); + break; default: break; } } -void update(float32 dtSeconds, void* userData) { +void update(f32 dtSeconds, void* userData) { // -- Update switch (activeTheme) { case Theme::Autumn: @@ -89,6 +106,9 @@ void update(float32 dtSeconds, void* userData) { case Theme::Winter: winterTheme.update(dtSeconds); break; + case Theme::Spring: + springTheme.update(dtSeconds); + break; default: break; } @@ -102,6 +122,9 @@ void update(float32 dtSeconds, void* userData) { case Theme::Winter: winterTheme.render(&renderer); break; + case Theme::Spring: + springTheme.render(&renderer); + break; default: break; } @@ -115,6 +138,9 @@ void unload() { case Theme::Winter: winterTheme.unload(); break; + case Theme::Spring: + springTheme.unload(); + break; default: break; } @@ -145,6 +171,12 @@ EM_BOOL selectWinter(int eventType, const EmscriptenMouseEvent* mouseEvent, void return true; } +EM_BOOL selectSpring(int eventType, const EmscriptenMouseEvent* mouseEvent, void* userData) { + printf("Spring theme selected\n"); + load(Theme::Spring); + return true; +} + // -- Autumn theme void AutumnTheme::load(Renderer2d* renderer) { renderer->clearColor = Vector4(252, 210, 153, 255).toNormalizedColor(); @@ -152,7 +184,7 @@ void AutumnTheme::load(Renderer2d* renderer) { leafParticles.load(renderer, &lr); } -void AutumnTheme::update(float32 dtSeconds) { +void AutumnTheme::update(f32 dtSeconds) { tree.update(dtSeconds); leafParticles.update(dtSeconds); } @@ -175,7 +207,7 @@ void WinterTheme::load(Renderer2d* renderer) { spr.load(lp, renderer); } -void WinterTheme::update(float32 dtSeconds) { +void WinterTheme::update(f32 dtSeconds) { spr.update(dtSeconds); } @@ -186,3 +218,36 @@ void WinterTheme::render(Renderer2d* renderer) { void WinterTheme::unload() { spr.unload(); } + +// -- Spring theme +void onBunnySuccess(emscripten_fetch_t *fetch) { + printf("Finished downloading %llu bytes from URL %s.\n", fetch->numBytes, fetch->url); + // The data is now available at fetch->data[0] through fetch->data[fetch->numBytes-1]; + emscripten_fetch_close(fetch); // Free data associated with the fetch. +} + +void onBunnyFail(emscripten_fetch_t *fetch) { + printf("Downloading %s failed, HTTP failure status code: %d.\n", fetch->url, fetch->status); + emscripten_fetch_close(fetch); // Also free data on failure. +} + +void SpringTheme::load(Renderer2d* renderer) { + renderer->clearColor = Vector4(160, 231, 160, 255.f).toNormalizedColor(); + + emscripten_fetch_attr_t attr; + emscripten_fetch_attr_init(&attr); + strcpy(attr.requestMethod, "GET"); + attr.attributes = EMSCRIPTEN_FETCH_LOAD_TO_MEMORY; + attr.onsuccess = onBunnySuccess; + attr.onerror = onBunnyFail; + emscripten_fetch(&attr, "themes/resources/bunny.obj"); +} + +void SpringTheme::update(f32 dtSeconds) { +} + +void SpringTheme::render(Renderer2d* renderer) { +} + +void SpringTheme::unload() { +} \ No newline at end of file -- cgit v1.2.1