#endif
-
-Mf::Scalar GameLayer::getZCoord(const Mf::Vector2& position) const
-{
- Mf::Scalar z;
-
- mState.script.getGlobalTable().pushField("GetZCoord");
- mState.script.push(position[0]);
- mState.script.push(position[1]);
- mState.script.call(2, 1);
- mState.script.getTop().get(z);
- mState.script.pop();
-
- return z;
-}
-
void GameLayer::loadSceneLoader()
{
mState.script.importStandardLibraries();
- importLogPrintFunction(mState.script);
+ importLogFunctions(mState.script);
std::string loaderPath = Scene::getPath("loader");
if (loaderPath == "")
throw Mf::Exception(Mf::ErrorCode::SCRIPT_ERROR, str);
}
+
+ mState.script.getGlobalTable().pushField("Event");
+ if (mState.script[-1].isTable())
+ {
+ mState.script[-1].pushField("Think");
+ mState.script.set("Think", Mf::Script::REGISTRY);
+ mState.script.pop(2);
+ }
+ else
+ {
+ mState.script.pop();
+ }
}
}
loadSceneLoader();
advanceScene(); // load the first scene
+ mThinkTimer.init(boost::bind(&GameLayer::thinkTimer, this),
+ 0.1, Mf::Timer::REPEAT);
+
mState.heroine = Heroine::alloc();
- mState.heroine->animation.startSequence("FlyDiagonallyUp");
+ mState.heroine->animation.startSequence("GreenDiamond");
Mf::Scalar a[6] = {0.0, 1.5, -0.5, 3.0, -2.0, 1.0};
- mState.interp.init(a, 2.0, Mf::Interpolator::OSCILLATE);
+ mState.interp.init(a, 5.0, Mf::Interpolator::OSCILLATE);
setProjection();
}
mState.scene->checkForCollision(*mState.heroine);
mState.camera.setPosition(Mf::Vector3(-mState.heroine->getState().position[0],
- -mState.heroine->getState().position[1], -9));
+ -mState.heroine->getState().position[1], -6));
//mState.camera.lookAt(Mf::promote(mState.heroine->getState().position));
mRay.point = mState.heroine->getState().position;
}
+void GameLayer::thinkTimer()
+{
+ mState.script.getRegistryTable().pushField("Think");
+ if (mState.script[-1].isFunction()) mState.script.call();
+ else mState.script.pop();
+}
+
void GameLayer::rayTimer()
{
{
hits.front().normal.normalize();
mRay.solve(point, hits.front().distance);
- Mf::logDebug << "scene: d = " << hits.front().distance << std::endl;
- Mf::logDebug << " P = " << point << std::endl;
- Mf::logDebug << " n = " << hits.front().normal << std::endl;
+ Mf::logInfo << "scene: d = " << hits.front().distance << std::endl;
+ Mf::logInfo << " P = " << point << std::endl;
+ Mf::logInfo << " n = " << hits.front().normal << std::endl;
}
}
mState.scene->drawIfVisible(alpha, mState.camera.getFrustum());
- mState.heroine->setZCoord(getZCoord(mState.heroine->getState().position));
mState.heroine->draw(alpha);
mRay.draw();
cml::rad(-10.0));
return true;
}
+ else if (event.key.keysym.sym == SDLK_r)
+ {
+ loadSceneLoader();
+ advanceScene();
+ return true;
+ }
return mState.heroine->handleEvent(event);
case SDL_KEYUP: