X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2FGameLayer.cc;h=7d36f3312045ca00781a6294e7cd0f4e45701fc9;hp=86b871076ef68aca1d27fddda59f3a3c6b7dcf54;hb=e9a16d767785b1a903a4466ff26265a5f7dae9e5;hpb=382626aad0a683ed8642a6a807eea743db45f7f8 diff --git a/src/GameLayer.cc b/src/GameLayer.cc index 86b8710..7d36f33 100644 --- a/src/GameLayer.cc +++ b/src/GameLayer.cc @@ -15,6 +15,7 @@ #include #include +#include #include #include #include @@ -24,11 +25,13 @@ void GameLayer::loadSceneLoader() { - state_.script.import_standard_libraries(); + state_.script.import_safe_standard_libraries(); moof::log::import(state_.script); + moof::mesh::import(state_.script, "yoink"); + moof::sound::import(state_.script, "yoink"); - std::string path("loader"); - if (!moof::resource::find(path)) + std::string path = moof::resource::find_file("scenes/loader.lua"); + if (path.empty()) { throw std::runtime_error("cannot find scene loader script"); } @@ -45,7 +48,7 @@ void GameLayer::loadSceneLoader() state_.script.top().get(state_.sceneList); if (state_.sceneList.size() == 0) { - throw std::runtime_error("no variable `scenes' in script loader."); + throw std::runtime_error("no variable `scenes' in script loader"); } } @@ -73,20 +76,26 @@ void GameLayer::advanceScene(moof::settings& settings) state_.script.registry().set_field(); } state_.script.pop(); + + table = state_.script.globals().push_field("Event"); + if (table.is_table()) + { + table.push_field("Draw"); + state_.script.registry().set_field("Draw"); + } + state_.script.pop(); } } GameLayer::GameLayer() { - moof::log_info("about to load sound resource..."); - music_.sample("NightFusionIntro.ogg"); + music_.queue("NightFusionIntro"); music_.loop(true); - music_.enqueue("NightFusionLoop.ogg"); + music_.queue("NightFusionLoop"); music_.position(moof::vector3(10.0, 5.0, 0.0)); - mThinkTimer.init(boost::bind(&GameLayer::thinkTimer, this), - 0.1, moof::timer::repeat); + punch_sound_.sample("Thump"); state_.heroine = Heroine::alloc(); state_.heroine->animation.startSequence("FlyDiagonallyUp"); @@ -99,7 +108,7 @@ void GameLayer::did_add_to_view() { bool isMute = false; settings().get("nomusic", isMute); - if (!isMute) music_.stream(); + music_.play(); loadSceneLoader(); advanceScene(settings()); // load the first scene @@ -135,16 +144,12 @@ void GameLayer::update(moof::scalar t, moof::scalar dt) mRay.point = state_.heroine->state().position; - moof::view::update(t, dt); -} - -void GameLayer::thinkTimer() -{ state_.script.registry().push_field("Think"); if (state_.script[-1].is_function()) state_.script.call(); - else state_.script.pop(); -} + else state_.script.pop(); + moof::view::update(t, dt); +} void GameLayer::rayTimer() { @@ -186,13 +191,35 @@ void GameLayer::draw(moof::scalar alpha) const if (!state_.scene) return; state_.camera.upload_to_gl(alpha); + float pos[] = {state_.heroine->state().position[0], + state_.heroine->state().position[1], 0.0f, 1.0f}; + glLightfv(GL_LIGHT0, GL_POSITION, pos); + // DRAW THE SCENE moof::image::reset_binding(); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_TEXTURE_COORD_ARRAY); - state_.scene->draw_if_visible(alpha, state_.camera.frustum()); + //state_.scene->draw_if_visible(alpha, state_.camera.frustum()); + + size_t meh = 23; + state_.script.push(meh); + state_.script.pop(); + + state_.script.registry().push_field("Draw"); + if (state_.script[-1].is_function()) + { + moof::script::status result = state_.script.call(); + if (result != moof::script::success) + { + std::string str; + state_.script[-1].get(str); + throw std::runtime_error("script error: " + str); + } + } + else state_.script.pop(); + state_.heroine->draw(alpha); mRay.draw();