I'm trying to dynamically populate an area with trees, that I could eventually modify in future (scale, mesh etc.).
I'm setting my custom area data with:
Code:
struct CustomWorldAreaData: public Game::Area::Data
{
CustomWorldAreaData(Game::Area &area) :
Game::Area::Data(area)
{
}
Memx<Game::Obj*> trees;
virtual Bool customSaveWant()
{
return true;
}
};
The trees container is for the pointers to the trees objects. Trees objects are in a:
Code:
Game::ObjMemx<Game::Static> Trees;
Then I set and populate the area with:
Code:
Game::World.setObjType(Trees, OBJ_TREE);
Game::World.setAreaData<CustomWorldArea> ();
Game::World.areaLoaded(VecI2(x, z))->getData();
CustomWorldAreaData * AreaData = CASTCustomWorldAreaData, Game::World.areaLoaded(VecI2(x, z))->data());
for (int u=0; u<100; u++)
{
double xx = RandomF(0, 128);
double zz = RandomF(0, 128);
Game::ObjParamsPtr tree = Game::Objs.ptrRequire("Data/Obj/plant/Tree/0.obj");
Matrix m(tree->scale(), Vec(x,y,z));
m.rotateYVec(Random(0, 360));
Game::Obj* treeObj = Game::World.objCreateNear(*tree, m);
Game::Obj * treePtr = AreaData->trees.New();
treePtr = treeObj;
}
After these operations, when I do:
Code:
AreaData->trees.elms()
I get the correct number of trees.
However, when I try to reference to the stored pointers:
Code:
REPA(AreaData->trees)
{
Game::Static * tr = CAST(Game::Static, AreaData->trees[i]);
}
The application crashes?
My questions are:
- what could cause the crash, if the container were non-empty?
- how to delete a certain object (tree), having only such pointer stored in container? [removeData?]