2017-03-15 19:29:34 +00:00
|
|
|
// 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/>.
|
|
|
|
|
|
|
|
#if !defined(AFX_LOCATED_BINDABLE_DIALOG_H__C715DCAB_3F07_4777_96DA_61AE2E420B09__INCLUDED_)
|
|
|
|
#define AFX_LOCATED_BINDABLE_DIALOG_H__C715DCAB_3F07_4777_96DA_61AE2E420B09__INCLUDED_
|
|
|
|
|
|
|
|
#if _MSC_VER > 1000
|
|
|
|
#pragma once
|
|
|
|
#endif
|
|
|
|
|
|
|
|
namespace NL3D
|
|
|
|
{
|
|
|
|
class CPSLocatedBindable;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "nel/misc/rgba.h"
|
|
|
|
//
|
|
|
|
#include "nel/3d/texture.h"
|
|
|
|
#include "nel/3d/ps_plane_basis.h"
|
|
|
|
#include "nel/3d/particle_system.h"
|
|
|
|
#include "nel/3d/ps_particle.h"
|
|
|
|
#include "nel/3d/ps_particle2.h"
|
|
|
|
//
|
|
|
|
#include "ps_wrapper.h"
|
|
|
|
#include "dialog_stack.h"
|
|
|
|
|
|
|
|
using NLMISC::CRGBA;
|
|
|
|
|
|
|
|
class CParticleDlg;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// CLocatedBindableDialog dialog
|
|
|
|
|
|
|
|
class CLocatedBindableDialog : public CDialog, CDialogStack
|
|
|
|
{
|
|
|
|
// Construction
|
|
|
|
public:
|
|
|
|
// create this dialog to edit the given bindable
|
|
|
|
CLocatedBindableDialog(CParticleWorkspace::CNode *ownerNode, NL3D::CPSLocatedBindable *bindable); // standard constructor
|
|
|
|
|
|
|
|
/// dtor
|
|
|
|
~CLocatedBindableDialog();
|
|
|
|
|
|
|
|
|
|
|
|
// init the dialog as a child of the given wnd
|
|
|
|
void init(CParticleDlg* pParent);
|
|
|
|
// Dialog Data
|
|
|
|
//{{AFX_DATA(CLocatedBindableDialog)
|
|
|
|
enum { IDD = IDD_LOCATED_BINDABLE };
|
|
|
|
CEdit m_ZBias;
|
|
|
|
CComboBox m_BlendingMode;
|
|
|
|
BOOL m_IndependantSizes;
|
|
|
|
//}}AFX_DATA
|
|
|
|
|
|
|
|
|
|
|
|
// Overrides
|
|
|
|
// ClassWizard generated virtual function overrides
|
|
|
|
//{{AFX_VIRTUAL(CLocatedBindableDialog)
|
|
|
|
protected:
|
|
|
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
|
|
|
|
//}}AFX_VIRTUAL
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Implementation
|
|
|
|
protected:
|
|
|
|
|
|
|
|
// enables or disabled controls for independant sizes
|
|
|
|
void updateIndependantSizes(void);
|
|
|
|
// update zbias from edit box & display error mb if needed
|
|
|
|
void updateZBias();
|
|
|
|
/// create the size control, or update it if it has been created. It returns the heivht of the control
|
|
|
|
uint updateSizeControl();
|
|
|
|
|
|
|
|
CParticleWorkspace::CNode *_Node;
|
|
|
|
NL3D::CPSLocatedBindable *_Bindable; // the bindable being edited
|
|
|
|
CParticleDlg *_ParticleDlg; // the dialog that owns us
|
|
|
|
class CAttribDlgFloat *_SizeCtrl; // the control used for size
|
|
|
|
sint _SizeCtrlX; // x position of the control used for size
|
|
|
|
sint _SizeCtrlY; // x position of the control used for size
|
|
|
|
|
|
|
|
// look at specific : pointer on windows to edit motion blur params
|
|
|
|
std::vector<CWnd *> _MotionBlurWnd;
|
|
|
|
|
|
|
|
|
|
|
|
// Generated message map functions
|
|
|
|
//{{AFX_MSG(CLocatedBindableDialog)
|
|
|
|
afx_msg void OnSelchangeBlendingMode();
|
|
|
|
afx_msg void OnIndeSizes();
|
|
|
|
afx_msg void OnSizeWidth();
|
|
|
|
afx_msg void OnSizeHeight();
|
|
|
|
afx_msg void OnNoAutoLod();
|
|
|
|
afx_msg void OnGlobalColorLighting();
|
|
|
|
afx_msg void OnAlignOnMotion();
|
|
|
|
afx_msg void OnZtest();
|
|
|
|
afx_msg void OnChangeZbias();
|
|
|
|
afx_msg void OnKillfocusZbias();
|
|
|
|
afx_msg void OnZalign();
|
|
|
|
//}}AFX_MSG
|
|
|
|
DECLARE_MESSAGE_MAP()
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////
|
|
|
|
// wrappers to various element of bindables //
|
|
|
|
//////////////////////////////////////////////
|
|
|
|
|
|
|
|
//////////
|
|
|
|
// size //
|
|
|
|
//////////
|
|
|
|
struct CSizeWrapper : public IPSWrapperFloat, IPSSchemeWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSSizedParticle *S;
|
|
|
|
float get(void) const { return S->getSize(); }
|
|
|
|
void set(const float &v) { S->setSize(v); }
|
|
|
|
scheme_type *getScheme(void) const { return S->getSizeScheme(); }
|
|
|
|
void setScheme(scheme_type *s) { S->setSizeScheme(s); }
|
|
|
|
} _SizeWrapper;
|
|
|
|
|
|
|
|
///////////
|
|
|
|
// color //
|
|
|
|
///////////
|
|
|
|
struct CColorWrapper : public IPSWrapperRGBA, IPSSchemeWrapperRGBA
|
|
|
|
{
|
|
|
|
NL3D::CPSColoredParticle *S;
|
|
|
|
CRGBA get(void) const { return S->getColor(); }
|
|
|
|
void set(const CRGBA &v) { S->setColor(v); }
|
|
|
|
scheme_type *getScheme(void) const { return S->getColorScheme(); }
|
|
|
|
void setScheme(scheme_type *s) { S->setColorScheme(s); }
|
|
|
|
} _ColorWrapper;
|
|
|
|
|
|
|
|
//////////////
|
|
|
|
// angle 2D //
|
|
|
|
//////////////
|
|
|
|
struct CAngle2DWrapper : public IPSWrapperFloat, IPSSchemeWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSRotated2DParticle *S;
|
|
|
|
float get(void) const { return S->getAngle2D(); }
|
|
|
|
void set(const float &v) { S->setAngle2D(v); }
|
|
|
|
scheme_type *getScheme(void) const { return S->getAngle2DScheme(); }
|
|
|
|
void setScheme(scheme_type *s) { S->setAngle2DScheme(s); }
|
|
|
|
} _Angle2DWrapper;
|
|
|
|
|
|
|
|
/////////////////
|
|
|
|
// plane basis //
|
|
|
|
/////////////////
|
|
|
|
struct CPlaneBasisWrapper : public IPSWrapper<NL3D::CPlaneBasis>, IPSSchemeWrapper<NL3D::CPlaneBasis>
|
|
|
|
{
|
|
|
|
NL3D::CPSRotated3DPlaneParticle *S;
|
|
|
|
NL3D::CPlaneBasis get(void) const { return S->getPlaneBasis(); }
|
|
|
|
void set(const NL3D::CPlaneBasis &p) { S->setPlaneBasis(p); }
|
|
|
|
scheme_type *getScheme(void) const { return S->getPlaneBasisScheme(); }
|
|
|
|
void setScheme(scheme_type *s) { S->setPlaneBasisScheme(s); }
|
|
|
|
} _PlaneBasisWrapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////////////////////
|
|
|
|
// motion blur coeff //
|
|
|
|
///////////////////////
|
|
|
|
|
|
|
|
struct CMotionBlurCoeffWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSFaceLookAt *P;
|
|
|
|
float get(void) const { return P->getMotionBlurCoeff(); }
|
|
|
|
void set(const float &v) { P->setMotionBlurCoeff(v); }
|
|
|
|
} _MotionBlurCoeffWrapper;
|
|
|
|
|
|
|
|
struct CMotionBlurThresholdWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSFaceLookAt *P;
|
|
|
|
float get(void) const { return P->getMotionBlurThreshold(); }
|
|
|
|
void set(const float &v) { P->setMotionBlurThreshold(v); }
|
|
|
|
} _MotionBlurThresholdWrapper;
|
|
|
|
|
|
|
|
///////////////
|
|
|
|
// fanlight //
|
|
|
|
///////////////
|
|
|
|
struct CFanLightWrapper : public IPSWrapperUInt
|
|
|
|
{
|
|
|
|
NL3D::CPSFanLight *P;
|
|
|
|
uint32 get(void) const { return P->getNbFans(); }
|
|
|
|
void set(const uint32 &v) { P->setNbFans(v); }
|
|
|
|
} _FanLightWrapper;
|
|
|
|
|
|
|
|
struct CFanLightSmoothnessWrapper : public IPSWrapperUInt
|
|
|
|
{
|
|
|
|
NL3D::CPSFanLight *P;
|
|
|
|
uint32 get(void) const { return P->getPhaseSmoothness(); }
|
|
|
|
void set(const uint32 &v) { P->setPhaseSmoothness(v); }
|
|
|
|
} _FanLightSmoothnessWrapper;
|
|
|
|
|
|
|
|
struct CFanLightPhase : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSFanLight *P;
|
|
|
|
float get(void) const { return P->getPhaseSpeed(); }
|
|
|
|
void set(const float &v) { P->setPhaseSpeed(v); }
|
|
|
|
} _FanLightPhaseWrapper;
|
|
|
|
struct CFanLightIntensityWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSFanLight *P;
|
|
|
|
float get(void) const { return P->getMoveIntensity(); }
|
|
|
|
void set(const float &v) { P->setMoveIntensity(v); }
|
|
|
|
} _FanLightIntensityWrapper;
|
|
|
|
|
|
|
|
///////////////////////
|
|
|
|
// ribbon / tail dot //
|
|
|
|
///////////////////////
|
|
|
|
|
|
|
|
struct CTailParticleWrapper : public IPSWrapperUInt
|
|
|
|
{
|
|
|
|
NL3D::CPSTailParticle *P;
|
|
|
|
uint32 get(void) const { return P->getTailNbSeg(); }
|
|
|
|
void set(const uint32 &v) { P->setTailNbSeg(v); }
|
|
|
|
} _TailParticleWrapper;
|
|
|
|
|
|
|
|
//////////////////////////////////////
|
|
|
|
// duration of segment for a ribbon //
|
|
|
|
//////////////////////////////////////
|
|
|
|
struct CSegDurationWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSRibbonBase *R;
|
|
|
|
float get(void) const { return R->getSegDuration(); }
|
|
|
|
void set(const float &v) { R->setSegDuration(v); }
|
|
|
|
} _SegDurationWrapper;
|
|
|
|
|
|
|
|
/////////////////////////////
|
|
|
|
// shockwave //
|
|
|
|
/////////////////////////////
|
|
|
|
|
|
|
|
struct CRadiusCutWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSShockWave *S;
|
|
|
|
float get(void) const { return S->getRadiusCut(); }
|
|
|
|
void set(const float &v) { S->setRadiusCut(v); }
|
|
|
|
} _RadiusCutWrapper;
|
|
|
|
|
|
|
|
struct CShockWaveNbSegWrapper : public IPSWrapperUInt
|
|
|
|
{
|
|
|
|
NL3D::CPSShockWave *S;
|
|
|
|
uint32 get(void) const { return S->getNbSegs(); }
|
|
|
|
void set(const uint32 &v) { S->setNbSegs(v); }
|
|
|
|
} _ShockWaveNbSegWrapper;
|
|
|
|
|
|
|
|
struct CShockWaveUFactorWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSShockWave *S;
|
|
|
|
float get(void) const { return S->getUFactor(); }
|
|
|
|
void set(const float &v) { S->setUFactor(v); }
|
|
|
|
} _ShockWaveUFactorWrapper;
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////
|
|
|
|
// unanimated texture //
|
|
|
|
////////////////////////
|
|
|
|
|
|
|
|
struct CTextureNoAnimWrapper : public IPSWrapperTexture
|
|
|
|
{
|
|
|
|
NL3D::CPSTexturedParticleNoAnim *TP;
|
|
|
|
virtual NL3D::ITexture *get(void) { return TP->getTexture(); }
|
|
|
|
virtual void set(NL3D::ITexture *t) { TP->setTexture(t); }
|
|
|
|
} _TextureNoAnimWrapper;
|
|
|
|
|
|
|
|
//////////////////////////////
|
|
|
|
// u / v factors for ribbon //
|
|
|
|
//////////////////////////////
|
|
|
|
|
|
|
|
struct CRibbonUFactorWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSRibbon *R;
|
|
|
|
float get(void) const { return R->getUFactor(); }
|
|
|
|
void set(const float &u) { R->setTexFactor(u, R->getVFactor()); }
|
|
|
|
} _RibbonUFactorWrapper;
|
|
|
|
|
|
|
|
struct CRibbonVFactorWrapper : public IPSWrapperFloat
|
|
|
|
{
|
|
|
|
NL3D::CPSRibbon *R;
|
|
|
|
float get(void) const { return R->getVFactor(); }
|
|
|
|
void set(const float &v) { R->setTexFactor(R->getUFactor(), v); }
|
|
|
|
} _RibbonVFactorWrapper;
|
|
|
|
|
|
|
|
void updateModifiedFlag() { if (_Node) _Node->setModified(true); }
|
|
|
|
void touchPSState();
|
|
|
|
void updateValidWndForAlignOnMotion(bool align);
|
|
|
|
};
|
|
|
|
|
|
|
|
//{{AFX_INSERT_LOCATION}}
|
|
|
|
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
|
|
|
|
|
|
|
|
#endif // !defined(AFX_LOCATED_BINDABLE_DIALOG_H__C715DCAB_3F07_4777_96DA_61AE2E420B09__INCLUDED_)
|