/*
===========================================================================
Doom 3 BFG Edition GPL Source Code
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
Doom 3 BFG Edition Source Code 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.
Doom 3 BFG Edition Source Code 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 Doom 3 BFG Edition Source Code. If not, see .
In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
===========================================================================
*/
#ifndef __SWF_TEXTINSTANCE_H__
#define __SWF_TEXTINSTANCE_H__
struct subTimingWordData_t
{
subTimingWordData_t()
{
startTime = 0;
forceBreak = false;
}
idStr phrase;
int startTime;
bool forceBreak;
};
class idSWFTextInstance
{
public:
idSWFTextInstance();
~idSWFTextInstance();
void Init( idSWFEditText* editText, idSWF* _swf );
idSWFScriptObject* GetScriptObject()
{
return &scriptObject;
}
bool GetHasDropShadow()
{
return useDropShadow;
}
bool HasStroke()
{
return useStroke;
}
float GetStrokeStrength()
{
return strokeStrength;
}
float GetStrokeWeight()
{
return strokeWeight;
}
// used for when text has random render mode set
bool IsGeneratingRandomText()
{
return generatingText;
}
void StartRandomText( int time );
idStr GetRandomText( int time );
void StartParagraphText( int time );
idStr GetParagraphText( int time );
bool NeedsGenerateRandomText()
{
return triggerGenerate;
}
bool NeedsSoundPlayed();
void ClearPlaySound()
{
needsSoundUpdate = false;
}
idStr GetSoundClip()
{
return soundClip;
}
void SetIgnoreColor( bool ignore )
{
ignoreColor = ignore;
}
void SetStrokeInfo( bool use, float strength = 0.75f, float weight = 1.75f );
int CalcMaxScroll( int numLines = -1 );
int CalcNumLines();
// subtitle functions
void SwitchSubtitleText( int time );
bool UpdateSubtitle( int time );
bool IsSubtitle()
{
return isSubtitle;
}
bool IsUpdatingSubtitle()
{
return subUpdating;
}
void SetSubEndIndex( int endChar, int time );
int GetLastWordIndex()
{
return subLastWordIndex;
}
int GetPrevLastWordIndex()
{
return subPrevLastWordIndex;
}
void LastWordChanged( int wordCount, int time );
void SetSubStartIndex( int value )
{
subCharStartIndex = value;
}
int GetSubEndIndex()
{
return subCharEndIndex;
}
int GetSubStartIndex()
{
return subCharStartIndex;
}
void SetSubNextStartIndex( int value );
int GetApporoximateSubtitleBreak( int time );
bool SubNeedsSwitch()
{
return subNeedsSwitch;
}
idStr GetPreviousText()
{
return subtitleText.c_str();
}
void SubtitleComplete();
int GetSubAlignment()
{
return subAlign;
}
idStr GetSpeaker()
{
return subSpeaker.c_str();
}
void SubtitleCleanup();
float GetTextLength();
int GetInputStartChar( )
{
return inputTextStartChar;
}
void SetInputStartCharacter( int c )
{
inputTextStartChar = c;
}
const idSWFEditText* GetEditText() const
{
return editText;
}
void SetText( idStr val )
{
text = val;
lengthCalculated = false;
}
// Removing the private access control statement due to cl 214702
// Apparently MS's C++ compiler supports the newer C++ standard, and GCC supports C++03
// In the new C++ standard, nested members of a friend class have access to private/protected members of the class granting friendship
// In C++03, nested members defined in a friend class do NOT have access to private/protected members of the class granting friendship
idSWFEditText* editText;
idSWF* swf;
// this text instance's script object
idSWFScriptObject scriptObject;
idStr text;
idStr randomtext;
idStr variable;
swfColorRGBA_t color;
bool visible;
bool tooltip;
int selectionStart;
int selectionEnd;
bool ignoreColor;
int scroll;
int scrollTime;
int maxscroll;
int maxLines;
float glyphScale;
swfRect_t bounds;
float linespacing;
bool shiftHeld;
int lastInputTime;
bool useDropShadow;
bool useStroke;
float strokeStrength;
float strokeWeight;
int textLength;
bool lengthCalculated;
swfTextRenderMode_t renderMode;
bool generatingText;
int rndSpotsVisible;
int rndSpacesVisible;
int charMultiplier;
int textSpotsVisible;
int rndTime;
int startRndTime;
int prevReplaceIndex;
bool triggerGenerate;
int renderDelay;
bool scrollUpdate;
idStr soundClip;
bool needsSoundUpdate;
idList indexArray;
idRandom2 rnd;
// used for subtitles
bool isSubtitle;
int subLength;
int subCharDisplayTime;
int subAlign;
bool subUpdating;
int subCharStartIndex;
int subNextStartIndex;
int subCharEndIndex;
int subDisplayTime;
int subStartTime;
int subSourceID;
idStr subtitleText;
bool subNeedsSwitch;
bool subForceKillQueued;
bool subForceKill;
int subKillTimeDelay;
int subSwitchTime;
int subLastWordIndex;
int subPrevLastWordIndex;
idStr subSpeaker;
bool subWaitClear;
bool subInitialLine;
// input text
int inputTextStartChar;
idList< subTimingWordData_t, TAG_SWF > subtitleTimingInfo;
};
/*
================================================
This is the prototype object that all the text instance script objects reference
================================================
*/
class idSWFScriptObject_TextInstancePrototype : public idSWFScriptObject
{
public:
idSWFScriptObject_TextInstancePrototype();
//----------------------------------
// Native Script Functions
//----------------------------------
#define SWF_TEXT_FUNCTION_DECLARE( x ) \
class idSWFScriptFunction_##x : public idSWFScriptFunction_RefCounted { \
public: \
void AddRef() {} \
void Release() {} \
idSWFScriptVar Call( idSWFScriptObject * thisObject, const idSWFParmList & parms ); \
} scriptFunction_##x;
SWF_TEXT_FUNCTION_DECLARE( onKey );
SWF_TEXT_FUNCTION_DECLARE( onChar );
SWF_TEXT_FUNCTION_DECLARE( generateRnd );
SWF_TEXT_FUNCTION_DECLARE( calcNumLines );
SWF_NATIVE_VAR_DECLARE( text );
SWF_NATIVE_VAR_DECLARE( autoSize );
SWF_NATIVE_VAR_DECLARE( dropShadow );
SWF_NATIVE_VAR_DECLARE( _stroke );
SWF_NATIVE_VAR_DECLARE( _strokeStrength );
SWF_NATIVE_VAR_DECLARE( _strokeWeight );
SWF_NATIVE_VAR_DECLARE( variable );
SWF_NATIVE_VAR_DECLARE( _alpha );
SWF_NATIVE_VAR_DECLARE( textColor );
SWF_NATIVE_VAR_DECLARE( _visible );
SWF_NATIVE_VAR_DECLARE( scroll );
SWF_NATIVE_VAR_DECLARE( maxscroll );
SWF_NATIVE_VAR_DECLARE( selectionStart );
SWF_NATIVE_VAR_DECLARE( selectionEnd );
SWF_NATIVE_VAR_DECLARE( isTooltip );
SWF_NATIVE_VAR_DECLARE( mode );
SWF_NATIVE_VAR_DECLARE( delay );
SWF_NATIVE_VAR_DECLARE( renderSound );
SWF_NATIVE_VAR_DECLARE( updateScroll );
SWF_NATIVE_VAR_DECLARE( subtitle );
SWF_NATIVE_VAR_DECLARE( subtitleAlign );
SWF_NATIVE_VAR_DECLARE( subtitleSourceID );
SWF_NATIVE_VAR_DECLARE( subtitleSpeaker );
SWF_NATIVE_VAR_DECLARE_READONLY( _textLength );
SWF_TEXT_FUNCTION_DECLARE( subtitleSourceCheck );
SWF_TEXT_FUNCTION_DECLARE( subtitleStart );
SWF_TEXT_FUNCTION_DECLARE( subtitleLength );
SWF_TEXT_FUNCTION_DECLARE( killSubtitle );
SWF_TEXT_FUNCTION_DECLARE( forceKillSubtitle );
SWF_TEXT_FUNCTION_DECLARE( subLastLine );
SWF_TEXT_FUNCTION_DECLARE( addSubtitleInfo );
SWF_TEXT_FUNCTION_DECLARE( terminateSubtitle );
SWF_TEXT_FUNCTION_DECLARE( clearTimingInfo );
};
#endif // !__SWF_TEXTINSTANCE_H__