diff options
author | Jacek Antonelli | 2008-08-15 23:44:50 -0500 |
---|---|---|
committer | Jacek Antonelli | 2008-08-15 23:44:50 -0500 |
commit | 89fe5dab825a62a0e3fd8d248cbc91c65eb2a426 (patch) | |
tree | bcff14b7888d04a2fec799c59369f6095224bd08 /linden/indra/llcharacter | |
parent | Second Life viewer sources 1.13.3.2 (diff) | |
download | meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.zip meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.gz meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.bz2 meta-impy-89fe5dab825a62a0e3fd8d248cbc91c65eb2a426.tar.xz |
Second Life viewer sources 1.14.0.0
Diffstat (limited to 'linden/indra/llcharacter')
-rw-r--r-- | linden/indra/llcharacter/llbvhloader.cpp | 38 | ||||
-rw-r--r-- | linden/indra/llcharacter/llcharacter.cpp | 28 | ||||
-rw-r--r-- | linden/indra/llcharacter/llcharacter.h | 5 | ||||
-rw-r--r-- | linden/indra/llcharacter/llcharacter_vc8.vcproj | 416 | ||||
-rw-r--r-- | linden/indra/llcharacter/lljoint.cpp | 87 | ||||
-rw-r--r-- | linden/indra/llcharacter/lljoint.h | 3 | ||||
-rw-r--r-- | linden/indra/llcharacter/llkeyframemotion.cpp | 34 | ||||
-rw-r--r-- | linden/indra/llcharacter/llkeyframemotionparam.cpp | 8 |
8 files changed, 533 insertions, 86 deletions
diff --git a/linden/indra/llcharacter/llbvhloader.cpp b/linden/indra/llcharacter/llbvhloader.cpp index 6aa430f..48b5e7c 100644 --- a/linden/indra/llcharacter/llbvhloader.cpp +++ b/linden/indra/llcharacter/llbvhloader.cpp | |||
@@ -175,8 +175,8 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
175 | //-------------------------------------------------------------------- | 175 | //-------------------------------------------------------------------- |
176 | char path[LL_MAX_PATH]; /* Flawfinder: ignore */ | 176 | char path[LL_MAX_PATH]; /* Flawfinder: ignore */ |
177 | 177 | ||
178 | snprintf( path, sizeof(path), "%s", | 178 | snprintf( path, sizeof(path), "%s",/* Flawfinder: ignore */ |
179 | gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName).c_str()); /* Flawfinder: ignore */ | 179 | gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,fileName).c_str()); |
180 | 180 | ||
181 | 181 | ||
182 | apr_file_t *fp = ll_apr_file_open(path, LL_APR_R); | 182 | apr_file_t *fp = ll_apr_file_open(path, LL_APR_R); |
@@ -209,7 +209,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
209 | // check the 1st token on the line to determine if it's empty or a comment | 209 | // check the 1st token on the line to determine if it's empty or a comment |
210 | //---------------------------------------------------------------- | 210 | //---------------------------------------------------------------- |
211 | char token[128]; /* Flawfinder: ignore */ | 211 | char token[128]; /* Flawfinder: ignore */ |
212 | if ( sscanf(mLine, " %127s", token) != 1 ) | 212 | if ( sscanf(mLine, " %127s", token) != 1 ) /* Flawfinder: ignore */ |
213 | continue; | 213 | continue; |
214 | 214 | ||
215 | if (token[0] == '#') | 215 | if (token[0] == '#') |
@@ -244,7 +244,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
244 | if (loadingGlobals && LLString::compareInsensitive(token, "emote")==0) | 244 | if (loadingGlobals && LLString::compareInsensitive(token, "emote")==0) |
245 | { | 245 | { |
246 | char emote_str[1024]; /* Flawfinder: ignore */ | 246 | char emote_str[1024]; /* Flawfinder: ignore */ |
247 | if ( sscanf(mLine, " %*s = %1023s", emote_str) != 1 ) | 247 | if ( sscanf(mLine, " %*s = %1023s", emote_str) != 1 ) /* Flawfinder: ignore */ |
248 | return ST_NO_XLT_EMOTE; | 248 | return ST_NO_XLT_EMOTE; |
249 | 249 | ||
250 | mEmoteName.assign( emote_str ); | 250 | mEmoteName.assign( emote_str ); |
@@ -282,7 +282,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
282 | { | 282 | { |
283 | mLoop = TRUE; | 283 | mLoop = TRUE; |
284 | } | 284 | } |
285 | else if ( sscanf(mLine, " %*s = %127s", trueFalse) == 1 ) | 285 | else if ( sscanf(mLine, " %*s = %127s", trueFalse) == 1 ) /* Flawfinder: ignore */ |
286 | { | 286 | { |
287 | mLoop = (LLString::compareInsensitive(trueFalse, "true")==0); | 287 | mLoop = (LLString::compareInsensitive(trueFalse, "true")==0); |
288 | } | 288 | } |
@@ -304,7 +304,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
304 | { | 304 | { |
305 | F32 duration; | 305 | F32 duration; |
306 | char type[128]; /* Flawfinder: ignore */ | 306 | char type[128]; /* Flawfinder: ignore */ |
307 | if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) | 307 | if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) /* Flawfinder: ignore */ |
308 | return ST_NO_XLT_EASEIN; | 308 | return ST_NO_XLT_EASEIN; |
309 | 309 | ||
310 | mEaseIn = duration; | 310 | mEaseIn = duration; |
@@ -317,8 +317,8 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
317 | if (loadingGlobals && LLString::compareInsensitive(token, "easeout")==0) | 317 | if (loadingGlobals && LLString::compareInsensitive(token, "easeout")==0) |
318 | { | 318 | { |
319 | F32 duration; | 319 | F32 duration; |
320 | char type[128]; | 320 | char type[128]; /* Flawfinder: ignore */ |
321 | if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) | 321 | if ( sscanf(mLine, " %*s = %f %127s", &duration, type) != 2 ) /* Flawfinder: ignore */ |
322 | return ST_NO_XLT_EASEOUT; | 322 | return ST_NO_XLT_EASEOUT; |
323 | 323 | ||
324 | mEaseOut = duration; | 324 | mEaseOut = duration; |
@@ -343,7 +343,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
343 | Constraint constraint; | 343 | Constraint constraint; |
344 | 344 | ||
345 | // try reading optional target direction | 345 | // try reading optional target direction |
346 | if(sscanf( | 346 | if(sscanf( /* Flawfinder: ignore */ |
347 | mLine, | 347 | mLine, |
348 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f", | 348 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f", |
349 | &constraint.mChainLength, | 349 | &constraint.mChainLength, |
@@ -363,7 +363,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
363 | &constraint.mTargetDir.mV[VY], | 363 | &constraint.mTargetDir.mV[VY], |
364 | &constraint.mTargetDir.mV[VZ]) != 16) | 364 | &constraint.mTargetDir.mV[VZ]) != 16) |
365 | { | 365 | { |
366 | if(sscanf( | 366 | if(sscanf( /* Flawfinder: ignore */ |
367 | mLine, | 367 | mLine, |
368 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f", | 368 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f", |
369 | &constraint.mChainLength, | 369 | &constraint.mChainLength, |
@@ -403,7 +403,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
403 | Constraint constraint; | 403 | Constraint constraint; |
404 | 404 | ||
405 | // try reading optional target direction | 405 | // try reading optional target direction |
406 | if(sscanf( | 406 | if(sscanf( /* Flawfinder: ignore */ |
407 | mLine, | 407 | mLine, |
408 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f", | 408 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f %f %f %f", |
409 | &constraint.mChainLength, | 409 | &constraint.mChainLength, |
@@ -423,7 +423,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
423 | &constraint.mTargetDir.mV[VY], | 423 | &constraint.mTargetDir.mV[VY], |
424 | &constraint.mTargetDir.mV[VZ]) != 16) | 424 | &constraint.mTargetDir.mV[VZ]) != 16) |
425 | { | 425 | { |
426 | if(sscanf( | 426 | if(sscanf( /* Flawfinder: ignore */ |
427 | mLine, | 427 | mLine, |
428 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f", | 428 | " %*s = %d %f %f %f %f %15s %f %f %f %15s %f %f %f", |
429 | &constraint.mChainLength, | 429 | &constraint.mChainLength, |
@@ -471,7 +471,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
471 | if ( LLString::compareInsensitive(token, "ignore")==0 ) | 471 | if ( LLString::compareInsensitive(token, "ignore")==0 ) |
472 | { | 472 | { |
473 | char trueFalse[128]; /* Flawfinder: ignore */ | 473 | char trueFalse[128]; /* Flawfinder: ignore */ |
474 | if ( sscanf(mLine, " %*s = %127s", trueFalse) != 1 ) | 474 | if ( sscanf(mLine, " %*s = %127s", trueFalse) != 1 ) /* Flawfinder: ignore */ |
475 | return ST_NO_XLT_IGNORE; | 475 | return ST_NO_XLT_IGNORE; |
476 | 476 | ||
477 | trans->mIgnore = (LLString::compareInsensitive(trueFalse, "true")==0); | 477 | trans->mIgnore = (LLString::compareInsensitive(trueFalse, "true")==0); |
@@ -489,7 +489,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
489 | { | 489 | { |
490 | trans->mRelativePosition.setVec( x, y, z ); | 490 | trans->mRelativePosition.setVec( x, y, z ); |
491 | } | 491 | } |
492 | else if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) | 492 | else if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) /* Flawfinder: ignore */ |
493 | { | 493 | { |
494 | if ( LLString::compareInsensitive(relpos, "firstkey")==0 ) | 494 | if ( LLString::compareInsensitive(relpos, "firstkey")==0 ) |
495 | { | 495 | { |
@@ -515,7 +515,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
515 | { | 515 | { |
516 | //F32 x, y, z; | 516 | //F32 x, y, z; |
517 | char relpos[128]; /* Flawfinder: ignore */ | 517 | char relpos[128]; /* Flawfinder: ignore */ |
518 | if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) | 518 | if ( sscanf(mLine, " %*s = %127s", relpos) == 1 ) /* Flawfinder: ignore */ |
519 | { | 519 | { |
520 | if ( LLString::compareInsensitive(relpos, "firstkey")==0 ) | 520 | if ( LLString::compareInsensitive(relpos, "firstkey")==0 ) |
521 | { | 521 | { |
@@ -540,7 +540,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
540 | if ( LLString::compareInsensitive(token, "outname")==0 ) | 540 | if ( LLString::compareInsensitive(token, "outname")==0 ) |
541 | { | 541 | { |
542 | char outName[128]; /* Flawfinder: ignore */ | 542 | char outName[128]; /* Flawfinder: ignore */ |
543 | if ( sscanf(mLine, " %*s = %127s", outName) != 1 ) | 543 | if ( sscanf(mLine, " %*s = %127s", outName) != 1 ) /* Flawfinder: ignore */ |
544 | return ST_NO_XLT_OUTNAME; | 544 | return ST_NO_XLT_OUTNAME; |
545 | 545 | ||
546 | trans->mOutName = outName; | 546 | trans->mOutName = outName; |
@@ -585,7 +585,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
585 | if ( LLString::compareInsensitive(token, "mergeparent")==0 ) | 585 | if ( LLString::compareInsensitive(token, "mergeparent")==0 ) |
586 | { | 586 | { |
587 | char mergeParentName[128]; /* Flawfinder: ignore */ | 587 | char mergeParentName[128]; /* Flawfinder: ignore */ |
588 | if ( sscanf(mLine, " %*s = %127s", mergeParentName) != 1 ) | 588 | if ( sscanf(mLine, " %*s = %127s", mergeParentName) != 1 ) /* Flawfinder: ignore */ |
589 | return ST_NO_XLT_MERGEPARENT; | 589 | return ST_NO_XLT_MERGEPARENT; |
590 | 590 | ||
591 | trans->mMergeParentName = mergeParentName; | 591 | trans->mMergeParentName = mergeParentName; |
@@ -598,7 +598,7 @@ LLBVHLoader::Status LLBVHLoader::loadTranslationTable(const char *fileName) | |||
598 | if ( LLString::compareInsensitive(token, "mergechild")==0 ) | 598 | if ( LLString::compareInsensitive(token, "mergechild")==0 ) |
599 | { | 599 | { |
600 | char mergeChildName[128]; /* Flawfinder: ignore */ | 600 | char mergeChildName[128]; /* Flawfinder: ignore */ |
601 | if ( sscanf(mLine, " %*s = %127s", mergeChildName) != 1 ) | 601 | if ( sscanf(mLine, " %*s = %127s", mergeChildName) != 1 ) /* Flawfinder: ignore */ |
602 | return ST_NO_XLT_MERGECHILD; | 602 | return ST_NO_XLT_MERGECHILD; |
603 | 603 | ||
604 | trans->mMergeChildName = mergeChildName; | 604 | trans->mMergeChildName = mergeChildName; |
@@ -724,7 +724,7 @@ LLBVHLoader::Status LLBVHLoader::loadBVHFile(const char *buffer, char* error_tex | |||
724 | // get the joint name | 724 | // get the joint name |
725 | //---------------------------------------------------------------- | 725 | //---------------------------------------------------------------- |
726 | char jointName[80]; /* Flawfinder: ignore */ | 726 | char jointName[80]; /* Flawfinder: ignore */ |
727 | if ( sscanf(line.c_str(), "%*s %79s", jointName) != 1 ) | 727 | if ( sscanf(line.c_str(), "%*s %79s", jointName) != 1 ) /* Flawfinder: ignore */ |
728 | { | 728 | { |
729 | strncpy(error_text, line.c_str(), 127); /* Flawfinder: ignore */ | 729 | strncpy(error_text, line.c_str(), 127); /* Flawfinder: ignore */ |
730 | return ST_NO_NAME; | 730 | return ST_NO_NAME; |
diff --git a/linden/indra/llcharacter/llcharacter.cpp b/linden/indra/llcharacter/llcharacter.cpp index 45f692c..6e9327f 100644 --- a/linden/indra/llcharacter/llcharacter.cpp +++ b/linden/indra/llcharacter/llcharacter.cpp | |||
@@ -38,13 +38,7 @@ | |||
38 | 38 | ||
39 | LLStringTable LLCharacter::sVisualParamNames(1024); | 39 | LLStringTable LLCharacter::sVisualParamNames(1024); |
40 | 40 | ||
41 | // helper functions | 41 | std::vector< LLCharacter* > LLCharacter::sInstances; |
42 | BOOL larger_screen_area( LLCharacter* data_new, LLCharacter* data_tested ) | ||
43 | { | ||
44 | return data_new->getPixelArea() > data_tested->getPixelArea(); | ||
45 | } | ||
46 | |||
47 | LLLinkedList< LLCharacter > LLCharacter::sInstances( larger_screen_area ); | ||
48 | 42 | ||
49 | 43 | ||
50 | //----------------------------------------------------------------------------- | 44 | //----------------------------------------------------------------------------- |
@@ -59,7 +53,7 @@ LLCharacter::LLCharacter() | |||
59 | mSkeletonSerialNum( 0 ) | 53 | mSkeletonSerialNum( 0 ) |
60 | { | 54 | { |
61 | mMotionController.setCharacter( this ); | 55 | mMotionController.setCharacter( this ); |
62 | sInstances.addData(this); | 56 | sInstances.push_back(this); |
63 | mPauseRequest = new LLPauseRequestHandle(); | 57 | mPauseRequest = new LLPauseRequestHandle(); |
64 | } | 58 | } |
65 | 59 | ||
@@ -76,7 +70,11 @@ LLCharacter::~LLCharacter() | |||
76 | { | 70 | { |
77 | delete param; | 71 | delete param; |
78 | } | 72 | } |
79 | sInstances.removeData(this); | 73 | std::vector<LLCharacter*>::iterator iter = std::find(sInstances.begin(), sInstances.end(), this); |
74 | if (iter != sInstances.end()) | ||
75 | { | ||
76 | sInstances.erase(iter); | ||
77 | } | ||
80 | } | 78 | } |
81 | 79 | ||
82 | 80 | ||
@@ -85,7 +83,7 @@ LLCharacter::~LLCharacter() | |||
85 | //----------------------------------------------------------------------------- | 83 | //----------------------------------------------------------------------------- |
86 | LLJoint *LLCharacter::getJoint( const std::string &name ) | 84 | LLJoint *LLCharacter::getJoint( const std::string &name ) |
87 | { | 85 | { |
88 | LLJoint *joint = NULL; | 86 | LLJoint* joint = NULL; |
89 | 87 | ||
90 | LLJoint *root = getRootJoint(); | 88 | LLJoint *root = getRootJoint(); |
91 | if (root) | 89 | if (root) |
@@ -202,7 +200,7 @@ void LLCharacter::flushAllMotions() | |||
202 | //----------------------------------------------------------------------------- | 200 | //----------------------------------------------------------------------------- |
203 | // dumpCharacter() | 201 | // dumpCharacter() |
204 | //----------------------------------------------------------------------------- | 202 | //----------------------------------------------------------------------------- |
205 | void LLCharacter::dumpCharacter( LLJoint *joint ) | 203 | void LLCharacter::dumpCharacter( LLJoint* joint ) |
206 | { | 204 | { |
207 | // handle top level entry into recursion | 205 | // handle top level entry into recursion |
208 | if (joint == NULL) | 206 | if (joint == NULL) |
@@ -217,11 +215,11 @@ void LLCharacter::dumpCharacter( LLJoint *joint ) | |||
217 | llinfos << "DEBUG: " << joint->getName() << " (" << (joint->getParent()?joint->getParent()->getName():std::string("ROOT")) << ")" << llendl; | 215 | llinfos << "DEBUG: " << joint->getName() << " (" << (joint->getParent()?joint->getParent()->getName():std::string("ROOT")) << ")" << llendl; |
218 | 216 | ||
219 | // recurse | 217 | // recurse |
220 | for ( LLJoint *j = joint->mChildren.getFirstData(); | 218 | for (LLJoint::child_list_t::iterator iter = joint->mChildren.begin(); |
221 | j != NULL; | 219 | iter != joint->mChildren.end(); ++iter) |
222 | j = joint->mChildren.getNextData() ) | ||
223 | { | 220 | { |
224 | dumpCharacter(j); | 221 | LLJoint* child_joint = *iter; |
222 | dumpCharacter(child_joint); | ||
225 | } | 223 | } |
226 | } | 224 | } |
227 | 225 | ||
diff --git a/linden/indra/llcharacter/llcharacter.h b/linden/indra/llcharacter/llcharacter.h index bfe3ffa..6f4fe17 100644 --- a/linden/indra/llcharacter/llcharacter.h +++ b/linden/indra/llcharacter/llcharacter.h | |||
@@ -40,6 +40,7 @@ | |||
40 | #include "linked_lists.h" | 40 | #include "linked_lists.h" |
41 | #include "string_table.h" | 41 | #include "string_table.h" |
42 | #include "llmemory.h" | 42 | #include "llmemory.h" |
43 | #include "llthread.h" | ||
43 | 44 | ||
44 | class LLPolyMesh; | 45 | class LLPolyMesh; |
45 | 46 | ||
@@ -109,7 +110,7 @@ public: | |||
109 | virtual F32 getTimeDilation() = 0; | 110 | virtual F32 getTimeDilation() = 0; |
110 | 111 | ||
111 | // gets current pixel area of this character | 112 | // gets current pixel area of this character |
112 | virtual F32 getPixelArea() = 0; | 113 | virtual F32 getPixelArea() const = 0; |
113 | 114 | ||
114 | // gets the head mesh of the character | 115 | // gets the head mesh of the character |
115 | virtual LLPolyMesh* getHeadMesh() = 0; | 116 | virtual LLPolyMesh* getHeadMesh() = 0; |
@@ -242,7 +243,7 @@ public: | |||
242 | U32 getSkeletonSerialNum() const { return mSkeletonSerialNum; } | 243 | U32 getSkeletonSerialNum() const { return mSkeletonSerialNum; } |
243 | void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; } | 244 | void setSkeletonSerialNum( U32 num ) { mSkeletonSerialNum = num; } |
244 | 245 | ||
245 | static LLLinkedList< LLCharacter > sInstances; | 246 | static std::vector< LLCharacter* > sInstances; |
246 | 247 | ||
247 | protected: | 248 | protected: |
248 | LLMotionController mMotionController; | 249 | LLMotionController mMotionController; |
diff --git a/linden/indra/llcharacter/llcharacter_vc8.vcproj b/linden/indra/llcharacter/llcharacter_vc8.vcproj new file mode 100644 index 0000000..415b74f --- /dev/null +++ b/linden/indra/llcharacter/llcharacter_vc8.vcproj | |||
@@ -0,0 +1,416 @@ | |||
1 | <?xml version="1.0" encoding="Windows-1252"?> | ||
2 | <VisualStudioProject | ||
3 | ProjectType="Visual C++" | ||
4 | Version="8.00" | ||
5 | Name="llcharacter" | ||
6 | ProjectGUID="{5EA5DDF0-C7E1-4F49-BEF5-9246A4656B2E}" | ||
7 | Keyword="Win32Proj" | ||
8 | > | ||
9 | <Platforms> | ||
10 | <Platform | ||
11 | Name="Win32" | ||
12 | /> | ||
13 | </Platforms> | ||
14 | <ToolFiles> | ||
15 | </ToolFiles> | ||
16 | <Configurations> | ||
17 | <Configuration | ||
18 | Name="Debug|Win32" | ||
19 | OutputDirectory="../lib_$(ConfigurationName)/i686-win32" | ||
20 | IntermediateDirectory="Debug" | ||
21 | ConfigurationType="4" | ||
22 | InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" | ||
23 | CharacterSet="1" | ||
24 | > | ||
25 | <Tool | ||
26 | Name="VCPreBuildEventTool" | ||
27 | /> | ||
28 | <Tool | ||
29 | Name="VCCustomBuildTool" | ||
30 | /> | ||
31 | <Tool | ||
32 | Name="VCXMLDataGeneratorTool" | ||
33 | /> | ||
34 | <Tool | ||
35 | Name="VCWebServiceProxyGeneratorTool" | ||
36 | /> | ||
37 | <Tool | ||
38 | Name="VCMIDLTool" | ||
39 | /> | ||
40 | <Tool | ||
41 | Name="VCCLCompilerTool" | ||
42 | Optimization="0" | ||
43 | AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" | ||
44 | PreprocessorDefinitions="WIN32;_DEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_DEBUG" | ||
45 | MinimalRebuild="true" | ||
46 | BasicRuntimeChecks="3" | ||
47 | RuntimeLibrary="1" | ||
48 | StructMemberAlignment="4" | ||
49 | TreatWChar_tAsBuiltInType="false" | ||
50 | ForceConformanceInForLoopScope="true" | ||
51 | UsePrecompiledHeader="0" | ||
52 | WarningLevel="3" | ||
53 | WarnAsError="true" | ||
54 | Detect64BitPortabilityProblems="false" | ||
55 | DebugInformationFormat="4" | ||
56 | /> | ||
57 | <Tool | ||
58 | Name="VCManagedResourceCompilerTool" | ||
59 | /> | ||
60 | <Tool | ||
61 | Name="VCResourceCompilerTool" | ||
62 | /> | ||
63 | <Tool | ||
64 | Name="VCPreLinkEventTool" | ||
65 | /> | ||
66 | <Tool | ||
67 | Name="VCLibrarianTool" | ||
68 | OutputFile="$(OutDir)/llcharacter.lib" | ||
69 | /> | ||
70 | <Tool | ||
71 | Name="VCALinkTool" | ||
72 | /> | ||
73 | <Tool | ||
74 | Name="VCXDCMakeTool" | ||
75 | /> | ||
76 | <Tool | ||
77 | Name="VCBscMakeTool" | ||
78 | /> | ||
79 | <Tool | ||
80 | Name="VCFxCopTool" | ||
81 | /> | ||
82 | <Tool | ||
83 | Name="VCPostBuildEventTool" | ||
84 | /> | ||
85 | </Configuration> | ||
86 | <Configuration | ||
87 | Name="Release|Win32" | ||
88 | OutputDirectory="../lib_$(ConfigurationName)/i686-win32" | ||
89 | IntermediateDirectory="Release" | ||
90 | ConfigurationType="4" | ||
91 | InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" | ||
92 | CharacterSet="1" | ||
93 | > | ||
94 | <Tool | ||
95 | Name="VCPreBuildEventTool" | ||
96 | /> | ||
97 | <Tool | ||
98 | Name="VCCustomBuildTool" | ||
99 | /> | ||
100 | <Tool | ||
101 | Name="VCXMLDataGeneratorTool" | ||
102 | /> | ||
103 | <Tool | ||
104 | Name="VCWebServiceProxyGeneratorTool" | ||
105 | /> | ||
106 | <Tool | ||
107 | Name="VCMIDLTool" | ||
108 | /> | ||
109 | <Tool | ||
110 | Name="VCCLCompilerTool" | ||
111 | AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" | ||
112 | PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE" | ||
113 | RuntimeLibrary="0" | ||
114 | StructMemberAlignment="0" | ||
115 | TreatWChar_tAsBuiltInType="false" | ||
116 | ForceConformanceInForLoopScope="true" | ||
117 | UsePrecompiledHeader="0" | ||
118 | WarningLevel="3" | ||
119 | WarnAsError="true" | ||
120 | Detect64BitPortabilityProblems="false" | ||
121 | DebugInformationFormat="3" | ||
122 | /> | ||
123 | <Tool | ||
124 | Name="VCManagedResourceCompilerTool" | ||
125 | /> | ||
126 | <Tool | ||
127 | Name="VCResourceCompilerTool" | ||
128 | /> | ||
129 | <Tool | ||
130 | Name="VCPreLinkEventTool" | ||
131 | /> | ||
132 | <Tool | ||
133 | Name="VCLibrarianTool" | ||
134 | OutputFile="$(OutDir)/llcharacter.lib" | ||
135 | /> | ||
136 | <Tool | ||
137 | Name="VCALinkTool" | ||
138 | /> | ||
139 | <Tool | ||
140 | Name="VCXDCMakeTool" | ||
141 | /> | ||
142 | <Tool | ||
143 | Name="VCBscMakeTool" | ||
144 | /> | ||
145 | <Tool | ||
146 | Name="VCFxCopTool" | ||
147 | /> | ||
148 | <Tool | ||
149 | Name="VCPostBuildEventTool" | ||
150 | /> | ||
151 | </Configuration> | ||
152 | <Configuration | ||
153 | Name="ReleaseNoOpt|Win32" | ||
154 | OutputDirectory="../lib_$(ConfigurationName)/i686-win32" | ||
155 | IntermediateDirectory="$(ConfigurationName)" | ||
156 | ConfigurationType="4" | ||
157 | InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" | ||
158 | CharacterSet="1" | ||
159 | > | ||
160 | <Tool | ||
161 | Name="VCPreBuildEventTool" | ||
162 | /> | ||
163 | <Tool | ||
164 | Name="VCCustomBuildTool" | ||
165 | /> | ||
166 | <Tool | ||
167 | Name="VCXMLDataGeneratorTool" | ||
168 | /> | ||
169 | <Tool | ||
170 | Name="VCWebServiceProxyGeneratorTool" | ||
171 | /> | ||
172 | <Tool | ||
173 | Name="VCMIDLTool" | ||
174 | /> | ||
175 | <Tool | ||
176 | Name="VCCLCompilerTool" | ||
177 | Optimization="0" | ||
178 | AdditionalIncludeDirectories="..\llcommon;..\llmath;..\llvfs;..\llmessage;..\llxml;..\..\libraries\i686-win32\include;..\..\libraries\include\" | ||
179 | PreprocessorDefinitions="WIN32;NDEBUG;_LIB;LL_WINDOWS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_USE_32BIT_TIME_T;LL_RELEASE" | ||
180 | RuntimeLibrary="0" | ||
181 | StructMemberAlignment="0" | ||
182 | TreatWChar_tAsBuiltInType="false" | ||
183 | ForceConformanceInForLoopScope="true" | ||
184 | UsePrecompiledHeader="0" | ||
185 | WarningLevel="3" | ||
186 | WarnAsError="true" | ||
187 | Detect64BitPortabilityProblems="false" | ||
188 | DebugInformationFormat="3" | ||
189 | /> | ||
190 | <Tool | ||
191 | Name="VCManagedResourceCompilerTool" | ||
192 | /> | ||
193 | <Tool | ||
194 | Name="VCResourceCompilerTool" | ||
195 | /> | ||
196 | <Tool | ||
197 | Name="VCPreLinkEventTool" | ||
198 | /> | ||
199 | <Tool | ||
200 | Name="VCLibrarianTool" | ||
201 | OutputFile="$(OutDir)/llcharacter.lib" | ||
202 | /> | ||
203 | <Tool | ||
204 | Name="VCALinkTool" | ||
205 | /> | ||
206 | <Tool | ||
207 | Name="VCXDCMakeTool" | ||
208 | /> | ||
209 | <Tool | ||
210 | Name="VCBscMakeTool" | ||
211 | /> | ||
212 | <Tool | ||
213 | Name="VCFxCopTool" | ||
214 | /> | ||
215 | <Tool | ||
216 | Name="VCPostBuildEventTool" | ||
217 | /> | ||
218 | </Configuration> | ||
219 | </Configurations> | ||
220 | <References> | ||
221 | </References> | ||
222 | <Files> | ||
223 | <Filter | ||
224 | Name="Source Files" | ||
225 | Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx" | ||
226 | UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" | ||
227 | > | ||
228 | <File | ||
229 | RelativePath=".\llanimationstates.cpp" | ||
230 | > | ||
231 | </File> | ||
232 | <File | ||
233 | RelativePath=".\llbvhloader.cpp" | ||
234 | > | ||
235 | </File> | ||
236 | <File | ||
237 | RelativePath=".\llcharacter.cpp" | ||
238 | > | ||
239 | </File> | ||
240 | <File | ||
241 | RelativePath=".\lleditingmotion.cpp" | ||
242 | > | ||
243 | </File> | ||
244 | <File | ||
245 | RelativePath=".\llgesture.cpp" | ||
246 | > | ||
247 | </File> | ||
248 | <File | ||
249 | RelativePath=".\llhandmotion.cpp" | ||
250 | > | ||
251 | </File> | ||
252 | <File | ||
253 | RelativePath=".\llheadrotmotion.cpp" | ||
254 | > | ||
255 | </File> | ||
256 | <File | ||
257 | RelativePath=".\lljoint.cpp" | ||
258 | > | ||
259 | </File> | ||
260 | <File | ||
261 | RelativePath=".\lljointsolverrp3.cpp" | ||
262 | > | ||
263 | </File> | ||
264 | <File | ||
265 | RelativePath=".\llkeyframefallmotion.cpp" | ||
266 | > | ||
267 | </File> | ||
268 | <File | ||
269 | RelativePath=".\llkeyframemotion.cpp" | ||
270 | > | ||
271 | </File> | ||
272 | <File | ||
273 | RelativePath=".\llkeyframemotionparam.cpp" | ||
274 | > | ||
275 | </File> | ||
276 | <File | ||
277 | RelativePath=".\llkeyframestandmotion.cpp" | ||
278 | > | ||
279 | </File> | ||
280 | <File | ||
281 | RelativePath=".\llkeyframewalkmotion.cpp" | ||
282 | > | ||
283 | </File> | ||
284 | <File | ||
285 | RelativePath=".\llmotion.cpp" | ||
286 | > | ||
287 | </File> | ||
288 | <File | ||
289 | RelativePath=".\llmotioncontroller.cpp" | ||
290 | > | ||
291 | </File> | ||
292 | <File | ||
293 | RelativePath=".\llmultigesture.cpp" | ||
294 | > | ||
295 | </File> | ||
296 | <File | ||
297 | RelativePath=".\llpose.cpp" | ||
298 | > | ||
299 | </File> | ||
300 | <File | ||
301 | RelativePath=".\llstatemachine.cpp" | ||
302 | > | ||
303 | </File> | ||
304 | <File | ||
305 | RelativePath=".\lltargetingmotion.cpp" | ||
306 | > | ||
307 | </File> | ||
308 | <File | ||
309 | RelativePath=".\llvisualparam.cpp" | ||
310 | > | ||
311 | </File> | ||
312 | </Filter> | ||
313 | <Filter | ||
314 | Name="Header Files" | ||
315 | Filter="h;hpp;hxx;hm;inl;inc;xsd" | ||
316 | UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" | ||
317 | > | ||
318 | <File | ||
319 | RelativePath=".\llanimationstates.h" | ||
320 | > | ||
321 | </File> | ||
322 | <File | ||
323 | RelativePath=".\llbvhloader.h" | ||
324 | > | ||
325 | </File> | ||
326 | <File | ||
327 | RelativePath=".\llcharacter.h" | ||
328 | > | ||
329 | </File> | ||
330 | <File | ||
331 | RelativePath=".\lleditingmotion.h" | ||
332 | > | ||
333 | </File> | ||
334 | <File | ||
335 | RelativePath=".\llgesture.h" | ||
336 | > | ||
337 | </File> | ||
338 | <File | ||
339 | RelativePath=".\llhandmotion.h" | ||
340 | > | ||
341 | </File> | ||
342 | <File | ||
343 | RelativePath=".\llheadrotmotion.h" | ||
344 | > | ||
345 | </File> | ||
346 | <File | ||
347 | RelativePath=".\lljoint.h" | ||
348 | > | ||
349 | </File> | ||
350 | <File | ||
351 | RelativePath=".\lljointsolverrp3.h" | ||
352 | > | ||
353 | </File> | ||
354 | <File | ||
355 | RelativePath=".\lljointstate.h" | ||
356 | > | ||
357 | </File> | ||
358 | <File | ||
359 | RelativePath=".\llkeyframefallmotion.h" | ||
360 | > | ||
361 | </File> | ||
362 | <File | ||
363 | RelativePath=".\llkeyframemotion.h" | ||
364 | > | ||
365 | </File> | ||
366 | <File | ||
367 | RelativePath=".\llkeyframemotionparam.h" | ||
368 | > | ||
369 | </File> | ||
370 | <File | ||
371 | RelativePath=".\llkeyframestandmotion.h" | ||
372 | > | ||
373 | </File> | ||
374 | <File | ||
375 | RelativePath=".\llkeyframewalkmotion.h" | ||
376 | > | ||
377 | </File> | ||
378 | <File | ||
379 | RelativePath=".\llmotion.h" | ||
380 | > | ||
381 | </File> | ||
382 | <File | ||
383 | RelativePath=".\llmotioncontroller.h" | ||
384 | > | ||
385 | </File> | ||
386 | <File | ||
387 | RelativePath=".\llmultigesture.h" | ||
388 | > | ||
389 | </File> | ||
390 | <File | ||
391 | RelativePath=".\llpose.h" | ||
392 | > | ||
393 | </File> | ||
394 | <File | ||
395 | RelativePath=".\llstatemachine.h" | ||
396 | > | ||
397 | </File> | ||
398 | <File | ||
399 | RelativePath=".\lltargetingmotion.h" | ||
400 | > | ||
401 | </File> | ||
402 | <File | ||
403 | RelativePath=".\llvisualparam.h" | ||
404 | > | ||
405 | </File> | ||
406 | </Filter> | ||
407 | <Filter | ||
408 | Name="Resource Files" | ||
409 | Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx" | ||
410 | UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" | ||
411 | > | ||
412 | </Filter> | ||
413 | </Files> | ||
414 | <Globals> | ||
415 | </Globals> | ||
416 | </VisualStudioProject> | ||
diff --git a/linden/indra/llcharacter/lljoint.cpp b/linden/indra/llcharacter/lljoint.cpp index 4ef9835..4102612 100644 --- a/linden/indra/llcharacter/lljoint.cpp +++ b/linden/indra/llcharacter/lljoint.cpp | |||
@@ -69,8 +69,9 @@ LLJoint::LLJoint(const std::string &name, LLJoint *parent) | |||
69 | 69 | ||
70 | setName(name); | 70 | setName(name); |
71 | if (parent) | 71 | if (parent) |
72 | { | ||
72 | parent->addChild( this ); | 73 | parent->addChild( this ); |
73 | 74 | } | |
74 | touch(); | 75 | touch(); |
75 | } | 76 | } |
76 | 77 | ||
@@ -80,6 +81,10 @@ LLJoint::LLJoint(const std::string &name, LLJoint *parent) | |||
80 | //----------------------------------------------------------------------------- | 81 | //----------------------------------------------------------------------------- |
81 | LLJoint::~LLJoint() | 82 | LLJoint::~LLJoint() |
82 | { | 83 | { |
84 | if (mParent) | ||
85 | { | ||
86 | mParent->removeChild( this ); | ||
87 | } | ||
83 | removeAllChildren(); | 88 | removeAllChildren(); |
84 | } | 89 | } |
85 | 90 | ||
@@ -91,7 +96,9 @@ void LLJoint::setup(const std::string &name, LLJoint *parent) | |||
91 | { | 96 | { |
92 | setName(name); | 97 | setName(name); |
93 | if (parent) | 98 | if (parent) |
99 | { | ||
94 | parent->addChild( this ); | 100 | parent->addChild( this ); |
101 | } | ||
95 | } | 102 | } |
96 | 103 | ||
97 | //----------------------------------------------------------------------------- | 104 | //----------------------------------------------------------------------------- |
@@ -109,11 +116,11 @@ void LLJoint::touch(U32 flags) | |||
109 | { | 116 | { |
110 | child_flags |= POSITION_DIRTY; | 117 | child_flags |= POSITION_DIRTY; |
111 | } | 118 | } |
112 | 119 | ||
113 | for ( LLJoint *joint = mChildren.getFirstData(); | 120 | for (child_list_t::iterator iter = mChildren.begin(); |
114 | joint != NULL; | 121 | iter != mChildren.end(); ++iter) |
115 | joint = mChildren.getNextData() ) | ||
116 | { | 122 | { |
123 | LLJoint* joint = *iter; | ||
117 | joint->touch(child_flags); | 124 | joint->touch(child_flags); |
118 | } | 125 | } |
119 | } | 126 | } |
@@ -140,13 +147,15 @@ LLJoint *LLJoint::findJoint( const std::string &name ) | |||
140 | if (name == getName()) | 147 | if (name == getName()) |
141 | return this; | 148 | return this; |
142 | 149 | ||
143 | for ( LLJoint *j = mChildren.getFirstData(); | 150 | for (child_list_t::iterator iter = mChildren.begin(); |
144 | j != NULL; | 151 | iter != mChildren.end(); ++iter) |
145 | j = mChildren.getNextData() ) | ||
146 | { | 152 | { |
147 | LLJoint *found = j->findJoint(name); | 153 | LLJoint* joint = *iter; |
154 | LLJoint *found = joint->findJoint(name); | ||
148 | if (found) | 155 | if (found) |
156 | { | ||
149 | return found; | 157 | return found; |
158 | } | ||
150 | } | 159 | } |
151 | 160 | ||
152 | return NULL; | 161 | return NULL; |
@@ -156,12 +165,12 @@ LLJoint *LLJoint::findJoint( const std::string &name ) | |||
156 | //-------------------------------------------------------------------- | 165 | //-------------------------------------------------------------------- |
157 | // addChild() | 166 | // addChild() |
158 | //-------------------------------------------------------------------- | 167 | //-------------------------------------------------------------------- |
159 | void LLJoint::addChild(LLJoint *joint) | 168 | void LLJoint::addChild(LLJoint* joint) |
160 | { | 169 | { |
161 | if (joint->mParent) | 170 | if (joint->mParent) |
162 | joint->mParent->removeChild(joint); | 171 | joint->mParent->removeChild(joint); |
163 | 172 | ||
164 | mChildren.addDataAtEnd(joint); | 173 | mChildren.push_back(joint); |
165 | joint->mXform.setParent(&mXform); | 174 | joint->mXform.setParent(&mXform); |
166 | joint->mParent = this; | 175 | joint->mParent = this; |
167 | joint->touch(); | 176 | joint->touch(); |
@@ -171,9 +180,13 @@ void LLJoint::addChild(LLJoint *joint) | |||
171 | //-------------------------------------------------------------------- | 180 | //-------------------------------------------------------------------- |
172 | // removeChild() | 181 | // removeChild() |
173 | //-------------------------------------------------------------------- | 182 | //-------------------------------------------------------------------- |
174 | void LLJoint::removeChild(LLJoint *joint) | 183 | void LLJoint::removeChild(LLJoint* joint) |
175 | { | 184 | { |
176 | this->mChildren.removeData(joint); | 185 | child_list_t::iterator iter = std::find(mChildren.begin(), mChildren.end(), joint); |
186 | if (iter != mChildren.end()) | ||
187 | { | ||
188 | this->mChildren.erase(iter); | ||
189 | } | ||
177 | joint->mXform.setParent(NULL); | 190 | joint->mXform.setParent(NULL); |
178 | joint->mParent = NULL; | 191 | joint->mParent = NULL; |
179 | joint->touch(); | 192 | joint->touch(); |
@@ -185,11 +198,15 @@ void LLJoint::removeChild(LLJoint *joint) | |||
185 | //-------------------------------------------------------------------- | 198 | //-------------------------------------------------------------------- |
186 | void LLJoint::removeAllChildren() | 199 | void LLJoint::removeAllChildren() |
187 | { | 200 | { |
188 | for ( LLJoint *joint = mChildren.getFirstData(); | 201 | for (child_list_t::iterator iter = mChildren.begin(); |
189 | joint != NULL; | 202 | iter != mChildren.end();) |
190 | joint = mChildren.getNextData() ) | ||
191 | { | 203 | { |
192 | removeChild(joint); | 204 | child_list_t::iterator curiter = iter++; |
205 | LLJoint* joint = *curiter; | ||
206 | mChildren.erase(curiter); | ||
207 | joint->mXform.setParent(NULL); | ||
208 | joint->mParent = NULL; | ||
209 | joint->touch(); | ||
193 | } | 210 | } |
194 | } | 211 | } |
195 | 212 | ||
@@ -208,8 +225,11 @@ const LLVector3& LLJoint::getPosition() | |||
208 | //-------------------------------------------------------------------- | 225 | //-------------------------------------------------------------------- |
209 | void LLJoint::setPosition( const LLVector3& pos ) | 226 | void LLJoint::setPosition( const LLVector3& pos ) |
210 | { | 227 | { |
211 | mXform.setPosition(pos); | 228 | // if (mXform.getPosition() != pos) |
212 | touch(MATRIX_DIRTY | POSITION_DIRTY); | 229 | { |
230 | mXform.setPosition(pos); | ||
231 | touch(MATRIX_DIRTY | POSITION_DIRTY); | ||
232 | } | ||
213 | } | 233 | } |
214 | 234 | ||
215 | 235 | ||
@@ -276,8 +296,11 @@ void LLJoint::setRotation( const LLQuaternion& rot ) | |||
276 | { | 296 | { |
277 | if (rot.isFinite()) | 297 | if (rot.isFinite()) |
278 | { | 298 | { |
279 | mXform.setRotation(rot); | 299 | // if (mXform.getRotation() != rot) |
280 | touch(MATRIX_DIRTY | ROTATION_DIRTY); | 300 | { |
301 | mXform.setRotation(rot); | ||
302 | touch(MATRIX_DIRTY | ROTATION_DIRTY); | ||
303 | } | ||
281 | } | 304 | } |
282 | } | 305 | } |
283 | 306 | ||
@@ -339,8 +362,12 @@ const LLVector3& LLJoint::getScale() | |||
339 | //-------------------------------------------------------------------- | 362 | //-------------------------------------------------------------------- |
340 | void LLJoint::setScale( const LLVector3& scale ) | 363 | void LLJoint::setScale( const LLVector3& scale ) |
341 | { | 364 | { |
342 | mXform.setScale(scale); | 365 | // if (mXform.getScale() != scale) |
343 | touch(); | 366 | { |
367 | mXform.setScale(scale); | ||
368 | touch(); | ||
369 | } | ||
370 | |||
344 | } | 371 | } |
345 | 372 | ||
346 | 373 | ||
@@ -412,14 +439,18 @@ void LLJoint::updateWorldPRSParent() | |||
412 | // updateWorldMatrixChildren() | 439 | // updateWorldMatrixChildren() |
413 | //----------------------------------------------------------------------------- | 440 | //----------------------------------------------------------------------------- |
414 | void LLJoint::updateWorldMatrixChildren() | 441 | void LLJoint::updateWorldMatrixChildren() |
415 | { | 442 | { |
443 | if (!this->mUpdateXform) return; | ||
444 | |||
416 | if (mDirtyFlags & MATRIX_DIRTY) | 445 | if (mDirtyFlags & MATRIX_DIRTY) |
417 | { | 446 | { |
418 | updateWorldMatrix(); | 447 | updateWorldMatrix(); |
419 | } | 448 | } |
420 | for (LLJoint *child = mChildren.getFirstData(); child; child = mChildren.getNextData()) | 449 | for (child_list_t::iterator iter = mChildren.begin(); |
450 | iter != mChildren.end(); ++iter) | ||
421 | { | 451 | { |
422 | child->updateWorldMatrixChildren(); | 452 | LLJoint* joint = *iter; |
453 | joint->updateWorldMatrixChildren(); | ||
423 | } | 454 | } |
424 | } | 455 | } |
425 | 456 | ||
@@ -494,8 +525,10 @@ void LLJoint::clampRotation(LLQuaternion old_rot, LLQuaternion new_rot) | |||
494 | { | 525 | { |
495 | LLVector3 main_axis(1.f, 0.f, 0.f); | 526 | LLVector3 main_axis(1.f, 0.f, 0.f); |
496 | 527 | ||
497 | for (LLJoint* joint = mChildren.getFirstData(); joint; joint = mChildren.getNextData()) | 528 | for (child_list_t::iterator iter = mChildren.begin(); |
529 | iter != mChildren.end(); ++iter) | ||
498 | { | 530 | { |
531 | LLJoint* joint = *iter; | ||
499 | if (joint->isAnimatable()) | 532 | if (joint->isAnimatable()) |
500 | { | 533 | { |
501 | main_axis = joint->getPosition(); | 534 | main_axis = joint->getPosition(); |
diff --git a/linden/indra/llcharacter/lljoint.h b/linden/indra/llcharacter/lljoint.h index 15b82c2..352d222 100644 --- a/linden/indra/llcharacter/lljoint.h +++ b/linden/indra/llcharacter/lljoint.h | |||
@@ -95,7 +95,8 @@ public: | |||
95 | LLDynamicArray<LLVector3> mConstraintSilhouette; | 95 | LLDynamicArray<LLVector3> mConstraintSilhouette; |
96 | 96 | ||
97 | // child joints | 97 | // child joints |
98 | LLLinkedList<LLJoint> mChildren; | 98 | typedef std::list<LLJoint*> child_list_t; |
99 | child_list_t mChildren; | ||
99 | 100 | ||
100 | // debug statics | 101 | // debug statics |
101 | static S32 sNumTouches; | 102 | static S32 sNumTouches; |
diff --git a/linden/indra/llcharacter/llkeyframemotion.cpp b/linden/indra/llcharacter/llkeyframemotion.cpp index e5b0d99..d09de0e 100644 --- a/linden/indra/llcharacter/llkeyframemotion.cpp +++ b/linden/indra/llcharacter/llkeyframemotion.cpp | |||
@@ -1720,9 +1720,9 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const | |||
1720 | { | 1720 | { |
1721 | success &= dp.packU8(shared_constraintp->mChainLength, "chain_length"); | 1721 | success &= dp.packU8(shared_constraintp->mChainLength, "chain_length"); |
1722 | success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type"); | 1722 | success &= dp.packU8(shared_constraintp->mConstraintType, "constraint_type"); |
1723 | char volume_name[16]; | 1723 | char volume_name[16]; /* Flawfinder: ignore */ |
1724 | snprintf(volume_name, sizeof(volume_name), "%s", | 1724 | snprintf(volume_name, sizeof(volume_name), "%s", /* Flawfinder: ignore */ |
1725 | mCharacter->findCollisionVolume(shared_constraintp->mSourceConstraintVolume)->getName().c_str()); /* Flawfinder: ignore */ | 1725 | mCharacter->findCollisionVolume(shared_constraintp->mSourceConstraintVolume)->getName().c_str()); |
1726 | success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "source_volume"); | 1726 | success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "source_volume"); |
1727 | success &= dp.packVector3(shared_constraintp->mSourceConstraintOffset, "source_offset"); | 1727 | success &= dp.packVector3(shared_constraintp->mSourceConstraintOffset, "source_offset"); |
1728 | if (shared_constraintp->mConstraintTargetType == TYPE_GROUND) | 1728 | if (shared_constraintp->mConstraintTargetType == TYPE_GROUND) |
@@ -1731,8 +1731,8 @@ BOOL LLKeyframeMotion::serialize(LLDataPacker& dp) const | |||
1731 | } | 1731 | } |
1732 | else | 1732 | else |
1733 | { | 1733 | { |
1734 | snprintf(volume_name, sizeof(volume_name),"%s", | 1734 | snprintf(volume_name, sizeof(volume_name),"%s", /* Flawfinder: ignore */ |
1735 | mCharacter->findCollisionVolume(shared_constraintp->mTargetConstraintVolume)->getName().c_str()); /* Flawfinder: ignore */ | 1735 | mCharacter->findCollisionVolume(shared_constraintp->mTargetConstraintVolume)->getName().c_str()); |
1736 | } | 1736 | } |
1737 | success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "target_volume"); | 1737 | success &= dp.packBinaryDataFixed((U8*)volume_name, 16, "target_volume"); |
1738 | success &= dp.packVector3(shared_constraintp->mTargetConstraintOffset, "target_offset"); | 1738 | success &= dp.packVector3(shared_constraintp->mTargetConstraintOffset, "target_offset"); |
@@ -1911,28 +1911,26 @@ void LLKeyframeMotion::onLoadComplete(LLVFS *vfs, | |||
1911 | void* user_data, S32 status) | 1911 | void* user_data, S32 status) |
1912 | { | 1912 | { |
1913 | LLUUID* id = (LLUUID*)user_data; | 1913 | LLUUID* id = (LLUUID*)user_data; |
1914 | |||
1915 | std::vector<LLCharacter* >::iterator char_iter = LLCharacter::sInstances.begin(); | ||
1914 | 1916 | ||
1915 | LLCharacter* character = NULL; | 1917 | while(char_iter != LLCharacter::sInstances.end() && |
1918 | (*char_iter)->getID() != *id) | ||
1919 | { | ||
1920 | ++char_iter; | ||
1921 | } | ||
1916 | 1922 | ||
1917 | for(character = LLCharacter::sInstances.getFirstData(); | ||
1918 | character; | ||
1919 | character = LLCharacter::sInstances.getNextData()) | ||
1920 | { | ||
1921 | if (character->getID() == *id) | ||
1922 | { | ||
1923 | break; | ||
1924 | } | ||
1925 | } | ||
1926 | |||
1927 | delete id; | 1923 | delete id; |
1928 | 1924 | ||
1929 | if (!character) | 1925 | if (char_iter == LLCharacter::sInstances.end()) |
1930 | { | 1926 | { |
1931 | return; | 1927 | return; |
1932 | } | 1928 | } |
1933 | 1929 | ||
1930 | LLCharacter* character = *char_iter; | ||
1931 | |||
1934 | // create an instance of this motion (it may or may not already exist) | 1932 | // create an instance of this motion (it may or may not already exist) |
1935 | LLKeyframeMotion* motionp = (LLKeyframeMotion*)character->createMotion(asset_uuid); | 1933 | LLKeyframeMotion* motionp = (LLKeyframeMotion*) character->createMotion(asset_uuid); |
1936 | 1934 | ||
1937 | if (0 == status && motionp) | 1935 | if (0 == status && motionp) |
1938 | { | 1936 | { |
diff --git a/linden/indra/llcharacter/llkeyframemotionparam.cpp b/linden/indra/llcharacter/llkeyframemotionparam.cpp index 0bdc723..93df410 100644 --- a/linden/indra/llcharacter/llkeyframemotionparam.cpp +++ b/linden/indra/llcharacter/llkeyframemotionparam.cpp | |||
@@ -348,9 +348,9 @@ BOOL LLKeyframeMotionParam::loadMotions() | |||
348 | // Load data into a buffer to be parsed. | 348 | // Load data into a buffer to be parsed. |
349 | //------------------------------------------------------------------------- | 349 | //------------------------------------------------------------------------- |
350 | char path[LL_MAX_PATH]; /* Flawfinder: ignore */ | 350 | char path[LL_MAX_PATH]; /* Flawfinder: ignore */ |
351 | snprintf( path, sizeof(path), "%s_%s.llp", | 351 | snprintf( path,sizeof(path), "%s_%s.llp", /* Flawfinder: ignore */ |
352 | gDirUtilp->getExpandedFilename(LL_PATH_MOTIONS,mCharacter->getAnimationPrefix()).c_str(), | 352 | gDirUtilp->getExpandedFilename(LL_PATH_MOTIONS,mCharacter->getAnimationPrefix()).c_str(), |
353 | getName().c_str() ); /* Flawfinder: ignore */ | 353 | getName().c_str() ); |
354 | 354 | ||
355 | //------------------------------------------------------------------------- | 355 | //------------------------------------------------------------------------- |
356 | // open the file | 356 | // open the file |
@@ -425,7 +425,7 @@ BOOL LLKeyframeMotionParam::loadMotions() | |||
425 | // get priority | 425 | // get priority |
426 | //------------------------------------------------------------------------- | 426 | //------------------------------------------------------------------------- |
427 | BOOL isFirstMotion = TRUE; | 427 | BOOL isFirstMotion = TRUE; |
428 | num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); | 428 | num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); /* Flawfinder: ignore */ |
429 | 429 | ||
430 | while(1) | 430 | while(1) |
431 | { | 431 | { |
@@ -451,7 +451,7 @@ BOOL LLKeyframeMotionParam::loadMotions() | |||
451 | } | 451 | } |
452 | 452 | ||
453 | p++; | 453 | p++; |
454 | num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); | 454 | num = sscanf(p, "%79s %79s %f", strA, strB, &floatA); /* Flawfinder: ignore */ |
455 | } | 455 | } |
456 | 456 | ||
457 | delete [] text; | 457 | delete [] text; |