X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-scene3d%2Finternal%2Floader%2Fdli-loader-impl.cpp;h=f1118568a18ad8aabee828a88c33955ee3d4708f;hb=679f02413b55445b39148f4b102c153b1b5fae83;hp=90c5e1df890cfc49f81f53a9d92d707e9fa1d1ae;hpb=27815de83c807c84e63231e131bc4fadb810366e;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-scene3d/internal/loader/dli-loader-impl.cpp b/dali-scene3d/internal/loader/dli-loader-impl.cpp index 90c5e1d..f111856 100644 --- a/dali-scene3d/internal/loader/dli-loader-impl.cpp +++ b/dali-scene3d/internal/loader/dli-loader-impl.cpp @@ -19,16 +19,17 @@ #include // EXTERNAL INCLUDES +#include +#include +#include +#include + #include #include #include #include #include #include -#include "dali-toolkit/devel-api/builder/json-parser.h" -#include "dali/devel-api/common/map-wrapper.h" -#include "dali/integration-api/debug.h" -#include "dali/public-api/object/property-array.h" // INTERNAL INCLUDES #include @@ -501,8 +502,7 @@ void DliLoaderImpl::Impl::ParseScene(LoadParams& params) void DliLoaderImpl::Impl::ParseSceneInternal(Index iScene, const Toolkit::TreeNode* tnScenes, const Toolkit::TreeNode* tnNodes, LoadParams& params) { - auto getSceneRootIdx = [tnScenes, tnNodes](Index iScene) - { + auto getSceneRootIdx = [tnScenes, tnNodes](Index iScene) { auto tn = GetNthChild(tnScenes, iScene); // now a "scene" object if(!tn) { @@ -585,8 +585,7 @@ void DliLoaderImpl::Impl::ParseSkeletons(const TreeNode* skeletons, Dali::Scene3 uint32_t jointCount = 0; std::function visitFn; auto& ibms = mInverseBindMatrices; - visitFn = [&](Index id) - { + visitFn = [&](Index id) { auto node = scene.GetNode(id); jointCount += ibms.find(id) != ibms.end(); @@ -605,8 +604,7 @@ void DliLoaderImpl::Impl::ParseSkeletons(const TreeNode* skeletons, Dali::Scene3 skeleton.mJoints.reserve(jointCount); - visitFn = [&](Index id) - { + visitFn = [&](Index id) { auto iFind = ibms.find(id); if(iFind != ibms.end() && skeleton.mJoints.size() < Skinning::MAX_JOINTS) { @@ -1097,8 +1095,7 @@ void DliLoaderImpl::Impl::ParseNodes(const TreeNode* const nodes, Index index, L virtual unsigned int Resolve(Index iDli) override { - auto iFind = std::lower_bound(mIndices.begin(), mIndices.end(), iDli, [](const Entry& idx, Index iDli) - { return idx.iDli < iDli; }); + auto iFind = std::lower_bound(mIndices.begin(), mIndices.end(), iDli, [](const Entry& idx, Index iDli) { return idx.iDli < iDli; }); DALI_ASSERT_ALWAYS(iFind != mIndices.end()); return iFind->iScene; } @@ -1442,52 +1439,56 @@ void DliLoaderImpl::Impl::ParseAnimations(const TreeNode* tnAnimations, LoadPara ++iAnim) { const TreeNode& tnAnim = (*iAnim).second; + uint32_t animationPropertyIndex = 0; AnimationDefinition animDef; - ReadString(tnAnim.GetChild(NAME), animDef.mName); + std::string animationName; + ReadString(tnAnim.GetChild(NAME), animationName); + animDef.SetName(animationName); - auto iFind = std::lower_bound(definitions.begin(), definitions.end(), animDef, [](const AnimationDefinition& ad0, const AnimationDefinition& ad1) - { return ad0.mName < ad1.mName; }); - const bool overwrite = iFind != definitions.end() && iFind->mName == animDef.mName; + auto iFind = std::lower_bound(definitions.begin(), definitions.end(), animDef, [](const AnimationDefinition& ad0, const AnimationDefinition& ad1) { return ad0.GetName() < ad1.GetName(); }); + const bool overwrite = iFind != definitions.end() && iFind->GetName() == animDef.GetName(); if(overwrite) { - mOnError(FormatString("Pre-existing animation with name '%s' is being overwritten.", animDef.mName.c_str())); + mOnError(FormatString("Pre-existing animation with name '%s' is being overwritten.", animDef.GetName().c_str())); } // Duration -- We need something that animated properties' delay / duration can // be expressed as a multiple of; 0 won't work. This is small enough (i.e. shorter // than our frame delay) to not be restrictive WRT replaying. If anything needs // to occur more frequently, then Animations are likely not your solution anyway. - animDef.mDuration = AnimationDefinition::MIN_DURATION_SECONDS; - if(!ReadFloat(tnAnim.GetChild("duration"), animDef.mDuration)) + animDef.SetDuration(AnimationDefinition::MIN_DURATION_SECONDS); + float animationDuration; + if(!ReadFloat(tnAnim.GetChild("duration"), animationDuration)) { + animDef.SetDuration(animationDuration); mOnError(FormatString("Animation '%s' fails to define '%s', defaulting to %f.", - animDef.mName.c_str(), + animDef.GetName().c_str(), "duration", - animDef.mDuration)); + animDef.GetDuration())); } // Get loop count - # of playbacks. Default is once. 0 means repeat indefinitely. - animDef.mLoopCount = 1; - if(ReadInt(tnAnim.GetChild("loopCount"), animDef.mLoopCount) && - animDef.mLoopCount < 0) + int32_t animationLoopCount = 1; + if(ReadInt(tnAnim.GetChild("loopCount"), animationLoopCount) && animationLoopCount < 0) { - animDef.mLoopCount = 0; + animationLoopCount = 0; } + animDef.SetLoopCount(animationLoopCount); std::string endAction; if(ReadString(tnAnim.GetChild("endAction"), endAction)) { if("BAKE" == endAction) { - animDef.mEndAction = Animation::BAKE; + animDef.SetEndAction(Animation::BAKE); } else if("DISCARD" == endAction) { - animDef.mEndAction = Animation::DISCARD; + animDef.SetEndAction(Animation::DISCARD); } else if("BAKE_FINAL" == endAction) { - animDef.mEndAction = Animation::BAKE_FINAL; + animDef.SetEndAction(Animation::BAKE_FINAL); } } @@ -1495,21 +1496,21 @@ void DliLoaderImpl::Impl::ParseAnimations(const TreeNode* tnAnimations, LoadPara { if("BAKE" == endAction) { - animDef.mDisconnectAction = Animation::BAKE; + animDef.SetDisconnectAction(Animation::BAKE); } else if("DISCARD" == endAction) { - animDef.mDisconnectAction = Animation::DISCARD; + animDef.SetDisconnectAction(Animation::DISCARD); } else if("BAKE_FINAL" == endAction) { - animDef.mDisconnectAction = Animation::BAKE_FINAL; + animDef.SetDisconnectAction(Animation::BAKE_FINAL); } } if(const TreeNode* tnProperties = tnAnim.GetChild("properties")) { - animDef.mProperties.reserve(tnProperties->Size()); + animDef.ReserveSize(tnProperties->Size()); for(TreeNode::ConstIterator iProperty = tnProperties->CBegin(), iPropertyEnd = tnProperties->CEnd(); iProperty != iPropertyEnd; ++iProperty) @@ -1519,24 +1520,24 @@ void DliLoaderImpl::Impl::ParseAnimations(const TreeNode* tnAnimations, LoadPara AnimatedProperty animProp; if(!ReadString(tnProperty.GetChild("node"), animProp.mNodeName)) { - mOnError(FormatString("Animation '%s': Failed to read the 'node' tag.", animDef.mName.c_str())); + mOnError(FormatString("Animation '%s': Failed to read the 'node' tag.", animDef.GetName().c_str())); continue; } if(!ReadString(tnProperty.GetChild("property"), animProp.mPropertyName)) { - mOnError(FormatString("Animation '%s': Failed to read the 'property' tag", animDef.mName.c_str())); + mOnError(FormatString("Animation '%s': Failed to read the 'property' tag", animDef.GetName().c_str())); continue; } // these are the defaults animProp.mTimePeriod.delaySeconds = 0.f; - animProp.mTimePeriod.durationSeconds = animDef.mDuration; + animProp.mTimePeriod.durationSeconds = animDef.GetDuration(); if(!ReadTimePeriod(tnProperty.GetChild("timePeriod"), animProp.mTimePeriod)) { mOnError(FormatString("Animation '%s': timePeriod missing in Property #%d: defaulting to %f.", - animDef.mName.c_str(), - animDef.mProperties.size(), + animDef.GetName().c_str(), + animDef.GetPropertyCount(), animProp.mTimePeriod.durationSeconds)); } @@ -1672,10 +1673,17 @@ void DliLoaderImpl::Impl::ParseAnimations(const TreeNode* tnAnimations, LoadPara } } - animDef.mProperties.push_back(std::move(animProp)); + animDef.SetProperty(animationPropertyIndex++, std::move(animProp)); } } + if(auto proc = params.input->mAnimationPropertyProcessor) // optional processing + { + Property::Map map; + ParseProperties(tnAnim, map); + proc(animDef, std::move(map), mOnError); + } + if(overwrite) { *iFind = std::move(animDef); @@ -1684,13 +1692,6 @@ void DliLoaderImpl::Impl::ParseAnimations(const TreeNode* tnAnimations, LoadPara { iFind = definitions.insert(iFind, std::move(animDef)); } - - if(auto proc = params.input->mAnimationPropertyProcessor) // optional processing - { - Property::Map map; - ParseProperties(tnAnim, map); - proc(animDef, std::move(map), mOnError); - } } } @@ -1712,8 +1713,7 @@ void DliLoaderImpl::Impl::ParseAnimationGroups(const Toolkit::TreeNode* tnAnimat continue; } - auto iFind = std::lower_bound(animGroups.begin(), animGroups.end(), groupName, [](const AnimationGroupDefinition& group, const std::string& name) - { return group.mName < name; }); + auto iFind = std::lower_bound(animGroups.begin(), animGroups.end(), groupName, [](const AnimationGroupDefinition& group, const std::string& name) { return group.mName < name; }); if(iFind != animGroups.end() && iFind->mName == groupName) { mOnError(FormatString("Animation group with name '%s' already exists; new entries will be merged.", groupName.c_str()));