*******************************************************************************/
-#include <iostream>
#include <map>
#include <vector>
#include "Camera.hh"
#include "Deserializer.hh"
#include "Entity.hh"
+#include "Log.hh"
#include "Math.hh"
#include "Mippleton.hh"
#include "OpenGL.hh"
if (!tilemap_.getTileCoords(tileIndex, texCoords_))
{
- std::cerr << "no coords for tile's texture" << std::endl;
+ logWarning("no index %d in texture %s", tileIndex,
+ texture.c_str());
+
+ texCoords_[0] = texCoords_[1] =
+ texCoords_[3] = texCoords_[6] = 0.0;
+ texCoords_[2] = texCoords_[4] =
+ texCoords_[5] = texCoords_[7] = 1.0;
}
aabb_.encloseVertices(vertices, 4);
};
- static void loadBox(Aabb& theBox, SerializablePtr obj)
+ static void loadBox(Aabb& theBox, SerializableP obj)
{
- std::vector<SerializablePtr> numbers;
+ Serializable::Array numbers;
if (obj->get(numbers) && numbers.size() == 6)
{
- double num;
+ Serializable::Float num;
if (numbers[0]->getNumber(num)) theBox.min[0] = Scalar(num);
if (numbers[1]->getNumber(num)) theBox.min[1] = Scalar(num);
}
- void loadInstructions(SerializablePtr root)
+ void loadInstructions(SerializableP root)
{
- std::vector<SerializablePtr> rootObj;
- std::vector<SerializablePtr>::iterator it;
+ Serializable::Array rootObj;
+ Serializable::Array::iterator it;
if (!root->get(rootObj))
{
- std::cerr << "error loading scene instructions" << std::endl;
+ logError("scene instructions must be an array");
return;
}
}
else if (instruction == "translate")
{
- std::vector<SerializablePtr> values;
+ Serializable::Array values;
++it;
if ((*it)->get(values))
for (size_t i = 0; i < values.size(); ++i)
{
- double value;
+ Serializable::Float value;
if (values[i]->getNumber(value))
{
}
else if (instruction == "scale")
{
- std::vector<SerializablePtr> values;
+ Serializable::Array values;
++it;
if ((*it)->get(values))
{
if (values.size() == 1)
{
- double value = 1.0;
+ Serializable::Float value = 1.0;
values[0]->getNumber(value);
for (size_t i = 0; i < values.size(); ++i)
{
- double value;
+ Serializable::Float value;
if (values[i]->getNumber(value))
{
}
else if (instruction == "rotate")
{
- std::vector<SerializablePtr> values;
+ Serializable::Array values;
++it;
if ((*it)->get(values))
{
std::string axis;
size_t index = 0;
- double value = 0.0;
+ Serializable::Float value = 0.0;
if (values[0]->get(axis))
{
}
- void loadTilemap(SerializablePtr root, const Matrix4& transform,
+ void loadTilemap(SerializableP root, const Matrix4& transform,
const std::string& texture)
{
- std::map<std::string,SerializablePtr> rootObj;
- std::map<std::string,SerializablePtr>::iterator it;
+ Serializable::Map rootObj;
+ Serializable::Map::iterator it;
if (!root->get(rootObj))
{
- std::cerr << "error loading scene tilemap object" << std::endl;
+ logError("invalid tilemap instruction");
return;
}
}
else
{
- std::cerr << "width is a required field of a tilemap" << std::endl;
+ logError("missing required field width for tilemap instruction");
return;
}
- std::vector<SerializablePtr> tiles;
+ Serializable::Array tiles;
if ((it = rootObj.find("tiles")) != rootObj.end() &&
(*it).second->get(tiles) &&
tiles.size() % width == 0)
{
- std::vector<SerializablePtr>::iterator jt;
+ Serializable::Array::iterator jt;
int w, h;
height = tiles.size() / width;
for (w = 0; w < width && jt != tiles.end(); ++w, ++jt)
{
- long index;
+ Serializable::Integer index;
if ((*jt)->get(index))
{
}
else
{
- std::cerr << "error loading tiles from tilemap object" << std::endl;
+ logError("invalid tiles in tilemap instruction");
return;
}
}
}
- void loadBillboard(SerializablePtr root, const Matrix4& transform,
+ void loadBillboard(SerializableP root, const Matrix4& transform,
const std::string& texture)
{
- std::map<std::string,SerializablePtr> rootObj;
- std::map<std::string,SerializablePtr>::iterator it;
+ Serializable::Map rootObj;
+ Serializable::Map::iterator it;
Tilemap::Index index = 0;
long width = 1;
{
if ((it = rootObj.find("tile")) != rootObj.end())
{
- long value;
+ Serializable::Integer value;
if ((*it).second->get(value))
{
index = Tilemap::Index(value);
std::string filePath = Scene::getPath(getName());
Deserializer deserializer(filePath, true);
- SerializablePtr root = deserializer.deserialize();
+ SerializableP root = deserializer.deserialize();
- std::map<std::string,SerializablePtr> rootObj;
- std::map<std::string,SerializablePtr>::iterator it;
+ Serializable::Map rootObj;
+ Serializable::Map::iterator it;
if (!root || !root->get(rootObj))
{
- std::cerr << "error loading scene file" << std::endl;
+ logError("no root map in scene file");
return;
}
}
else
{
- std::cerr << "maximum bounds required in scene" << std::endl;
+ logError("missing required maximum bounds");
return;
}
// create the tree to store the quads
- octree = OctreePtr(new Octree(maximumBounds));
+ octree = Octree::alloc(maximumBounds);
if ((it = rootObj.find("instructions")) != rootObj.end())
{
loadInstructions((*it).second);
}
+
+
octree->sort();
}
Aabb playfieldBounds;
Aabb maximumBounds;
- OctreePtr octree;
+ OctreeP octree;
};
Scene::Scene(const std::string& name) :
// pass through
- impl_(Scene::Impl::retain(name), &Scene::Impl::release) {}
+ impl_(Scene::Impl::getInstance(name)) {}
void Scene::draw(Scalar alpha, const Camera& cam) const
}
-OctreePtr Scene::getOctree() const
+OctreeP Scene::getOctree() const
{
// pass through
return impl_->octree;