110e5c6a9318dc7e5a814120d294fd45a31edf55
[blender.git] / intern / audaspace / intern / AUD_SequencerEntry.cpp
1 /*
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * Copyright 2009-2011 Jörg Hermann Müller
7  *
8  * This file is part of AudaSpace.
9  *
10  * Audaspace is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * AudaSpace is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with Audaspace; if not, write to the Free Software Foundation,
22  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23  *
24  * ***** END GPL LICENSE BLOCK *****
25  */
26
27 /** \file audaspace/intern/AUD_SequencerEntry.cpp
28  *  \ingroup audaspaceintern
29  */
30
31
32 #include "AUD_SequencerEntry.h"
33 #include "AUD_SequencerReader.h"
34
35 #include <cmath>
36 #include <limits>
37
38 AUD_SequencerEntry::AUD_SequencerEntry(AUD_Reference<AUD_IFactory> sound, float begin, float end, float skip, int id) :
39         m_status(0),
40         m_pos_status(1),
41         m_sound_status(0),
42         m_id(0),
43         m_sound(sound),
44         m_begin(begin),
45         m_end(end),
46         m_skip(skip),
47         m_muted(false),
48         m_relative(true),
49         m_volume_max(1.0f),
50         m_volume_min(0),
51         m_distance_max(std::numeric_limits<float>::max()),
52         m_distance_reference(1.0f),
53         m_attenuation(1.0f),
54         m_cone_angle_outer(360),
55         m_cone_angle_inner(360),
56         m_cone_volume_outer(0),
57         m_location(3),
58         m_orientation(4)
59 {
60         AUD_Quaternion q;
61         m_orientation.write(q.get());
62         float f = 1;
63         m_volume.write(&f);
64         m_pitch.write(&f);
65 }
66
67 void AUD_SequencerEntry::setSound(AUD_Reference<AUD_IFactory> sound)
68 {
69         m_sound = sound;
70         m_sound_status++;
71 }
72
73 void AUD_SequencerEntry::move(float begin, float end, float skip)
74 {
75         if(m_begin != begin || m_skip != skip || m_end != end)
76         {
77                 m_begin = begin;
78                 m_skip = skip;
79                 m_end = end;
80                 m_pos_status++;
81         }
82 }
83
84 void AUD_SequencerEntry::mute(bool mute)
85 {
86         m_muted = mute;
87 }
88
89 int AUD_SequencerEntry::getID() const
90 {
91         return m_id;
92 }
93
94 AUD_AnimateableProperty* AUD_SequencerEntry::getAnimProperty(AUD_AnimateablePropertyType type)
95 {
96         switch(type)
97         {
98         case AUD_AP_VOLUME:
99                 return &m_volume;
100         case AUD_AP_PITCH:
101                 return &m_pitch;
102         case AUD_AP_PANNING:
103                 return &m_panning;
104         case AUD_AP_LOCATION:
105                 return &m_location;
106         case AUD_AP_ORIENTATION:
107                 return &m_orientation;
108         default:
109                 return NULL;
110         }
111 }
112
113 bool AUD_SequencerEntry::isRelative()
114 {
115         return m_relative;
116 }
117
118 void AUD_SequencerEntry::setRelative(bool relative)
119 {
120         m_relative = relative;
121         m_status++;
122 }
123
124 float AUD_SequencerEntry::getVolumeMaximum()
125 {
126         return m_volume_max;
127 }
128
129 void AUD_SequencerEntry::setVolumeMaximum(float volume)
130 {
131         m_volume_max = volume;
132         m_status++;
133 }
134
135 float AUD_SequencerEntry::getVolumeMinimum()
136 {
137         return m_volume_min;
138 }
139
140 void AUD_SequencerEntry::setVolumeMinimum(float volume)
141 {
142         m_volume_min = volume;
143         m_status++;
144 }
145
146 float AUD_SequencerEntry::getDistanceMaximum()
147 {
148         return m_distance_max;
149 }
150
151 void AUD_SequencerEntry::setDistanceMaximum(float distance)
152 {
153         m_distance_max = distance;
154         m_status++;
155 }
156
157 float AUD_SequencerEntry::getDistanceReference()
158 {
159         return m_distance_reference;
160 }
161
162 void AUD_SequencerEntry::setDistanceReference(float distance)
163 {
164         m_distance_reference = distance;
165         m_status++;
166 }
167
168 float AUD_SequencerEntry::getAttenuation()
169 {
170         return m_attenuation;
171 }
172
173 void AUD_SequencerEntry::setAttenuation(float factor)
174 {
175         m_attenuation = factor;
176         m_status++;
177 }
178
179 float AUD_SequencerEntry::getConeAngleOuter()
180 {
181         return m_cone_angle_outer;
182 }
183
184 void AUD_SequencerEntry::setConeAngleOuter(float angle)
185 {
186         m_cone_angle_outer = angle;
187         m_status++;
188 }
189
190 float AUD_SequencerEntry::getConeAngleInner()
191 {
192         return m_cone_angle_inner;
193 }
194
195 void AUD_SequencerEntry::setConeAngleInner(float angle)
196 {
197         m_cone_angle_inner = angle;
198         m_status++;
199 }
200
201 float AUD_SequencerEntry::getConeVolumeOuter()
202 {
203         return m_cone_volume_outer;
204 }
205
206 void AUD_SequencerEntry::setConeVolumeOuter(float volume)
207 {
208         m_cone_volume_outer = volume;
209         m_status++;
210 }