mirror of
https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git
synced 2025-07-19 19:59:09 +00:00
Hoist MOULOpenSourceClientPlugin/Plasma20/* to top level
to match H'uru layout and make patching/cherry-picking easier.
This commit is contained in:
658
Sources/Plasma/PubUtilLib/plDrawable/plWaveSet7.h
Normal file
658
Sources/Plasma/PubUtilLib/plDrawable/plWaveSet7.h
Normal file
@ -0,0 +1,658 @@
|
||||
/*==LICENSE==*
|
||||
|
||||
CyanWorlds.com Engine - MMOG client, server and tools
|
||||
Copyright (C) 2011 Cyan Worlds, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU 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 General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Additional permissions under GNU GPL version 3 section 7
|
||||
|
||||
If you modify this Program, or any covered work, by linking or
|
||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK,
|
||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent
|
||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK
|
||||
(or a modified version of those libraries),
|
||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA,
|
||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG
|
||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the
|
||||
licensors of this Program grant you additional
|
||||
permission to convey the resulting work. Corresponding Source for a
|
||||
non-source form of such a combination shall include the source code for
|
||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered
|
||||
work.
|
||||
|
||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com
|
||||
or by snail mail at:
|
||||
Cyan Worlds, Inc.
|
||||
14617 N Newport Hwy
|
||||
Mead, WA 99021
|
||||
|
||||
*==LICENSE==*/
|
||||
|
||||
#ifndef plWaveSet7_inc
|
||||
#define plWaveSet7_inc
|
||||
|
||||
|
||||
#include "hsGeometry3.h"
|
||||
#include "hsTemplates.h"
|
||||
#include "../plMath/plRandom.h"
|
||||
#include "hsBounds.h"
|
||||
|
||||
#include "plFixedWaterState7.h"
|
||||
|
||||
#include "plWaveSetBase.h"
|
||||
|
||||
class hsStream;
|
||||
class hsResMgr;
|
||||
class plAccessVtxSpan;
|
||||
class plMessage;
|
||||
class hsGMaterial;
|
||||
class plDrawableSpans;
|
||||
class plRenderMsg;
|
||||
class plArmatureUpdateMsg;
|
||||
class plGenRefMsg;
|
||||
class plAuxSpan;
|
||||
class plDynaDecalMgr;
|
||||
class plGBufferGroup;
|
||||
class plBitmap;
|
||||
class plMipmap;
|
||||
class plLayer;
|
||||
class plRenderRequest;
|
||||
class plRenderRequestMsg;
|
||||
class plRenderTarget;
|
||||
class plShader;
|
||||
class plPipeline;
|
||||
class plRipVSConsts;
|
||||
class plStatusLog;
|
||||
class plGraphPlate;
|
||||
|
||||
class plWorldWaveData7
|
||||
{
|
||||
public:
|
||||
hsPoint3 fDir;
|
||||
hsScalar fLength;
|
||||
|
||||
hsScalar fFreq;
|
||||
hsScalar fPhase;
|
||||
hsScalar fAmplitude;
|
||||
};
|
||||
|
||||
class plWorldWave7 : public plWorldWaveData7
|
||||
{
|
||||
public:
|
||||
|
||||
inline void Accumulate(hsPoint3& accumPos, hsVector3& accumNorm) const;
|
||||
};
|
||||
|
||||
|
||||
class plWaveSet7 : public plWaveSetBase
|
||||
{
|
||||
public:
|
||||
// Props inc by 1 (bit shift in bitvector).
|
||||
enum plDrawProperties {
|
||||
kDisable = 0,
|
||||
|
||||
kNumProps // last in the list
|
||||
};
|
||||
// Flags, also in a bitvector, so far unused in the multimodifier
|
||||
enum {
|
||||
kHasRefObject = 16
|
||||
};
|
||||
enum {
|
||||
kNumWaves = 4
|
||||
};
|
||||
enum {
|
||||
kRefDynaDecalMgr,
|
||||
kRefBuoy,
|
||||
kRefBumpMat,
|
||||
kRefBumpDraw,
|
||||
kRefBumpVShader,
|
||||
kRefBumpPShader,
|
||||
kRefBiasVShader,
|
||||
kRefBiasPShader,
|
||||
kRefRipVShader,
|
||||
kRefRipPShader,
|
||||
kRefShoreVShader,
|
||||
kRefShorePShader,
|
||||
kRefFixedVShader,
|
||||
kRefFixedPShader,
|
||||
kRefGraphShoreTex,
|
||||
kRefBubbleShoreTex,
|
||||
kRefEdgeShoreTex,
|
||||
kRefGraphShoreMat,
|
||||
kRefGraphShoreDraw,
|
||||
kRefGraphVShader,
|
||||
kRefGraphPShader,
|
||||
kRefGraphShoreRT,
|
||||
kRefShore,
|
||||
kRefDecal,
|
||||
kRefDecVShader,
|
||||
kRefDecPShader,
|
||||
kRefEnvMap,
|
||||
kRefCosineLUT,
|
||||
kRefRefObj
|
||||
};
|
||||
|
||||
enum {
|
||||
kGraphShorePasses = 3
|
||||
};
|
||||
|
||||
enum {
|
||||
kNumWindDep = 5
|
||||
};
|
||||
enum {
|
||||
kNumTexWaves = 16
|
||||
};
|
||||
enum {
|
||||
kBumpPerPass = 4
|
||||
};
|
||||
enum {
|
||||
kNumBumpShaders = kNumTexWaves / kBumpPerPass
|
||||
};
|
||||
enum {
|
||||
kCompositeSize = 256
|
||||
};
|
||||
|
||||
enum {
|
||||
kUpdateWaveKs = 0x1,
|
||||
kRemakeBubble = 0x2,
|
||||
kRemakeEdge = 0x4,
|
||||
kReRenderEnvMap = 0x8,
|
||||
kReInitWaves = 0x10
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
double fCurrTime;
|
||||
double fLastTime;
|
||||
|
||||
plStatusLog* fStatusLog;
|
||||
plGraphPlate* fStatusGraph;
|
||||
|
||||
UInt32 fTrialUpdate;
|
||||
|
||||
plFixedWaterState7 fState;
|
||||
|
||||
hsScalar fScrunchLen;
|
||||
hsScalar fScrunchScale;
|
||||
|
||||
hsVector3 fWindDir;
|
||||
|
||||
hsScalar fMinLen;
|
||||
hsScalar fMaxLen;
|
||||
hsScalar fFreqScale;
|
||||
|
||||
hsScalar fTransCountDown;
|
||||
int fTransistor;
|
||||
hsScalar fTransDel;
|
||||
|
||||
hsScalar fTexTransCountDown;
|
||||
int fTexTrans;
|
||||
hsScalar fTexTransDel;
|
||||
hsScalar fTexWaveFade[kNumTexWaves];
|
||||
|
||||
plWorldWave7 fWorldWaves[kNumWaves];
|
||||
hsScalar fFreqMod[kNumWaves];
|
||||
|
||||
plRandom fRand;
|
||||
|
||||
plKey fSceneNode;
|
||||
|
||||
hsTArray<plDynaDecalMgr*> fDecalMgrs;
|
||||
|
||||
hsTArray<plSceneObject*> fBuoys;
|
||||
hsTArray<plSceneObject*> fShores;
|
||||
hsTArray<plSceneObject*> fDecals;
|
||||
plSceneObject* fRefObj;
|
||||
|
||||
hsTArray<hsBounds3Ext> fTargBnds;
|
||||
|
||||
plLayer* fBiasLayer[2];
|
||||
plLayer* fBumpLayers[kNumTexWaves];
|
||||
hsGMaterial* fBumpMat;
|
||||
plDrawableSpans* fBumpDraw;
|
||||
plRenderRequest* fBumpReq;
|
||||
plRenderRequestMsg* fBumpReqMsg;
|
||||
plMipmap* fCosineLUT;
|
||||
|
||||
plShader* fBumpVShader[kNumBumpShaders];
|
||||
plShader* fBumpPShader[kNumBumpShaders];
|
||||
|
||||
plShader* fBiasVShader;
|
||||
plShader* fBiasPShader;
|
||||
|
||||
plBitmap* fEnvMap;
|
||||
UInt32 fEnvSize;
|
||||
hsScalar fEnvRefresh;
|
||||
|
||||
plLayer* fFixedLayers[4];
|
||||
|
||||
plShader* fRipVShader;
|
||||
plShader* fRipPShader;
|
||||
|
||||
plShader* fShoreVShader;
|
||||
plShader* fShorePShader;
|
||||
|
||||
plShader* fFixedVShader;
|
||||
plShader* fFixedPShader;
|
||||
|
||||
enum DecalVType {
|
||||
kDecalV1Lay,
|
||||
kDecalV2Lay11,
|
||||
kDecalV2Lay12,
|
||||
kDecalVEnv,
|
||||
|
||||
kNumDecalVShaders
|
||||
};
|
||||
enum DecalPType {
|
||||
kDecalPBB,
|
||||
kDecalPaB,
|
||||
kDecalPaM,
|
||||
kDecalPaA,
|
||||
kDecalPAB,
|
||||
kDecalPAM,
|
||||
kDecalPAA,
|
||||
kDecalPMB,
|
||||
kDecalPMM,
|
||||
kDecalPMA,
|
||||
kDecalPEnv,
|
||||
|
||||
kNumDecalPShaders
|
||||
};
|
||||
plShader* fDecalVShaders[kNumDecalVShaders];
|
||||
plShader* fDecalPShaders[kNumDecalPShaders];
|
||||
|
||||
// Graph shore stuff
|
||||
plMipmap* fGraphShoreTex;
|
||||
plMipmap* fBubbleShoreTex;
|
||||
plMipmap* fEdgeShoreTex;
|
||||
|
||||
hsGMaterial* fGraphShoreMat[kGraphShorePasses];
|
||||
plDrawableSpans* fGraphShoreDraw[kGraphShorePasses];
|
||||
plRenderTarget* fGraphShoreRT[kGraphShorePasses];
|
||||
|
||||
plRenderRequest* fGraphReq[kGraphShorePasses];
|
||||
plRenderRequestMsg* fGraphReqMsg[kGraphShorePasses];
|
||||
|
||||
plShader* fGraphVShader[kGraphShorePasses];
|
||||
plShader* fGraphPShader[kGraphShorePasses];
|
||||
|
||||
class GraphState
|
||||
{
|
||||
public:
|
||||
float fAge;
|
||||
float fInvLife;
|
||||
float fUOff;
|
||||
|
||||
float fFreq[4];
|
||||
float fPhase[4];
|
||||
float fAmp[4];
|
||||
};
|
||||
|
||||
GraphState fGraphState[kGraphShorePasses];
|
||||
|
||||
class WaveK
|
||||
{
|
||||
public:
|
||||
// fK is the number of times the sine wave repeats across the texture. Must be an integer
|
||||
// fS/fK is the base X component of the direction of the wave, with Y = 1.f - X. Note that X^2 + Y^2 != 1.
|
||||
// fD allows the wave to get more off the Y direction
|
||||
// So the X component will be Int(fS + fD*dispersion) / fK, because it must be an integer ratio to
|
||||
// preserve tiling. Also, (fS + fD) must be <= fK (for the Y normalization).
|
||||
// See the notes.
|
||||
float fS;
|
||||
float fK;
|
||||
float fD;
|
||||
};
|
||||
|
||||
WaveK fWaveKs[kNumTexWaves];
|
||||
|
||||
class TexWaveDesc
|
||||
{
|
||||
public:
|
||||
hsScalar fPhase;
|
||||
hsScalar fAmp;
|
||||
hsScalar fLen;
|
||||
hsScalar fFreq;
|
||||
hsScalar fDirX;
|
||||
hsScalar fDirY;
|
||||
hsScalar fRotScale00;
|
||||
hsScalar fRotScale01;
|
||||
};
|
||||
TexWaveDesc fTexWaves[kNumTexWaves];
|
||||
|
||||
class TexWaveWindDep
|
||||
{
|
||||
public:
|
||||
hsScalar fWindSpeed;
|
||||
|
||||
hsScalar fHeight;
|
||||
hsScalar fSpecular;
|
||||
};
|
||||
|
||||
TexWaveWindDep fWindDeps[kNumWindDep];
|
||||
|
||||
void IInitWaveConsts();
|
||||
void IInitState();
|
||||
|
||||
inline void IScrunch(hsPoint3& pos, hsVector3& norm) const;
|
||||
|
||||
void ICalcWindow(hsScalar dt);
|
||||
void ICalcScale();
|
||||
void IUpdateWaves(hsScalar dt);
|
||||
void IUpdateWave(hsScalar dt, int i);
|
||||
hsBool IAnyBoundsVisible(plPipeline* pipe) const;
|
||||
|
||||
void IInitWave(int i);
|
||||
void IReInitWaves();
|
||||
|
||||
void IUpdateRefObject();
|
||||
void IUpdateWindDir(hsScalar dt);
|
||||
|
||||
void IShiftCenter(plSceneObject* so) const;
|
||||
void IFloatBuoys(hsScalar dt);
|
||||
void IFloatBuoy(hsScalar dt, plSceneObject* so);
|
||||
|
||||
// Bookkeeping
|
||||
void IAddTarget(const plKey& key);
|
||||
void IRemoveTarget(const plKey& key);
|
||||
|
||||
void ISetWindSpeed(hsScalar s);
|
||||
|
||||
hsBool IOnReceive(plGenRefMsg* refMsg);
|
||||
hsBool IOnRemove(plGenRefMsg* refMsg);
|
||||
|
||||
hsBool ITransContinue(hsScalar dt);
|
||||
void IStartTransition(hsScalar dt);
|
||||
hsScalar ITransitionDelay() const;
|
||||
void ITransition(hsScalar dt);
|
||||
|
||||
hsBool ITransTexContinue(hsScalar dt);
|
||||
void IStartTexTransition(hsScalar dt);
|
||||
void ITransTex(hsScalar dt);
|
||||
|
||||
void IInitTexWave(int i);
|
||||
void ISetupTextureWaves();
|
||||
|
||||
void IUpdateLayers(hsScalar dt);
|
||||
void IUpdateBumpLayers(hsScalar dt);
|
||||
|
||||
plRenderRequest* ICreateRenderRequest(plRenderTarget* rt, plDrawableSpans* draw, hsScalar pri);
|
||||
void ISubmitRenderRequests();
|
||||
|
||||
plRenderTarget* ICreateTransferRenderTarget(const char* name, int size);
|
||||
plDrawableSpans* ICreateClearDrawable(plDrawableSpans* drawable, hsGMaterial* mat);
|
||||
|
||||
void IAddBumpBiasShaders(plLayer* layer);
|
||||
plMipmap* ICreateBiasNoiseMap();
|
||||
void IAddBumpBiasLayer(hsGMaterial* mat);
|
||||
|
||||
plMipmap* ICreateBumpBitmapFFP(hsScalar amp, hsScalar dx, hsScalar dy) const;
|
||||
hsGMaterial* ICreateBumpLayersFFP();
|
||||
plMipmap* ICreateBumpMipmapPS();
|
||||
plLayer* ICreateBumpLayerPS(plMipmap* mipMap, hsGMaterial* bumpMat, int which);
|
||||
hsGMaterial* ICreateBumpLayersPS();
|
||||
plDrawableSpans* ICreateBumpDrawable();
|
||||
|
||||
plLayer* ICreateTotalEnvLayer(plBitmap* envMap, hsGMaterial* mat, int which, const char* pref);
|
||||
plLayer* ICreateTotalLayer(plBitmap* bm, hsGMaterial* mat, int which, const char* suff);
|
||||
|
||||
hsGMaterial* ICreateFixedMatPS(hsGMaterial* mat, const int numUVWs);
|
||||
void ICreateFixedMat(hsGMaterial* mat, const int numUVWs);
|
||||
void ICheckTargetMaterials();
|
||||
|
||||
plDrawableSpans* ICreateGraphDrawable(plDrawableSpans* drawable, hsGMaterial* mat, int nWid);
|
||||
plDrawableSpans* ICreateEmptyGraphDrawable(const char* name, UInt32 ref, int wich);
|
||||
hsGMaterial* ICreateEmptyMaterial(const char* name, UInt32 ref, int which);
|
||||
plLayer* ICreateBlankLayer(const char* name, int suff);
|
||||
plMipmap* ICreateBlankTex(const char* name, int width, int height, UInt32 ref);
|
||||
plMipmap* ICreateGraphShoreTex(int width, int height);
|
||||
plMipmap* ICreateBubbleShoreTex(int width, int height);
|
||||
void IRefillBubbleShoreTex();
|
||||
plMipmap* ICreateEdgeShoreTex(int width, int height);
|
||||
void IRefillEdgeShoreTex();
|
||||
void ISetAsTexture(plLayer* lay, plBitmap* tex);
|
||||
void ICreateGraphShoreLayer(hsGMaterial* mat, int iPass);
|
||||
void ICreateGraphBubbleLayer(hsGMaterial* mat, int iPass);
|
||||
void ICreateGraphEdgeLayer(hsGMaterial* mat, int iPass);
|
||||
void ICreateGraphShoreMaterials();
|
||||
plRenderTarget* ISetupGraphShoreRenderReq(int which);
|
||||
void IMakeShoreLayer(hsGMaterial* mat, int which);
|
||||
void ISetupShoreLayers(hsGMaterial* mat);
|
||||
void ISetupGraphShore(hsGMaterial* mat);
|
||||
void ICheckShoreMaterial(plSceneObject* so);
|
||||
void ICheckShoreMaterials();
|
||||
void ICheckDecalMaterial(plSceneObject* so);
|
||||
void ICheckDecalMaterials();
|
||||
void ISetupDecal(hsGMaterial* mat);
|
||||
void ICheckDecalEnvLayers(hsGMaterial* mat);
|
||||
|
||||
void IAddGraphPShader(hsGMaterial* mat, int iPass);
|
||||
void IAddGraphVShader(hsGMaterial* mat, int iPass);
|
||||
void IUpdateGraphShader(hsScalar dt, int iPass);
|
||||
void IInitGraph(int iPass);
|
||||
void IShuffleDownGraphs(int iPass);
|
||||
|
||||
// type is either plLayRefMsg::kVertexShader or plLayRefMsg::kPixelShader.
|
||||
void IAddShaderToLayers(hsGMaterial* mat, int iFirst, int iLast, UInt8 type, plShader* shader);
|
||||
|
||||
void IAddBumpPixelShader(hsGMaterial* mat, int iShader, int iFirst, int iLast);
|
||||
void IAddBumpVertexShader(hsGMaterial* mat, int iShader, int iFirst, int iLast);
|
||||
|
||||
void IAddRipVertexShader(hsGMaterial* mat, const plRipVSConsts& ripConsts);
|
||||
void IAddRipPixelShader(hsGMaterial* mat, const plRipVSConsts& ripConsts);
|
||||
|
||||
void IAddShoreVertexShader(hsGMaterial* mat);
|
||||
void IAddShorePixelShader(hsGMaterial* mat);
|
||||
|
||||
void IAddFixedVertexShader(hsGMaterial* mat, const int numUVWs);
|
||||
void IAddFixedPixelShader(hsGMaterial* mat);
|
||||
|
||||
plShader* IGetDecalPShader(hsGMaterial* mat);
|
||||
plShader* ICreateDecalPShader(DecalPType t);
|
||||
plShader* IGetDecalVShader(hsGMaterial* mat);
|
||||
plShader* ICreateDecalVShader(DecalVType t);
|
||||
|
||||
void IUpdateShaders(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
|
||||
void IUpdateBiasVShader();
|
||||
void IUpdateBumpPShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateBumpVShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateRipPShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateRipVShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateShoreVShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateFixedVShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateFixedPShader(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
void IUpdateGraphShaders(plPipeline* pipe, hsScalar dt);
|
||||
void IUpdateDecVShader(int t, plPipeline* pipe);
|
||||
void IUpdateDecVShaders(plPipeline* pipe, const hsMatrix44& l2w, const hsMatrix44& w2l);
|
||||
|
||||
virtual int IShoreRef() const { return kRefShore; }
|
||||
virtual int IDecalRef() const { return kRefDecal; }
|
||||
|
||||
inline void LogF(const char *format, ...) const;
|
||||
inline void LogF(UInt32 color, const char *format, ...) const;
|
||||
inline void IRestartLog() const;
|
||||
inline void GraphLen(hsScalar len) const;
|
||||
inline void IRestartGraph() const;
|
||||
|
||||
public:
|
||||
plWaveSet7();
|
||||
virtual ~plWaveSet7();
|
||||
|
||||
CLASSNAME_REGISTER( plWaveSet7 );
|
||||
GETINTERFACE_ANY( plWaveSet7, plWaveSetBase );
|
||||
|
||||
virtual hsBool MsgReceive(plMessage* msg);
|
||||
|
||||
virtual hsBool IEval(double secs, hsScalar del, UInt32 dirty) { return false; }
|
||||
|
||||
Int32 GetNumProperties() const { return kNumProps; }
|
||||
|
||||
virtual void Read(hsStream* stream, hsResMgr* mgr);
|
||||
virtual void Write(hsStream* stream, hsResMgr* mgr);
|
||||
|
||||
hsScalar EvalPoint(hsPoint3& pos, hsVector3& norm);
|
||||
|
||||
// Getters and Setters for Python twiddling
|
||||
//
|
||||
// First a way to set new values. The secs parameter says how long to take
|
||||
// blending to the new value from the current value.
|
||||
//
|
||||
// Geometric wave parameters. These are all safe to twiddle at any time or speed.
|
||||
// The new settings take effect as new waves are spawned.
|
||||
void SetGeoMaxLength(hsScalar s, hsScalar secs=0) { fState.fGeoState.fMaxLength.Set(s, secs); }
|
||||
void SetGeoMinLength(hsScalar s, hsScalar secs=0) { fState.fGeoState.fMinLength.Set(s, secs); }
|
||||
void SetGeoAmpOverLen(hsScalar s, hsScalar secs=0) { fState.fGeoState.fAmpOverLen.Set(s, secs); }
|
||||
void SetGeoChop(hsScalar s, hsScalar secs=0) { fState.fGeoState.fChop.Set(s, secs); }
|
||||
void SetGeoAngleDev(hsScalar s, hsScalar secs=0) { fState.fGeoState.fAngleDev.Set(s, secs); }
|
||||
|
||||
// Texture wave parameters. Safe to twiddle any time or speed.
|
||||
// The new settings take effect as new waves are spawned.
|
||||
void SetTexMaxLength(hsScalar s, hsScalar secs=0) { fState.fTexState.fMaxLength.Set(s, secs); }
|
||||
void SetTexMinLength(hsScalar s, hsScalar secs=0) { fState.fTexState.fMinLength.Set(s, secs); }
|
||||
void SetTexAmpOverLen(hsScalar s, hsScalar secs=0) { fState.fTexState.fAmpOverLen.Set(s, secs); }
|
||||
void SetTexChop(hsScalar s, hsScalar secs=0) { fState.fTexState.fChop.Set(s, secs); }
|
||||
void SetTexAngleDev(hsScalar s, hsScalar secs=0) { fState.fTexState.fAngleDev.Set(s, secs); }
|
||||
|
||||
// The size in feet of one tile of the ripple texture. If you change this (I don't
|
||||
// recommend it), you need to change it very slowly or it will look very stupid.
|
||||
void SetRippleScale(hsScalar s, hsScalar secs=0) { fState.fRippleScale.Set(s, secs); }
|
||||
|
||||
// The direction the wind is blowing (waves will be more or less perpindicular to wind dir).
|
||||
// Change somewhat slowly, like over 30 seconds.
|
||||
void SetWindDir(const hsVector3& s, hsScalar secs=0) { fState.fWindDir.Set(s, secs); }
|
||||
|
||||
// Change these gently, effect is immediate.
|
||||
void SetSpecularNoise(hsScalar s, hsScalar secs=0) { hsVector3 spec = fState.fSpecVec; spec[plFixedWaterState7::kNoise] = s; fState.fSpecVec.Set(spec, secs); }
|
||||
void SetSpecularStart(hsScalar s, hsScalar secs=0) { hsVector3 spec = fState.fSpecVec; spec[plFixedWaterState7::kSpecStart] = s; fState.fSpecVec.Set(spec, secs); }
|
||||
void SetSpecularEnd(hsScalar s, hsScalar secs=0) { hsVector3 spec = fState.fSpecVec; spec[plFixedWaterState7::kSpecEnd] = s; fState.fSpecVec.Set(spec, secs); }
|
||||
|
||||
// Water Height is overriden if the ref object is animated.
|
||||
void SetWaterHeight(hsScalar s, hsScalar secs=0) { fState.fWaterHeight.Set(s, secs); }
|
||||
|
||||
// Water Offset and DepthFalloff are complicated, and not immediately interesting to animate.
|
||||
void SetWaterOffset(const hsVector3& s, hsScalar secs=0) { fState.fWaterOffset.Set(s, secs); }
|
||||
void SetOpacOffset(hsScalar s, hsScalar secs=0) { hsVector3 off = fState.fWaterOffset; off.fX = s; fState.fWaterOffset.Set(off, secs); }
|
||||
void SetReflOffset(hsScalar s, hsScalar secs=0) { hsVector3 off = fState.fWaterOffset; off.fY = s; fState.fWaterOffset.Set(off, secs); }
|
||||
void SetWaveOffset(hsScalar s, hsScalar secs=0) { hsVector3 off = fState.fWaterOffset; off.fZ = s; fState.fWaterOffset.Set(off, secs); }
|
||||
void SetDepthFalloff(const hsVector3& s, hsScalar secs=0) { fState.fDepthFalloff.Set(s, secs); }
|
||||
void SetOpacFalloff(hsScalar s, hsScalar secs=0) { hsVector3 off = fState.fDepthFalloff; off.fX = s; fState.fDepthFalloff.Set(off, secs); }
|
||||
void SetReflFalloff(hsScalar s, hsScalar secs=0) { hsVector3 off = fState.fDepthFalloff; off.fY = s; fState.fDepthFalloff.Set(off, secs); }
|
||||
void SetWaveFalloff(hsScalar s, hsScalar secs=0) { hsVector3 off = fState.fDepthFalloff; off.fZ = s; fState.fDepthFalloff.Set(off, secs); }
|
||||
|
||||
// Max and Min Atten aren't very interesting, and will probably go away.
|
||||
void SetMaxAtten(const hsVector3& s, hsScalar secs=0) { fState.fMaxAtten.Set(s, secs); }
|
||||
void SetMinAtten(const hsVector3& s, hsScalar secs=0) { fState.fMinAtten.Set(s, secs); }
|
||||
|
||||
// Skipping the shore parameters, because they are never used.
|
||||
|
||||
// Water colors, adjust slowly, effect is immediate.
|
||||
void SetWaterTint(const hsColorRGBA& s, hsScalar secs=0) { fState.fWaterTint.Set(s, secs); }
|
||||
void SetWaterRGB(const hsVector3& col, hsScalar secs=0) { hsColorRGBA rgb; rgb.Set(col.fX, col.fY, col.fZ, GetWaterOpacity()); SetWaterTint(rgb, secs); }
|
||||
void SetWaterOpacity(hsScalar s, hsScalar secs=0) { hsColorRGBA col = GetWaterTint(); col.a = s; SetWaterTint(col, secs); }
|
||||
void SetSpecularTint(const hsColorRGBA& s, hsScalar secs=0) { fState.fSpecularTint.Set(s, secs); }
|
||||
void SetSpecularRGB(const hsVector3& col, hsScalar secs=0) { hsColorRGBA rgb; rgb.Set(col.fX, col.fY, col.fZ, GetSpecularMute()); SetSpecularTint(rgb, secs); }
|
||||
void SetSpecularMute(hsScalar s, hsScalar secs=0) { hsColorRGBA col = GetSpecularTint(); col.a = s; SetSpecularTint(col, secs); }
|
||||
|
||||
// The environment map is essentially projected onto a sphere. Moving the center of
|
||||
// the sphere north will move the reflections north, changing the radius of the
|
||||
// sphere effects parallax in the obvious way.
|
||||
void SetEnvCenter(const hsPoint3& s, hsScalar secs=0) { fState.fEnvCenter.Set(s, secs); }
|
||||
void SetEnvRadius(hsScalar s, hsScalar secs=0) { fState.fEnvRadius.Set(s, secs); }
|
||||
|
||||
// Now a way to get current values. See the accompanying Setter for notes on
|
||||
// what the parameter means.
|
||||
//
|
||||
hsScalar GetGeoMaxLength() const { return fState.fGeoState.fMaxLength; }
|
||||
hsScalar GetGeoMinLength() const { return fState.fGeoState.fMinLength; }
|
||||
hsScalar GetGeoAmpOverLen() const { return fState.fGeoState.fAmpOverLen; }
|
||||
hsScalar GetGeoChop() const { return fState.fGeoState.fChop; }
|
||||
hsScalar GetGeoAngleDev() const { return fState.fGeoState.fAngleDev; }
|
||||
|
||||
hsScalar GetTexMaxLength() const { return fState.fTexState.fMaxLength; }
|
||||
hsScalar GetTexMinLength() const { return fState.fTexState.fMinLength; }
|
||||
hsScalar GetTexAmpOverLen() const { return fState.fTexState.fAmpOverLen; }
|
||||
hsScalar GetTexChop() const { return fState.fTexState.fChop; }
|
||||
hsScalar GetTexAngleDev() const { return fState.fTexState.fAngleDev; }
|
||||
|
||||
hsScalar GetRippleScale() const { return fState.fRippleScale; }
|
||||
|
||||
hsVector3 GetWindDir() const { return fState.fWindDir; }
|
||||
|
||||
hsScalar GetSpecularNoise() const { hsVector3 spec = fState.fSpecVec; return spec[plFixedWaterState7::kNoise]; }
|
||||
hsScalar GetSpecularStart() const { hsVector3 spec = fState.fSpecVec; return spec[plFixedWaterState7::kSpecStart]; }
|
||||
hsScalar GetSpecularEnd() const { hsVector3 spec = fState.fSpecVec; return spec[plFixedWaterState7::kSpecEnd]; }
|
||||
|
||||
hsScalar GetWaterHeight() const { return fState.fWaterHeight; }
|
||||
|
||||
hsVector3 GetWaterOffset() const { return fState.fWaterOffset; }
|
||||
hsScalar GetOpacOffset() const { hsVector3 off = fState.fWaterOffset; return off.fX; }
|
||||
hsScalar GetReflOffset() const { hsVector3 off = fState.fWaterOffset; return off.fY; }
|
||||
hsScalar GetWaveOffset() const { hsVector3 off = fState.fWaterOffset; return off.fZ; }
|
||||
hsVector3 GetDepthFalloff() const { return fState.fDepthFalloff; }
|
||||
hsScalar GetOpacFalloff() const { hsVector3 off = fState.fDepthFalloff; return off.fX; }
|
||||
hsScalar GetReflFalloff() const { hsVector3 off = fState.fDepthFalloff; return off.fY; }
|
||||
hsScalar GetWaveFalloff() const { hsVector3 off = fState.fDepthFalloff; return off.fZ; }
|
||||
|
||||
hsVector3 GetMaxAtten() const { return fState.fMaxAtten; }
|
||||
hsVector3 GetMinAtten() const { return fState.fMinAtten; }
|
||||
|
||||
hsColorRGBA GetWaterTint() const { return fState.fWaterTint; }
|
||||
hsVector3 GetWaterRGB() const { hsColorRGBA col = GetWaterTint(); return hsVector3(col.r, col.g, col.b); }
|
||||
hsScalar GetWaterOpacity() const { return GetWaterTint().a; }
|
||||
hsColorRGBA GetSpecularTint() const { return fState.fSpecularTint; }
|
||||
hsVector3 GetSpecularRGB() const { hsColorRGBA col = GetSpecularTint(); return hsVector3(col.r, col.g, col.b); }
|
||||
hsScalar GetSpecularMute() const { return GetSpecularTint().a; }
|
||||
|
||||
hsPoint3 GetEnvCenter() const { return fState.fEnvCenter; }
|
||||
hsScalar GetEnvRadius() const { return fState.fEnvRadius; }
|
||||
|
||||
// Export/debugging functions. For runtime, use message interface (plGenRefMsg, plWaveMsg).
|
||||
void AddTarget(const plKey& key);
|
||||
void RemoveTarget(const plKey& key);
|
||||
void AddShoreTest(plKey& key);
|
||||
|
||||
void SetRefObject(plSceneObject* refObj);
|
||||
|
||||
void SetSceneNode(const plKey& key);
|
||||
plKey GetSceneNode() const { return fSceneNode; }
|
||||
|
||||
void AddDynaDecalMgr(plKey& key);
|
||||
void RemoveDynaDecalMgr(plKey& key);
|
||||
|
||||
void AddBuoy(plKey soKey);
|
||||
void RemoveBuoy(plKey soKey);
|
||||
|
||||
virtual hsBool SetupRippleMat(hsGMaterial* mat, const plRipVSConsts& ripConsts);
|
||||
|
||||
virtual hsScalar GetHeight() const { return State().fWaterHeight; }
|
||||
|
||||
const plFixedWaterState7::WaveState& GeoState() const { return State().fGeoState; }
|
||||
const plFixedWaterState7::WaveState& TexState() const { return State().fTexState; }
|
||||
const plFixedWaterState7& State() const { return fState; }
|
||||
void SetState(const plFixedWaterState7& state, hsScalar dur);
|
||||
|
||||
void SetEnvSize(UInt32 s) { fEnvSize = s; }
|
||||
UInt32 GetEnvSize() const { return fEnvSize; }
|
||||
|
||||
void StopLog();
|
||||
void StartLog();
|
||||
hsBool Logging() const { return fStatusLog != nil; }
|
||||
void StartGraph();
|
||||
void StopGraph();
|
||||
hsBool Graphing() const { return fStatusGraph != nil; }
|
||||
};
|
||||
|
||||
#endif // plWaveSet7_inc
|
Reference in New Issue
Block a user