Audaspace:
[blender.git] / intern / audaspace / intern / AUD_SequencerHandle.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * Copyright 2009-2011 Jörg Hermann Müller
5  *
6  * This file is part of AudaSpace.
7  *
8  * Audaspace is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * AudaSpace is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with Audaspace; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * ***** END GPL LICENSE BLOCK *****
23  */
24
25 /** \file audaspace/intern/AUD_SequencerHandle.h
26  *  \ingroup audaspaceintern
27  */
28
29
30 #ifndef __AUD_SEQUENCERHANDLE_H__
31 #define __AUD_SEQUENCERHANDLE_H__
32
33 #include "AUD_SequencerEntry.h"
34 #include "AUD_IHandle.h"
35 #include "AUD_I3DHandle.h"
36
37 class AUD_ReadDevice;
38
39 /**
40  * Represents a playing sequenced entry.
41  */
42 class AUD_SequencerHandle
43 {
44 private:
45         /// The entry this handle belongs to.
46         boost::shared_ptr<AUD_SequencerEntry> m_entry;
47
48         /// The handle in the read device.
49         boost::shared_ptr<AUD_IHandle> m_handle;
50
51         /// The 3D handle in the read device.
52         boost::shared_ptr<AUD_I3DHandle> m_3dhandle;
53
54         /// The last read status from the entry.
55         int m_status;
56
57         /// The last position status from the entry.
58         int m_pos_status;
59
60         /// The last sound status from the entry.
61         int m_sound_status;
62
63         /// The read device this handle is played on.
64         AUD_ReadDevice& m_device;
65
66 public:
67         /**
68          * Creates a new sequenced handle.
69          * \param entry The entry this handle plays.
70          * \param device The read device to play on.
71          */
72         AUD_SequencerHandle(boost::shared_ptr<AUD_SequencerEntry> entry, AUD_ReadDevice& device);
73
74         /**
75          * Destroys the handle.
76          */
77         ~AUD_SequencerHandle();
78
79         /**
80          * Compares whether this handle is playing the same entry as supplied.
81          * \param entry The entry to compare to.
82          * \return Whether the entries ID is smaller, equal or bigger.
83          */
84         int compare(boost::shared_ptr<AUD_SequencerEntry> entry) const;
85
86         /**
87          * Stops playing back the handle.
88          */
89         void stop();
90
91         /**
92          * Updates the handle for playback.
93          * \param position The current time during playback.
94          * \param frame The current frame during playback.
95          * \param fps The animation frames per second.
96          */
97         void update(float position, float frame, float fps);
98
99         /**
100          * Seeks the handle to a specific time position.
101          * \param position The time to seek to.
102          */
103         void seek(float position);
104 };
105
106 #endif //__AUD_SEQUENCERHANDLE_H__