]> Dogcows Code - chaz/yoink/blobdiff - src/Scene.cc
sockets documentation and cleanup
[chaz/yoink] / src / Scene.cc
index 7b23ab6431e7a88da48ae3a5fdd38fc7e41a6b3d..16e1aef55b210903fff7caeb2e65bb4fb344df55 100644 (file)
@@ -140,7 +140,7 @@ struct Scene::Impl : public Mf::Manager<Impl>
 
        //Mf::Octree<Quad>::Ptr mOctree;
        std::list< boost::shared_ptr<Impl::Quad> >      mObjects;
-       std::list< Mf::Line<2> >                                        mLines;
+       std::list<Mf::Line2>                                            mLines;
 
        Mf::Aabb<3>                             mBounds;
 
@@ -156,7 +156,7 @@ struct Scene::Impl : public Mf::Manager<Impl>
        void init(const std::string& name) {}
 
 
-       void importSceneBindings(Mf::Script& script)
+       void importSceneBindings(Mf::Settings& settings, Mf::Script& script)
        {
                script.importFunction("SetBounds",
                                boost::bind(&Impl::setBounds, this, _1));
@@ -176,57 +176,48 @@ struct Scene::Impl : public Mf::Manager<Impl>
                                boost::bind(&Impl::drawTile, this, _1));
 
                int detail = 3;
-               Mf::settings.get("detail", detail);
-               script.push(detail); script.set("detail");
+               settings.get("detail", detail);
+               script.globals().setField("detail", detail);
 
-               script.push(1); script.set("LOW");
-               script.push(2); script.set("MEDIUM");
-               script.push(3); script.set("HIGH");
+               script.globals().setField("LOW",    1);
+               script.globals().setField("MEDIUM", 2);
+               script.globals().setField("HIGH",   3);
 
-               script.push(X); script.set("X");
-               script.push(Y); script.set("Y");
-               script.push(Z); script.set("Z");
+               script.globals().setField("X", X);
+               script.globals().setField("Y", Y);
+               script.globals().setField("Z", Z);
 
-               script.push(Quad::LEFT);  script.set("LEFT");
-               script.push(Quad::RIGHT); script.set("RIGHT");
-               script.push(Quad::TOP);   script.set("TOP");
+               script.globals().setField("LEFT",  Quad::LEFT);
+               script.globals().setField("RIGHT", Quad::RIGHT);
+               script.globals().setField("TOP",   Quad::TOP);
        }
 
 
-       Mf::Script::Result load(Mf::Script& script)
+       Mf::Script::Result load(Mf::Settings& settings, Mf::Script& script)
        {
-               std::string filePath = Scene::getPath(getName());
-               if (filePath == "")
+               std::string path(getName());
+               if (!Scene::getPath(path))
                {
                        script.push("the scene file could not be found");
                        return Mf::Script::FILE_ERROR;
                }
 
-               importSceneBindings(script);
-               return script.doFile(filePath);
+               importSceneBindings(settings, script);
+               return script.doFile(path);
        }
 
 
-       static int loadBox(Mf::Script& script, Mf::Aabb<3>& aabb)
+       static int loadBox(Mf::Script& script, Mf::Aabb3& aabb)
        {
                script[1].requireTable();
                script[2].requireTable();
-               script.setSize(2);
 
-               for (int i = 1; i <= 2; ++i)
-               {
-                       for (int j = 1; j <= 3; ++j)
-                       {
-                               script[i].pushField(j);
-                       }
-               }
-
-               script[3].get(aabb.min[0]);
-               script[4].get(aabb.min[1]);
-               script[5].get(aabb.min[2]);
-               script[6].get(aabb.max[0]);
-               script[7].get(aabb.max[1]);
-               script[8].get(aabb.max[2]);
+               script[1].pushField(1).get(aabb.min[0]);
+               script[1].pushField(2).get(aabb.min[1]);
+               script[1].pushField(3).get(aabb.min[2]);
+               script[2].pushField(1).get(aabb.max[0]);
+               script[2].pushField(2).get(aabb.max[1]);
+               script[2].pushField(3).get(aabb.max[2]);
 
                return 0;
        }
