/* =========================================================================== 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__