You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

136 lines
3.3 KiB

/*==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/>.
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 hsFogControl_inc
#define hsFogControl_inc
//#include "hsSceneObject.h"
//#include "hsGEnviron.h"
class hsSceneNode;
class hsG3DDevice;
class hsGView3;
class hsPortal;
class hsFogControl : public plCreatable {
public:
enum {
kFogCtlPortal
};
protected:
plKey fNodeKey;
hsDynamicArray<plKey> fFogNodes;
// hsGEnvironment::FogState fAvgFog;
virtual hsScalar IGetStrength(hsSceneNode* node) = 0;
void IPopNodes();
void IPushNodes();
void IZeroAvgFog();
void IAverageNodes();
// void IAccumFog(hsGEnvironment* env, hsScalar wgt);
public:
hsFogControl() {}
~hsFogControl() {}
CLASSNAME_REGISTER( hsFogControl );
GETINTERFACE_ANY( hsFogControl, plCreatable );
virtual UInt32 GetType() = 0;
// virtual hsGEnvironment* GetHomeEnv() = 0;
virtual void Init(hsSceneNode* node);
virtual void Blend() = 0;
virtual void Restore() = 0;
virtual void Read(hsStream *stream, hsResMgr* mgr) = 0;
virtual void Write(hsStream *stream, hsResMgr* mgr) = 0;
};
#if 0 // Move up to FeatureLevel
class hsNodeFogControl : public hsFogControl {
public:
hsNodeFogControl();
~hsNodeFogControl();
hsSceneNode* GetFogNode(int i);
hsSceneNode *GetHomeNode();
virtual void Init(hsSceneNode* node);
virtual hsGEnvironment* GetHomeEnv();
virtual void Blend();
virtual void Restore();
virtual void Read(hsStream *stream);
virtual void Write(hsStream *stream);
};
class hsPortalFogControl : public hsNodeFogControl {
protected:
enum {
kStatusNone = 0x0,
kStatusNodesSet = 0x1
};
hsDynamicArray<plKey> fPortals;
hsScalar fDefRadius;
UInt32 fStatus;
void IFindFogNodes();
virtual hsScalar IGetStrength(hsSceneNode* node);
public:
hsPortalFogControl();
void SetDefaultRadius(hsScalar r) { fDefRadius = r; }
hsScalar GetDefaultRadius() { return fDefRadius; }
hsPortal* GetPortal(int i);
virtual UInt32 GetType() { return kFogCtlPortal; }
virtual void Init(hsSceneNode* node);
virtual void Blend();
int GetNumPortalKeys() { return fPortals.GetCount(); }
void AddPortalKey(plKey key) { fPortals.Append(key); }
plKey GetPortalKey(int i) { return fPortals[i]; }
virtual void Read(hsStream *stream);
virtual void Write(hsStream *stream);
};
#endif // Move up to FeatureLevel
#endif hsFogControl_inc