gzdoom-gles/src/s_sndseq.h
Randy Heit aef34f9aa5 - Removed xlat_parser.h from the repository. Lemon was always being run on
xlat_parser.y because both files had the same time stamp after an update,
  and Lemon only rewrites the header file if it's changed.
- Added $volume SNDINFO command. This is multiplied with the volume the sound
  is played at to arrive at the final volume (before distance attenuation).
- Added the CHAN_AREA flag to disable 3D panning within the min distance of a
  sound. Sector sound sequences (except doors) use this flag.
- Added the CHAN_LOOP flag to replace the S_Looped* sound functions.
- Restored the sound limiting.


SVN r849 (trunk)
2008-03-25 04:42:26 +00:00

100 lines
2.8 KiB
C++

#ifndef __S_SNDSEQ_H__
#define __S_SNDSEQ_H__
#include <stddef.h>
//#include "actor.h"
#include "s_sound.h"
#include "r_defs.h"
#include "name.h"
typedef enum {
SEQ_PLATFORM,
SEQ_DOOR,
SEQ_ENVIRONMENT,
SEQ_NUMSEQTYPES,
SEQ_NOTRANS
} seqtype_t;
struct sector_t;
class DSeqNode : public DObject
{
DECLARE_CLASS (DSeqNode, DObject)
HAS_OBJECT_POINTERS
public:
void Serialize (FArchive &arc);
void StopAndDestroy ();
void Destroy ();
void Tick ();
void ChangeData (int seqOffset, int delayTics, float volume, int currentSoundID);
void AddChoice (int seqnum, seqtype_t type);
FName GetSequenceName() const;
virtual void MakeSound (int loop) {}
virtual void *Source () { return NULL; }
virtual bool IsPlaying () { return false; }
virtual DSeqNode *SpawnChild (int seqnum) { return NULL; }
inline static DSeqNode *FirstSequence() { return SequenceListHead; }
inline DSeqNode *NextSequence() const { return m_Next; }
static void SerializeSequences (FArchive &arc);
protected:
DSeqNode ();
DSeqNode (int sequence, int modenum);
SDWORD *m_SequencePtr;
int m_Sequence;
int m_CurrentSoundID;
int m_DelayUntilTic;
float m_Volume;
int m_StopSound;
int m_Atten;
int m_ModeNum;
TArray<int> m_SequenceChoices;
TObjPtr<DSeqNode> m_ChildSeqNode;
TObjPtr<DSeqNode> m_ParentSeqNode;
private:
static DSeqNode *SequenceListHead;
DSeqNode *m_Next, *m_Prev;
void ActivateSequence (int sequence);
friend void SN_StopAllSequences (void);
};
void SN_StopAllSequences (void);
struct FSoundSequence
{
FName SeqName;
FName Slot;
int StopSound;
bool bDoorSound;
SDWORD Script[1]; // + more until end of sequence script
};
void S_ParseSndSeq (int levellump);
DSeqNode *SN_StartSequence (AActor *mobj, int sequence, seqtype_t type, int modenum, bool nostop=false);
DSeqNode *SN_StartSequence (AActor *mobj, const char *name, int modenum);
DSeqNode *SN_StartSequence (AActor *mobj, FName seqname, int modenum);
DSeqNode *SN_StartSequence (sector_t *sector, int sequence, seqtype_t type, int modenum, bool full3d, bool nostop=false);
DSeqNode *SN_StartSequence (sector_t *sector, const char *name, int modenum, bool full3d);
DSeqNode *SN_StartSequence (polyobj_t *poly, int sequence, seqtype_t type, int modenum, bool nostop=false);
DSeqNode *SN_StartSequence (polyobj_t *poly, const char *name, int modenum);
void SN_StopSequence (AActor *mobj);
void SN_StopSequence (sector_t *sector);
void SN_StopSequence (polyobj_t *poly);
void SN_UpdateActiveSequences (void);
ptrdiff_t SN_GetSequenceOffset (int sequence, SDWORD *sequencePtr);
void SN_DoStop (void *);
void SN_ChangeNodeData (int nodeNum, int seqOffset, int delayTics,
float volume, int currentSoundID);
FName SN_GetSequenceSlot (int sequence, seqtype_t type);
bool SN_IsMakingLoopingSound (sector_t *sector);
#endif //__S_SNDSEQ_H__