throw Mf::Exception(Mf::ErrorCode::RESOURCE_NOT_FOUND, "loader");
}
- Mf::Script::Status status = mState.script.doFile(loaderPath);
+ Mf::Script::Result status = mState.script.doFile(loaderPath);
if (status != Mf::Script::SUCCESS)
{
std::string str;
mState.script[-1].get(str);
- Mf::logScript("%s", str.c_str());
throw Mf::Exception(Mf::ErrorCode::SCRIPT_ERROR, str);
}
mState.script.getTop().get(mState.sceneList);
if (mState.sceneList.size() == 0)
{
- Mf::logScript("no variable `scenes' within loader");
- throw Mf::Exception(Mf::ErrorCode::SCRIPT_ERROR, "no scenes to load");
+ throw Mf::Exception(Mf::ErrorCode::SCRIPT_ERROR,
+ "no variable `scenes' within loader");
}
}
mState.scene = Scene::alloc(mState.sceneList[0]);
mState.sceneList.erase(mState.sceneList.begin());
- Mf::Script::Status status = mState.scene->load(mState.script);
+ Mf::Script::Result status = mState.scene->load(mState.script);
if (status != Mf::Script::SUCCESS)
{
std::string str;
mState.script[-1].get(str);
- Mf::logScript("%s", str.c_str());
throw Mf::Exception(Mf::ErrorCode::SCRIPT_ERROR, str);
}
}
Mf::Settings::getInstance().get("nomusic", isMute);
if (!isMute) mMusic.play();
+ //mMusic.setPosition(Mf::Vector3(10.0, 5.0, 0.0));
+
loadSceneLoader();
advanceScene(); // load the first scene
engine.push(Hud::alloc(mState));
mRay.direction.set(1.0, 0.0);
- mRay3.direction.set(1.0, 0.0, 0.0);
mLine.a.set(20, 10);
mLine.b.set(19, 14);
- mPlane.normal.set(-1.0, 0.0, 0.0);
- mPlane.d = 0.0;
-
mSphere.point.set(22, 5);
mSphere.radius = 2;
+
+ mRayTimer.init(boost::bind(&GameLayer::rayTimer, this), 1.0, Mf::Timer::REPEAT);
}
-mState.heroine->getState().position[1], -9));
//mState.camera.lookAt(Mf::promote(mState.heroine->getState().position));
- //Mf::Vector3 heroinePosition = Mf::promote(mState.heroine->getState().position);
- //Mf::Sound::setListenerPosition(heroinePosition);
-
mRay.point = mState.heroine->getState().position;
- mRay3.point = Mf::promote(mRay.point);
- mRay3.direction = Mf::promote(mRay.direction);
+}
+
+void GameLayer::rayTimer()
+{
Mf::Ray<2>::Intersection meh;
- Mf::Ray<3>::Intersection meh3;
+ std::list<Mf::Ray<2>::Intersection> hits;
+ Mf::Vector2 point;
- Mf::Scalar d = mLine.intersectRay(mRay, meh);
- if (d > 0.0)
+ bool bam = mLine.intersectRay(mRay, meh);
+ if (bam)
{
- Mf::logDebug("line: d = %f", d);
- Mf::logDebug(" P = <%f,%f>", meh.point[0], meh.point[1]);
- Mf::logDebug(" n = <%f,%f>", meh.normal[0], meh.normal[1]);
+ meh.normal.normalize();
+ hits.push_back(meh);
}
- //d = mPlane.intersectRay(mRay3, meh3);
- //if (d > 0.0)
- //{
- //Mf::logDebug("plane: d = %f", d);
- //Mf::logDebug(" P = <%f,%f>", meh3.point[0], meh3.point[1]);
- //Mf::logDebug(" n = <%f,%f>", meh3.normal[0], meh3.normal[1]);
- //}
- d = mSphere.intersectRay(mRay, meh);
- if (d > 0.0)
+
+ bam = mSphere.intersectRay(mRay, meh);
+ if (bam)
{
- Mf::logDebug("sphere: d = %f", d);
- Mf::logDebug(" P = <%f,%f>", meh.point[0], meh.point[1]);
- Mf::logDebug(" n = <%f,%f>", meh.normal[0], meh.normal[1]);
+ meh.normal.normalize();
+ hits.push_back(meh);
}
- std::list<Mf::Ray<2>::Intersection> hits;
if (mState.scene->castRay(mRay, hits))
{
- Mf::logDebug("scene: d = %f", d);
- Mf::logDebug(" P = <%f,%f>", hits.front().point[0], hits.front().point[1]);
- Mf::logDebug(" n = <%f,%f>", hits.front().normal[0], hits.front().normal[1]);
+ 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;
}
}
}
else if (event.key.keysym.sym == SDLK_PAGEUP)
{
- mRay.direction = cml::rotate_vector_2D(mRay.direction, cml::rad(10.0));
+ mRay.direction = cml::rotate_vector_2D(mRay.direction,
+ cml::rad(10.0));
return true;
}
else if (event.key.keysym.sym == SDLK_PAGEDOWN)
{
- mRay.direction = cml::rotate_vector_2D(mRay.direction, cml::rad(-10.0));
+ mRay.direction = cml::rotate_vector_2D(mRay.direction,
+ cml::rad(-10.0));
return true;
}
return mState.heroine->handleEvent(event);