📄 fxlight.cc
字号:
//-----------------------------------------------------------------------------
// Torque Game Engine
//
// Written by Melvyn May, Started on 4th May 2002.
//
// "My code is written for the Torque community, so do your worst with it,
// just don't rip-it-off and call it your own without even thanking me".
//
// - Melv.
//
//-----------------------------------------------------------------------------
#include "console/consoleTypes.h"
#include "dgl/dgl.h"
#include "core/bitStream.h"
#include "game/gameConnection.h"
#include "game/gameBase.h"
#include "sceneGraph/sceneState.h"
#include "sceneGraph/sceneGraph.h"
#include "fxLight.h"
//------------------------------------------------------------------------------
//
// Put this in /example/common/editor/EditorGui.cs in [function Creator::init( %this )]
//
// %Environment_Item[<next item-index in list>] = "fxLight"; <-- ADD THIS.
//
//------------------------------------------------------------------------------
//
// Put the function in /example/common/editor/ObjectBuilderGui.gui [around line 458] ...
//
// function ObjectBuilderGui::buildfxLight(%this)
// {
// %this.className = "fxLight";
// %this.addField("dataBlock", "TypeDataBlock", "fxLight Data", "fxLightData");
// %this.process();
// }
//
//------------------------------------------------------------------------------
//
// Put 'fxLightIcon.jpg' in /example/common/editor/ directory.
// Put the example 'corona.png' in the "/example/common/lighting/" directory.
//
//------------------------------------------------------------------------------
extern bool gEditingMission;
//------------------------------------------------------------------------------
IMPLEMENT_CONSOLETYPE(fxLightData)
IMPLEMENT_GETDATATYPE(fxLightData)
IMPLEMENT_SETDATATYPE(fxLightData)
IMPLEMENT_CO_DATABLOCK_V1(fxLightData);
IMPLEMENT_CO_NETOBJECT_V1(fxLight);
//------------------------------------------------------------------------------
fxLightData::fxLightData()
{
// Datablock Light.
mLightOn = true;
mRadius = 10.0f;
mBrightness = 1.0f;
mColour .set(1,1,1);
// Datablock Sun-Light.
// Datablock Flare.
mFlareOn = false;
mFlareTP = true;
mFlareTextureName = StringTable->insert("");
mConstantSizeOn = false;
mConstantSize = 1.0f;
mNearSize = 3.0f;
mFarSize = 0.5f;
mNearDistance = 10.0f;
mFarDistance = 30.0f;
mFadeTime = 0.1f;
mFlareColour .set(1,1,1);
mBlendMode = 0;
// Datablock Animation.
mMinColour .set(0,0,0);
mMaxColour .set(1,1,1);
mMinBrightness = 0.0f;
mMaxBrightness = 1.0f;
mMinRadius = 0.1f;
mMaxRadius = 20.0f;
mStartOffset .set(-5,0,0);
mEndOffset .set(+5,0,0);
mMinRotation = 0;
mMaxRotation = 359;
mSingleColourKeys = true;
mRedKeys = StringTable->insert("AZA");
mGreenKeys = StringTable->insert("AZA");
mBlueKeys = StringTable->insert("AZA");
mBrightnessKeys = StringTable->insert("AZA");
mRadiusKeys = StringTable->insert("AZA");
mOffsetKeys = StringTable->insert("AZA");
mRotationKeys = StringTable->insert("AZA");
mColourTime = 5.0f;
mBrightnessTime = 5.0f;
mRadiusTime = 5.0f;
mOffsetTime = 5.0f;
mRotationTime = 5.0f;
mLerpColour = true;
mLerpBrightness = true;
mLerpRadius = true;
mLerpOffset = true;
mLerpRotation = true;
mUseColour = false;
mUseBrightness = false;
mUseRadius = false;
mUseOffsets = false;
mUseRotation = false;
mLinkFlare = true;
mLinkFlareSize = false;
}
//------------------------------------------------------------------------------
void fxLightData::initPersistFields()
{
Parent::initPersistFields();
// Datablock Light.
addField( "LightOn", TypeBool, Offset( mLightOn, fxLightData ) );
addField( "Radius", TypeF32, Offset( mRadius, fxLightData ) );
addField( "Brightness", TypeF32, Offset( mBrightness, fxLightData ) );
addField( "Colour", TypeColorF, Offset( mColour, fxLightData ) );
// Flare.
addField( "FlareOn", TypeBool, Offset( mFlareOn, fxLightData ) );
addField( "FlareTP", TypeBool, Offset( mFlareTP, fxLightData ) );
addField( "FlareBitmap", TypeFilename, Offset( mFlareTextureName, fxLightData ) );
addField( "FlareColour", TypeColorF, Offset( mFlareColour, fxLightData ) );
addField( "ConstantSizeOn", TypeBool, Offset( mConstantSizeOn, fxLightData ) );
addField( "ConstantSize", TypeF32, Offset( mConstantSize, fxLightData ) );
addField( "NearSize", TypeF32, Offset( mNearSize, fxLightData ) );
addField( "FarSize", TypeF32, Offset( mFarSize, fxLightData ) );
addField( "NearDistance", TypeF32, Offset( mNearDistance, fxLightData ) );
addField( "FarDistance", TypeF32, Offset( mFarDistance, fxLightData ) );
addField( "FadeTime", TypeF32, Offset( mFadeTime, fxLightData ) );
addField( "BlendMode", TypeS32, Offset( mBlendMode, fxLightData ) );
// Datablock Animation.
addField( "AnimColour", TypeBool, Offset( mUseColour, fxLightData ) );
addField( "AnimBrightness", TypeBool, Offset( mUseBrightness, fxLightData ) );
addField( "AnimRadius", TypeBool, Offset( mUseRadius, fxLightData ) );
addField( "AnimOffsets", TypeBool, Offset( mUseOffsets, fxLightData ) );
addField( "AnimRotation", TypeBool, Offset( mUseRotation, fxLightData ) );
addField( "LinkFlare", TypeBool, Offset( mLinkFlare, fxLightData ) );
addField( "LinkFlareSize", TypeBool, Offset( mLinkFlareSize, fxLightData ) );
addField( "MinColour", TypeColorF, Offset( mMinColour, fxLightData ) );
addField( "MaxColour", TypeColorF, Offset( mMaxColour, fxLightData ) );
addField( "MinBrightness", TypeF32, Offset( mMinBrightness, fxLightData ) );
addField( "MaxBrightness", TypeF32, Offset( mMaxBrightness, fxLightData ) );
addField( "MinRadius", TypeF32, Offset( mMinRadius, fxLightData ) );
addField( "MaxRadius", TypeF32, Offset( mMaxRadius, fxLightData ) );
addField( "StartOffset", TypePoint3F, Offset( mStartOffset, fxLightData ) );
addField( "EndOffset", TypePoint3F, Offset( mEndOffset, fxLightData ) );
addField( "MinRotation", TypeF32, Offset( mMinRotation, fxLightData ) );
addField( "MaxRotation", TypeF32, Offset( mMaxRotation, fxLightData ) );
addField( "SingleColourKeys", TypeBool, Offset( mSingleColourKeys, fxLightData ) );
addField( "RedKeys", TypeString, Offset( mRedKeys, fxLightData ) );
addField( "GreenKeys", TypeString, Offset( mGreenKeys, fxLightData ) );
addField( "BlueKeys", TypeString, Offset( mBlueKeys, fxLightData ) );
addField( "BrightnessKeys", TypeString, Offset( mBrightnessKeys, fxLightData ) );
addField( "RadiusKeys", TypeString, Offset( mRadiusKeys, fxLightData ) );
addField( "OffsetKeys", TypeString, Offset( mOffsetKeys, fxLightData ) );
addField( "RotationKeys", TypeString, Offset( mRotationKeys, fxLightData ) );
addField( "ColourTime", TypeF32, Offset( mColourTime, fxLightData ) );
addField( "BrightnessTime", TypeF32, Offset( mBrightnessTime, fxLightData ) );
addField( "RadiusTime", TypeF32, Offset( mRadiusTime, fxLightData ) );
addField( "OffsetTime", TypeF32, Offset( mOffsetTime, fxLightData ) );
addField( "RotationTime", TypeF32, Offset( mRotationTime, fxLightData ) );
addField( "LerpColour", TypeBool, Offset( mLerpColour, fxLightData ) );
addField( "LerpBrightness", TypeBool, Offset( mLerpBrightness, fxLightData ) );
addField( "LerpRadius", TypeBool, Offset( mLerpRadius, fxLightData ) );
addField( "LerpOffset", TypeBool, Offset( mLerpOffset, fxLightData ) );
addField( "LerpRotation", TypeBool, Offset( mLerpRotation, fxLightData ) );
}
//------------------------------------------------------------------------------
bool fxLightData::onAdd()
{
if (Parent::onAdd() == false)
return false;
return true;
}
//------------------------------------------------------------------------------
void fxLightData::packData(BitStream* stream)
{
// Parent packing.
Parent::packData(stream);
// Datablock Light.
stream->write(mLightOn);
stream->write(mRadius);
stream->write(mBrightness);
stream->write(mColour);
// Datablock Flare.
stream->writeString(mFlareTextureName);
stream->write(mFlareColour);
stream->write(mFlareOn);
stream->write(mFlareTP);
stream->write(mConstantSizeOn);
stream->write(mConstantSize);
stream->write(mNearSize);
stream->write(mFarSize);
stream->write(mNearDistance);
stream->write(mFarDistance);
stream->write(mFadeTime);
stream->write(mBlendMode);
// Datablock Animation.
stream->writeFlag(mUseColour);
stream->writeFlag(mUseBrightness);
stream->writeFlag(mUseRadius);
stream->writeFlag(mUseOffsets);
stream->writeFlag(mUseRotation);
stream->writeFlag(mLinkFlare);
stream->writeFlag(mLinkFlareSize);
stream->write(mMinColour);
stream->write(mMaxColour);
stream->write(mMinBrightness);
stream->write(mMaxBrightness);
stream->write(mMinRadius);
stream->write(mMaxRadius);
stream->write(mStartOffset.x);
stream->write(mStartOffset.y);
stream->write(mStartOffset.z);
stream->write(mEndOffset.x);
stream->write(mEndOffset.y);
stream->write(mEndOffset.z);
stream->write(mMinRotation);
stream->write(mMaxRotation);
stream->writeFlag(mSingleColourKeys);
stream->writeString(mRedKeys);
stream->writeString(mGreenKeys);
stream->writeString(mBlueKeys);
stream->writeString(mBrightnessKeys);
stream->writeString(mRadiusKeys);
stream->writeString(mOffsetKeys);
stream->writeString(mRotationKeys);
stream->write(mColourTime);
stream->write(mBrightnessTime);
stream->write(mRadiusTime);
stream->write(mOffsetTime);
stream->write(mRotationTime);
stream->writeFlag(mLerpColour);
stream->writeFlag(mLerpBrightness);
stream->writeFlag(mLerpRadius);
stream->writeFlag(mLerpOffset);
stream->writeFlag(mLerpRotation);
}
//------------------------------------------------------------------------------
void fxLightData::unpackData(BitStream* stream)
{
// Parent unpacking.
Parent::unpackData(stream);
// Datablock Light.
stream->read(&mLightOn);
stream->read(&mRadius);
stream->read(&mBrightness);
stream->read(&mColour);
// Flare.
mFlareTextureName = StringTable->insert(stream->readSTString());
stream->read(&mFlareColour);
stream->read(&mFlareOn);
stream->read(&mFlareTP);
stream->read(&mConstantSizeOn);
stream->read(&mConstantSize);
stream->read(&mNearSize);
stream->read(&mFarSize);
stream->read(&mNearDistance);
stream->read(&mFarDistance);
stream->read(&mFadeTime);
stream->read(&mBlendMode);
// Datablock Animation.
mUseColour = stream->readFlag();
mUseBrightness = stream->readFlag();
mUseRadius = stream->readFlag();
mUseOffsets = stream->readFlag();
mUseRotation = stream->readFlag();
mLinkFlare = stream->readFlag();
mLinkFlareSize = stream->readFlag();
stream->read(&mMinColour);
stream->read(&mMaxColour);
stream->read(&mMinBrightness);
stream->read(&mMaxBrightness);
stream->read(&mMinRadius);
stream->read(&mMaxRadius);
stream->read(&mStartOffset.x);
stream->read(&mStartOffset.y);
stream->read(&mStartOffset.z);
stream->read(&mEndOffset.x);
stream->read(&mEndOffset.y);
stream->read(&mEndOffset.z);
stream->read(&mMinRotation);
stream->read(&mMaxRotation);
mSingleColourKeys = stream->readFlag();
mRedKeys = stream->readSTString();
mGreenKeys = stream->readSTString();
mBlueKeys = stream->readSTString();
mBrightnessKeys = stream->readSTString();
mRadiusKeys = stream->readSTString();
mOffsetKeys = stream->readSTString();
mRotationKeys = stream->readSTString();
stream->read(&mColourTime);
stream->read(&mBrightnessTime);
stream->read(&mRadiusTime);
stream->read(&mOffsetTime);
stream->read(&mRotationTime);
mLerpColour = stream->readFlag();
mLerpBrightness = stream->readFlag();
mLerpRadius = stream->readFlag();
mLerpOffset = stream->readFlag();
mLerpRotation = stream->readFlag();
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// Class: fxLight
//------------------------------------------------------------------------------
fxLight::fxLight()
{
// Setup NetObject.
mTypeMask |= StaticObjectType | StaticTSObjectType | StaticRenderedObjectType;
mNetFlags.set(Ghostable | ScopeAlways);
mAddedToScene = false;
// Reset DataBlock.
mDataBlock = NULL;
// Reset Attachment stuff.
mAttached = mAttachWait = mAttachValid = false;
// Initialise Animation.
InitialiseAnimation();
// Set Light Type.
mLight.mType = LightInfo::Point;
}
//------------------------------------------------------------------------------
fxLight::~fxLight()
{
}
//------------------------------------------------------------------------------
void fxLight::initPersistFields()
{
// Initialise parents' persistent fields.
Parent::initPersistFields();
// Add our own persistent fields.
addField( "Enable", TypeBool, Offset( mEnable, fxLight ) );
addField( "IconSize", TypeF32, Offset( mIconSize, fxLight ) );
}
//------------------------------------------------------------------------------
void fxLight::processTick(const Move* m)
{
// Process Parent.
Parent::processTick(m);
// Are we attached?
if (isServerObject() && mAttachWait)
{
//Con::printf("fxLight: Checking Object...");
// Get Attached Object.
GameBase* Obj = getProcessAfter();
// Write Object Attach/Detach Flag.
if (Obj != NULL)
{
// Get Server Connection.
GameConnection* con = GameConnection::getLocalClientConnection();
// Problem?
if (!con)
{
Con::printf("fxLight: Could not get Game Connection!!!");
return;
}
S32 ghostIndex = con->getGhostIndex(Obj);
if (ghostIndex == -1)
{
return;
//Con::printf("fxLight: Attached but no GHOST available yet...");
}
else
{
Con::printf("fxLight: Attached and found GHOST!!! YIPEE YEAY!!!!");
// Finished waiting for attachment.
mAttachWait = false;
// Attachment is now valid to send.
mAttachValid = true;
// Send to the client.
setMaskBits(fxLightAttachChange);
}
}
else
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -