mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2024-11-25 05:21:39 +00:00
259 lines
9.1 KiB
C
259 lines
9.1 KiB
C
|
/*
|
||
|
===========================================================================
|
||
|
|
||
|
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 <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
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_SPRITEINSTANCE_H__
|
||
|
#define __SWF_SPRITEINSTANCE_H__
|
||
|
|
||
|
/*
|
||
|
================================================
|
||
|
There can be multiple instances of a single sprite running
|
||
|
================================================
|
||
|
*/
|
||
|
class idSWFSpriteInstance {
|
||
|
public:
|
||
|
idSWFSpriteInstance();
|
||
|
~idSWFSpriteInstance();
|
||
|
|
||
|
void Init( idSWFSprite * sprite, idSWFSpriteInstance * parent, int depth );
|
||
|
|
||
|
bool Run();
|
||
|
bool RunActions();
|
||
|
|
||
|
const char * GetName() const { return name.c_str(); }
|
||
|
|
||
|
idSWFScriptObject * GetScriptObject() { return scriptObject; }
|
||
|
void SetAlignment( float x, float y ) { xOffset = x; yOffset = y; }
|
||
|
|
||
|
void SetMaterial( const idMaterial * material, int width = -1, int height = -1 );
|
||
|
void SetVisible( bool visible );
|
||
|
bool IsVisible() { return isVisible; }
|
||
|
void PlayFrame( const idSWFParmList & parms );
|
||
|
void PlayFrame( const char * frameName ) {
|
||
|
idSWFParmList parms;
|
||
|
parms.Append( frameName );
|
||
|
PlayFrame( parms );
|
||
|
}
|
||
|
void PlayFrame( const int frameNum ) {
|
||
|
idSWFParmList parms;
|
||
|
parms.Append( frameNum );
|
||
|
PlayFrame( parms );
|
||
|
}
|
||
|
void StopFrame( const idSWFParmList & parms );
|
||
|
void StopFrame( const char * frameName ) {
|
||
|
idSWFParmList parms;
|
||
|
parms.Append( frameName );
|
||
|
StopFrame( parms );
|
||
|
}
|
||
|
void StopFrame( const int frameNum ) {
|
||
|
idSWFParmList parms;
|
||
|
parms.Append( frameNum );
|
||
|
StopFrame( parms );
|
||
|
}
|
||
|
// FIXME: Why do all the Set functions have defaults of -1.0f? This seems arbitrar.
|
||
|
// Probably better to not have a default at all, so any non-parametized calls throw a
|
||
|
// compilation error.
|
||
|
float GetXPos() const;
|
||
|
float GetYPos( bool overallPos = false ) const;
|
||
|
void SetXPos( float xPos = -1.0f );
|
||
|
void SetYPos( float yPos = -1.0f );
|
||
|
void SetPos( float xPos = -1.0f, float yPos = -1.0f );
|
||
|
void SetAlpha( float val );
|
||
|
void SetScale( float x = -1.0f, float y = -1.0f );
|
||
|
void SetMoveToScale( float x = -1.0f, float y = -1.0f );
|
||
|
bool UpdateMoveToScale( float speed ); // returns true if the update was successful
|
||
|
void SetRotation( float rot );
|
||
|
uint16 GetCurrentFrame() { return currentFrame; }
|
||
|
bool IsPlaying() const { return isPlaying; }
|
||
|
int GetStereoDepth() { return stereoDepth; }
|
||
|
|
||
|
// 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 friend class idSWF;
|
||
|
|
||
|
bool isPlaying;
|
||
|
bool isVisible;
|
||
|
bool childrenRunning;
|
||
|
bool firstRun;
|
||
|
|
||
|
// currentFrame is the frame number currently in the displayList
|
||
|
// we use 1 based frame numbers because currentFrame = 0 means nothing is in the display list
|
||
|
// it's also convenient because Flash also uses 1 based frame numbers
|
||
|
uint16 currentFrame;
|
||
|
uint16 frameCount;
|
||
|
|
||
|
// the sprite this is an instance of
|
||
|
idSWFSprite * sprite;
|
||
|
|
||
|
// sprite instances can be nested
|
||
|
idSWFSpriteInstance * parent;
|
||
|
|
||
|
// depth of this sprite instance in the parent's display list
|
||
|
int depth;
|
||
|
|
||
|
// if this is set, apply this material when rendering any child shapes
|
||
|
int itemIndex;
|
||
|
|
||
|
const idMaterial * materialOverride;
|
||
|
uint16 materialWidth;
|
||
|
uint16 materialHeight;
|
||
|
|
||
|
float xOffset;
|
||
|
float yOffset;
|
||
|
|
||
|
float moveToXScale;
|
||
|
float moveToYScale;
|
||
|
float moveToSpeed;
|
||
|
|
||
|
int stereoDepth;
|
||
|
|
||
|
idSWFScriptObject * scriptObject;
|
||
|
|
||
|
// children display entries
|
||
|
idList< swfDisplayEntry_t, TAG_SWF > displayList;
|
||
|
swfDisplayEntry_t * FindDisplayEntry( int depth );
|
||
|
|
||
|
// name of this sprite instance
|
||
|
idStr name;
|
||
|
|
||
|
struct swfAction_t {
|
||
|
const byte * data;
|
||
|
uint32 dataLength;
|
||
|
};
|
||
|
idList< swfAction_t, TAG_SWF > actions;
|
||
|
|
||
|
idSWFScriptFunction_Script * actionScript;
|
||
|
|
||
|
idSWFScriptVar onEnterFrame;
|
||
|
//idSWFScriptVar onLoad;
|
||
|
|
||
|
// 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
|
||
|
|
||
|
//----------------------------------
|
||
|
// SWF_PlaceObject.cpp
|
||
|
//----------------------------------
|
||
|
void PlaceObject2( idSWFBitStream & bitstream );
|
||
|
void PlaceObject3( idSWFBitStream & bitstream );
|
||
|
void RemoveObject2( idSWFBitStream & bitstream );
|
||
|
|
||
|
//----------------------------------
|
||
|
// SWF_Sounds.cpp
|
||
|
//----------------------------------
|
||
|
void StartSound( idSWFBitStream & bitstream );
|
||
|
|
||
|
//----------------------------------
|
||
|
// SWF_SpriteInstance.cpp
|
||
|
//----------------------------------
|
||
|
void NextFrame();
|
||
|
void PrevFrame();
|
||
|
void RunTo( int frameNum );
|
||
|
|
||
|
void Play();
|
||
|
void Stop();
|
||
|
|
||
|
void FreeDisplayList();
|
||
|
swfDisplayEntry_t * AddDisplayEntry( int depth, int characterID );
|
||
|
void RemoveDisplayEntry( int depth );
|
||
|
void SwapDepths( int depth1, int depth2 );
|
||
|
|
||
|
void DoAction( idSWFBitStream & bitstream );
|
||
|
|
||
|
idSWFSpriteInstance * FindChildSprite( const char * childName );
|
||
|
idSWFSpriteInstance * ResolveTarget( const char * targetName );
|
||
|
uint32 FindFrame( const char * frameLabel ) const;
|
||
|
bool FrameExists( const char * frameLabel ) const;
|
||
|
bool IsBetweenFrames( const char * frameLabel1, const char * frameLabel2 ) const;
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
================================================
|
||
|
This is the prototype object that all the sprite instance script objects reference
|
||
|
================================================
|
||
|
*/
|
||
|
class idSWFScriptObject_SpriteInstancePrototype : public idSWFScriptObject {
|
||
|
public:
|
||
|
idSWFScriptObject_SpriteInstancePrototype();
|
||
|
|
||
|
#define SWF_SPRITE_FUNCTION_DECLARE( x ) \
|
||
|
class idSWFScriptFunction_##x : public idSWFScriptFunction { \
|
||
|
public: \
|
||
|
void AddRef() {} \
|
||
|
void Release() {} \
|
||
|
idSWFScriptVar Call( idSWFScriptObject * thisObject, const idSWFParmList & parms ); \
|
||
|
} scriptFunction_##x
|
||
|
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( duplicateMovieClip );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( gotoAndPlay );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( gotoAndStop );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( swapDepths );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( nextFrame );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( prevFrame );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( play );
|
||
|
SWF_SPRITE_FUNCTION_DECLARE( stop );
|
||
|
|
||
|
SWF_NATIVE_VAR_DECLARE( _x );
|
||
|
SWF_NATIVE_VAR_DECLARE( _y );
|
||
|
SWF_NATIVE_VAR_DECLARE( _xscale );
|
||
|
SWF_NATIVE_VAR_DECLARE( _yscale );
|
||
|
SWF_NATIVE_VAR_DECLARE( _alpha );
|
||
|
SWF_NATIVE_VAR_DECLARE( _brightness );
|
||
|
SWF_NATIVE_VAR_DECLARE( _visible );
|
||
|
SWF_NATIVE_VAR_DECLARE( _width );
|
||
|
SWF_NATIVE_VAR_DECLARE( _height );
|
||
|
SWF_NATIVE_VAR_DECLARE( _rotation );
|
||
|
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _name );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _currentframe );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _totalframes );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _target );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _framesloaded );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _droptarget );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _url );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _highquality );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _focusrect );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _soundbuftime );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _quality );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _mousex );
|
||
|
SWF_NATIVE_VAR_DECLARE_READONLY( _mousey );
|
||
|
|
||
|
SWF_NATIVE_VAR_DECLARE( _stereoDepth );
|
||
|
SWF_NATIVE_VAR_DECLARE( _itemindex );
|
||
|
|
||
|
SWF_NATIVE_VAR_DECLARE( material );
|
||
|
SWF_NATIVE_VAR_DECLARE( materialWidth );
|
||
|
SWF_NATIVE_VAR_DECLARE( materialHeight );
|
||
|
|
||
|
SWF_NATIVE_VAR_DECLARE( xOffset );
|
||
|
SWF_NATIVE_VAR_DECLARE( onEnterFrame );
|
||
|
//SWF_NATIVE_VAR_DECLARE( onLoad );
|
||
|
};
|
||
|
|
||
|
#endif
|