@@ -247,7 +238,6 @@ struct Scene::Impl : public Mf::Manager<Impl>
        int translate(Mf::Script& script)
        {
                Mf::Vector3 vec;
-
                script[1].requireNumber().get(vec[0]);
                script[2].requireNumber().get(vec[1]);
                script[3].requireNumber().get(vec[2]);
@@ -261,29 +251,31 @@ struct Scene::Impl : public Mf::Manager<Impl>
 
        int scale(Mf::Script& script)
        {
-               if (script.getSize() == 3)
+               int size = script.stackSize();
+
+               if (size == 1)
                {
-                       Mf::Vector3 vec;
-                       script[1].requireNumber().get(vec[0]);
-                       script[2].requireNumber().get(vec[1]);
-                       script[3].requireNumber().get(vec[2]);
+                       Mf::Scalar value = 1.0;
+                       script[1].requireNumber().get(value);
 
                        Mf::Matrix4 scaling;
-                       cml::matrix_scale(scaling, vec);
+                       cml::matrix_uniform_scale(scaling, value);
                        mTransform = scaling * mTransform;
                }
-               else if (script.getSize() == 1)
+               else if (size == 3)
                {
-                       Mf::Scalar value = 1.0;
-                       script[1].requireNumber().get(value);
+                       Mf::Vector3 vec;
+                       script[1].requireNumber().get(vec[0]);
+                       script[2].requireNumber().get(vec[1]);
+                       script[3].requireNumber().get(vec[2]);
 
                        Mf::Matrix4 scaling;
-                       cml::matrix_uniform_scale(scaling, value);
+                       cml::matrix_scale(scaling, vec);
                        mTransform = scaling * mTransform;
                }
                else
                {
-                       script.getTop().throwError("wrong number of arguments");
+                       script.top().raise("wrong number of arguments");
                }
 
                return 0;
@@ -311,25 +303,19 @@ struct Scene::Impl : public Mf::Manager<Impl>
 
        int drawTilemap(Mf::Script& script)
        {
-               Mf::Script::Slot table = script[1].requireTable();
-               Mf::Script::Slot top = script[-1];
+               Mf::Script::Slot        table = script[1].requireTable();
 
-               int                             width = 1;
-               int                             height = 1;
-               int                             nTiles = 0;
+               int width  = 1;
+               table.get(width, "width");
 
-               table.pushField("width");
-               top.get(width);
-               script.pop();
-
-               nTiles = table.getLength();
+               int nTiles = table.length();
                if (nTiles % width != 0)
                {
-                       table.throwError("invalid number of tiles");
+                       table.raise("invalid number of tiles");
                }
 
-               if (width == 0) table.throwError("width field must not be zero");
-               height = nTiles / width;
+               if (width == 0) table.raise("width field must not be zero");
+               int height = nTiles / width;
 
                Mf::Vector3             vertices[height+1][width+1];
 
@@ -358,12 +344,8 @@ struct Scene::Impl : public Mf::Manager<Impl>
                                int wPlus1 = w + 1;
                                int hPlus1 = h + 1;
 
-                               table.pushField(i);
-
                                Mf::Texture::TileIndex index;
-                               top.get(index);
-
-                               script.pop();
+                               table.get(index, i);
 
                                vertices[h][wPlus1] = Mf::demote(mTransform *
                                                Mf::Vector4(wPlus1, h, 0.0, 1.0));
@@ -386,10 +368,7 @@ struct Scene::Impl : public Mf::Manager<Impl>
                }
 
                Quad::Surface   surface = Quad::NONE;
-
-               table.pushField("surface");
-               top.get(surface);
-               script.pop();
+               table.get(surface, "surface");
 
                if (surface != Quad::NONE)
                {
@@ -402,7 +381,6 @@ struct Scene::Impl : public Mf::Manager<Impl>
                        Mf::Vector2 tr = Mf::demote(vertices[height][width]);
 
                        mLines.push_back(Mf::Line<2>(bl, tr));
-                       Mf::logInfo("new line");
                }
 
                return 0;
@@ -420,18 +398,10 @@ struct Scene::Impl : public Mf::Manager<Impl>
 
                if (param.isTable())
                {
-                       script.push(1);
-                       param.pushField();
-                       top.get(index);
-
-                       param.pushField("u_scale");
-                       top.get(width);
-
-                       param.pushField("blend");
-                       top.get(blending);
-
-                       param.pushField("fog");
-                       top.get(fog);
+                       param.get(index, 1);
+                       param.get(width, "u_scale");
+                       param.get(blending, "blend");
+                       param.get(fog, "fog");
                }
                else if (param.isNumber())
                {
@@ -441,7 +411,7 @@ struct Scene::Impl : public Mf::Manager<Impl>
                Mf::Vector3 vertices[2][width+1];
 
                Mf::Scalar xf;
-               Mf::Scalar increment = 1.0 / Mf::Scalar(width);
+               Mf::Scalar increment = SCALAR(1.0) / Mf::Scalar(width);
 
                for (int h = 0; h <= 1; ++h)
                {
@@ -482,10 +452,10 @@ Scene::Scene(const std::string& name) :
        mImpl(Scene::Impl::getInstance(name)) {}
 
 
-Mf::Script::Result Scene::load(Mf::Script& script)
+Mf::Script::Result Scene::load(Mf::Settings& settings, Mf::Script& script)
 {
        // pass through
-       return mImpl->load(script);
+       return mImpl->load(settings, script);
 }
 
 
@@ -526,14 +496,14 @@ void Scene::drawIfVisible(Mf::Scalar alpha,
 
 
 bool Scene::castRay(const Mf::Ray<2>& ray,
-                                       std::list<Mf::Ray<2>::Intersection>& hits) const
+                                       std::list<Mf::Ray<2>::Contact>& hits) const
 {
        std::list< Mf::Line<2> >& lines = mImpl->mLines;
        std::list< Mf::Line<2> >::const_iterator it;
 
        for (it = lines.begin(); it != lines.end(); ++it)
        {
-               Mf::Ray<2>::Intersection hit;
+               Mf::Ray<2>::Contact hit;
                Mf::Scalar d = (*it).intersectRay(ray, hit);
                if (d > 0.0)
                {
@@ -609,8 +579,8 @@ bool Scene::checkForCollision(Character& character)
 }
 
 
-std::string Scene::getPath(const std::string& name)
+bool Scene::getPath(std::string& name)
 {
-       return Mf::Resource::getPath("scenes/" + name + ".lua");
+       return Mf::Resource::getPath(name, "scenes/", "lua");
 }
 
This page took 0.027399 seconds and 4 git commands to generate.