87 lines
2.9 KiB
C
87 lines
2.9 KiB
C
|
// 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/>.
|
||
|
|
||
|
#ifndef NL_PS_INITIAL_POS
|
||
|
#define NL_PS_INITIAL_POS
|
||
|
|
||
|
namespace NL3D
|
||
|
{
|
||
|
class CParticleSystem;
|
||
|
class CPSLocated;
|
||
|
class CPSLocatedBindable;
|
||
|
struct IPSMover;
|
||
|
}
|
||
|
|
||
|
|
||
|
/** this class helps to copy the position of initial instances in a particle
|
||
|
* system. This enable a system to run, and have its parameter modified.
|
||
|
* When the user press stop, he will find the system at t = 0, with the new parameters
|
||
|
*/
|
||
|
class CPSInitialPos
|
||
|
{
|
||
|
public:
|
||
|
CPSInitialPos() : _PS(NULL) {}
|
||
|
// construct this by copying the datas of the system
|
||
|
void copySystemInitialPos(NL3D::CParticleSystem *ps);
|
||
|
/** reinitialize the system with its initial instances positions
|
||
|
* Works only once per copySystemInitialPos() call
|
||
|
*/
|
||
|
void restoreSystem();
|
||
|
/// send back true when bbox display is enabled
|
||
|
bool isBBoxDisplayEnabled();
|
||
|
/// update data when a located in a particle system has been removed
|
||
|
void removeLocated(NL3D::CPSLocated *loc);
|
||
|
/// update data when a located bindable in a particle system has been removed
|
||
|
void removeLocatedBindable(NL3D::CPSLocatedBindable *lb);
|
||
|
// initial position and speed of a located instance in a particle system
|
||
|
struct CInitPSInstanceInfo
|
||
|
{
|
||
|
uint32 Index;
|
||
|
NL3D::CPSLocated *Loc;
|
||
|
NLMISC::CVector Speed;
|
||
|
NLMISC::CVector Pos;
|
||
|
};
|
||
|
// rotation and scale of an element
|
||
|
struct CRotScaleInfo
|
||
|
{
|
||
|
uint32 Index;
|
||
|
NL3D::CPSLocated *Loc;
|
||
|
NL3D::CPSLocatedBindable *LB;
|
||
|
NL3D::IPSMover *Psm;
|
||
|
NLMISC::CMatrix Rot;
|
||
|
NLMISC::CVector Scale;
|
||
|
};
|
||
|
NL3D::CParticleSystem *getPS() { return _PS; }
|
||
|
const NL3D::CParticleSystem *getPS() const { return _PS; }
|
||
|
bool isStateMemorized() const { return _PS != NULL; }
|
||
|
private:
|
||
|
typedef std::vector<CInitPSInstanceInfo> TInitInfoVect;
|
||
|
typedef std::vector<CRotScaleInfo> TRotScaleInfoVect;
|
||
|
typedef std::vector< std::pair<NL3D::CPSLocated *, uint32> > TInitialLocatedSizeVect;
|
||
|
TInitInfoVect _InitInfoVect;
|
||
|
TRotScaleInfoVect _RotScaleInfoVect;
|
||
|
// initial number of instances for each located
|
||
|
TInitialLocatedSizeVect _InitialSizeVect;
|
||
|
NL3D::CParticleSystem *_PS;
|
||
|
// reset all initial infos
|
||
|
void reset();
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|