⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fxlight.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
📖 第 1 页 / 共 4 页
字号:
//-----------------------------------------------------------------------------
// 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 + -