Files
OpenSceneGraph/src/osgPlugins/flt/LightPointPaletteRecords.h
Robert Osfield b6c1c44bd0 From Paul Martz,
"Changes to provide rudimentary support for OF 15.8 light point
animation palettes. This change also includes light point palette override
support for external references. This is the last of my code changes to
support OF 15.8 in the flt loader. Barring bugs, of course, knock on wood.

The gist of the animation palette code is to create ref_ptr'd
osgSim::BlinkSequence objects for each palette entry, and then pass them on
to osgSim::LightPoint for any OpenFlight light points that reference that
palette entry. This should be conservative of memory (not that I expect the
animation palette to be extremely large)."
2004-05-08 21:33:25 +00:00

168 lines
5.7 KiB
C++

#ifndef __FLT_LIGHT_POINT_PALETTE_RECORDS_H
#define __FLT_LIGHT_POINT_PALETTE_RECORDS_H
#include "opcodes.h"
#include "Record.h"
#include "RecordVisitor.h"
namespace flt {
struct SLightPointAppearancePalette
{
SRecHeader RecHeader;
int32 reserved_0;
char name[256];
int32 index;
int16 surfMatCode;
int16 featureID;
uint32 backColor; // Back facing color for bidirectional light points
int32 displayMode; // Display Mode: 0 -- Raster
// 1 -- Calligraphic
// 2 -- Either
float32 intensity;
float32 backIntensity;
float32 minDefocus; // Min and max defocus values, 0.0 to 1.0,
float32 maxDefocus; // for use with calligraphic lights
int32 fadeMode; // Fading mode: 0 -- Enable perspective fading calculations
// 1 -- Disable calculations
int32 fogPunch; // Fog punch mode: 0 -- Enable fog punch-through calculations
// 1 -- Disable calculations
int32 dirMode; // Directional mode: 0 -- Enable directional calculations
// 1 -- Disable calculations
int32 rangeMode; // Range Mode: 0 -- Use depth (Z) buffer calculations
// 1 -- Use slant range calculations
float32 minPixelSize;
float32 maxPixelSize;
float32 actualSize; // Actual light size in DB units
float32 transFalloffPixelSize;
float32 transFalloffExp;
float32 transFalloffScalar;
float32 transFalloffClamp;
float32 fogScalar;
float32 fogIntensity;
float32 sizeDiffThreshold;
int32 directionality; // Directionality: 0 -- Omnidirectional
// 1 -- Unidirectional
// 2 -- Bidirectional
float32 horizLobeAngle;
float32 vertLobeAngle;
float32 lobeRollAngle;
float32 dirFalloffExp;
float32 dirAmbientIntensity;
float32 significance;
int32 flags; // Flag bits: 0 -- Reserved
// 1 -- Don't use back color
// 2 -- Reserved
// ... several others ...
// 18-31 -- Spare
float32 visRange;
float32 fadeRangeRatio;
float32 fadeInDurationSecs;
float32 adeOutDurationSecs;
float32 lodRangeRatio;
float32 lodScale;
};
class LtPtAppearancePaletteRecord : public AncillaryRecord
{
public:
LtPtAppearancePaletteRecord();
virtual Record* clone() const { return new LtPtAppearancePaletteRecord(); }
virtual const char* className() const { return "LtPtAppearancePaletteRecord"; }
virtual int classOpcode() const { return LIGHT_PT_APPEARANCE_PALETTE_OP; }
virtual size_t sizeofData() const { return sizeof(SLightPointAppearancePalette); }
virtual void accept(RecordVisitor& rv) { rv.apply(*this); }
protected:
virtual ~LtPtAppearancePaletteRecord();
virtual void endian();
};
struct SLightPointAnimationPalette
{
SRecHeader RecHeader;
int32 reserved_0;
char name[256];
int32 index;
float32 period; // in seconds
float32 phaseDelay; // inb seconds, from start of period
float32 enabledPeriod; // time on, in seconds
float32 axis[3]; // for rotating animations
uint32 flags; // flags bits: 0 -- flashing
// 1 -- rotating
// 3 -- rotate counter clockwise
// 4-31 -- reserved
int32 animType; // animation type: 0 -- flashing sequence
// 1 -- rotating
// 2 -- strobe
// 3 -- Morse code
int32 morseTiming; // Morse timing: 0 -- standard timing
// 1 -- Farnsworth timing
int32 wordRate; // for Farnsworth timing
int32 charRate; // for Farnsworth timing
char morseString[1024];
int32 numSequences; // for flashing sequences
};
// Repeated numSequenses times:
struct SLightPointAnimationSequence
{
uint32 seqState; // sequence state: 0 -- On
// 1 -- Off
// 2 -- Color Change
float32 duration; // duration of sequence in seconds
uint32 seqColor; // color, if state is On or Color Change
};
class LtPtAnimationPaletteRecord : public AncillaryRecord
{
public:
LtPtAnimationPaletteRecord();
virtual Record* clone() const { return new LtPtAnimationPaletteRecord(); }
virtual const char* className() const { return "LtPtAnimationPaletteRecord"; }
virtual int classOpcode() const { return LIGHT_PT_ANIMATION_PALETTE_OP; }
virtual size_t sizeofData() const { return sizeof(SLightPointAnimationPalette); }
virtual void accept(RecordVisitor& rv) { rv.apply(*this); }
SLightPointAnimationSequence* sequence( int idx );
enum FlagsBits {
FLASHING = 0x80000000,
ROTATING = 0x40000000,
ROT_COUNTER_CLOCKWISE = 0x20000000
};
enum AnimationType {
SEQ_TYPE = 0,
ROT_TYPE = 1,
STROBE_TYPE = 2,
MORSE_TYPE = 3
};
enum SequenceState {
SEQ_ON = 0,
SEQ_OFF = 1,
SEQ_COLOR = 2
};
protected:
virtual ~LtPtAnimationPaletteRecord();
virtual void endian();
};
}; // end namespace flt
#endif