#include <ps_mesh.h>
Inheritance diagram for NL3D::CPSMesh:
Definition at line 73 of file ps_mesh.h.
Public Member Functions | |
virtual void | basisChanged (TPSMatrixMode systemBasis) |
virtual bool | completeBBox (NLMISC::CAABBox &box) const |
NLMISC::CVector | computeI (void) const |
NLMISC::CVector | computeJ (void) const |
NLMISC::CVector | computeK (void) const |
CPSMesh (const std::string &shape="") | |
construct the system by using the given shape for mesh | |
void | disableAutoLOD (bool disable=true) |
Force the Auto-LOD to be disbaled. When set to false, the default behaviour set in the system is used. | |
virtual bool | doesProduceBBox (void) const |
virtual void | draw (bool opaque) |
derivers draw the particles here | |
void | enableGlobalColorLighting (bool enabled) |
virtual void | enumTexs (std::vector< NLMISC::CSmartPtr< ITexture > > &dest, IDriver &drv) |
float | getAngle2D (void) const |
get the constant | |
const CPSAttribMaker< float > * | getAngle2DScheme (void) const |
get the angle 2D scheme (NULL if none) const version | |
CPSAttribMaker< float > * | getAngle2DScheme (void) |
get the angle 2D scheme (NULL if none) | |
virtual std::string | getClassName ()=0 |
IDriver * | getDriver () const |
shortcut to get an instance of the driver | |
uint32 | getExternID (void) const |
get the extern ID of this located bindable | |
const CFontGenerator * | getFontGenerator (void) const |
Shortcut to get the font generator if one was set (const version). | |
CFontGenerator * | getFontGenerator (void) |
Shortcut to get the font generator if one was set. | |
const CFontManager * | getFontManager (void) const |
Shortcut to get the font manager if one was set (const version). | |
CFontManager * | getFontManager (void) |
*************************************************************************************** | |
const NLMISC::CMatrix & | getInvertedSysMat (void) const |
shortcut to get the inverted matrix of the system | |
const NLMISC::CMatrix & | getInvertedViewMat (void) const |
shortcut to get the inverted view matrix | |
const NLMISC::CMatrix & | getLocalToWorldMatrix () const |
Shortcut to get the local to world matrix. | |
TPSLod | getLOD (void) const |
get the valid lods for that object | |
virtual uint32 | getMaxNumFaces (void) const |
return the max number of faces needed for display. This is needed for LOD balancing | |
std::string | getName (void) const |
get the located bindable name (edition purpose) | |
const CPSLocated * | getOwner (void) const |
get the located that owns this bindable (const version) | |
CPSLocated * | getOwner (void) |
get the located that owns this bindable | |
CPlaneBasis | getPlaneBasis (void) const |
get the constant basis | |
const CPSAttribMaker< CPlaneBasis > * | getPlaneBasisScheme (void) const |
get the plane basis scheme, (NULL if none) const version | |
CPSAttribMaker< CPlaneBasis > * | getPlaneBasisScheme (void) |
get the plane basis scheme, (NULL if none) | |
virtual uint32 | getPriority (void) const |
return priority | |
std::string | getShape (void) const |
get the shape used for those particles | |
float | getSize (void) const |
get the constant size | |
const CPSAttribMaker< float > * | getSizeScheme (void) const |
get the size scheme (NULL if none) const version | |
CPSAttribMaker< float > * | getSizeScheme (void) |
get the size scheme (NULL if none) | |
const NLMISC::CMatrix & | getSysMat (void) const |
*************************************************************************************** | |
uint32 | getType (void) const |
return this bindable type | |
virtual bool | getUserMatrixUsageCount () const |
const NLMISC::CMatrix & | getViewMat (void) const |
shortcut to get the view matrix | |
virtual bool | hasEmitters (void) const |
tells wether there are alive emitters | |
virtual bool | hasLightableFaces () |
from CPSParticle : return true if there are lightable faces in the object | |
virtual bool | hasOpaqueFaces (void) |
return true if there are Opaque faces in the object | |
virtual bool | hasParticles (void) const |
return true if this located bindable derived class holds alive particles | |
virtual bool | hasTransparentFaces (void) |
return true if there are transparent faces in the object | |
void | invalidate () |
bool | isActive () const |
bool | isAutoLODDisabled () const |
Test wether Auto-LOD is disabled. | |
virtual void | motionTypeChanged (bool parametric) |
called when a located has switch between incrmental / parametric motion. The default does nothing | |
NLMISC_DECLARE_CLASS (CPSMesh) | |
virtual void | notifyTargetRemoved (CPSLocated *ptr) |
*************************************************************************************** | |
virtual void | releaseRefTo (const CParticleSystemProcess *other) |
virtual void | serial (NLMISC::IStream &f) throw (NLMISC::EStream) |
serialisation. Derivers must override this, and call their parent version | |
void | serialAngle2DScheme (NLMISC::IStream &f) throw (NLMISC::EStream) |
=================================================================================== | |
void | serialPlaneBasisScheme (NLMISC::IStream &f) throw (NLMISC::EStream) |
=================================================================================== | |
void | serialSizeScheme (NLMISC::IStream &f) throw (NLMISC::EStream) |
serialization. We choose a different name because of multiple-inheritance | |
void | setActive (bool active) |
Activate / Deactivate this object. When not active, the owning system won't try to call the 'step' method. | |
void | setAngle2D (float angle) |
=================================================================================== | |
void | setAngle2DScheme (CPSAttribMaker< float > *scheme) |
=================================================================================== | |
void | setExternID (uint32 id) |
*************************************************************************************** | |
void | setLOD (TPSLod lod) |
void | setName (const std::string &name) |
set the located bindable name (edition purpose) | |
void | setPlaneBasis (const CPlaneBasis &basis) |
=================================================================================== | |
void | setPlaneBasisScheme (CPSAttribMaker< CPlaneBasis > *basisMaker) |
=================================================================================== | |
void | setShape (const std::string &shape) |
set a new shape for that kind of particles | |
void | setSize (float size) |
Set a constant size for the particles. | |
void | setSizeScheme (CPSAttribMaker< float > *size) |
void | setupDriverModelMatrix (void) |
shortcut to setup the model matrix (system basis or world basis) | |
virtual void | setZBias (float value) |
virtual void | showTool () |
draw the particles for edition mode. The default behaviour just draw a wireframe model | |
virtual bool | supportGlobalColorLighting () const |
virtual void | systemDateChanged () |
bool | usesGlobalColorLighting () |
virtual | ~CPSMesh () |
Static Public Member Functions | |
const float * | getRotTable (void) |
void | initRotTable (void) |
=================================================================================== | |
Protected Types | |
typedef CPSAttrib< CTransformShape * > | TInstanceCont |
Protected Member Functions | |
virtual void | bounceOccured (uint32 index) |
void | computeSrcStep (uint32 &step, uint &numToProcess) |
void | deleteAngle2DElement (uint32 index) |
virtual void | deleteElement (uint32 index) |
void | deletePlaneBasisElement (uint32 index) |
void | deleteSizeElement (uint32 index) |
void | displayIcon2d (const NLMISC::CVector tab[], uint nbSegs, float scale) |
*************************************************************************************** | |
virtual CPSLocated * | getAngle2DOwner (void) |
deriver must return their owner there | |
virtual CPSLocated * | getPlaneBasisOwner (void) |
if this is false, constant size will be used instead of a scheme deriver must return their owner there | |
virtual CPSLocated * | getSizeOwner (void) |
deriver must return their owner there | |
void | newAngle2DElement (CPSLocated *emitterLocated, uint32 emitterIndex) |
virtual void | newElement (CPSLocated *emitterLocated, uint32 emitterIndex) |
void | newPlaneBasisElement (CPSLocated *emitterLocated, uint32 emitterIndex) |
void | newSizeElement (CPSLocated *emitterLocated, uint32 emitterIndex) |
void | notifyOwnerMaxNumFacesChanged (void) const |
void | releaseAllRef () |
*************************************************************************************** | |
virtual void | resize (uint32 size) |
void | resizeAngle2D (uint32 size) |
void | resizePlaneBasis (uint32 size) |
void | resizeSize (uint32 size) |
virtual void | setOwner (CPSLocated *psl) |
*************************************************************************************** | |
virtual void | step (TPSProcessPass pass, TAnimationTime ellapsedTime, TAnimationTime realEt) |
virtual void | updatePos () |
in fact we don't draw the meshs, we just update their pos... | |
Protected Attributes | |
bool | _Active |
float | _Angle2D |
CPSAttribMaker< float > * | _Angle2DScheme |
uint32 | _ExternID |
TInstanceCont | _Instances |
bool | _Invalidated |
TPSLod | _LOD |
tells when this object must be dealt with | |
std::string | _Name |
CPSLocated * | _Owner |
float | _ParticleSize |
CPlaneBasis | _PlaneBasis |
CPSAttribMaker< CPlaneBasis > * | _PlaneBasisScheme |
std::string | _Shape |
CPSAttribMaker< float > * | _SizeScheme |
Static Protected Attributes | |
bool | _InitializedRotTab = false |
it is true if the table has been initialized, for debug purposes | |
float | _RotTable [4 *256] |
Friends | |
class | CPSLocated |
|
|
|
construct the system by using the given shape for mesh
Definition at line 81 of file ps_mesh.h. References _Shape.
00081 : _Invalidated(false) 00082 { 00083 _Shape = shape; 00084 if (CParticleSystem::getSerializeIdentifierFlag()) _Name = std::string("Mesh"); 00085 } |
|
Definition at line 434 of file ps_mesh.cpp. References NL3D::CPSAttrib< T >::begin(), NL3D::CScene::deleteInstance(), NL3D::CPSAttrib< T >::end(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getScene(), and nlassert.
00435 { 00436 if (_Owner && _Owner->getOwner()) 00437 { 00438 CScene *scene = _Owner->getScene(); 00439 nlassert(scene); // the setScene method of the particle system should have been called 00440 00441 for (TInstanceCont::iterator it = _Instances.begin(); it != _Instances.end(); ++it) 00442 { 00443 if (*it) scene->deleteInstance(*it); 00444 } 00445 } 00446 else 00447 { 00448 #ifdef NL_DEBUG 00449 for (TInstanceCont::iterator it = _Instances.begin(); it != _Instances.end(); ++it) 00450 { 00451 nlassert(*it == NULL); // there's a leak..:( 00452 } 00453 #endif 00454 } 00455 } |
|
Called when the basis of the owner changed. the default behaviour does nothing
Reimplemented in NL3D::CPSForce. Definition at line 968 of file ps_located.h.
00968 {} |
|
a bounce occured, so some action could be done. The default behaviour does nothing
Reimplemented in NL3D::CPSEmitter. Definition at line 1011 of file ps_located.h.
01011 {} |
|
Reimplemented in NL3D::CPSFanLight, NL3D::CPSQuad, and NL3D::CPSShockWave. Definition at line 884 of file ps_located.h.
00884 { return false ;} |
|
Compute a vector that will map to (1 0 0) after view and model transform. This allow to have object that always faces the user, whatever basis they are in Definition at line 931 of file ps_located.h. References NL3D::CPSLocated::computeI(). Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSGravity::show(), and NL3D::CPSEmitter::showTool().
00931 { return _Owner->computeI(); } |
|
Compute a vector that will map to (0 1 0) after view and model transform. This allow to have object that always faces the user, whatever basis they are in Definition at line 936 of file ps_located.h. References NL3D::CPSLocated::computeJ(). Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt().
00936 { return _Owner->computeJ(); } |
|
Compute a vector that will map to (0 0 1) after view and model transform. This allow to have object that always faces the user, whatever basis they are in Definition at line 940 of file ps_located.h. References NL3D::CPSLocated::computeK(). Referenced by NL3D::CPSLocatedBindable::displayIcon2d(), NL3D::CPSFanLightHelper::drawFanLight(), NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), and NL3D::CPSEmitter::showTool().
00940 { return _Owner->computeK(); } |
|
System may have hand-tuned LOD, or auto LOD. This compute the number of particles that must really be displayed, and the src step that allow to go through the whole collection. The step in the source is in a fixed point 16:16 format Definition at line 82 of file ps_particle_basic.cpp. References NL3D::CPSParticle::_DisableAutoLOD, NLMISC::clamp(), NL3D::CParticleSystem::getAutoLODDegradationExponent(), NL3D::CParticleSystem::getAutoLODMode(), NL3D::CParticleSystem::getAutoLODStartDistPercent(), NL3D::CParticleSystem::getOneMinusCurrentLODRatio(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getSize(), NL3D::CParticleSystem::isAutoLODEnabled(), NL3D::CParticleSystem::isSharingEnabled(), nlassert, r, uint, and uint32. Referenced by NL3D::CPSShockWave::draw(), NL3D::CPSConstraintMesh::draw(), NL3D::CPSFanLight::draw(), NL3D::CPSFaceLookAt::draw(), NL3D::CPSDot::draw(), NL3D::CPSTailDot::step(), NL3D::CPSRibbonLookAt::step(), NL3D::CPSRibbon::step(), and NL3D::CPSFace::step().
00083 { 00084 nlassert(_Owner && _Owner->getOwner()); 00085 const CParticleSystem &ps = *(_Owner->getOwner()); 00086 if (_DisableAutoLOD || !ps.isAutoLODEnabled() || !ps.isSharingEnabled() || _Owner->getSize() == 0) // Should Auto-LOD be used ? 00087 { 00088 step = (1 << 16); 00089 numToProcess = _Owner->getSize(); 00090 } 00091 else 00092 { 00093 float oneMinusLODRatio = ps.getOneMinusCurrentLODRatio(); 00094 float LODRatio = 1.f - oneMinusLODRatio; 00095 if (LODRatio > ps.getAutoLODStartDistPercent()) 00096 { 00097 float factor = (LODRatio - 1.f) / (ps.getAutoLODStartDistPercent() - 1.f); 00098 NLMISC::clamp(factor, 0.f, 1.f); 00099 float r = factor; 00100 for (uint k = 1; k < ps.getAutoLODDegradationExponent(); ++k) 00101 { 00102 r *= factor; 00103 } 00104 numToProcess = (uint) (_Owner->getSize() * r); 00105 if (numToProcess < 1) { numToProcess = 1; } 00106 00107 step = ps.getAutoLODMode() ? // skip or limit number, depending on the mode 00108 (_Owner->getSize() << 16) / numToProcess : // skip particles 00109 (1 << 16); // just display less particles 00110 } 00111 else 00112 { 00113 step = (1 << 16); 00114 numToProcess = _Owner->getSize(); 00115 } 00116 } 00117 00118 } |
|
Definition at line 380 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSAttribMaker< float >::deleteElement(), NL3D::CPSAttribMaker< float >::hasMemory(), index, and uint32. Referenced by NL3D::CPSShockWave::deleteElement(), deleteElement(), NL3D::CPSFanLight::deleteElement(), and NL3D::CPSFaceLookAt::deleteElement().
00381 { 00382 if (_Angle2DScheme && _Angle2DScheme->hasMemory()) _Angle2DScheme->deleteElement(index); 00383 } |
|
Delete an element given its index Attributes of the located that hold this bindable are still accessible for the index given index out of range -> nl_assert Implements NL3D::CPSParticle. Definition at line 260 of file ps_mesh.cpp. References NL3D::CPSRotated2DParticle::deleteAngle2DElement(), NL3D::CScene::deleteInstance(), NL3D::CPSRotated3DPlaneParticle::deletePlaneBasisElement(), NL3D::CPSSizedParticle::deleteSizeElement(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getScene(), index, nlassert, NL3D::CPSAttrib< T >::remove(), and uint32.
00261 { 00262 deleteSizeElement(index); 00263 deleteAngle2DElement(index); 00264 deletePlaneBasisElement(index); 00265 00266 // check wether CTransformShape have been instanciated 00267 if (_Invalidated) return; 00268 00269 nlassert(_Owner); 00270 nlassert(_Owner->getOwner()); 00271 00272 CScene *scene = _Owner->getScene(); 00273 nlassert(scene); // the setScene method of the particle system should have been called 00274 00275 scene->deleteInstance(_Instances[index]); 00276 _Instances.remove(index); 00277 } |
|
Definition at line 703 of file ps_particle_basic.h. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSAttribMaker< CPlaneBasis >::deleteElement(), NL3D::CPSAttribMaker< CPlaneBasis >::hasMemory(), index, and uint32. Referenced by NL3D::CPSConstraintMesh::deleteElement(), deleteElement(), and NL3D::CPSFace::deleteElement().
00704 { 00705 if (_PlaneBasisScheme && _PlaneBasisScheme->hasMemory()) _PlaneBasisScheme->deleteElement(index); 00706 } |
|
Definition at line 295 of file ps_particle_basic.h. References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSAttribMaker< float >::deleteElement(), NL3D::CPSAttribMaker< float >::hasMemory(), index, and uint32. Referenced by NL3D::CPSShockWave::deleteElement(), NL3D::CPSRibbonLookAt::deleteElement(), NL3D::CPSRibbon::deleteElement(), NL3D::CPSQuad::deleteElement(), NL3D::CPSConstraintMesh::deleteElement(), deleteElement(), and NL3D::CPSFanLight::deleteElement().
00296 { 00297 if (_SizeScheme && _SizeScheme->hasMemory()) _SizeScheme->deleteElement(index); 00298 } |
|
Force the Auto-LOD to be disbaled. When set to false, the default behaviour set in the system is used.
Definition at line 137 of file ps_particle_basic.h. References NL3D::CPSParticle::_DisableAutoLOD.
00137 { _DisableAutoLOD = disable; } |
|
*************************************************************************************** show an drawing to represent the object, and in red if it is selected
Definition at line 2038 of file ps_located.cpp. References NL3D::CPSLocatedBindable::computeI(), NL3D::CPSLocatedBindable::computeK(), NL3D::CParticleSystem::getCurrentEditedElement(), NL3D::CPSLocatedBindable::getDriver(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getPos(), NL3D::CPSLocated::getSize(), index, NL3D::CMaterial::setBlend(), NL3D::CMaterial::setBlendFunc(), NL3D::CMaterial::setColor(), NL3D::CMaterial::setLighting(), NL3D::CPSLocatedBindable::setupDriverModelMatrix(), NL3D::CMaterial::setZFunc(), NL3D::CMaterial::setZWrite(), size, uint, uint32, NLMISC::CLine::V0, NLMISC::CLine::V1, NLMISC::CVector::x, and NLMISC::CVector::y. Referenced by NL3D::CPSSpring::show(), NL3D::CPSCentralGravity::show(), and NL3D::CPSParticle::showTool().
02039 { 02040 uint32 size = _Owner->getSize(); 02041 if (!size) return; 02042 setupDriverModelMatrix(); 02043 02044 const CVector I = computeI(); 02045 const CVector K = computeK(); 02046 02047 static std::vector<NLMISC::CLine> lines; 02048 02049 lines.clear(); 02050 02051 // ugly slow code, but not for runtime 02052 for (uint k = 0; k < size; ++k) 02053 { 02054 // center of the current particle 02055 const CVector p = _Owner->getPos()[k]; 02056 02057 02058 02059 for (uint l = 0; l < nbSegs; ++l) 02060 { 02061 NLMISC::CLine li; 02062 li.V0 = p + scale * (tab[l << 1].x * I + tab[l << 1].y * K); 02063 li.V1 = p + scale * (tab[(l << 1) + 1].x * I + tab[(l << 1) + 1].y * K); 02064 lines.push_back(li); 02065 } 02066 02067 CMaterial mat; 02068 02069 mat.setBlendFunc(CMaterial::one, CMaterial::one); 02070 mat.setZWrite(false); 02071 mat.setLighting(false); 02072 mat.setBlend(true); 02073 mat.setZFunc(CMaterial::less); 02074 02075 02076 02077 CPSLocated *loc; 02078 uint32 index; 02079 CPSLocatedBindable *lb; 02080 _Owner->getOwner()->getCurrentEditedElement(loc, index, lb); 02081 02082 mat.setColor((lb == NULL || this == lb) && loc == _Owner && index == k ? CRGBA::Red : CRGBA(127, 127, 127)); 02083 02084 02085 CDRU::drawLinesUnlit(lines, mat, *getDriver() ); 02086 } 02087 02088 } |
|
Reimplemented in NL3D::CPSForce. Definition at line 888 of file ps_located.h.
00888 { return true; } |
|
derivers draw the particles here
Reimplemented in NL3D::CPSDot, NL3D::CPSFaceLookAt, NL3D::CPSFanLight, and NL3D::CPSShockWave. Definition at line 110 of file ps_particle_basic.h. Referenced by NL3D::CPSParticle::step().
00110 {} |
|
Definition at line 105 of file ps_particle_basic.h. References NL3D::CPSParticle::_UsesGlobalColorLighting.
00105 { _UsesGlobalColorLighting = enabled; } |
|
Reimplemented in NL3D::CPSFanLight, NL3D::CPSQuad, NL3D::CPSRibbon, NL3D::CPSRibbonLookAt, and NL3D::CPSShockWave. Definition at line 977 of file ps_located.h.
00977 {} |
|
*************************************************************************************** this should be called before to delete any bindable inserted in a system, but this is done by the system, so you should never need calling it. This has been introduced because calls in dtor are not polymorphic to derived class (which are already destroyed anyway), and some infos are needed in some dtor. The default behaviour does nothing Reimplemented in NL3D::CPSTargetLocatedBindable. Definition at line 1975 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocatedBindable::getUserMatrixUsageCount(), and NL3D::CParticleSystem::releaseRefForUserSysCoordInfo().
01976 { 01977 if (_Owner && _Owner->getOwner()) 01978 { 01979 _Owner->getOwner()->releaseRefForUserSysCoordInfo(getUserMatrixUsageCount()); 01980 } 01981 } |
|
get the constant
Definition at line 336 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_Angle2D.
00336 { return _Angle2D; } |
|
deriver must return their owner there
Implements NL3D::CPSRotated2DParticle. Definition at line 164 of file ps_mesh.h.
00164 { return _Owner; } |
|
get the angle 2D scheme (NULL if none) const version
Definition at line 326 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_Angle2DScheme.
00326 { return _Angle2DScheme; } |
|
get the angle 2D scheme (NULL if none)
Definition at line 323 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_Angle2DScheme.
00323 { return _Angle2DScheme; } |
|
Implemented in NLAIAGENT::CNumericIndex, NLAIC::IPointerGestion, NLAIC::CIdentType, and CAutomataDesc. Referenced by NLMISC::CClassRegistry::checkObject(), and NL3D::GetTextureSize(). |
|
|
get the extern ID of this located bindable
Definition at line 964 of file ps_located.h. References NL3D::CPSLocatedBindable::_ExternID, and uint32. Referenced by NL3D::CPSLocated::bind(), and NL3D::CParticleSystem::unregisterLocatedBindableExternID().
00964 { return _ExternID; } |
|
Shortcut to get the font generator if one was set (const version).
Definition at line 904 of file ps_located.h. References NL3D::CParticleSystemProcess::getFontGenerator(), and nlassert.
|
|
Shortcut to get the font generator if one was set.
Definition at line 897 of file ps_located.h. References NL3D::CParticleSystemProcess::getFontGenerator(), and nlassert. Referenced by NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), and NL3D::CPSEmitterRectangle::showTool().
|
|
Shortcut to get the font manager if one was set (const version).
Definition at line 2099 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getFontManager(), and nlassert.
|
|
***************************************************************************************
Definition at line 2091 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getFontManager(), and nlassert. Referenced by NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSCylindricVortex::show(), NL3D::CPSGravity::show(), and NL3D::CPSEmitterRectangle::showTool().
|
|
shortcut to get the inverted matrix of the system
Definition at line 2116 of file ps_located.cpp. References NL3D::CParticleSystem::getInvertedSysMat(), NL3D::CParticleSystemProcess::getOwner(), and nlassert.
|
|
shortcut to get the inverted view matrix
Definition at line 2134 of file ps_located.cpp. References NL3D::CParticleSystem::getInvertedViewMat(), NL3D::CParticleSystemProcess::getOwner(), and nlassert.
|
|
Shortcut to get the local to world matrix.
Definition at line 1144 of file ps_located.h. References NL3D::CPSLocated::getLocalToWorldMatrix(), and nlassert. Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSSound::newElement(), NL3D::CPSZoneRectangle::show(), NL3D::CPSZoneCylinder::show(), NL3D::CPSZoneDisc::show(), NL3D::CPSZonePlane::show(), NL3D::CPSLight::show(), NL3D::CPSGravity::show(), NL3D::CPSEmitterRectangle::showTool(), NL3D::CPSLight::step(), and updatePos().
|
|
get the valid lods for that object
Definition at line 954 of file ps_located.h. References NL3D::CPSLocatedBindable::_LOD, and NL3D::TPSLod.
00954 { return _LOD; } |
|
return the max number of faces needed for display. This is needed for LOD balancing we don't draw any face ! (the meshs are drawn by the scene) Implements NL3D::CPSParticle. Definition at line 182 of file ps_mesh.cpp. References uint32.
00183 {
00185 return 0;
00186 }
|
|
get the located bindable name (edition purpose)
Definition at line 948 of file ps_located.h.
00948 { return _Name; } |
|
get the located that owns this bindable (const version)
Definition at line 944 of file ps_located.h.
00944 { return _Owner; } |
|
get the located that owns this bindable
Definition at line 942 of file ps_located.h. Referenced by NL3D::CPSLocated::deleteElement(), NL3D::CParticleSystemInstanceUser::emit(), NL3D::CPSFaceLookAt::CSecondSize::getSizeOwner(), NL3D::CPSSound::newElement(), NL3D::CPSLocated::registerIntegrableForce(), NL3D::CParticleSystem::registerLocatedBindableExternID(), NL3D::CParticleSystemInstanceUser::removeByID(), NL3D::CPSSound::resize(), NL3D::CPSLight::resize(), NL3D::CPSSound::step(), NL3D::CPSLocated::unregisterIntegrableForce(), and NL3D::CParticleSystem::unregisterLocatedBindableExternID().
00942 { return _Owner; } |
|
get the constant basis
Definition at line 678 of file ps_particle_basic.h. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasis.
00678 { return _PlaneBasis; } |
|
if this is false, constant size will be used instead of a scheme deriver must return their owner there
Implements NL3D::CPSRotated3DPlaneParticle. Definition at line 165 of file ps_mesh.h.
00165 { return _Owner; } |
|
get the plane basis scheme, (NULL if none) const version
Definition at line 673 of file ps_particle_basic.h. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme.
00673 { return _PlaneBasisScheme; } |
|
get the plane basis scheme, (NULL if none) Set a constant basis for all particles
Definition at line 670 of file ps_particle_basic.h. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme.
00670 { return _PlaneBasisScheme; } |
|
return priority
Implements NL3D::CPSLocatedBindable. Definition at line 66 of file ps_particle_basic.h. References uint32.
00066 { return 1000; }
|
|
this return a float table used to speed up rotations of face look at and the like for each angle, there are 4 float : 2 couple of float : a1, b1, a2, b2 a1 * I + b1 * K = up left corner, a2 * I + b2 * K = up right corner, This table must have been initialized with initRotTable Definition at line 354 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_InitializedRotTab, NL3D::CPSRotated2DParticle::_RotTable, and nlassert.
|
|
get the shape used for those particles
Implements NL3D::CPSShapeParticle. Definition at line 91 of file ps_mesh.h. References _Shape.
00091 { return _Shape; } |
|
get the constant size
Definition at line 274 of file ps_particle_basic.h. References NL3D::CPSSizedParticle::_ParticleSize. Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt(), NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion(), NL3D::CPSSizedParticle::resizeSize(), and NL3D::CPSSizedParticle::setSizeScheme().
00274 { return _ParticleSize; } |
|
deriver must return their owner there
Implements NL3D::CPSSizedParticle. Definition at line 163 of file ps_mesh.h.
00163 { return _Owner; } |
|
get the size scheme (NULL if none) const version
Definition at line 268 of file ps_particle_basic.h. References NL3D::CPSSizedParticle::_SizeScheme.
00268 { return _SizeScheme; } |
|
get the size scheme (NULL if none)
Definition at line 265 of file ps_particle_basic.h. References NL3D::CPSSizedParticle::_SizeScheme. Referenced by NL3D::CPSFaceLookAtHelper::drawLookAt(), and NL3D::CPSFaceLookAtHelper::drawLookAtAlignOnMotion().
00265 { return _SizeScheme; } |
|
***************************************************************************************
Definition at line 2108 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getSysMat(), and nlassert.
|
|
return this bindable type
Implements NL3D::CPSLocatedBindable. Definition at line 63 of file ps_particle_basic.h. References NL3D::PSParticle, and uint32.
00063 { return PSParticle; } |
|
Reimplemented in NL3D::CPSEmitter. Definition at line 974 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::finalize(), and NL3D::CPSLocatedBindable::setOwner().
00974 { return 0; }
|
|
shortcut to get the view matrix
Definition at line 2125 of file ps_located.cpp. References NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::getViewMat(), and nlassert. Referenced by NL3D::CPSRibbonLookAt::displayRibbons(), and NL3D::CPSFaceLookAtHelper::drawLookAt().
|
|
tells wether there are alive emitters
Definition at line 958 of file ps_located.h.
00958 { return false; } |
|
from CPSParticle : return true if there are lightable faces in the object we don't draw any tri ! (the meshs are drawn by the scene) Implements NL3D::CPSParticle. Definition at line 203 of file ps_mesh.cpp.
00204 { 00206 return false; 00207 } |
|
return true if there are Opaque faces in the object we don't draw any tri ! (the meshs are drawn by the scene) Implements NL3D::CPSParticle. Definition at line 196 of file ps_mesh.cpp.
00197 { 00199 return false; 00200 } |
|
return true if this located bindable derived class holds alive particles
Reimplemented from NL3D::CPSLocatedBindable. Definition at line 69 of file ps_particle_basic.h. References NL3D::CPSLocated::getSize(), and nlassert.
|
|
return true if there are transparent faces in the object we don't draw any tri ! (the meshs are drawn by the scene) Implements NL3D::CPSParticle. Definition at line 189 of file ps_mesh.cpp.
00190 { 00192 return false; 00193 } |
|
===================================================================================
Definition at line 294 of file ps_particle_basic.cpp. References NL3D::CPSRotated2DParticle::_InitializedRotTab, NL3D::CPSRotated2DParticle::_RotTable, and uint32.
00295 { 00296 float *ptFloat = _RotTable; 00297 for (uint32 k = 0; k < 256; ++k) 00298 { 00299 const float ca = (float) cos(k * (1.0f / 256.0f) * 2.0f * NLMISC::Pi); 00300 const float sa = (float) sin(k * (1.0f / 256.0f) * 2.0f * NLMISC::Pi); 00301 00302 *ptFloat++ = -ca - sa; 00303 *ptFloat++ = -sa + ca; 00304 00305 *ptFloat++ = ca - sa; 00306 *ptFloat++ = sa + ca; 00307 } 00308 _InitializedRotTab = true; 00309 } |
|
invalidate the transformShapes that were inserted in the scene, so they need to be rebuilt during the next rendering. This is useful for clipping, or when the system has been loaded Definition at line 105 of file ps_mesh.h. References NL3D::CPSAttrib< T >::clear().
00106 { 00107 _Invalidated = true; 00108 _Instances.clear(); 00109 } |
|
Definition at line 844 of file ps_located.h. References NL3D::CPSLocatedBindable::_Active. Referenced by NL3D::CParticleSystem::hasActiveEmitters().
00844 { return _Active; } |
|
Test wether Auto-LOD is disabled.
Definition at line 140 of file ps_particle_basic.h. References NL3D::CPSParticle::_DisableAutoLOD.
00140 { return _DisableAutoLOD; }
|
|
called when a located has switch between incrmental / parametric motion. The default does nothing
Reimplemented in NL3D::CPSRibbonBase. Definition at line 971 of file ps_located.h. Referenced by NL3D::CPSLocated::bind().
00971 {} |
|
Definition at line 376 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSAttribMaker< float >::hasMemory(), NL3D::CPSAttribMaker< float >::newElement(), and uint32. Referenced by NL3D::CPSShockWave::newElement(), newElement(), NL3D::CPSFanLight::newElement(), and NL3D::CPSFaceLookAt::newElement().
00377 { 00378 if (_Angle2DScheme && _Angle2DScheme->hasMemory()) _Angle2DScheme->newElement(emitterLocated, emitterIndex); 00379 } |
|
Generate a new element for this bindable. They are generated according to the properties of the class Implements NL3D::CPSParticle. Definition at line 225 of file ps_mesh.cpp. References _Shape, NL3D::CShapeBank::add(), NL3D::CreateDummyMesh(), NL3D::CScene::createInstance(), NL3D::DummyShapeName(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getScene(), NL3D::CScene::getShapeBank(), NL3D::CTransform::hide(), NL3D::CPSAttrib< T >::insert(), NL3D::CPSRotated2DParticle::newAngle2DElement(), NL3D::CPSRotated3DPlaneParticle::newPlaneBasisElement(), NL3D::CPSSizedParticle::newSizeElement(), nlassert, NL3D::ITransformable::setTransformMode(), and uint32.
00226 { 00227 newPlaneBasisElement(emitterLocated, emitterIndex); 00228 newAngle2DElement(emitterLocated, emitterIndex); 00229 newSizeElement(emitterLocated, emitterIndex); 00230 00231 nlassert(_Owner); 00232 nlassert(_Owner->getOwner()); 00233 00234 CScene *scene = _Owner->getScene(); 00235 nlassert(scene); // the setScene method of the particle system should have been called 00236 //CTransformShape *instance = _Shape->createInstance(*scene); 00237 00238 CTransformShape *instance = scene->createInstance(_Shape); 00239 00240 if (!instance) 00241 { 00242 00243 // mesh not found ... 00244 IShape *is = CreateDummyMesh(); 00245 scene->getShapeBank()->add(DummyShapeName, is); 00246 instance = scene->createInstance(DummyShapeName); 00247 nlassert(instance); 00248 } 00249 00250 00251 instance->setTransformMode(CTransform::DirectMatrix); 00252 00253 instance->hide(); // the object hasn't the right matrix yet so we hide it. It'll be shown once it is computed 00254 nlassert(instance); 00255 00256 _Instances.insert(instance); 00257 } |
|
Definition at line 699 of file ps_particle_basic.h. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSAttribMaker< CPlaneBasis >::hasMemory(), NL3D::CPSAttribMaker< CPlaneBasis >::newElement(), and uint32. Referenced by NL3D::CPSConstraintMesh::newElement(), newElement(), and NL3D::CPSFace::newElement().
00700 { 00701 if (_PlaneBasisScheme && _PlaneBasisScheme->hasMemory()) _PlaneBasisScheme->newElement(emitterLocated, emitterIndex); 00702 } |
|
Definition at line 291 of file ps_particle_basic.h. References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSAttribMaker< float >::hasMemory(), NL3D::CPSAttribMaker< float >::newElement(), and uint32. Referenced by NL3D::CPSShockWave::newElement(), NL3D::CPSRibbonLookAt::newElement(), NL3D::CPSRibbon::newElement(), NL3D::CPSQuad::newElement(), NL3D::CPSConstraintMesh::newElement(), newElement(), and NL3D::CPSFanLight::newElement().
00292 { 00293 if (_SizeScheme && _SizeScheme->hasMemory()) _SizeScheme->newElement(emitterLocated, emitterIndex); 00294 } |
|
|
|
Shortcut to notify that the max number of faces has changed This must be called when a geometric property of the particle has been modified This needn't to be called during CPSParticle::resize overrides Definition at line 151 of file ps_particle_basic.h. References NL3D::CPSLocated::notifyMaxNumFacesChanged(). Referenced by NL3D::CPSFanLight::setNbFans(), NL3D::CPSShockWave::setNbSegs(), and NL3D::CPSConstraintMesh::update().
|
|
*************************************************************************************** Can be used by located bindable that have located as targets (emitter, collision zone, forces) to be notified that one of their target has been removed. To do this : The object that focus the target must call registerDTorObserver on the target, with himself as a parameter When the target is removed, this target will call this method for all registered CPSLocated The default behaviour remove this object as an observer
Reimplemented in NL3D::CPSEmitter, and NL3D::CPSTargetLocatedBindable. Definition at line 1996 of file ps_located.cpp. References NL3D::CPSLocated::unregisterDtorObserver(). Referenced by NL3D::CPSLocated::releaseRefTo().
01997 {
01998 ptr->unregisterDtorObserver(this);
01999 }
|
|
*************************************************************************************** Release any reference this obj may have to other process of the system For example, this is used when detaching a located bindable from a system. Reimplemented from NL3D::CPSLocatedBindable. Definition at line 210 of file ps_mesh.cpp. References NL3D::CScene::deleteInstance(), NL3D::CPSLocated::getScene(), NL3D::CPSAttrib< T >::getSize(), nlassert, and uint.
00211 { 00212 CPSParticle::releaseAllRef(); 00213 nlassert(_Owner && _Owner->getScene()); 00214 for(uint k = 0; k < _Instances.getSize(); ++k) 00215 { 00216 if (_Instances[k]) 00217 { 00218 _Owner->getScene()->deleteInstance(_Instances[k]); 00219 _Instances[k] = NULL; 00220 } 00221 } 00222 } |
|
Release any reference this obj may have on the given process. For example, this is used when detaching a located bindable from a system. Reimplemented in NL3D::CPSEmitter, and NL3D::CPSTargetLocatedBindable. Definition at line 871 of file ps_located.h.
00871 {} |
|
Resize the bindable attributes containers. Size is the max number of element to be contained. DERIVERS MUST CALL THEIR PARENT VERSION should not be called directly. Call CPSLocated::resize instead Implements NL3D::CPSParticle. Definition at line 423 of file ps_mesh.cpp. References nlassert, NL3D::CPSAttrib< T >::resize(), NL3D::CPSRotated2DParticle::resizeAngle2D(), NL3D::CPSRotated3DPlaneParticle::resizePlaneBasis(), NL3D::CPSSizedParticle::resizeSize(), size, and uint32. Referenced by updatePos().
00424 { 00425 nlassert(size < (1 << 16)); 00426 resizeSize(size); 00427 resizeAngle2D(size); 00428 resizePlaneBasis(size); 00429 _Instances.resize(size); 00430 } |
|
Definition at line 384 of file ps_particle_basic.h. References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSRotated2DParticle::getAngle2DOwner(), NL3D::CPSAttribMaker< float >::hasMemory(), nlassert, NL3D::CPSAttribMaker< float >::resize(), size, and uint32. Referenced by NL3D::CPSShockWave::resize(), resize(), NL3D::CPSFanLight::resize(), and NL3D::CPSFaceLookAt::resize().
00385 { 00386 nlassert(size < (1 << 16)); 00387 if (_Angle2DScheme && _Angle2DScheme->hasMemory()) _Angle2DScheme->resize(size, getAngle2DOwner()->getSize()); 00388 } |
|
Definition at line 707 of file ps_particle_basic.h. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSRotated3DPlaneParticle::getPlaneBasisOwner(), NL3D::CPSAttribMaker< CPlaneBasis >::hasMemory(), nlassert, NL3D::CPSAttribMaker< CPlaneBasis >::resize(), size, and uint32. Referenced by NL3D::CPSConstraintMesh::resize(), resize(), and NL3D::CPSFace::resize().
00708 { 00709 nlassert(size < (1 << 16)); 00710 if (_PlaneBasisScheme && _PlaneBasisScheme->hasMemory()) _PlaneBasisScheme->resize(size, getPlaneBasisOwner()->getSize()); 00711 } |
|
Definition at line 299 of file ps_particle_basic.h. References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSSizedParticle::getSize(), NL3D::CPSSizedParticle::getSizeOwner(), NL3D::CPSAttribMaker< float >::hasMemory(), nlassert, NL3D::CPSAttribMaker< float >::resize(), size, and uint32. Referenced by NL3D::CPSShockWave::resize(), NL3D::CPSRibbonLookAt::resize(), NL3D::CPSRibbon::resize(), NL3D::CPSQuad::resize(), NL3D::CPSConstraintMesh::resize(), resize(), and NL3D::CPSFanLight::resize().
00300 { 00301 nlassert(size < (1 << 16)); 00302 if (_SizeScheme && _SizeScheme->hasMemory()) _SizeScheme->resize(size, getSizeOwner()->getSize()); 00303 } |
|
serialisation. Derivers must override this, and call their parent version
Reimplemented from NL3D::CPSParticle. Definition at line 166 of file ps_mesh.cpp.
00167 { 00168 (void)f.serialVersion(3); 00169 CPSParticle::serial(f); 00170 CPSSizedParticle::serialSizeScheme(f); 00171 CPSRotated3DPlaneParticle::serialPlaneBasisScheme(f); 00172 CPSRotated2DParticle::serialAngle2DScheme(f); 00173 f.serial(_Shape); 00174 if (f.isReading()) 00175 { 00176 invalidate(); 00177 } 00178 } |
|
===================================================================================
Definition at line 270 of file ps_particle_basic.cpp. Referenced by NL3D::CPSRibbon::serial().
00271 { 00272 f.serialVersion(1); 00273 if (f.isReading()) 00274 { 00275 if (_Angle2DScheme) 00276 { 00277 delete _Angle2DScheme; 00278 _Angle2DScheme = NULL; 00279 } 00280 } 00281 bool useAngle2DScheme = _Angle2DScheme != NULL; 00282 f.serial(useAngle2DScheme); 00283 if (useAngle2DScheme) 00284 { 00285 f.serialPolyPtr(_Angle2DScheme); 00286 } 00287 else 00288 { 00289 f.serial(_Angle2D); 00290 } 00291 } |
|
===================================================================================
Definition at line 469 of file ps_particle_basic.cpp.
00470 { 00471 f.serialVersion(1); 00472 f.serialPolyPtr(_PlaneBasisScheme); 00473 bool usePlaneBasisScheme = _PlaneBasisScheme != NULL; 00474 if (!usePlaneBasisScheme) 00475 { 00476 f.serial(_PlaneBasis); 00477 } 00478 } |
|
serialization. We choose a different name because of multiple-inheritance
Definition at line 211 of file ps_particle_basic.cpp.
00212 { 00213 f.serialVersion(1); 00214 if (f.isReading()) 00215 { 00216 if (_SizeScheme) 00217 { 00218 delete _SizeScheme; 00219 _SizeScheme = NULL; 00220 } 00221 } 00222 bool useSizeScheme = _SizeScheme != NULL; 00223 f.serial(useSizeScheme); 00224 if (useSizeScheme) 00225 { 00226 f.serialPolyPtr(_SizeScheme); 00227 } 00228 else 00229 { 00230 f.serial(_ParticleSize); 00231 } 00232 }; |
|
Activate / Deactivate this object. When not active, the owning system won't try to call the 'step' method.
Definition at line 843 of file ps_located.h. References NL3D::CPSLocatedBindable::_Active. Referenced by NL3D::CParticleSystem::activateEmitters(), and NL3D::CParticleSystemInstanceUser::setActive().
00843 { _Active = active; } |
|
=================================================================================== Set a constant angle for the particle. Angles range from 0.0f to 256.0f (2 pi) This discrad any previous scheme
Definition at line 251 of file ps_particle_basic.cpp. References NL3D::CPSRotated2DParticle::_Angle2D, and NL3D::CPSRotated2DParticle::_Angle2DScheme.
00252 { 00253 delete _Angle2DScheme; 00254 _Angle2DScheme = NULL; 00255 _Angle2D = angle2DScheme; 00256 } |
|
=================================================================================== Set an attribute maker that produce a float It must have been allocated by new It will be deleted by this object Output angles must range from 0.0f to 256.0f Definition at line 242 of file ps_particle_basic.cpp. References NL3D::CPSRotated2DParticle::_Angle2DScheme, NL3D::CPSRotated2DParticle::getAngle2DOwner(), nlassert, and NL3D::CPSAttribMaker< T >::resize().
00243 { 00244 nlassert(angle2DScheme); 00245 delete _Angle2DScheme; 00246 _Angle2DScheme = angle2DScheme; 00247 if (getAngle2DOwner() && angle2DScheme->hasMemory()) angle2DScheme->resize(getAngle2DOwner()->getMaxSize(), getAngle2DOwner()->getSize()); 00248 } |
|
*************************************************************************************** set the extern ID of this located bindable. 0 means no extern access. The map of ID-locatedBindable. Is in th particle system, so this located bindable must have been attached to a particle system, otherwise an assertion is raised Definition at line 2149 of file ps_located.cpp. References NL3D::CPSLocatedBindable::_ExternID, NL3D::CParticleSystemProcess::getOwner(), NL3D::CParticleSystem::registerLocatedBindableExternID(), uint32, and NL3D::CParticleSystem::unregisterLocatedBindableExternID().
02150 { 02151 if (id == _ExternID) return; 02152 CParticleSystem *ps = NULL; 02153 if (_Owner && _Owner->getOwner()) 02154 { 02155 ps = _Owner->getOwner(); 02156 } 02157 if (ps) 02158 { 02159 ps->unregisterLocatedBindableExternID(this); 02160 _ExternID = 0; 02161 } 02162 if (id != 0) 02163 { 02164 if (ps) ps->registerLocatedBindableExternID(id, this); 02165 _ExternID = id; 02166 } 02167 } |
|
set the LODs that apply to that object (warning : it is based on the position of the system, and don't act on a per instance basis ...) To have per instance precision, you must use an attribute maker that has LOD as its input Definition at line 952 of file ps_located.h. References NL3D::CPSLocatedBindable::_LOD.
00952 { _LOD = lod; } |
|
set the located bindable name (edition purpose)
Definition at line 946 of file ps_located.h.
00946 { _Name = name; } |
|
***************************************************************************************
Reimplemented in NL3D::CPSEmitter. Definition at line 1948 of file ps_located.cpp. References NL3D::CParticleSystem::addRefForUserSysCoordInfo(), NL3D::CPSLocatedBindable::deleteElement(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getSize(), NL3D::CPSLocatedBindable::getUserMatrixUsageCount(), NL3D::CPSLocatedBindable::releaseAllRef(), NL3D::CParticleSystem::releaseRefForUserSysCoordInfo(), and uint. Referenced by NL3D::CPSLocated::bind(), and NL3D::CPSLocated::unbind().
01949 { 01950 if (psl == _Owner) return; 01951 if (psl == NULL) 01952 { 01953 releaseAllRef(); 01954 if (_Owner) 01955 { 01956 // empty this located bindable. Need to be empty if it must be rebound to another located. 01957 for (uint k = 0; k < _Owner->getSize(); ++k) 01958 { 01959 deleteElement(0); 01960 } 01961 } 01962 } 01963 if (_Owner && _Owner->getOwner()) 01964 { 01965 _Owner->getOwner()->releaseRefForUserSysCoordInfo(getUserMatrixUsageCount()); 01966 } 01967 _Owner = psl; 01968 if (_Owner && _Owner->getOwner()) 01969 { 01970 _Owner->getOwner()->addRefForUserSysCoordInfo(getUserMatrixUsageCount()); 01971 } 01972 } |
|
===================================================================================
Definition at line 448 of file ps_particle_basic.cpp. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasis, and NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme.
00449 { 00450 delete _PlaneBasisScheme; 00451 _PlaneBasisScheme = NULL; 00452 _PlaneBasis = basis; 00453 } |
|
=================================================================================== Set an attribute maker that produce a basis It must have been allocated by new It will be deleted by this object Definition at line 439 of file ps_particle_basic.cpp. References NL3D::CPSRotated3DPlaneParticle::_PlaneBasisScheme, NL3D::CPSRotated3DPlaneParticle::getPlaneBasisOwner(), nlassert, and NL3D::CPSAttribMaker< T >::resize().
00440 { 00441 nlassert(basisMaker); 00442 delete _PlaneBasisScheme; 00443 _PlaneBasisScheme = basisMaker; 00444 if (getPlaneBasisOwner() && basisMaker->hasMemory()) basisMaker->resize(getPlaneBasisOwner()->getMaxSize(), getPlaneBasisOwner()->getSize()); 00445 } |
|
set a new shape for that kind of particles
Implements NL3D::CPSShapeParticle. Definition at line 88 of file ps_mesh.h. References _Shape.
00088 { _Shape = shape; } |
|
Set a constant size for the particles.
Definition at line 192 of file ps_particle_basic.cpp. References NL3D::CPSSizedParticle::_ParticleSize, NL3D::CPSSizedParticle::_SizeScheme, and size.
00193 { 00194 delete _SizeScheme; 00195 _SizeScheme = NULL; 00196 _ParticleSize = size; 00197 } |
|
Set an attribute maker that produce a size It must have been allocated by new It will be deleted by this object Definition at line 183 of file ps_particle_basic.cpp. References NL3D::CPSSizedParticle::_SizeScheme, NL3D::CPSSizedParticle::getSize(), NL3D::CPSSizedParticle::getSizeOwner(), nlassert, and size.
00184 { 00185 nlassert(size != NULL); 00186 delete _SizeScheme; 00187 _SizeScheme = size; 00188 if (getSizeOwner() && size->hasMemory()) size->resize(getSizeOwner()->getMaxSize(), getSizeOwner()->getSize()); 00189 } |
|
|
Implements NL3D::CPSParticle. Definition at line 127 of file ps_mesh.h. References value.
00127 {} |
|
draw the particles for edition mode. The default behaviour just draw a wireframe model
Definition at line 55 of file ps_particle_basic.cpp. References NL3D::CPSLocatedBindable::displayIcon2d(), PARTICLES_CHECK_MEM, and uint. Referenced by NL3D::CPSParticle::step(), NL3D::CPSConstraintMesh::step(), step(), and NL3D::CPSFace::step().
00056 { 00057 PARTICLES_CHECK_MEM; 00058 00059 CVector I = CVector::I; 00060 CVector J = CVector::J; 00061 00062 const CVector tab[] = { 2 * J, I + J 00063 , I + J, 2 * I + J 00064 , 2 * I + J, I 00065 , I, 2 * I - J 00066 , 2 * I - J, - .5f * J 00067 , - .5f * J, -2 * I - J 00068 , -2 * I - J, - I 00069 , - I, -2 * I + J 00070 , -2 * I + J, - I + J 00071 , - I + J, 2 * J 00072 }; 00073 const uint tabSize = sizeof(tab) / (2 * sizeof(CVector)); 00074 00075 const float sSize = 0.1f; 00076 displayIcon2d(tab, tabSize, sSize); 00077 00078 PARTICLES_CHECK_MEM; 00079 } |
|
process one pass for the particles. The default behaviour shows the particles Reimplemented from NL3D::CPSParticle. Definition at line 280 of file ps_mesh.cpp. References NL3D::PSSolidRender, NL3D::PSToolRender, NL3D::CPSParticle::showTool(), NL3D::TAnimationTime, and updatePos().
00281 { 00282 if (pass == PSSolidRender) 00283 { 00284 updatePos(); 00285 } 00286 else 00287 if (pass == PSToolRender) // edition mode only 00288 { 00289 showTool(); 00290 } 00291 00292 } |
|
Implements NL3D::CPSParticle. Definition at line 124 of file ps_mesh.h.
00124 { return false; } |
|
PRIVATE USE : called by the system when its date has been manually changed. This his usually for object that expect time to be always increasing, so that they can reset their datas Reimplemented in NL3D::CPSRibbonBase. Definition at line 1038 of file ps_located.h.
01038 {} |
|
in fact we don't draw the meshs, we just update their pos...
Definition at line 295 of file ps_mesh.cpp. References _Shape, NL3D::CPSAttrib< T >::begin(), NL3D::CScene::createInstance(), NL3D::CPSLocatedBindable::getLocalToWorldMatrix(), NL3D::CPSLocated::getMaxSize(), NL3D::CParticleSystemProcess::getOwner(), NL3D::CPSLocated::getPos(), NL3D::CPSLocated::getScene(), NL3D::CPSLocated::getSize(), NL3D::CTransform::hide(), NLMISC::CMatrix::identity(), NL3D::CPSLocated::incrementNbDrawnParticles(), NL3D::CPSAttrib< T >::insert(), NL3D::CPSAttribMaker< CPlaneBasis >::make(), NL3D::CPSAttribMaker< float >::make(), nlassert, PARTICLES_CHECK_MEM, resize(), NLMISC::CMatrix::scale(), NLMISC::CMatrix::setRot(), NL3D::ITransformable::setTransformMode(), sint32, size, NLMISC::CMatrix::translate(), uint, uint32, NL3D::CPlaneBasis::X, and NL3D::CPlaneBasis::Y. Referenced by step().
00296 { 00297 const uint MeshBufSize = 512; 00298 PARTICLES_CHECK_MEM; 00299 nlassert(_Owner); 00300 const uint32 size = _Owner->getSize(); 00301 if (!size) return; 00302 00303 00304 _Owner->incrementNbDrawnParticles(size); // for benchmark purpose 00305 00306 00307 if (_Invalidated) 00308 { 00309 // need to rebuild all the transform shapes 00310 nlassert(_Owner); 00311 nlassert(_Owner->getOwner()); 00312 00313 CScene *scene = _Owner->getScene(); 00314 nlassert(scene); // the setScene method of the particle system should have been called 00315 00316 00317 resize(_Owner->getMaxSize()); 00318 00319 for (uint k = 0; k < size; ++k) 00320 { 00321 CTransformShape *instance = scene->createInstance(_Shape); 00322 instance->setTransformMode(CTransform::DirectMatrix); 00323 instance->hide(); 00324 _Instances.insert(instance); 00325 } 00326 00327 _Invalidated = false; 00328 } 00329 00330 float sizes[MeshBufSize]; 00331 float angles[MeshBufSize]; 00332 static CPlaneBasis planeBasis[MeshBufSize]; 00333 00334 uint32 leftToDo = size, toProcess; 00335 00336 00337 float *ptCurrSize; 00338 const uint ptCurrSizeIncrement = _SizeScheme ? 1 : 0; 00339 00340 float *ptCurrAngle; 00341 const uint ptCurrAngleIncrement = _Angle2DScheme ? 1 : 0; 00342 00343 CPlaneBasis *ptBasis; 00344 const uint ptCurrPlaneBasisIncrement = _PlaneBasisScheme ? 1 : 0; 00345 00346 TPSAttribVector::const_iterator posIt = _Owner->getPos().begin(), endPosIt; 00347 00348 00349 TInstanceCont::iterator instanceIt = _Instances.begin(); 00350 00351 do 00352 { 00353 toProcess = leftToDo < MeshBufSize ? leftToDo : MeshBufSize; 00354 00355 if (_SizeScheme) 00356 { 00357 ptCurrSize = (float *) (_SizeScheme->make(_Owner, size - leftToDo, &sizes[0], sizeof(float), toProcess, true)); 00358 } 00359 else 00360 { 00361 ptCurrSize =& _ParticleSize; 00362 } 00363 00364 if (_Angle2DScheme) 00365 { 00366 ptCurrAngle = (float *) (_Angle2DScheme->make(_Owner, size - leftToDo, &angles[0], sizeof(float), toProcess, true)); 00367 } 00368 else 00369 { 00370 ptCurrAngle =& _Angle2D; 00371 } 00372 00373 00374 if (_PlaneBasisScheme) 00375 { 00376 ptBasis = (CPlaneBasis *) (_PlaneBasisScheme->make(_Owner, size - leftToDo, &planeBasis[0], sizeof(CPlaneBasis), toProcess, true)); 00377 } 00378 else 00379 { 00380 ptBasis = &_PlaneBasis; 00381 } 00382 00383 endPosIt = posIt + toProcess; 00384 CMatrix mat, tmat; 00385 00386 // the matrix used to get in the right basis 00387 const CMatrix &transfo = getLocalToWorldMatrix(); 00388 do 00389 { 00390 (*instanceIt)->show(); 00391 00392 tmat.identity(); 00393 mat.identity(); 00394 00395 tmat.translate(*posIt); 00396 00397 00398 00399 mat.setRot( ptBasis->X * CPSUtil::getCos((sint32) *ptCurrAngle) + ptBasis->Y * CPSUtil::getSin((sint32) *ptCurrAngle) 00400 , ptBasis->X * CPSUtil::getCos((sint32) *ptCurrAngle + 64) + ptBasis->Y * CPSUtil::getSin((sint32) *ptCurrAngle + 64) 00401 , ptBasis->X ^ ptBasis->Y 00402 ); 00403 00404 mat.scale(*ptCurrSize); 00405 00406 (*instanceIt)->setMatrix(transfo * tmat * mat); 00407 00408 ++instanceIt; 00409 ++posIt; 00410 ptCurrSize += ptCurrSizeIncrement; 00411 ptCurrAngle += ptCurrAngleIncrement; 00412 ptBasis += ptCurrPlaneBasisIncrement; 00413 } 00414 while (posIt != endPosIt); 00415 leftToDo -= toProcess; 00416 } 00417 while (leftToDo); 00418 00419 PARTICLES_CHECK_MEM; 00420 } |
|
Returns true if the object can use global lighting color. (example : 'lookat' particle do not have normals, so they use global lighting color instead Definition at line 103 of file ps_particle_basic.h. References NL3D::CPSParticle::_UsesGlobalColorLighting. Referenced by NL3D::CPSTailDot::displayRibbons(), NL3D::CPSRibbonLookAt::displayRibbons(), NL3D::CPSRibbon::displayRibbons(), NL3D::CPSShockWave::draw(), NL3D::CPSDot::draw(), NL3D::CPSTailDot::setupGlobalColor(), NL3D::CPSFanLight::setupMaterial(), NL3D::CPSRibbon::setupTexturedGlobalColor(), NL3D::CPSRibbon::setupUntexturedGlobalColor(), NL3D::CPSTailDot::step(), NL3D::CPSRibbonLookAt::step(), NL3D::CPSRibbon::step(), NL3D::CPSQuad::updateMatBeforeRendering(), NL3D::CPSTailDot::updateMaterial(), NL3D::CPSRibbon::updateTexturedMaterial(), and NL3D::CPSRibbon::updateUntexturedMaterial().
00103 { return _UsesGlobalColorLighting; }
|
|
Reimplemented in NL3D::CPSForce. Definition at line 986 of file ps_located.h. |
|
Definition at line 1033 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::isActive(), and NL3D::CPSLocatedBindable::setActive(). |
|
|
|
Definition at line 1027 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::getExternID(), NL3D::CPSLocatedBindable::setExternID(), and NL3D::CPSLocatedBindable::~CPSLocatedBindable(). |
|
it is true if the table has been initialized, for debug purposes
Definition at line 239 of file ps_particle_basic.cpp. Referenced by NL3D::CPSRotated2DParticle::getRotTable(), and NL3D::CPSRotated2DParticle::initRotTable(). |
|
|
|
|
|
tells when this object must be dealt with
Definition at line 1029 of file ps_located.h. Referenced by NL3D::CPSLocatedBindable::getLOD(), and NL3D::CPSLocatedBindable::setLOD(). |
|
Definition at line 1031 of file ps_located.h. |
|
|
|
|
|
Definition at line 238 of file ps_particle_basic.cpp. Referenced by NL3D::CPSRotated2DParticle::getRotTable(), and NL3D::CPSRotated2DParticle::initRotTable(). |
|
Definition at line 152 of file ps_mesh.h. Referenced by CPSMesh(), getShape(), newElement(), setShape(), and updatePos(). |
|