// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/> // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. #include "stdpacs.h" #include "collision_surface_temp.h" namespace NLPACS { // *************************************************************************** const uint32 StartEdgeCollideNodeSize= 128; // mem: 48*128= 6144 const uint32 StartCollisionChainSize= 128; // mem: 24*128= 3072 const uint32 StartEdgeChainEntrySize= 1024; // mem: 6*1024= 6144 const uint32 StartCollisionDescSize= 64; // mem: 36*64= 2304 const uint32 StartCollisionInstanceSize= 64; // mem: 4*64= 256 // Total default memory cost by CCollisionSurfaceTemp: 18Ko + 128Ko (OChainLUT). // *************************************************************************** CCollisionSurfaceTemp::CCollisionSurfaceTemp() { memset(OChainLUT, 0xFF, 65536*sizeof(uint16)); memset(SurfaceLUT, 0x00, 65536*sizeof(CSurfaceLUTEntry)); _EdgeCollideNodes.reserve(StartEdgeCollideNodeSize); CollisionChains.reserve(StartCollisionChainSize); EdgeChainEntries.reserve(StartEdgeChainEntrySize); CollisionDescs.reserve(StartCollisionDescSize); MoveDescs.reserve(StartCollisionDescSize); RotDescs.reserve(StartCollisionDescSize); CollisionInstances.reserve(StartCollisionInstanceSize); PossibleSurfaces.reserve(32); PrecValid= false; OutCounter = 0; } // *************************************************************************** void CCollisionSurfaceTemp::resetEdgeCollideNodes() { _EdgeCollideNodes.clear(); } // *************************************************************************** uint32 CCollisionSurfaceTemp::allocEdgeCollideNode(uint32 size) { uint32 id= _EdgeCollideNodes.size(); _EdgeCollideNodes.resize(id+size); return id; } // *************************************************************************** CEdgeCollideNode &CCollisionSurfaceTemp::getEdgeCollideNode(uint32 id) { return _EdgeCollideNodes[id]; } } // NLPACS