aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/llcharacter
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--linden/indra/llcharacter/llcharacter.cpp26
-rw-r--r--linden/indra/llcharacter/llcharacter.h5
-rw-r--r--linden/indra/llcharacter/llcharacter_vc8.vcproj838
-rw-r--r--linden/indra/llcharacter/llcharacter_vc9.vcproj840
-rw-r--r--linden/indra/llcharacter/llkeyframemotion.cpp295
-rw-r--r--linden/indra/llcharacter/llkeyframemotion.h11
-rw-r--r--linden/indra/llcharacter/llkeyframemotionparam.cpp149
-rw-r--r--linden/indra/llcharacter/llkeyframemotionparam.h16
-rw-r--r--linden/indra/llcharacter/llmotioncontroller.cpp9
-rw-r--r--linden/indra/llcharacter/llmotioncontroller.h2
-rw-r--r--linden/indra/llcharacter/llpose.cpp23
-rw-r--r--linden/indra/llcharacter/llpose.h2
-rw-r--r--linden/indra/llcharacter/llstatemachine.h1
13 files changed, 1073 insertions, 1144 deletions
diff --git a/linden/indra/llcharacter/llcharacter.cpp b/linden/indra/llcharacter/llcharacter.cpp
index af4c5aa..0339cf0 100644
--- a/linden/indra/llcharacter/llcharacter.cpp
+++ b/linden/indra/llcharacter/llcharacter.cpp
@@ -241,33 +241,15 @@ void LLCharacter::dumpCharacter( LLJoint* joint )
241//----------------------------------------------------------------------------- 241//-----------------------------------------------------------------------------
242void LLCharacter::setAnimationData(std::string name, void *data) 242void LLCharacter::setAnimationData(std::string name, void *data)
243{ 243{
244 if(mAnimationData.getValue(name)) 244 mAnimationData[name] = data;
245 {
246 *mAnimationData[name] = data;
247 }
248 else
249 {
250 mAnimationData.addToHead(name, data);
251 }
252} 245}
253 246
254//----------------------------------------------------------------------------- 247//-----------------------------------------------------------------------------
255// getAnimationData() 248// getAnimationData()
256//----------------------------------------------------------------------------- 249//-----------------------------------------------------------------------------
257void * LLCharacter::getAnimationData(std::string name) 250void* LLCharacter::getAnimationData(std::string name)
258{ 251{
259 void **result = mAnimationData.getValue(name); 252 return get_if_there(mAnimationData, name, (void*)NULL);
260 void *return_value; // Necessary to suppress VC6 warning. JC
261 if (!result)
262 {
263 return_value = NULL;
264 }
265 else
266 {
267 return_value = *result;
268 }
269
270 return return_value;
271} 253}
272 254
273//----------------------------------------------------------------------------- 255//-----------------------------------------------------------------------------
@@ -275,7 +257,7 @@ void * LLCharacter::getAnimationData(std::string name)
275//----------------------------------------------------------------------------- 257//-----------------------------------------------------------------------------
276void LLCharacter::removeAnimationData(std::string name) 258void LLCharacter::removeAnimationData(std::string name)
277{ 259{
278 mAnimationData.remove(name); 260 mAnimationData.erase(name);
279} 261}
280 262
281//----------------------------------------------------------------------------- 263//-----------------------------------------------------------------------------
diff --git a/linden/indra/llcharacter/llcharacter.h b/linden/indra/llcharacter/llcharacter.h
index 6699796..46faab1 100644
--- a/linden/indra/llcharacter/llcharacter.h
+++ b/linden/indra/llcharacter/llcharacter.h
@@ -39,9 +39,7 @@
39 39
40#include "lljoint.h" 40#include "lljoint.h"
41#include "llmotioncontroller.h" 41#include "llmotioncontroller.h"
42#include "llassoclist.h"
43#include "llvisualparam.h" 42#include "llvisualparam.h"
44#include "linked_lists.h"
45#include "string_table.h" 43#include "string_table.h"
46#include "llmemory.h" 44#include "llmemory.h"
47#include "llthread.h" 45#include "llthread.h"
@@ -255,7 +253,8 @@ public:
255protected: 253protected:
256 LLMotionController mMotionController; 254 LLMotionController mMotionController;
257 255
258 LLAssocList<std::string, void *> mAnimationData; 256 typedef std::map<std::string, void *> animation_data_map_t;
257 animation_data_map_t mAnimationData;
259 258
260 F32 mPreferredPelvisHeight; 259 F32 mPreferredPelvisHeight;
261 ESex mSex; 260 ESex mSex;
diff --git a/linden/indra/llcharacter/llcharacter_vc8.vcproj b/linden/indra/llcharacter/llcharacter_vc8.vcproj
index 00ceb88..fdad9c2 100644
--- a/linden/indra/llcharacter/llcharacter_vc8.vcproj
+++ b/linden/indra/llcharacter/llcharacter_vc8.vcproj
@@ -1,419 +1,419 @@
1<?xml version="1.0" encoding="Windows-1252"?> 1<?xml version="1.0" encoding="Windows-1252"?>
2<VisualStudioProject 2<VisualStudioProject
3 ProjectType="Visual C++" 3 ProjectType="Visual C++"
4 Version="8.00" 4 Version="8.00"
5 Name="llcharacter" 5 Name="llcharacter"
6 ProjectGUID="{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}" 6 ProjectGUID="{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}"
7 RootNamespace="llcharacter" 7 RootNamespace="llcharacter"
8 Keyword="Win32Proj" 8 Keyword="Win32Proj"
9 > 9 >
10 <Platforms> 10 <Platforms>
11 <Platform 11 <Platform
12 Name="Win32" 12 Name="Win32"
13 /> 13 />
14 </Platforms> 14 </Platforms>
15 <ToolFiles> 15 <ToolFiles>
16 </ToolFiles> 16 </ToolFiles>
17 <Configurations> 17 <Configurations>
18 <Configuration 18 <Configuration
19 Name="Debug|Win32" 19 Name="Debug|Win32"
20 OutputDirectory="../lib_$(ConfigurationName)/i686-win32" 20 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
21 IntermediateDirectory="Debug" 21 IntermediateDirectory="Debug"
22 ConfigurationType="4" 22 ConfigurationType="4"
23 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 23 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
24 CharacterSet="1" 24 CharacterSet="1"
25 > 25 >
26 <Tool 26 <Tool
27 Name="VCPreBuildEventTool" 27 Name="VCPreBuildEventTool"
28 /> 28 />
29 <Tool 29 <Tool
30 Name="VCCustomBuildTool" 30 Name="VCCustomBuildTool"
31 /> 31 />
32 <Tool 32 <Tool
33 Name="VCXMLDataGeneratorTool" 33 Name="VCXMLDataGeneratorTool"
34 /> 34 />
35 <Tool 35 <Tool
36 Name="VCWebServiceProxyGeneratorTool" 36 Name="VCWebServiceProxyGeneratorTool"
37 /> 37 />
38 <Tool 38 <Tool
39 Name="VCMIDLTool" 39 Name="VCMIDLTool"
40 /> 40 />
41 <Tool 41 <Tool
42 Name="VCCLCompilerTool" 42 Name="VCCLCompilerTool"
43 Optimization="0" 43 Optimization="0"
44 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" 44 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
45 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG" 45 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG"
46 MinimalRebuild="true" 46 MinimalRebuild="true"
47 BasicRuntimeChecks="3" 47 BasicRuntimeChecks="3"
48 RuntimeLibrary="1" 48 RuntimeLibrary="1"
49 StructMemberAlignment="4" 49 StructMemberAlignment="4"
50 TreatWChar_tAsBuiltInType="false" 50 TreatWChar_tAsBuiltInType="false"
51 ForceConformanceInForLoopScope="true" 51 ForceConformanceInForLoopScope="true"
52 UsePrecompiledHeader="0" 52 UsePrecompiledHeader="0"
53 WarningLevel="3" 53 WarningLevel="3"
54 WarnAsError="true" 54 WarnAsError="true"
55 Detect64BitPortabilityProblems="false" 55 Detect64BitPortabilityProblems="false"
56 DebugInformationFormat="4" 56 DebugInformationFormat="4"
57 /> 57 />
58 <Tool 58 <Tool
59 Name="VCManagedResourceCompilerTool" 59 Name="VCManagedResourceCompilerTool"
60 /> 60 />
61 <Tool 61 <Tool
62 Name="VCResourceCompilerTool" 62 Name="VCResourceCompilerTool"
63 /> 63 />
64 <Tool 64 <Tool
65 Name="VCPreLinkEventTool" 65 Name="VCPreLinkEventTool"
66 /> 66 />
67 <Tool 67 <Tool
68 Name="VCLibrarianTool" 68 Name="VCLibrarianTool"
69 OutputFile="$(OutDir)/llcharacter.lib" 69 OutputFile="$(OutDir)/llcharacter.lib"
70 /> 70 />
71 <Tool 71 <Tool
72 Name="VCALinkTool" 72 Name="VCALinkTool"
73 /> 73 />
74 <Tool 74 <Tool
75 Name="VCXDCMakeTool" 75 Name="VCXDCMakeTool"
76 /> 76 />
77 <Tool 77 <Tool
78 Name="VCBscMakeTool" 78 Name="VCBscMakeTool"
79 /> 79 />
80 <Tool 80 <Tool
81 Name="VCFxCopTool" 81 Name="VCFxCopTool"
82 /> 82 />
83 <Tool 83 <Tool
84 Name="VCPostBuildEventTool" 84 Name="VCPostBuildEventTool"
85 /> 85 />
86 </Configuration> 86 </Configuration>
87 <Configuration 87 <Configuration
88 Name="Release|Win32" 88 Name="Release|Win32"
89 OutputDirectory="../lib_$(ConfigurationName)/i686-win32" 89 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
90 IntermediateDirectory="Release" 90 IntermediateDirectory="Release"
91 ConfigurationType="4" 91 ConfigurationType="4"
92 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 92 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
93 CharacterSet="1" 93 CharacterSet="1"
94 > 94 >
95 <Tool 95 <Tool
96 Name="VCPreBuildEventTool" 96 Name="VCPreBuildEventTool"
97 /> 97 />
98 <Tool 98 <Tool
99 Name="VCCustomBuildTool" 99 Name="VCCustomBuildTool"
100 /> 100 />
101 <Tool 101 <Tool
102 Name="VCXMLDataGeneratorTool" 102 Name="VCXMLDataGeneratorTool"
103 /> 103 />
104 <Tool 104 <Tool
105 Name="VCWebServiceProxyGeneratorTool" 105 Name="VCWebServiceProxyGeneratorTool"
106 /> 106 />
107 <Tool 107 <Tool
108 Name="VCMIDLTool" 108 Name="VCMIDLTool"
109 /> 109 />
110 <Tool 110 <Tool
111 Name="VCCLCompilerTool" 111 Name="VCCLCompilerTool"
112 AdditionalOptions="/Oy-" 112 AdditionalOptions="/Oy-"
113 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" 113 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
114 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE" 114 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
115 RuntimeLibrary="0" 115 RuntimeLibrary="0"
116 StructMemberAlignment="0" 116 StructMemberAlignment="0"
117 TreatWChar_tAsBuiltInType="false" 117 TreatWChar_tAsBuiltInType="false"
118 ForceConformanceInForLoopScope="true" 118 ForceConformanceInForLoopScope="true"
119 UsePrecompiledHeader="0" 119 UsePrecompiledHeader="0"
120 WarningLevel="3" 120 WarningLevel="3"
121 WarnAsError="true" 121 WarnAsError="true"
122 Detect64BitPortabilityProblems="false" 122 Detect64BitPortabilityProblems="false"
123 DebugInformationFormat="3" 123 DebugInformationFormat="3"
124 /> 124 />
125 <Tool 125 <Tool
126 Name="VCManagedResourceCompilerTool" 126 Name="VCManagedResourceCompilerTool"
127 /> 127 />
128 <Tool 128 <Tool
129 Name="VCResourceCompilerTool" 129 Name="VCResourceCompilerTool"
130 /> 130 />
131 <Tool 131 <Tool
132 Name="VCPreLinkEventTool" 132 Name="VCPreLinkEventTool"
133 /> 133 />
134 <Tool 134 <Tool
135 Name="VCLibrarianTool" 135 Name="VCLibrarianTool"
136 OutputFile="$(OutDir)/llcharacter.lib" 136 OutputFile="$(OutDir)/llcharacter.lib"
137 /> 137 />
138 <Tool 138 <Tool
139 Name="VCALinkTool" 139 Name="VCALinkTool"
140 /> 140 />
141 <Tool 141 <Tool
142 Name="VCXDCMakeTool" 142 Name="VCXDCMakeTool"
143 /> 143 />
144 <Tool 144 <Tool
145 Name="VCBscMakeTool" 145 Name="VCBscMakeTool"
146 /> 146 />
147 <Tool 147 <Tool
148 Name="VCFxCopTool" 148 Name="VCFxCopTool"
149 /> 149 />
150 <Tool 150 <Tool
151 Name="VCPostBuildEventTool" 151 Name="VCPostBuildEventTool"
152 /> 152 />
153 </Configuration> 153 </Configuration>
154 <Configuration 154 <Configuration
155 Name="ReleaseNoOpt|Win32" 155 Name="ReleaseNoOpt|Win32"
156 OutputDirectory="../lib_$(ConfigurationName)/i686-win32" 156 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
157 IntermediateDirectory="$(ConfigurationName)" 157 IntermediateDirectory="$(ConfigurationName)"
158 ConfigurationType="4" 158 ConfigurationType="4"
159 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 159 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
160 CharacterSet="1" 160 CharacterSet="1"
161 > 161 >
162 <Tool 162 <Tool
163 Name="VCPreBuildEventTool" 163 Name="VCPreBuildEventTool"
164 /> 164 />
165 <Tool 165 <Tool
166 Name="VCCustomBuildTool" 166 Name="VCCustomBuildTool"
167 /> 167 />
168 <Tool 168 <Tool
169 Name="VCXMLDataGeneratorTool" 169 Name="VCXMLDataGeneratorTool"
170 /> 170 />
171 <Tool 171 <Tool
172 Name="VCWebServiceProxyGeneratorTool" 172 Name="VCWebServiceProxyGeneratorTool"
173 /> 173 />
174 <Tool 174 <Tool
175 Name="VCMIDLTool" 175 Name="VCMIDLTool"
176 /> 176 />
177 <Tool 177 <Tool
178 Name="VCCLCompilerTool" 178 Name="VCCLCompilerTool"
179 AdditionalOptions="/Oy-" 179 AdditionalOptions="/Oy-"
180 Optimization="0" 180 Optimization="0"
181 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" 181 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
182 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE" 182 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
183 RuntimeLibrary="0" 183 RuntimeLibrary="0"
184 StructMemberAlignment="0" 184 StructMemberAlignment="0"
185 TreatWChar_tAsBuiltInType="false" 185 TreatWChar_tAsBuiltInType="false"
186 ForceConformanceInForLoopScope="true" 186 ForceConformanceInForLoopScope="true"
187 UsePrecompiledHeader="0" 187 UsePrecompiledHeader="0"
188 WarningLevel="3" 188 WarningLevel="3"
189 WarnAsError="true" 189 WarnAsError="true"
190 Detect64BitPortabilityProblems="false" 190 Detect64BitPortabilityProblems="false"
191 DebugInformationFormat="3" 191 DebugInformationFormat="3"
192 /> 192 />
193 <Tool 193 <Tool
194 Name="VCManagedResourceCompilerTool" 194 Name="VCManagedResourceCompilerTool"
195 /> 195 />
196 <Tool 196 <Tool
197 Name="VCResourceCompilerTool" 197 Name="VCResourceCompilerTool"
198 /> 198 />
199 <Tool 199 <Tool
200 Name="VCPreLinkEventTool" 200 Name="VCPreLinkEventTool"
201 /> 201 />
202 <Tool 202 <Tool
203 Name="VCLibrarianTool" 203 Name="VCLibrarianTool"
204 OutputFile="$(OutDir)/llcharacter.lib" 204 OutputFile="$(OutDir)/llcharacter.lib"
205 /> 205 />
206 <Tool 206 <Tool
207 Name="VCALinkTool" 207 Name="VCALinkTool"
208 /> 208 />
209 <Tool 209 <Tool
210 Name="VCXDCMakeTool" 210 Name="VCXDCMakeTool"
211 /> 211 />
212 <Tool 212 <Tool
213 Name="VCBscMakeTool" 213 Name="VCBscMakeTool"
214 /> 214 />
215 <Tool 215 <Tool
216 Name="VCFxCopTool" 216 Name="VCFxCopTool"
217 /> 217 />
218 <Tool 218 <Tool
219 Name="VCPostBuildEventTool" 219 Name="VCPostBuildEventTool"
220 /> 220 />
221 </Configuration> 221 </Configuration>
222 </Configurations> 222 </Configurations>
223 <References> 223 <References>
224 </References> 224 </References>
225 <Files> 225 <Files>
226 <Filter 226 <Filter
227 Name="Source Files" 227 Name="Source Files"
228 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" 228 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
229 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" 229 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
230 > 230 >
231 <File 231 <File
232 RelativePath=".\llanimationstates.cpp" 232 RelativePath=".\llanimationstates.cpp"
233 > 233 >
234 </File> 234 </File>
235 <File 235 <File
236 RelativePath=".\llbvhloader.cpp" 236 RelativePath=".\llbvhloader.cpp"
237 > 237 >
238 </File> 238 </File>
239 <File 239 <File
240 RelativePath=".\llcharacter.cpp" 240 RelativePath=".\llcharacter.cpp"
241 > 241 >
242 </File> 242 </File>
243 <File 243 <File
244 RelativePath=".\lleditingmotion.cpp" 244 RelativePath=".\lleditingmotion.cpp"
245 > 245 >
246 </File> 246 </File>
247 <File 247 <File
248 RelativePath=".\llgesture.cpp" 248 RelativePath=".\llgesture.cpp"
249 > 249 >
250 </File> 250 </File>
251 <File 251 <File
252 RelativePath=".\llhandmotion.cpp" 252 RelativePath=".\llhandmotion.cpp"
253 > 253 >
254 </File> 254 </File>
255 <File 255 <File
256 RelativePath=".\llheadrotmotion.cpp" 256 RelativePath=".\llheadrotmotion.cpp"
257 > 257 >
258 </File> 258 </File>
259 <File 259 <File
260 RelativePath=".\lljoint.cpp" 260 RelativePath=".\lljoint.cpp"
261 > 261 >
262 </File> 262 </File>
263 <File 263 <File
264 RelativePath=".\lljointsolverrp3.cpp" 264 RelativePath=".\lljointsolverrp3.cpp"
265 > 265 >
266 </File> 266 </File>
267 <File 267 <File
268 RelativePath=".\llkeyframefallmotion.cpp" 268 RelativePath=".\llkeyframefallmotion.cpp"
269 > 269 >
270 </File> 270 </File>
271 <File 271 <File
272 RelativePath=".\llkeyframemotion.cpp" 272 RelativePath=".\llkeyframemotion.cpp"
273 > 273 >
274 </File> 274 </File>
275 <File 275 <File
276 RelativePath=".\llkeyframemotionparam.cpp" 276 RelativePath=".\llkeyframemotionparam.cpp"
277 > 277 >
278 </File> 278 </File>
279 <File 279 <File
280 RelativePath=".\llkeyframestandmotion.cpp" 280 RelativePath=".\llkeyframestandmotion.cpp"
281 > 281 >
282 </File> 282 </File>
283 <File 283 <File
284 RelativePath=".\llkeyframewalkmotion.cpp" 284 RelativePath=".\llkeyframewalkmotion.cpp"
285 > 285 >
286 </File> 286 </File>
287 <File 287 <File
288 RelativePath=".\llmotion.cpp" 288 RelativePath=".\llmotion.cpp"
289 > 289 >
290 </File> 290 </File>
291 <File 291 <File
292 RelativePath=".\llmotioncontroller.cpp" 292 RelativePath=".\llmotioncontroller.cpp"
293 > 293 >
294 </File> 294 </File>
295 <File 295 <File
296 RelativePath=".\llmultigesture.cpp" 296 RelativePath=".\llmultigesture.cpp"
297 > 297 >
298 </File> 298 </File>
299 <File 299 <File
300 RelativePath=".\llpose.cpp" 300 RelativePath=".\llpose.cpp"
301 > 301 >
302 </File> 302 </File>
303 <File 303 <File
304 RelativePath=".\llstatemachine.cpp" 304 RelativePath=".\llstatemachine.cpp"
305 > 305 >
306 </File> 306 </File>
307 <File 307 <File
308 RelativePath=".\lltargetingmotion.cpp" 308 RelativePath=".\lltargetingmotion.cpp"
309 > 309 >
310 </File> 310 </File>
311 <File 311 <File
312 RelativePath=".\llvisualparam.cpp" 312 RelativePath=".\llvisualparam.cpp"
313 > 313 >
314 </File> 314 </File>
315 </Filter> 315 </Filter>
316 <Filter 316 <Filter
317 Name="Header Files" 317 Name="Header Files"
318 Filter="h;hpp;hxx;hm;inl;inc;xsd" 318 Filter="h;hpp;hxx;hm;inl;inc;xsd"
319 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" 319 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
320 > 320 >
321 <File 321 <File
322 RelativePath=".\llanimationstates.h" 322 RelativePath=".\llanimationstates.h"
323 > 323 >
324 </File> 324 </File>
325 <File 325 <File
326 RelativePath=".\llbvhloader.h" 326 RelativePath=".\llbvhloader.h"
327 > 327 >
328 </File> 328 </File>
329 <File 329 <File
330 RelativePath=".\llcharacter.h" 330 RelativePath=".\llcharacter.h"
331 > 331 >
332 </File> 332 </File>
333 <File 333 <File
334 RelativePath=".\lleditingmotion.h" 334 RelativePath=".\lleditingmotion.h"
335 > 335 >
336 </File> 336 </File>
337 <File 337 <File
338 RelativePath=".\llgesture.h" 338 RelativePath=".\llgesture.h"
339 > 339 >
340 </File> 340 </File>
341 <File 341 <File
342 RelativePath=".\llhandmotion.h" 342 RelativePath=".\llhandmotion.h"
343 > 343 >
344 </File> 344 </File>
345 <File 345 <File
346 RelativePath=".\llheadrotmotion.h" 346 RelativePath=".\llheadrotmotion.h"
347 > 347 >
348 </File> 348 </File>
349 <File 349 <File
350 RelativePath=".\lljoint.h" 350 RelativePath=".\lljoint.h"
351 > 351 >
352 </File> 352 </File>
353 <File 353 <File
354 RelativePath=".\lljointsolverrp3.h" 354 RelativePath=".\lljointsolverrp3.h"
355 > 355 >
356 </File> 356 </File>
357 <File 357 <File
358 RelativePath=".\lljointstate.h" 358 RelativePath=".\lljointstate.h"
359 > 359 >
360 </File> 360 </File>
361 <File 361 <File
362 RelativePath=".\llkeyframefallmotion.h" 362 RelativePath=".\llkeyframefallmotion.h"
363 > 363 >
364 </File> 364 </File>
365 <File 365 <File
366 RelativePath=".\llkeyframemotion.h" 366 RelativePath=".\llkeyframemotion.h"
367 > 367 >
368 </File> 368 </File>
369 <File 369 <File
370 RelativePath=".\llkeyframemotionparam.h" 370 RelativePath=".\llkeyframemotionparam.h"
371 > 371 >
372 </File> 372 </File>
373 <File 373 <File
374 RelativePath=".\llkeyframestandmotion.h" 374 RelativePath=".\llkeyframestandmotion.h"
375 > 375 >
376 </File> 376 </File>
377 <File 377 <File
378 RelativePath=".\llkeyframewalkmotion.h" 378 RelativePath=".\llkeyframewalkmotion.h"
379 > 379 >
380 </File> 380 </File>
381 <File 381 <File
382 RelativePath=".\llmotion.h" 382 RelativePath=".\llmotion.h"
383 > 383 >
384 </File> 384 </File>
385 <File 385 <File
386 RelativePath=".\llmotioncontroller.h" 386 RelativePath=".\llmotioncontroller.h"
387 > 387 >
388 </File> 388 </File>
389 <File 389 <File
390 RelativePath=".\llmultigesture.h" 390 RelativePath=".\llmultigesture.h"
391 > 391 >
392 </File> 392 </File>
393 <File 393 <File
394 RelativePath=".\llpose.h" 394 RelativePath=".\llpose.h"
395 > 395 >
396 </File> 396 </File>
397 <File 397 <File
398 RelativePath=".\llstatemachine.h" 398 RelativePath=".\llstatemachine.h"
399 > 399 >
400 </File> 400 </File>
401 <File 401 <File
402 RelativePath=".\lltargetingmotion.h" 402 RelativePath=".\lltargetingmotion.h"
403 > 403 >
404 </File> 404 </File>
405 <File 405 <File
406 RelativePath=".\llvisualparam.h" 406 RelativePath=".\llvisualparam.h"
407 > 407 >
408 </File> 408 </File>
409 </Filter> 409 </Filter>
410 <Filter 410 <Filter
411 Name="Resource Files" 411 Name="Resource Files"
412 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" 412 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
413 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" 413 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
414 > 414 >
415 </Filter> 415 </Filter>
416 </Files> 416 </Files>
417 <Globals> 417 <Globals>
418 </Globals> 418 </Globals>
419</VisualStudioProject> 419</VisualStudioProject>
diff --git a/linden/indra/llcharacter/llcharacter_vc9.vcproj b/linden/indra/llcharacter/llcharacter_vc9.vcproj
index 13e3b14..837ec04 100644
--- a/linden/indra/llcharacter/llcharacter_vc9.vcproj
+++ b/linden/indra/llcharacter/llcharacter_vc9.vcproj
@@ -1,420 +1,420 @@
1<?xml version="1.0" encoding="Windows-1252"?> 1<?xml version="1.0" encoding="Windows-1252"?>
2<VisualStudioProject 2<VisualStudioProject
3 ProjectType="Visual C++" 3 ProjectType="Visual C++"
4 Version="9.00" 4 Version="9.00"
5 Name="llcharacter" 5 Name="llcharacter"
6 ProjectGUID="{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}" 6 ProjectGUID="{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}"
7 RootNamespace="llcharacter" 7 RootNamespace="llcharacter"
8 Keyword="Win32Proj" 8 Keyword="Win32Proj"
9 TargetFrameworkVersion="131072" 9 TargetFrameworkVersion="131072"
10 > 10 >
11 <Platforms> 11 <Platforms>
12 <Platform 12 <Platform
13 Name="Win32" 13 Name="Win32"
14 /> 14 />
15 </Platforms> 15 </Platforms>
16 <ToolFiles> 16 <ToolFiles>
17 </ToolFiles> 17 </ToolFiles>
18 <Configurations> 18 <Configurations>
19 <Configuration 19 <Configuration
20 Name="Debug|Win32" 20 Name="Debug|Win32"
21 OutputDirectory="../lib_$(ConfigurationName)/i686-win32" 21 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
22 IntermediateDirectory="Debug" 22 IntermediateDirectory="Debug"
23 ConfigurationType="4" 23 ConfigurationType="4"
24 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 24 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
25 CharacterSet="1" 25 CharacterSet="1"
26 > 26 >
27 <Tool 27 <Tool
28 Name="VCPreBuildEventTool" 28 Name="VCPreBuildEventTool"
29 /> 29 />
30 <Tool 30 <Tool
31 Name="VCCustomBuildTool" 31 Name="VCCustomBuildTool"
32 /> 32 />
33 <Tool 33 <Tool
34 Name="VCXMLDataGeneratorTool" 34 Name="VCXMLDataGeneratorTool"
35 /> 35 />
36 <Tool 36 <Tool
37 Name="VCWebServiceProxyGeneratorTool" 37 Name="VCWebServiceProxyGeneratorTool"
38 /> 38 />
39 <Tool 39 <Tool
40 Name="VCMIDLTool" 40 Name="VCMIDLTool"
41 /> 41 />
42 <Tool 42 <Tool
43 Name="VCCLCompilerTool" 43 Name="VCCLCompilerTool"
44 Optimization="0" 44 Optimization="0"
45 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" 45 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
46 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG" 46 PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG"
47 MinimalRebuild="true" 47 MinimalRebuild="true"
48 BasicRuntimeChecks="3" 48 BasicRuntimeChecks="3"
49 RuntimeLibrary="1" 49 RuntimeLibrary="1"
50 StructMemberAlignment="4" 50 StructMemberAlignment="4"
51 TreatWChar_tAsBuiltInType="false" 51 TreatWChar_tAsBuiltInType="false"
52 ForceConformanceInForLoopScope="true" 52 ForceConformanceInForLoopScope="true"
53 UsePrecompiledHeader="0" 53 UsePrecompiledHeader="0"
54 WarningLevel="3" 54 WarningLevel="3"
55 WarnAsError="true" 55 WarnAsError="true"
56 Detect64BitPortabilityProblems="false" 56 Detect64BitPortabilityProblems="false"
57 DebugInformationFormat="4" 57 DebugInformationFormat="4"
58 /> 58 />
59 <Tool 59 <Tool
60 Name="VCManagedResourceCompilerTool" 60 Name="VCManagedResourceCompilerTool"
61 /> 61 />
62 <Tool 62 <Tool
63 Name="VCResourceCompilerTool" 63 Name="VCResourceCompilerTool"
64 /> 64 />
65 <Tool 65 <Tool
66 Name="VCPreLinkEventTool" 66 Name="VCPreLinkEventTool"
67 /> 67 />
68 <Tool 68 <Tool
69 Name="VCLibrarianTool" 69 Name="VCLibrarianTool"
70 OutputFile="$(OutDir)/llcharacter.lib" 70 OutputFile="$(OutDir)/llcharacter.lib"
71 /> 71 />
72 <Tool 72 <Tool
73 Name="VCALinkTool" 73 Name="VCALinkTool"
74 /> 74 />
75 <Tool 75 <Tool
76 Name="VCXDCMakeTool" 76 Name="VCXDCMakeTool"
77 /> 77 />
78 <Tool 78 <Tool
79 Name="VCBscMakeTool" 79 Name="VCBscMakeTool"
80 /> 80 />
81 <Tool 81 <Tool
82 Name="VCFxCopTool" 82 Name="VCFxCopTool"
83 /> 83 />
84 <Tool 84 <Tool
85 Name="VCPostBuildEventTool" 85 Name="VCPostBuildEventTool"
86 /> 86 />
87 </Configuration> 87 </Configuration>
88 <Configuration 88 <Configuration
89 Name="Release|Win32" 89 Name="Release|Win32"
90 OutputDirectory="../lib_$(ConfigurationName)/i686-win32" 90 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
91 IntermediateDirectory="Release" 91 IntermediateDirectory="Release"
92 ConfigurationType="4" 92 ConfigurationType="4"
93 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 93 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
94 CharacterSet="1" 94 CharacterSet="1"
95 > 95 >
96 <Tool 96 <Tool
97 Name="VCPreBuildEventTool" 97 Name="VCPreBuildEventTool"
98 /> 98 />
99 <Tool 99 <Tool
100 Name="VCCustomBuildTool" 100 Name="VCCustomBuildTool"
101 /> 101 />
102 <Tool 102 <Tool
103 Name="VCXMLDataGeneratorTool" 103 Name="VCXMLDataGeneratorTool"
104 /> 104 />
105 <Tool 105 <Tool
106 Name="VCWebServiceProxyGeneratorTool" 106 Name="VCWebServiceProxyGeneratorTool"
107 /> 107 />
108 <Tool 108 <Tool
109 Name="VCMIDLTool" 109 Name="VCMIDLTool"
110 /> 110 />
111 <Tool 111 <Tool
112 Name="VCCLCompilerTool" 112 Name="VCCLCompilerTool"
113 AdditionalOptions="/Oy-" 113 AdditionalOptions="/Oy-"
114 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" 114 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
115 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE" 115 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
116 RuntimeLibrary="0" 116 RuntimeLibrary="0"
117 StructMemberAlignment="0" 117 StructMemberAlignment="0"
118 TreatWChar_tAsBuiltInType="false" 118 TreatWChar_tAsBuiltInType="false"
119 ForceConformanceInForLoopScope="true" 119 ForceConformanceInForLoopScope="true"
120 UsePrecompiledHeader="0" 120 UsePrecompiledHeader="0"
121 WarningLevel="3" 121 WarningLevel="3"
122 WarnAsError="true" 122 WarnAsError="true"
123 Detect64BitPortabilityProblems="false" 123 Detect64BitPortabilityProblems="false"
124 DebugInformationFormat="3" 124 DebugInformationFormat="3"
125 /> 125 />
126 <Tool 126 <Tool
127 Name="VCManagedResourceCompilerTool" 127 Name="VCManagedResourceCompilerTool"
128 /> 128 />
129 <Tool 129 <Tool
130 Name="VCResourceCompilerTool" 130 Name="VCResourceCompilerTool"
131 /> 131 />
132 <Tool 132 <Tool
133 Name="VCPreLinkEventTool" 133 Name="VCPreLinkEventTool"
134 /> 134 />
135 <Tool 135 <Tool
136 Name="VCLibrarianTool" 136 Name="VCLibrarianTool"
137 OutputFile="$(OutDir)/llcharacter.lib" 137 OutputFile="$(OutDir)/llcharacter.lib"
138 /> 138 />
139 <Tool 139 <Tool
140 Name="VCALinkTool" 140 Name="VCALinkTool"
141 /> 141 />
142 <Tool 142 <Tool
143 Name="VCXDCMakeTool" 143 Name="VCXDCMakeTool"
144 /> 144 />
145 <Tool 145 <Tool
146 Name="VCBscMakeTool" 146 Name="VCBscMakeTool"
147 /> 147 />
148 <Tool 148 <Tool
149 Name="VCFxCopTool" 149 Name="VCFxCopTool"
150 /> 150 />
151 <Tool 151 <Tool
152 Name="VCPostBuildEventTool" 152 Name="VCPostBuildEventTool"
153 /> 153 />
154 </Configuration> 154 </Configuration>
155 <Configuration 155 <Configuration
156 Name="ReleaseNoOpt|Win32" 156 Name="ReleaseNoOpt|Win32"
157 OutputDirectory="../lib_$(ConfigurationName)/i686-win32" 157 OutputDirectory="../lib_$(ConfigurationName)/i686-win32"
158 IntermediateDirectory="$(ConfigurationName)" 158 IntermediateDirectory="$(ConfigurationName)"
159 ConfigurationType="4" 159 ConfigurationType="4"
160 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" 160 InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
161 CharacterSet="1" 161 CharacterSet="1"
162 > 162 >
163 <Tool 163 <Tool
164 Name="VCPreBuildEventTool" 164 Name="VCPreBuildEventTool"
165 /> 165 />
166 <Tool 166 <Tool
167 Name="VCCustomBuildTool" 167 Name="VCCustomBuildTool"
168 /> 168 />
169 <Tool 169 <Tool
170 Name="VCXMLDataGeneratorTool" 170 Name="VCXMLDataGeneratorTool"
171 /> 171 />
172 <Tool 172 <Tool
173 Name="VCWebServiceProxyGeneratorTool" 173 Name="VCWebServiceProxyGeneratorTool"
174 /> 174 />
175 <Tool 175 <Tool
176 Name="VCMIDLTool" 176 Name="VCMIDLTool"
177 /> 177 />
178 <Tool 178 <Tool
179 Name="VCCLCompilerTool" 179 Name="VCCLCompilerTool"
180 AdditionalOptions="/Oy-" 180 AdditionalOptions="/Oy-"
181 Optimization="0" 181 Optimization="0"
182 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" 182 AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\"
183 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE" 183 PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE"
184 RuntimeLibrary="0" 184 RuntimeLibrary="0"
185 StructMemberAlignment="0" 185 StructMemberAlignment="0"
186 TreatWChar_tAsBuiltInType="false" 186 TreatWChar_tAsBuiltInType="false"
187 ForceConformanceInForLoopScope="true" 187 ForceConformanceInForLoopScope="true"
188 UsePrecompiledHeader="0" 188 UsePrecompiledHeader="0"
189 WarningLevel="3" 189 WarningLevel="3"
190 WarnAsError="true" 190 WarnAsError="true"
191 Detect64BitPortabilityProblems="false" 191 Detect64BitPortabilityProblems="false"
192 DebugInformationFormat="3" 192 DebugInformationFormat="3"
193 /> 193 />
194 <Tool 194 <Tool
195 Name="VCManagedResourceCompilerTool" 195 Name="VCManagedResourceCompilerTool"
196 /> 196 />
197 <Tool 197 <Tool
198 Name="VCResourceCompilerTool" 198 Name="VCResourceCompilerTool"
199 /> 199 />
200 <Tool 200 <Tool
201 Name="VCPreLinkEventTool" 201 Name="VCPreLinkEventTool"
202 /> 202 />
203 <Tool 203 <Tool
204 Name="VCLibrarianTool" 204 Name="VCLibrarianTool"
205 OutputFile="$(OutDir)/llcharacter.lib" 205 OutputFile="$(OutDir)/llcharacter.lib"
206 /> 206 />
207 <Tool 207 <Tool
208 Name="VCALinkTool" 208 Name="VCALinkTool"
209 /> 209 />
210 <Tool 210 <Tool
211 Name="VCXDCMakeTool" 211 Name="VCXDCMakeTool"
212 /> 212 />
213 <Tool 213 <Tool
214 Name="VCBscMakeTool" 214 Name="VCBscMakeTool"
215 /> 215 />
216 <Tool 216 <Tool
217 Name="VCFxCopTool" 217 Name="VCFxCopTool"
218 /> 218 />
219 <Tool 219 <Tool
220 Name="VCPostBuildEventTool" 220 Name="VCPostBuildEventTool"
221 /> 221 />
222 </Configuration> 222 </Configuration>
223 </Configurations> 223 </Configurations>
224 <References> 224 <References>
225 </References> 225 </References>
226 <Files> 226 <Files>
227 <Filter 227 <Filter
228 Name="Source Files" 228 Name="Source Files"
229 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" 229 Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
230 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" 230 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
231 > 231 >
232 <File 232 <File
233 RelativePath=".\llanimationstates.cpp" 233 RelativePath=".\llanimationstates.cpp"
234 > 234 >
235 </File> 235 </File>
236 <File 236 <File
237 RelativePath=".\llbvhloader.cpp" 237 RelativePath=".\llbvhloader.cpp"
238 > 238 >
239 </File> 239 </File>
240 <File 240 <File
241 RelativePath=".\llcharacter.cpp" 241 RelativePath=".\llcharacter.cpp"
242 > 242 >
243 </File> 243 </File>
244 <File 244 <File
245 RelativePath=".\lleditingmotion.cpp" 245 RelativePath=".\lleditingmotion.cpp"
246 > 246 >
247 </File> 247 </File>
248 <File 248 <File
249 RelativePath=".\llgesture.cpp" 249 RelativePath=".\llgesture.cpp"
250 > 250 >
251 </File> 251 </File>
252 <File 252 <File
253 RelativePath=".\llhandmotion.cpp" 253 RelativePath=".\llhandmotion.cpp"
254 > 254 >
255 </File> 255 </File>
256 <File 256 <File
257 RelativePath=".\llheadrotmotion.cpp" 257 RelativePath=".\llheadrotmotion.cpp"
258 > 258 >
259 </File> 259 </File>
260 <File 260 <File
261 RelativePath=".\lljoint.cpp" 261 RelativePath=".\lljoint.cpp"
262 > 262 >
263 </File> 263 </File>
264 <File 264 <File
265 RelativePath=".\lljointsolverrp3.cpp" 265 RelativePath=".\lljointsolverrp3.cpp"
266 > 266 >
267 </File> 267 </File>
268 <File 268 <File
269 RelativePath=".\llkeyframefallmotion.cpp" 269 RelativePath=".\llkeyframefallmotion.cpp"
270 > 270 >
271 </File> 271 </File>
272 <File 272 <File
273 RelativePath=".\llkeyframemotion.cpp" 273 RelativePath=".\llkeyframemotion.cpp"
274 > 274 >
275 </File> 275 </File>
276 <File 276 <File
277 RelativePath=".\llkeyframemotionparam.cpp" 277 RelativePath=".\llkeyframemotionparam.cpp"
278 > 278 >
279 </File> 279 </File>
280 <File 280 <File
281 RelativePath=".\llkeyframestandmotion.cpp" 281 RelativePath=".\llkeyframestandmotion.cpp"
282 > 282 >
283 </File> 283 </File>
284 <File 284 <File
285 RelativePath=".\llkeyframewalkmotion.cpp" 285 RelativePath=".\llkeyframewalkmotion.cpp"
286 > 286 >
287 </File> 287 </File>
288 <File 288 <File
289 RelativePath=".\llmotion.cpp" 289 RelativePath=".\llmotion.cpp"
290 > 290 >
291 </File> 291 </File>
292 <File 292 <File
293 RelativePath=".\llmotioncontroller.cpp" 293 RelativePath=".\llmotioncontroller.cpp"
294 > 294 >
295 </File> 295 </File>
296 <File 296 <File
297 RelativePath=".\llmultigesture.cpp" 297 RelativePath=".\llmultigesture.cpp"
298 > 298 >
299 </File> 299 </File>
300 <File 300 <File
301 RelativePath=".\llpose.cpp" 301 RelativePath=".\llpose.cpp"
302 > 302 >
303 </File> 303 </File>
304 <File 304 <File
305 RelativePath=".\llstatemachine.cpp" 305 RelativePath=".\llstatemachine.cpp"
306 > 306 >
307 </File> 307 </File>
308 <File 308 <File
309 RelativePath=".\lltargetingmotion.cpp" 309 RelativePath=".\lltargetingmotion.cpp"
310 > 310 >
311 </File> 311 </File>
312 <File 312 <File
313 RelativePath=".\llvisualparam.cpp" 313 RelativePath=".\llvisualparam.cpp"
314 > 314 >
315 </File> 315 </File>
316 </Filter> 316 </Filter>
317 <Filter 317 <Filter
318 Name="Header Files" 318 Name="Header Files"
319 Filter="h;hpp;hxx;hm;inl;inc;xsd" 319 Filter="h;hpp;hxx;hm;inl;inc;xsd"
320 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" 320 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
321 > 321 >
322 <File 322 <File
323 RelativePath=".\llanimationstates.h" 323 RelativePath=".\llanimationstates.h"
324 > 324 >
325 </File> 325 </File>
326 <File 326 <File
327 RelativePath=".\llbvhloader.h" 327 RelativePath=".\llbvhloader.h"
328 > 328 >
329 </File> 329 </File>
330 <File 330 <File
331 RelativePath=".\llcharacter.h" 331 RelativePath=".\llcharacter.h"
332 > 332 >
333 </File> 333 </File>
334 <File 334 <File
335 RelativePath=".\lleditingmotion.h" 335 RelativePath=".\lleditingmotion.h"
336 > 336 >
337 </File> 337 </File>
338 <File 338 <File
339 RelativePath=".\llgesture.h" 339 RelativePath=".\llgesture.h"
340 > 340 >
341 </File> 341 </File>
342 <File 342 <File
343 RelativePath=".\llhandmotion.h" 343 RelativePath=".\llhandmotion.h"
344 > 344 >
345 </File> 345 </File>
346 <File 346 <File
347 RelativePath=".\llheadrotmotion.h" 347 RelativePath=".\llheadrotmotion.h"
348 > 348 >
349 </File> 349 </File>
350 <File 350 <File
351 RelativePath=".\lljoint.h" 351 RelativePath=".\lljoint.h"
352 > 352 >
353 </File> 353 </File>
354 <File 354 <File
355 RelativePath=".\lljointsolverrp3.h" 355 RelativePath=".\lljointsolverrp3.h"
356 > 356 >
357 </File> 357 </File>
358 <File 358 <File
359 RelativePath=".\lljointstate.h" 359 RelativePath=".\lljointstate.h"
360 > 360 >
361 </File> 361 </File>
362 <File 362 <File
363 RelativePath=".\llkeyframefallmotion.h" 363 RelativePath=".\llkeyframefallmotion.h"
364 > 364 >
365 </File> 365 </File>
366 <File 366 <File
367 RelativePath=".\llkeyframemotion.h" 367 RelativePath=".\llkeyframemotion.h"
368 > 368 >
369 </File> 369 </File>
370 <File 370 <File
371 RelativePath=".\llkeyframemotionparam.h" 371 RelativePath=".\llkeyframemotionparam.h"
372 > 372 >
373 </File> 373 </File>
374 <File 374 <File
375 RelativePath=".\llkeyframestandmotion.h" 375 RelativePath=".\llkeyframestandmotion.h"
376 > 376 >
377 </File> 377 </File>
378 <File 378 <File
379 RelativePath=".\llkeyframewalkmotion.h" 379 RelativePath=".\llkeyframewalkmotion.h"
380 > 380 >
381 </File> 381 </File>
382 <File 382 <File
383 RelativePath=".\llmotion.h" 383 RelativePath=".\llmotion.h"
384 > 384 >
385 </File> 385 </File>
386 <File 386 <File
387 RelativePath=".\llmotioncontroller.h" 387 RelativePath=".\llmotioncontroller.h"
388 > 388 >
389 </File> 389 </File>
390 <File 390 <File
391 RelativePath=".\llmultigesture.h" 391 RelativePath=".\llmultigesture.h"
392 > 392 >
393 </File> 393 </File>
394 <File 394 <File
395 RelativePath=".\llpose.h" 395 RelativePath=".\llpose.h"
396 > 396 >
397 </File> 397 </File>
398 <File 398 <File
399 RelativePath=".\llstatemachine.h" 399 RelativePath=".\llstatemachine.h"
400 > 400 >
401 </File> 401 </File>
402 <File 402 <File
403 RelativePath=".\lltargetingmotion.h" 403 RelativePath=".\lltargetingmotion.h"
404 > 404 >
405 </File> 405 </File>
406 <File 406 <File
407 RelativePath=".\llvisualparam.h" 407 RelativePath=".\llvisualparam.h"
408 > 408 >
409 </File> 409 </File>
410 </Filter> 410 </Filter>
411 <Filter 411 <Filter
412 Name="Resource Files" 412 Name="Resource Files"
413 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" 413 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"
414 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" 414 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
415 > 415 >
416 </Filter> 416 </Filter>
417 </Files> 417 </Files>
418 <Globals> 418 <Globals>
419 </Globals> 419 </Globals>
420</VisualStudioProject> 420</VisualStudioProject>
diff --git a/linden/indra/llcharacter/llkeyframemotion.cpp b/linden/indra/llcharacter/llkeyframemotion.cpp
index 4288b8d..0138860 100644
--- a/linden/indra/llcharacter/llkeyframemotion.cpp
+++ b/linden/indra/llcharacter/llkeyframemotion.cpp
@@ -122,6 +122,7 @@ U32 LLKeyframeMotion::JointMotionList::dumpDiagInfo()
122//----------------------------------------------------------------------------- 122//-----------------------------------------------------------------------------
123//----------------------------------------------------------------------------- 123//-----------------------------------------------------------------------------
124 124
125
125//----------------------------------------------------------------------------- 126//-----------------------------------------------------------------------------
126// ScaleCurve::ScaleCurve() 127// ScaleCurve::ScaleCurve()
127//----------------------------------------------------------------------------- 128//-----------------------------------------------------------------------------
@@ -136,7 +137,7 @@ LLKeyframeMotion::ScaleCurve::ScaleCurve()
136//----------------------------------------------------------------------------- 137//-----------------------------------------------------------------------------
137LLKeyframeMotion::ScaleCurve::~ScaleCurve() 138LLKeyframeMotion::ScaleCurve::~ScaleCurve()
138{ 139{
139 mKeys.deleteAllData(); 140 mKeys.clear();
140 mNumKeys = 0; 141 mNumKeys = 0;
141} 142}
142 143
@@ -146,43 +147,42 @@ LLKeyframeMotion::ScaleCurve::~ScaleCurve()
146LLVector3 LLKeyframeMotion::ScaleCurve::getValue(F32 time, F32 duration) 147LLVector3 LLKeyframeMotion::ScaleCurve::getValue(F32 time, F32 duration)
147{ 148{
148 LLVector3 value; 149 LLVector3 value;
149 F32 index_before, index_after;
150 ScaleKey* scale_before;
151 ScaleKey* scale_after;
152 150
153 mKeys.getInterval(time, index_before, index_after, scale_before, scale_after); 151 if (mKeys.empty())
154 if (scale_before)
155 { 152 {
156 if (!scale_after) 153 value.clearVec();
157 { 154 return value;
158 scale_after = &mLoopInKey; 155 }
159 index_after = duration; 156
160 } 157 key_map_t::iterator right = mKeys.lower_bound(time);
161 158 if (right == mKeys.end())
162 if (index_after == index_before) 159 {
163 { 160 // Past last key
164 value = scale_after->mScale; 161 --right;
165 } 162 value = right->second.mScale;
166 else 163 }
167 { 164 else if (right == mKeys.begin() || right->first == time)
168 F32 u = (time - index_before) / (index_after - index_before); 165 {
169 value = interp(u, *scale_before, *scale_after); 166 // Before first key or exactly on a key
170 } 167 value = right->second.mScale;
171 } 168 }
172 else 169 else
173 { 170 {
174 // before first key 171 // Between two keys
175 if (scale_after) 172 key_map_t::iterator left = right; --left;
176 { 173 F32 index_before = left->first;
177 value = scale_after->mScale; 174 F32 index_after = right->first;
178 } 175 ScaleKey& scale_before = left->second;
179 // no keys? 176 ScaleKey& scale_after = right->second;
180 else 177 if (right == mKeys.end())
181 { 178 {
182 value.clearVec(); 179 scale_after = mLoopInKey;
180 index_after = duration;
183 } 181 }
184 }
185 182
183 F32 u = (time - index_before) / (index_after - index_before);
184 value = interp(u, scale_before, scale_after);
185 }
186 return value; 186 return value;
187} 187}
188 188
@@ -217,7 +217,7 @@ LLKeyframeMotion::RotationCurve::RotationCurve()
217//----------------------------------------------------------------------------- 217//-----------------------------------------------------------------------------
218LLKeyframeMotion::RotationCurve::~RotationCurve() 218LLKeyframeMotion::RotationCurve::~RotationCurve()
219{ 219{
220 mKeys.deleteAllData(); 220 mKeys.clear();
221 mNumKeys = 0; 221 mNumKeys = 0;
222} 222}
223 223
@@ -227,44 +227,42 @@ LLKeyframeMotion::RotationCurve::~RotationCurve()
227LLQuaternion LLKeyframeMotion::RotationCurve::getValue(F32 time, F32 duration) 227LLQuaternion LLKeyframeMotion::RotationCurve::getValue(F32 time, F32 duration)
228{ 228{
229 LLQuaternion value; 229 LLQuaternion value;
230 F32 index_before, index_after;
231 RotationKey* rot_before;
232 RotationKey* rot_after;
233 230
234 mKeys.getInterval(time, index_before, index_after, rot_before, rot_after); 231 if (mKeys.empty())
235
236 if (rot_before)
237 { 232 {
238 if (!rot_after) 233 value = LLQuaternion::DEFAULT;
239 { 234 return value;
240 rot_after = &mLoopInKey; 235 }
241 index_after = duration; 236
242 } 237 key_map_t::iterator right = mKeys.lower_bound(time);
243 238 if (right == mKeys.end())
244 if (index_after == index_before) 239 {
245 { 240 // Past last key
246 value = rot_after->mRotation; 241 --right;
247 } 242 value = right->second.mRotation;
248 else 243 }
249 { 244 else if (right == mKeys.begin() || right->first == time)
250 F32 u = (time - index_before) / (index_after - index_before); 245 {
251 value = interp(u, *rot_before, *rot_after); 246 // Before first key or exactly on a key
252 } 247 value = right->second.mRotation;
253 } 248 }
254 else 249 else
255 { 250 {
256 // before first key 251 // Between two keys
257 if (rot_after) 252 key_map_t::iterator left = right; --left;
253 F32 index_before = left->first;
254 F32 index_after = right->first;
255 RotationKey& rot_before = left->second;
256 RotationKey& rot_after = right->second;
257 if (right == mKeys.end())
258 { 258 {
259 value = rot_after->mRotation; 259 rot_after = mLoopInKey;
260 } 260 index_after = duration;
261 // no keys?
262 else
263 {
264 value = LLQuaternion::DEFAULT;
265 } 261 }
266 }
267 262
263 F32 u = (time - index_before) / (index_after - index_before);
264 value = interp(u, rot_before, rot_after);
265 }
268 return value; 266 return value;
269} 267}
270 268
@@ -300,7 +298,7 @@ LLKeyframeMotion::PositionCurve::PositionCurve()
300//----------------------------------------------------------------------------- 298//-----------------------------------------------------------------------------
301LLKeyframeMotion::PositionCurve::~PositionCurve() 299LLKeyframeMotion::PositionCurve::~PositionCurve()
302{ 300{
303 mKeys.deleteAllData(); 301 mKeys.clear();
304 mNumKeys = 0; 302 mNumKeys = 0;
305} 303}
306 304
@@ -310,46 +308,45 @@ LLKeyframeMotion::PositionCurve::~PositionCurve()
310LLVector3 LLKeyframeMotion::PositionCurve::getValue(F32 time, F32 duration) 308LLVector3 LLKeyframeMotion::PositionCurve::getValue(F32 time, F32 duration)
311{ 309{
312 LLVector3 value; 310 LLVector3 value;
313 F32 index_before, index_after;
314 PositionKey* pos_before;
315 PositionKey* pos_after;
316
317 mKeys.getInterval(time, index_before, index_after, pos_before, pos_after);
318 311
319 if (pos_before) 312 if (mKeys.empty())
320 { 313 {
321 if (!pos_after) 314 value.clearVec();
322 { 315 return value;
323 pos_after = &mLoopInKey; 316 }
324 index_after = duration; 317
325 } 318 key_map_t::iterator right = mKeys.lower_bound(time);
326 319 if (right == mKeys.end())
327 if (index_after == index_before) 320 {
328 { 321 // Past last key
329 value = pos_after->mPosition; 322 --right;
330 } 323 value = right->second.mPosition;
331 else 324 }
332 { 325 else if (right == mKeys.begin() || right->first == time)
333 F32 u = (time - index_before) / (index_after - index_before); 326 {
334 value = interp(u, *pos_before, *pos_after); 327 // Before first key or exactly on a key
335 } 328 value = right->second.mPosition;
336 } 329 }
337 else 330 else
338 { 331 {
339 // before first key 332 // Between two keys
340 if (pos_after) 333 key_map_t::iterator left = right; --left;
334 F32 index_before = left->first;
335 F32 index_after = right->first;
336 PositionKey& pos_before = left->second;
337 PositionKey& pos_after = right->second;
338 if (right == mKeys.end())
341 { 339 {
342 value = pos_after->mPosition; 340 pos_after = mLoopInKey;
343 } 341 index_after = duration;
344 // no keys?
345 else
346 {
347 value.clearVec();
348 } 342 }
343
344 F32 u = (time - index_before) / (index_after - index_before);
345 value = interp(u, pos_before, pos_after);
349 } 346 }
350 347
351 llassert(value.isFinite()); 348 llassert(value.isFinite());
352 349
353 return value; 350 return value;
354} 351}
355 352
@@ -1404,8 +1401,8 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
1404 time = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration); 1401 time = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration);
1405 } 1402 }
1406 1403
1407 RotationKey *rot_key = new RotationKey; 1404 RotationKey rot_key;
1408 rot_key->mTime = time; 1405 rot_key.mTime = time;
1409 LLVector3 rot_angles; 1406 LLVector3 rot_angles;
1410 U16 x, y, z; 1407 U16 x, y, z;
1411 1408
@@ -1416,7 +1413,7 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
1416 success = dp.unpackVector3(rot_angles, "rot_angles"); 1413 success = dp.unpackVector3(rot_angles, "rot_angles");
1417 1414
1418 LLQuaternion::Order ro = StringToOrder("ZYX"); 1415 LLQuaternion::Order ro = StringToOrder("ZYX");
1419 rot_key->mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro); 1416 rot_key.mRotation = mayaQ(rot_angles.mV[VX], rot_angles.mV[VY], rot_angles.mV[VZ], ro);
1420 } 1417 }
1421 else 1418 else
1422 { 1419 {
@@ -1428,13 +1425,12 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
1428 rot_vec.mV[VX] = U16_to_F32(x, -1.f, 1.f); 1425 rot_vec.mV[VX] = U16_to_F32(x, -1.f, 1.f);
1429 rot_vec.mV[VY] = U16_to_F32(y, -1.f, 1.f); 1426 rot_vec.mV[VY] = U16_to_F32(y, -1.f, 1.f);
1430 rot_vec.mV[VZ] = U16_to_F32(z, -1.f, 1.f); 1427 rot_vec.mV[VZ] = U16_to_F32(z, -1.f, 1.f);
1431 rot_key->mRotation.unpackFromVector3(rot_vec); 1428 rot_key.mRotation.unpackFromVector3(rot_vec);
1432 } 1429 }
1433 1430
1434 if (!success) 1431 if (!success)
1435 { 1432 {
1436 llwarns << "can't read rotation key (" << k << ")" << llendl; 1433 llwarns << "can't read rotation key (" << k << ")" << llendl;
1437 delete rot_key;
1438 return FALSE; 1434 return FALSE;
1439 } 1435 }
1440 1436
@@ -1464,14 +1460,13 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
1464 for (S32 k = 0; k < joint_motion->mPositionCurve.mNumKeys; k++) 1460 for (S32 k = 0; k < joint_motion->mPositionCurve.mNumKeys; k++)
1465 { 1461 {
1466 U16 time_short; 1462 U16 time_short;
1467 PositionKey* pos_key = new PositionKey; 1463 PositionKey pos_key;
1468 1464
1469 if (old_version) 1465 if (old_version)
1470 { 1466 {
1471 if (!dp.unpackF32(pos_key->mTime, "time")) 1467 if (!dp.unpackF32(pos_key.mTime, "time"))
1472 { 1468 {
1473 llwarns << "can't read position key (" << k << ")" << llendl; 1469 llwarns << "can't read position key (" << k << ")" << llendl;
1474 delete pos_key;
1475 return FALSE; 1470 return FALSE;
1476 } 1471 }
1477 } 1472 }
@@ -1480,18 +1475,17 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
1480 if (!dp.unpackU16(time_short, "time")) 1475 if (!dp.unpackU16(time_short, "time"))
1481 { 1476 {
1482 llwarns << "can't read position key (" << k << ")" << llendl; 1477 llwarns << "can't read position key (" << k << ")" << llendl;
1483 delete pos_key;
1484 return FALSE; 1478 return FALSE;
1485 } 1479 }
1486 1480
1487 pos_key->mTime = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration); 1481 pos_key.mTime = U16_to_F32(time_short, 0.f, mJointMotionList->mDuration);
1488 } 1482 }
1489 1483
1490 BOOL success = TRUE; 1484 BOOL success = TRUE;
1491 1485
1492 if (old_version) 1486 if (old_version)
1493 { 1487 {
1494 success = dp.unpackVector3(pos_key->mPosition, "pos"); 1488 success = dp.unpackVector3(pos_key.mPosition, "pos");
1495 } 1489 }
1496 else 1490 else
1497 { 1491 {
@@ -1501,23 +1495,22 @@ BOOL LLKeyframeMotion::deserialize(LLDataPacker& dp)
1501 success &= dp.unpackU16(y, "pos_y"); 1495 success &= dp.unpackU16(y, "pos_y");
1502 success &= dp.unpackU16(z, "pos_z"); 1496 success &= dp.unpackU16(z, "pos_z");
1503 1497
1504 pos_key->mPosition.mV[VX] = U16_to_F32(x, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1498 pos_key.mPosition.mV[VX] = U16_to_F32(x, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1505 pos_key->mPosition.mV[VY] = U16_to_F32(y, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1499 pos_key.mPosition.mV[VY] = U16_to_F32(y, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1506 pos_key->mPosition.mV[VZ] = U16_to_F32(z, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1500 pos_key.mPosition.mV[VZ] = U16_to_F32(z, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1507 } 1501 }
1508 1502
1509 if (!success) 1503 if (!success)
1510 { 1504 {
1511 llwarns << "can't read position key (" << k << ")" << llendl; 1505 llwarns << "can't read position key (" << k << ")" << llendl;
1512 delete pos_key;
1513 return FALSE; 1506 return FALSE;
1514 } 1507 }
1515 1508
1516 pCurve->mKeys[pos_key->mTime] = pos_key; 1509 pCurve->mKeys[pos_key.mTime] = pos_key;
1517 1510
1518 if (is_pelvis) 1511 if (is_pelvis)
1519 { 1512 {
1520 mJointMotionList->mPelvisBBox.addPoint(pos_key->mPosition); 1513 mJointMotionList->mPelvisBBox.addPoint(pos_key.mPosition);
1521 } 1514 }
1522 } 1515 }
1523 1516
@@ -1724,14 +1717,14 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
1724 success &= dp.packS32(joint_motionp->mPriority, "joint_priority"); 1717 success &= dp.packS32(joint_motionp->mPriority, "joint_priority");
1725 success &= dp.packS32(joint_motionp->mRotationCurve.mNumKeys, "num_rot_keys"); 1718 success &= dp.packS32(joint_motionp->mRotationCurve.mNumKeys, "num_rot_keys");
1726 1719
1727 for (RotationKey* rot_keyp = joint_motionp->mRotationCurve.mKeys.getFirstData(); 1720 for (RotationCurve::key_map_t::iterator iter = joint_motionp->mRotationCurve.mKeys.begin();
1728 rot_keyp; 1721 iter != joint_motionp->mRotationCurve.mKeys.end(); ++iter)
1729 rot_keyp = joint_motionp->mRotationCurve.mKeys.getNextData())
1730 { 1722 {
1731 U16 time_short = F32_to_U16(rot_keyp->mTime, 0.f, mJointMotionList->mDuration); 1723 RotationKey& rot_key = iter->second;
1724 U16 time_short = F32_to_U16(rot_key.mTime, 0.f, mJointMotionList->mDuration);
1732 success &= dp.packU16(time_short, "time"); 1725 success &= dp.packU16(time_short, "time");
1733 1726
1734 LLVector3 rot_angles = rot_keyp->mRotation.packToVector3(); 1727 LLVector3 rot_angles = rot_key.mRotation.packToVector3();
1735 1728
1736 U16 x, y, z; 1729 U16 x, y, z;
1737 rot_angles.quantize16(-1.f, 1.f, -1.f, 1.f); 1730 rot_angles.quantize16(-1.f, 1.f, -1.f, 1.f);
@@ -1744,18 +1737,18 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const
1744 } 1737 }
1745 1738
1746 success &= dp.packS32(joint_motionp->mPositionCurve.mNumKeys, "num_pos_keys"); 1739 success &= dp.packS32(joint_motionp->mPositionCurve.mNumKeys, "num_pos_keys");
1747 for (PositionKey* pos_keyp = joint_motionp->mPositionCurve.mKeys.getFirstData(); 1740 for (PositionCurve::key_map_t::iterator iter = joint_motionp->mPositionCurve.mKeys.begin();
1748 pos_keyp; 1741 iter != joint_motionp->mPositionCurve.mKeys.end(); ++iter)
1749 pos_keyp = joint_motionp->mPositionCurve.mKeys.getNextData())
1750 { 1742 {
1751 U16 time_short = F32_to_U16(pos_keyp->mTime, 0.f, mJointMotionList->mDuration); 1743 PositionKey& pos_key = iter->second;
1744 U16 time_short = F32_to_U16(pos_key.mTime, 0.f, mJointMotionList->mDuration);
1752 success &= dp.packU16(time_short, "time"); 1745 success &= dp.packU16(time_short, "time");
1753 1746
1754 U16 x, y, z; 1747 U16 x, y, z;
1755 pos_keyp->mPosition.quantize16(-LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1748 pos_key.mPosition.quantize16(-LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET, -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1756 x = F32_to_U16(pos_keyp->mPosition.mV[VX], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1749 x = F32_to_U16(pos_key.mPosition.mV[VX], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1757 y = F32_to_U16(pos_keyp->mPosition.mV[VY], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1750 y = F32_to_U16(pos_key.mPosition.mV[VY], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1758 z = F32_to_U16(pos_keyp->mPosition.mV[VZ], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET); 1751 z = F32_to_U16(pos_key.mPosition.mV[VZ], -LL_MAX_PELVIS_OFFSET, LL_MAX_PELVIS_OFFSET);
1759 success &= dp.packU16(x, "pos_x"); 1752 success &= dp.packU16(x, "pos_x");
1760 success &= dp.packU16(y, "pos_y"); 1753 success &= dp.packU16(y, "pos_y");
1761 success &= dp.packU16(z, "pos_z"); 1754 success &= dp.packU16(z, "pos_z");
@@ -2030,64 +2023,6 @@ void LLKeyframeMotion::onLoadComplete(LLVFS *vfs,
2030 } 2023 }
2031} 2024}
2032 2025
2033
2034//-----------------------------------------------------------------------------
2035// writeCAL3D()
2036//-----------------------------------------------------------------------------
2037void LLKeyframeMotion::writeCAL3D(apr_file_t* fp)
2038{
2039// <ANIMATION VERSION="1000" DURATION="1.03333" NUMTRACKS="58">
2040// <TRACK BONEID="0" NUMKEYFRAMES="31">
2041// <KEYFRAME TIME="0">
2042// <TRANSLATION>0 0 48.8332</TRANSLATION>
2043// <ROTATION>0.0512905 0.05657 0.66973 0.738668</ROTATION>
2044// </KEYFRAME>
2045// </TRACK>
2046// </ANIMATION>
2047
2048 apr_file_printf(fp, "<ANIMATION VERSION=\"1000\" DURATION=\"%.5f\" NUMTRACKS=\"%d\">\n", getDuration(), mJointMotionList->getNumJointMotions());
2049 for (U32 joint_index = 0; joint_index < mJointMotionList->getNumJointMotions(); joint_index++)
2050 {
2051 JointMotion* joint_motionp = mJointMotionList->getJointMotion(joint_index);
2052 LLJoint* animated_joint = mCharacter->getJoint(joint_motionp->mJointName);
2053 S32 joint_num = animated_joint->mJointNum + 1;
2054
2055 apr_file_printf(fp, " <TRACK BONEID=\"%d\" NUMKEYFRAMES=\"%d\">\n", joint_num, joint_motionp->mRotationCurve.mNumKeys );
2056 PositionKey* pos_keyp = joint_motionp->mPositionCurve.mKeys.getFirstData();
2057 for (RotationKey* rot_keyp = joint_motionp->mRotationCurve.mKeys.getFirstData();
2058 rot_keyp;
2059 rot_keyp = joint_motionp->mRotationCurve.mKeys.getNextData())
2060 {
2061 apr_file_printf(fp, " <KEYFRAME TIME=\"%0.3f\">\n", rot_keyp->mTime);
2062 LLVector3 nominal_pos = animated_joint->getPosition();
2063 if (animated_joint->getParent())
2064 {
2065 nominal_pos.scaleVec(animated_joint->getParent()->getScale());
2066 }
2067 nominal_pos = nominal_pos * 100.f;
2068
2069 if (joint_motionp->mUsage & LLJointState::POS && pos_keyp)
2070 {
2071 LLVector3 pos_val = pos_keyp->mPosition;
2072 pos_val = pos_val * 100.f;
2073 pos_val += nominal_pos;
2074 apr_file_printf(fp, " <TRANSLATION>%0.4f %0.4f %0.4f</TRANSLATION>\n", pos_val.mV[VX], pos_val.mV[VY], pos_val.mV[VZ]);
2075 pos_keyp = joint_motionp->mPositionCurve.mKeys.getNextData();
2076 }
2077 else
2078 {
2079 apr_file_printf(fp, " <TRANSLATION>%0.4f %0.4f %0.4f</TRANSLATION>\n", nominal_pos.mV[VX], nominal_pos.mV[VY], nominal_pos.mV[VZ]);
2080 }
2081
2082 LLQuaternion rot_val = ~rot_keyp->mRotation;
2083 apr_file_printf(fp, " <ROTATION>%0.4f %0.4f %0.4f %0.4f</ROTATION>\n", rot_val.mQ[VX], rot_val.mQ[VY], rot_val.mQ[VZ], rot_val.mQ[VW]);
2084 apr_file_printf(fp, " </KEYFRAME>\n");
2085 }
2086 apr_file_printf(fp, " </TRACK>\n");
2087 }
2088 apr_file_printf(fp, "</ANIMATION>\n");
2089}
2090
2091//-------------------------------------------------------------------- 2026//--------------------------------------------------------------------
2092// LLKeyframeDataCache::dumpDiagInfo() 2027// LLKeyframeDataCache::dumpDiagInfo()
2093//-------------------------------------------------------------------- 2028//--------------------------------------------------------------------
diff --git a/linden/indra/llcharacter/llkeyframemotion.h b/linden/indra/llcharacter/llkeyframemotion.h
index 0ad0181..5f897cf 100644
--- a/linden/indra/llcharacter/llkeyframemotion.h
+++ b/linden/indra/llcharacter/llkeyframemotion.h
@@ -43,7 +43,6 @@
43#include "llhandmotion.h" 43#include "llhandmotion.h"
44#include "lljointstate.h" 44#include "lljointstate.h"
45#include "llmotion.h" 45#include "llmotion.h"
46#include "llptrskipmap.h"
47#include "llquaternion.h" 46#include "llquaternion.h"
48#include "v3dmath.h" 47#include "v3dmath.h"
49#include "v3math.h" 48#include "v3math.h"
@@ -158,7 +157,6 @@ public:
158 U32 getFileSize(); 157 U32 getFileSize();
159 BOOL serialize(LLDataPacker& dp) const; 158 BOOL serialize(LLDataPacker& dp) const;
160 BOOL deserialize(LLDataPacker& dp); 159 BOOL deserialize(LLDataPacker& dp);
161 void writeCAL3D(apr_file_t* fp);
162 BOOL isLoaded() { return mJointMotionList != NULL; } 160 BOOL isLoaded() { return mJointMotionList != NULL; }
163 161
164 162
@@ -339,7 +337,8 @@ public:
339 337
340 InterpolationType mInterpolationType; 338 InterpolationType mInterpolationType;
341 S32 mNumKeys; 339 S32 mNumKeys;
342 LLPtrSkipMap<F32, ScaleKey*> mKeys; 340 typedef std::map<F32, ScaleKey> key_map_t;
341 key_map_t mKeys;
343 ScaleKey mLoopInKey; 342 ScaleKey mLoopInKey;
344 ScaleKey mLoopOutKey; 343 ScaleKey mLoopOutKey;
345 }; 344 };
@@ -357,7 +356,8 @@ public:
357 356
358 InterpolationType mInterpolationType; 357 InterpolationType mInterpolationType;
359 S32 mNumKeys; 358 S32 mNumKeys;
360 LLPtrSkipMap<F32, RotationKey*> mKeys; 359 typedef std::map<F32, RotationKey> key_map_t;
360 key_map_t mKeys;
361 RotationKey mLoopInKey; 361 RotationKey mLoopInKey;
362 RotationKey mLoopOutKey; 362 RotationKey mLoopOutKey;
363 }; 363 };
@@ -375,7 +375,8 @@ public:
375 375
376 InterpolationType mInterpolationType; 376 InterpolationType mInterpolationType;
377 S32 mNumKeys; 377 S32 mNumKeys;
378 LLPtrSkipMap<F32, PositionKey*> mKeys; 378 typedef std::map<F32, PositionKey> key_map_t;
379 key_map_t mKeys;
379 PositionKey mLoopInKey; 380 PositionKey mLoopInKey;
380 PositionKey mLoopOutKey; 381 PositionKey mLoopOutKey;
381 }; 382 };
diff --git a/linden/indra/llcharacter/llkeyframemotionparam.cpp b/linden/indra/llcharacter/llkeyframemotionparam.cpp
index 2dd935c..106c02c 100644
--- a/linden/indra/llcharacter/llkeyframemotionparam.cpp
+++ b/linden/indra/llcharacter/llkeyframemotionparam.cpp
@@ -48,14 +48,6 @@
48//----------------------------------------------------------------------------- 48//-----------------------------------------------------------------------------
49 49
50//----------------------------------------------------------------------------- 50//-----------------------------------------------------------------------------
51// sortFunc()
52//-----------------------------------------------------------------------------
53BOOL LLKeyframeMotionParam::sortFunc(ParameterizedMotion *new_motion, ParameterizedMotion *tested_motion)
54{
55 return (new_motion->second < tested_motion->second);
56}
57
58//-----------------------------------------------------------------------------
59// LLKeyframeMotionParam() 51// LLKeyframeMotionParam()
60// Class Constructor 52// Class Constructor
61//----------------------------------------------------------------------------- 53//-----------------------------------------------------------------------------
@@ -77,17 +69,18 @@ LLKeyframeMotionParam::LLKeyframeMotionParam( const LLUUID &id) : LLMotion(id)
77//----------------------------------------------------------------------------- 69//-----------------------------------------------------------------------------
78LLKeyframeMotionParam::~LLKeyframeMotionParam() 70LLKeyframeMotionParam::~LLKeyframeMotionParam()
79{ 71{
80 for (U32 i = 0; i < mParameterizedMotions.length(); i++) 72 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
73 iter != mParameterizedMotions.end(); ++iter)
81 { 74 {
82 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 75 motion_list_t& motionList = iter->second;
83 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) 76 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
84 { 77 {
85 delete paramMotion->first; 78 const ParameterizedMotion& paramMotion = *iter2;
79 delete paramMotion.first; // note - deletes the structure; ParameterizedMotion pair remains intact
86 } 80 }
87 delete motionList; 81 motionList.clear();
88 } 82 }
89 83 mParameterizedMotions.clear();
90 mParameterizedMotions.removeAll();
91} 84}
92 85
93//----------------------------------------------------------------------------- 86//-----------------------------------------------------------------------------
@@ -102,36 +95,39 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch
102 return STATUS_FAILURE; 95 return STATUS_FAILURE;
103 } 96 }
104 97
105 for (U32 i = 0; i < mParameterizedMotions.length(); i++) 98 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
99 iter != mParameterizedMotions.end(); ++iter)
106 { 100 {
107 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 101 motion_list_t& motionList = iter->second;
108 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) 102 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
109 { 103 {
110 paramMotion->first->onInitialize(character); 104 const ParameterizedMotion& paramMotion = *iter2;
111 105
112 if (paramMotion->first->getDuration() > mEaseInDuration) 106 paramMotion.first->onInitialize(character);
107
108 if (paramMotion.first->getDuration() > mEaseInDuration)
113 { 109 {
114 mEaseInDuration = paramMotion->first->getEaseInDuration(); 110 mEaseInDuration = paramMotion.first->getEaseInDuration();
115 } 111 }
116 112
117 if (paramMotion->first->getEaseOutDuration() > mEaseOutDuration) 113 if (paramMotion.first->getEaseOutDuration() > mEaseOutDuration)
118 { 114 {
119 mEaseOutDuration = paramMotion->first->getEaseOutDuration(); 115 mEaseOutDuration = paramMotion.first->getEaseOutDuration();
120 } 116 }
121 117
122 if (paramMotion->first->getDuration() > mDuration) 118 if (paramMotion.first->getDuration() > mDuration)
123 { 119 {
124 mDuration = paramMotion->first->getDuration(); 120 mDuration = paramMotion.first->getDuration();
125 } 121 }
126 122
127 if (paramMotion->first->getPriority() > mPriority) 123 if (paramMotion.first->getPriority() > mPriority)
128 { 124 {
129 mPriority = paramMotion->first->getPriority(); 125 mPriority = paramMotion.first->getPriority();
130 } 126 }
131 127
132 LLPose *pose = paramMotion->first->getPose(); 128 LLPose *pose = paramMotion.first->getPose();
133 129
134 mPoseBlender.addMotion(paramMotion->first); 130 mPoseBlender.addMotion(paramMotion.first);
135 for (LLJointState *jsp = pose->getFirstJointState(); jsp; jsp = pose->getNextJointState()) 131 for (LLJointState *jsp = pose->getFirstJointState(); jsp; jsp = pose->getNextJointState())
136 { 132 {
137 LLPose *blendedPose = mPoseBlender.getBlendedPose(); 133 LLPose *blendedPose = mPoseBlender.getBlendedPose();
@@ -148,12 +144,14 @@ LLMotion::LLMotionInitStatus LLKeyframeMotionParam::onInitialize(LLCharacter *ch
148//----------------------------------------------------------------------------- 144//-----------------------------------------------------------------------------
149BOOL LLKeyframeMotionParam::onActivate() 145BOOL LLKeyframeMotionParam::onActivate()
150{ 146{
151 for (U32 i = 0; i < mParameterizedMotions.length(); i++) 147 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
148 iter != mParameterizedMotions.end(); ++iter)
152 { 149 {
153 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 150 motion_list_t& motionList = iter->second;
154 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) 151 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
155 { 152 {
156 paramMotion->first->activate(); 153 const ParameterizedMotion& paramMotion = *iter2;
154 paramMotion.first->activate();
157 } 155 }
158 } 156 }
159 return TRUE; 157 return TRUE;
@@ -165,46 +163,48 @@ BOOL LLKeyframeMotionParam::onActivate()
165//----------------------------------------------------------------------------- 163//-----------------------------------------------------------------------------
166BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask) 164BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)
167{ 165{
168 F32 weightFactor = 1.f / (F32)mParameterizedMotions.length(); 166 F32 weightFactor = 1.f / (F32)mParameterizedMotions.size();
169 U32 i;
170 167
171 // zero out all pose weights 168 // zero out all pose weights
172 for (i = 0; i < mParameterizedMotions.length(); i++) 169 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
170 iter != mParameterizedMotions.end(); ++iter)
173 { 171 {
174 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 172 motion_list_t& motionList = iter->second;
175 173 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
176 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData())
177 { 174 {
178// llinfos << "Weight for pose " << paramMotion->first->getName() << " is " << paramMotion->first->getPose()->getWeight() << llendl; 175 const ParameterizedMotion& paramMotion = *iter2;
179 paramMotion->first->getPose()->setWeight(0.f); 176// llinfos << "Weight for pose " << paramMotion.first->getName() << " is " << paramMotion.first->getPose()->getWeight() << llendl;
177 paramMotion.first->getPose()->setWeight(0.f);
180 } 178 }
181 } 179 }
182 180
183 181
184 for (i = 0; i < mParameterizedMotions.length(); i++) 182 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
183 iter != mParameterizedMotions.end(); ++iter)
185 { 184 {
186 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 185 const std::string& paramName = iter->first;
187 std::string *paramName = mParameterizedMotions.getIndexAt(i); 186 F32* paramValue = (F32 *)mCharacter->getAnimationData(paramName);
188 F32* paramValue = (F32 *)mCharacter->getAnimationData(*paramName);
189 ParameterizedMotion* firstMotion = NULL;
190 ParameterizedMotion* secondMotion = NULL;
191
192 if (NULL == paramValue) // unexpected, but... 187 if (NULL == paramValue) // unexpected, but...
193 { 188 {
194 llwarns << "paramValue == NULL" << llendl; 189 llwarns << "paramValue == NULL" << llendl;
195 continue; 190 continue;
196 } 191 }
197 192
198 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) 193 const ParameterizedMotion* firstMotion = NULL;
194 const ParameterizedMotion* secondMotion = NULL;
195
196 motion_list_t& motionList = iter->second;
197 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
199 { 198 {
200 paramMotion->first->onUpdate(time, joint_mask); 199 const ParameterizedMotion& paramMotion = *iter2;
200 paramMotion.first->onUpdate(time, joint_mask);
201 201
202 F32 distToParam = paramMotion->second - *paramValue; 202 F32 distToParam = paramMotion.second - *paramValue;
203 203
204 if ( distToParam <= 0.f) 204 if ( distToParam <= 0.f)
205 { 205 {
206 // keep track of the motion closest to the parameter value 206 // keep track of the motion closest to the parameter value
207 firstMotion = paramMotion; 207 firstMotion = &paramMotion;
208 } 208 }
209 else 209 else
210 { 210 {
@@ -212,13 +212,13 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)
212 // so store the first motion we find as the second one we want to blend... 212 // so store the first motion we find as the second one we want to blend...
213 if (firstMotion && !secondMotion ) 213 if (firstMotion && !secondMotion )
214 { 214 {
215 secondMotion = paramMotion; 215 secondMotion = &paramMotion;
216 } 216 }
217 //...or, if we've seen no other motion so far, make sure we blend to this only 217 //...or, if we've seen no other motion so far, make sure we blend to this only
218 else if (!firstMotion) 218 else if (!firstMotion)
219 { 219 {
220 firstMotion = paramMotion; 220 firstMotion = &paramMotion;
221 secondMotion = paramMotion; 221 secondMotion = &paramMotion;
222 } 222 }
223 } 223 }
224 } 224 }
@@ -283,12 +283,14 @@ BOOL LLKeyframeMotionParam::onUpdate(F32 time, U8* joint_mask)
283//----------------------------------------------------------------------------- 283//-----------------------------------------------------------------------------
284void LLKeyframeMotionParam::onDeactivate() 284void LLKeyframeMotionParam::onDeactivate()
285{ 285{
286 for (U32 i = 0; i < mParameterizedMotions.length(); i++) 286 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
287 iter != mParameterizedMotions.end(); ++iter)
287 { 288 {
288 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 289 motion_list_t& motionList = iter->second;
289 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) 290 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
290 { 291 {
291 paramMotion->first->onDeactivate(); 292 const ParameterizedMotion& paramMotion = *iter2;
293 paramMotion.first->onDeactivate();
292 } 294 }
293 } 295 }
294} 296}
@@ -307,23 +309,8 @@ BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char
307 309
308 newMotion->setName(name); 310 newMotion->setName(name);
309 311
310 // make sure a list of motions exists for this parameter
311 LLLinkedList< ParameterizedMotion > *motionList;
312 if (mParameterizedMotions.getValue(param))
313 {
314 motionList = *mParameterizedMotions.getValue(param);
315 }
316 else
317 {
318 motionList = new LLLinkedList< ParameterizedMotion >;
319 motionList->setInsertBefore(sortFunc);
320 mParameterizedMotions.addToHead(param, motionList);
321 }
322
323 // now add motion to this list 312 // now add motion to this list
324 ParameterizedMotion *parameterizedMotion = new ParameterizedMotion(newMotion, value); 313 mParameterizedMotions[param].insert(ParameterizedMotion(newMotion, value));
325
326 motionList->addDataSorted(parameterizedMotion);
327 314
328 return TRUE; 315 return TRUE;
329} 316}
@@ -334,14 +321,16 @@ BOOL LLKeyframeMotionParam::addKeyframeMotion(char *name, const LLUUID &id, char
334//----------------------------------------------------------------------------- 321//-----------------------------------------------------------------------------
335void LLKeyframeMotionParam::setDefaultKeyframeMotion(char *name) 322void LLKeyframeMotionParam::setDefaultKeyframeMotion(char *name)
336{ 323{
337 for (U32 i = 0; i < mParameterizedMotions.length(); i++) 324 for (motion_map_t::iterator iter = mParameterizedMotions.begin();
325 iter != mParameterizedMotions.end(); ++iter)
338 { 326 {
339 LLLinkedList< ParameterizedMotion > *motionList = *mParameterizedMotions.getValueAt(i); 327 motion_list_t& motionList = iter->second;
340 for (ParameterizedMotion* paramMotion = motionList->getFirstData(); paramMotion; paramMotion = motionList->getNextData()) 328 for (motion_list_t::iterator iter2 = motionList.begin(); iter2 != motionList.end(); ++iter2)
341 { 329 {
342 if (paramMotion->first->getName() == name) 330 const ParameterizedMotion& paramMotion = *iter2;
331 if (paramMotion.first->getName() == name)
343 { 332 {
344 mDefaultKeyframeMotion = paramMotion->first; 333 mDefaultKeyframeMotion = paramMotion.first;
345 } 334 }
346 } 335 }
347 } 336 }
diff --git a/linden/indra/llcharacter/llkeyframemotionparam.h b/linden/indra/llcharacter/llkeyframemotionparam.h
index a5bc2cb..f509e6a 100644
--- a/linden/indra/llcharacter/llkeyframemotionparam.h
+++ b/linden/indra/llcharacter/llkeyframemotionparam.h
@@ -143,8 +143,20 @@ protected:
143 // Member Data 143 // Member Data
144 //------------------------------------------------------------------------- 144 //-------------------------------------------------------------------------
145 145
146 typedef LLLinkedList < ParameterizedMotion > motion_list_t; 146 struct compare_motions
147 LLAssocList <std::string, motion_list_t* > mParameterizedMotions; 147 {
148 bool operator() (const ParameterizedMotion& a, const ParameterizedMotion& b) const
149 {
150 if (a.second != b.second)
151 return (a.second < b.second);
152 else
153 return a.first < b.first;
154 }
155 };
156
157 typedef std::set < ParameterizedMotion, compare_motions > motion_list_t;
158 typedef std::map <std::string, motion_list_t > motion_map_t;
159 motion_map_t mParameterizedMotions;
148 LLMotion* mDefaultKeyframeMotion; 160 LLMotion* mDefaultKeyframeMotion;
149 LLCharacter* mCharacter; 161 LLCharacter* mCharacter;
150 LLPoseBlender mPoseBlender; 162 LLPoseBlender mPoseBlender;
diff --git a/linden/indra/llcharacter/llmotioncontroller.cpp b/linden/indra/llcharacter/llmotioncontroller.cpp
index d1a2a53..028cf22 100644
--- a/linden/indra/llcharacter/llmotioncontroller.cpp
+++ b/linden/indra/llcharacter/llmotioncontroller.cpp
@@ -746,7 +746,7 @@ void LLMotionController::updateMotion()
746 746
747 // is calculating a new keyframe pose, make sure the last one gets applied 747 // is calculating a new keyframe pose, make sure the last one gets applied
748 mPoseBlender.interpolate(1.f); 748 mPoseBlender.interpolate(1.f);
749 mPoseBlender.clearBlenders(); 749 clearBlenders();
750 750
751 mTimeStepCount = quantum_count; 751 mTimeStepCount = quantum_count;
752 mLastTime = mTime; 752 mLastTime = mTime;
@@ -824,6 +824,13 @@ void LLMotionController::updateMotion()
824//----------------------------------------------------------------------------- 824//-----------------------------------------------------------------------------
825BOOL LLMotionController::activateMotionInstance(LLMotion *motion, F32 time) 825BOOL LLMotionController::activateMotionInstance(LLMotion *motion, F32 time)
826{ 826{
827 // It's not clear why the getWeight() line seems to be crashing this, but
828 // hopefully this fixes it.
829 if (motion == NULL || motion->getPose() == NULL)
830 {
831 return FALSE;
832 }
833
827 if (mLoadingMotions.find(motion) != mLoadingMotions.end()) 834 if (mLoadingMotions.find(motion) != mLoadingMotions.end())
828 { 835 {
829 // we want to start this motion, but we can't yet, so flag it as started 836 // we want to start this motion, but we can't yet, so flag it as started
diff --git a/linden/indra/llcharacter/llmotioncontroller.h b/linden/indra/llcharacter/llmotioncontroller.h
index e66edcb..48e184d 100644
--- a/linden/indra/llcharacter/llmotioncontroller.h
+++ b/linden/indra/llcharacter/llmotioncontroller.h
@@ -157,6 +157,8 @@ public:
157 // deactivates terminated motions` 157 // deactivates terminated motions`
158 void updateMotion(); 158 void updateMotion();
159 159
160 void clearBlenders() { mPoseBlender.clearBlenders(); }
161
160 // flush motions 162 // flush motions
161 // releases all motion instances 163 // releases all motion instances
162 void flushAllMotions(); 164 void flushAllMotions();
diff --git a/linden/indra/llcharacter/llpose.cpp b/linden/indra/llcharacter/llpose.cpp
index 3a6a221..f496b7b 100644
--- a/linden/indra/llcharacter/llpose.cpp
+++ b/linden/indra/llcharacter/llpose.cpp
@@ -379,15 +379,20 @@ void LLJointStateBlender::blendJointStates(BOOL apply_now)
379 } 379 }
380 } 380 }
381 381
382 // apply blended transforms 382 if (!added_scale.isFinite())
383 target_joint->setPosition(blended_pos); 383 {
384 target_joint->setScale(blended_scale); 384 added_scale.clearVec();
385 target_joint->setRotation(blended_rot); 385 }
386 386
387 // apply additive transforms 387 if (!blended_scale.isFinite())
388 target_joint->setPosition(target_joint->getPosition() + added_pos); 388 {
389 target_joint->setScale(target_joint->getScale() + added_scale); 389 blended_scale.setVec(1,1,1);
390 target_joint->setRotation(added_rot * target_joint->getRotation()); 390 }
391
392 // apply transforms
393 target_joint->setPosition(blended_pos + added_pos);
394 target_joint->setScale(blended_scale + added_scale);
395 target_joint->setRotation(added_rot * blended_rot);
391 396
392 if (apply_now) 397 if (apply_now)
393 { 398 {
diff --git a/linden/indra/llcharacter/llpose.h b/linden/indra/llcharacter/llpose.h
index f67a26b..075a456 100644
--- a/linden/indra/llcharacter/llpose.h
+++ b/linden/indra/llcharacter/llpose.h
@@ -37,10 +37,8 @@
37//----------------------------------------------------------------------------- 37//-----------------------------------------------------------------------------
38#include <string> 38#include <string>
39 39
40#include "linked_lists.h"
41#include "llmap.h" 40#include "llmap.h"
42#include "lljointstate.h" 41#include "lljointstate.h"
43#include "llassoclist.h"
44#include "lljoint.h" 42#include "lljoint.h"
45#include <map> 43#include <map>
46 44
diff --git a/linden/indra/llcharacter/llstatemachine.h b/linden/indra/llcharacter/llstatemachine.h
index f46e4bf..12a71b7 100644
--- a/linden/indra/llcharacter/llstatemachine.h
+++ b/linden/indra/llcharacter/llstatemachine.h
@@ -34,7 +34,6 @@
34 34
35#include <string> 35#include <string>
36 36
37#include "llassoclist.h"
38#include "llerror.h" 37#include "llerror.h"
39#include <map> 38#include <map>
40 39