added everything
This commit is contained in:
166
engine/lightingSystem/sgLightObject.h
Executable file
166
engine/lightingSystem/sgLightObject.h
Executable file
@@ -0,0 +1,166 @@
|
||||
//-----------------------------------------------
|
||||
// Synapse Gaming - Lighting System
|
||||
// Copyright <20> Synapse Gaming 2003
|
||||
// Written by John Kabus
|
||||
//-----------------------------------------------
|
||||
#ifndef _SGUNIVERSALSTATICLIGHT_H_
|
||||
#define _SGUNIVERSALSTATICLIGHT_H_
|
||||
|
||||
#include "game/fx/fxLight.h"
|
||||
#include "game/fx/particleEmitter.h"
|
||||
//#include "game/fx/particleEmitterNode.h"
|
||||
|
||||
|
||||
/**
|
||||
* The datablock class for sgUniversalStaticLight.
|
||||
*/
|
||||
class sgLightObjectData : public fxLightData
|
||||
{
|
||||
typedef fxLightData Parent;
|
||||
|
||||
public:
|
||||
/// Enables static lighting (baked into light maps)
|
||||
/// instead of Torque's default dynamic lighting.
|
||||
bool sgStatic;
|
||||
/// Turns this light into a spotlight (only works with static lights).
|
||||
bool sgSpot;
|
||||
/// The spotlight spread angle.
|
||||
F32 sgSpotAngle;
|
||||
/// Selects the lighting model.
|
||||
/// The default lighting model uses (rad^2 / dist^2)
|
||||
/// and creates a distinct drop off.
|
||||
/// The advanced lighting model uses (1 - (dist^2 / rad^2))
|
||||
/// and creates gradual / global illumination feel (does not perform radiosity).
|
||||
bool sgAdvancedLightingModel;
|
||||
/// Allows this light to illuminate dts objects.
|
||||
bool sgEffectsDTSObjects;
|
||||
bool sgCastsShadows;
|
||||
bool sgDiffuseRestrictZone;
|
||||
bool sgAmbientRestrictZone;
|
||||
F32 sgLocalAmbientAmount;
|
||||
bool sgSmoothSpotLight;
|
||||
bool sgDoubleSidedAmbient;
|
||||
StringTableEntry sgLightingModelName;
|
||||
bool sgUseNormals;
|
||||
U32 sgMountPoint;
|
||||
MatrixF sgMountTransform;
|
||||
|
||||
sgLightObjectData();
|
||||
static void initPersistFields();
|
||||
virtual void packData(BitStream *stream);
|
||||
virtual void unpackData(BitStream *stream);
|
||||
|
||||
DECLARE_CONOBJECT(sgLightObjectData);
|
||||
};
|
||||
|
||||
/**
|
||||
* This class extends fxLight to provide mission level
|
||||
* static light objects. These light objects can also
|
||||
* be used as dynamic lights and linked to mission level
|
||||
* particle emitters for coordinated particle system
|
||||
* light sources (flickering,...).
|
||||
*/
|
||||
class sgLightObject : public fxLight
|
||||
{
|
||||
typedef fxLight Parent;
|
||||
sgLightObjectData *mDataBlock;
|
||||
|
||||
/// The particle emitter's ghost id is used to sync up the client and server.
|
||||
bool sgValidParticleEmitter;
|
||||
S32 sgParticleEmitterGhostIndex;
|
||||
S32 sgAttachedObjectGhostIndex;
|
||||
/// The resolved (from the ghost id) particle emitter.
|
||||
SimObjectPtr<ParticleEmitter> sgParticleEmitterPtr;
|
||||
SimObjectPtr<GameBase> sgAttachedObjectPtr;
|
||||
|
||||
S32 sgMainZone;
|
||||
|
||||
class sgAnimateState
|
||||
{
|
||||
bool mUseColour;
|
||||
bool mUseBrightness;
|
||||
bool mUseRadius;
|
||||
bool mUseOffsets;
|
||||
bool mUseRotation;
|
||||
public:
|
||||
sgAnimateState()
|
||||
{
|
||||
mUseColour = false;
|
||||
mUseBrightness = false;
|
||||
mUseRadius = false;
|
||||
mUseOffsets = false;
|
||||
mUseRotation = false;
|
||||
}
|
||||
void sgCopyState(sgLightObjectData *light)
|
||||
{
|
||||
mUseColour = light->mUseColour;
|
||||
mUseBrightness = light->mUseBrightness;
|
||||
mUseRadius = light->mUseRadius;
|
||||
mUseOffsets = light->mUseOffsets;
|
||||
mUseRotation = light->mUseRotation;
|
||||
}
|
||||
void sgRestoreState(sgLightObjectData *light)
|
||||
{
|
||||
light->mUseColour = mUseColour;
|
||||
light->mUseBrightness = mUseBrightness;
|
||||
light->mUseRadius = mUseRadius;
|
||||
light->mUseOffsets = mUseOffsets;
|
||||
light->mUseRotation = mUseRotation;
|
||||
}
|
||||
void sgDisableState(sgLightObjectData *light)
|
||||
{
|
||||
light->mUseColour = false;
|
||||
light->mUseBrightness = false;
|
||||
light->mUseRadius = false;
|
||||
light->mUseOffsets = false;
|
||||
light->mUseRotation = false;
|
||||
}
|
||||
};
|
||||
|
||||
public:
|
||||
enum {
|
||||
sgLastfxLightMask = fxLightAttachChange,
|
||||
sgParticleSystemMask = sgLastfxLightMask << 1,
|
||||
sgAttachedObjectMask = sgLastfxLightMask << 2
|
||||
};
|
||||
|
||||
LightInfo mLight;
|
||||
/// Used to attenuate the color received from the particle emitter.
|
||||
F32 sgParticleColorAttenuation;
|
||||
/// The particle emitter name field.
|
||||
/// This is the unique mission name of the particle emitter.
|
||||
StringTableEntry sgParticleEmitterName;
|
||||
|
||||
sgLightObject()
|
||||
{
|
||||
sgParticleEmitterName = StringTable->insert("");
|
||||
sgParticleEmitterGhostIndex = -1;
|
||||
sgAttachedObjectGhostIndex = -1;
|
||||
sgParticleColorAttenuation = 1.0f;
|
||||
sgParticleEmitterPtr = NULL;
|
||||
sgAttachedObjectPtr = NULL;
|
||||
sgValidParticleEmitter = false;
|
||||
}
|
||||
|
||||
void attachToObject(GameBase *obj);
|
||||
void detachFromObject();
|
||||
|
||||
bool onAdd();
|
||||
bool onNewDataBlock(GameBaseData *dptr);
|
||||
void processTick(const Move* move);
|
||||
virtual void calculateLightPosition();
|
||||
virtual SceneObject *getAttachedObject() {return sgAttachedObjectPtr;}
|
||||
void renderObject(SceneState* state, SceneRenderImage*);
|
||||
virtual void setTransform(const MatrixF & mat);
|
||||
void registerLights(LightManager *lightManager, bool lightingScene);
|
||||
static void initPersistFields();
|
||||
virtual void inspectPostApply();
|
||||
U32 packUpdate(NetConnection *con, U32 mask, BitStream *stream);
|
||||
void unpackUpdate(NetConnection *con, BitStream *stream);
|
||||
/// Tries to turn sgParticleEmitterName into sgParticleEmitterGhostIndex.
|
||||
void sgCalculateParticleSystemInfo(NetConnection *con);
|
||||
|
||||
DECLARE_CONOBJECT(sgLightObject);
|
||||
};
|
||||
|
||||
#endif//_SGUNIVERSALSTATICLIGHT_H_
|
||||
Reference in New Issue
Block a user