| 117 |
117 |
#ifdef LUASCRIPT
|
| 118 |
118 |
lua=mlua;
|
| 119 |
119 |
#endif
|
|
120 |
resizeCells(1000); // previous default value was 10k, lowered it a bit
|
| 120 |
121 |
free_collision_box=0;
|
| 121 |
122 |
free_collision_tri=0;
|
| 122 |
123 |
free_eventsource=0;
|
| ... | ... | |
| 131 |
132 |
loadDefaultModels();
|
| 132 |
133 |
}
|
| 133 |
134 |
|
|
135 |
void Collisions::resizeCells(int newsize)
|
|
136 |
{
|
|
137 |
int oldsize = cells.size();
|
|
138 |
cells.resize(newsize);
|
|
139 |
if(debugMode)
|
|
140 |
{
|
|
141 |
Ogre::LogManager::getSingleton().logMessage("COLL: cell limit of " + StringConverter::toString(oldsize) + " reached. Increasing limit by 1000.");
|
|
142 |
Ogre::LogManager::getSingleton().logMessage("COLL: cell memory is now " + StringConverter::toString(cells.size() * sizeof(cell_t) / 1024.0f) + " kB big");
|
|
143 |
}
|
|
144 |
if(oldsize > (int)cells.size())
|
|
145 |
{
|
|
146 |
for(int i=oldsize-1;i<(int)cells.size();i++)
|
|
147 |
{
|
|
148 |
memset(&cells[i], 0xff, sizeof(cell_t));
|
|
149 |
//for(int j=0;j<CELL_BLOCKSIZE;j++)
|
|
150 |
// cells[i].element[j] = UNUSED_CELLELEMENT;
|
|
151 |
cells[i].next=0;
|
|
152 |
cells[i].free=0;
|
|
153 |
}
|
|
154 |
}
|
|
155 |
}
|
|
156 |
|
| 134 |
157 |
void Collisions::loadDefaultModels()
|
| 135 |
158 |
{
|
| 136 |
159 |
FILE *fd;
|
| ... | ... | |
| 322 |
345 |
|
| 323 |
346 |
if (hashtable[pos].cellid==UNUSED_CELLID)
|
| 324 |
347 |
{
|
| 325 |
|
if (free_cell<MAX_CELLS)
|
|
348 |
if (free_cell + 10>=(int)cells.size())
|
| 326 |
349 |
{
|
| 327 |
|
//create a new cell
|
| 328 |
|
hashtable[pos].cellid=cellid;
|
| 329 |
|
hashtable[pos].cell=&cells[free_cell];
|
| 330 |
|
cells[free_cell].free=1;
|
| 331 |
|
cells[free_cell].element[0]=value;
|
| 332 |
|
cells[free_cell].next=0;
|
| 333 |
|
if (pos!=hashfunc(cellid)) collision_count++;
|
| 334 |
|
if (cells[free_cell].free>largest_cellcount) largest_cellcount=cells[free_cell].free;
|
| 335 |
|
free_cell++;
|
|
350 |
int oldsize = cells.size();
|
|
351 |
resizeCells(cells.size() + 1000);
|
| 336 |
352 |
}
|
| 337 |
|
else
|
| 338 |
|
{
|
| 339 |
|
if(debugMode)
|
| 340 |
|
Ogre::LogManager::getSingleton().logMessage("COLL: not enough cells available");
|
| 341 |
|
}
|
|
353 |
//create a new cell
|
|
354 |
hashtable[pos].cellid=cellid;
|
|
355 |
hashtable[pos].cell=&cells[free_cell];
|
|
356 |
cells[free_cell].free=1;
|
|
357 |
cells[free_cell].element[0]=value;
|
|
358 |
cells[free_cell].next=0;
|
|
359 |
if (pos!=hashfunc(cellid)) collision_count++;
|
|
360 |
if (cells[free_cell].free>largest_cellcount) largest_cellcount=cells[free_cell].free;
|
|
361 |
free_cell++;
|
| 342 |
362 |
}
|
| 343 |
363 |
else if (hashtable[pos].cellid==cellid)
|
| 344 |
364 |
{
|
| ... | ... | |
| 625 |
645 |
{
|
| 626 |
646 |
LogManager::getSingleton().logMessage("COLL: Collision system statistics:");
|
| 627 |
647 |
LogManager::getSingleton().logMessage("COLL: Cell size: "+StringConverter::toString((float)CELL_SIZE)+" m");
|
| 628 |
|
LogManager::getSingleton().logMessage("COLL: Hashtable occupation: "+StringConverter::toString(free_cell)+"/"+StringConverter::toString(MAX_CELLS)+" ("+StringConverter::toString(100.0f*free_cell/(MAX_CELLS))+"%)");
|
|
648 |
LogManager::getSingleton().logMessage("COLL: Amount of Cells: " + StringConverter::toString(cells.size()));
|
|
649 |
LogManager::getSingleton().logMessage("COLL: Cell memory is now " + StringConverter::toString(cells.size() * sizeof(cell_t) / 1024.0f) + " kB big");
|
|
650 |
LogManager::getSingleton().logMessage("COLL: Hashtable occupation: "+StringConverter::toString(free_cell)+"/"+StringConverter::toString(cells.size())+" ("+StringConverter::toString(100.0f*free_cell/(cells.size()))+"%)");
|
| 629 |
651 |
LogManager::getSingleton().logMessage("COLL: Hashtable collisions: "+StringConverter::toString(collision_count));
|
| 630 |
652 |
LogManager::getSingleton().logMessage("COLL: Largest cell: "+StringConverter::toString(largest_cellcount)+"/"+StringConverter::toString(CELL_BLOCKSIZE)+" ("+StringConverter::toString(100.0f*largest_cellcount/CELL_BLOCKSIZE)+"%)");
|
| 631 |
|
|
| 632 |
653 |
}
|
| 633 |
654 |
|
| 634 |
655 |
|