// Functions
        //-----------------------------------------------
        // Timeline -> File
        //---------------------------------------------
        public void SetTimeline(int unitID, apAnimTimeline timeline)
        {
            _unitID = unitID;

            _timelineUniqueID = timeline._uniqueID;
            _linkedTimeline   = timeline;

            _guiColor = timeline._guiColor;

            _linkType         = timeline._linkType;
            _modifierUniqueID = timeline._modifierUniqueID;

            //연결된 Modifier의 Type을 넣자.
            //같은걸 대입하기 위함 (UniqueID를 찾지 못했다면..)
            _linkedModifierType = apModifierBase.MODIFIER_TYPE.Base;
            if (timeline._linkedModifier != null && _linkType == apAnimClip.LINK_TYPE.AnimatedModifier)
            {
                _linkedModifierType = timeline._linkedModifier.ModifierType;
            }

            _layerUnits.Clear();
            int curUnitID = 0;

            for (int i = 0; i < timeline._layers.Count; i++)
            {
                //Layer도 넣자
                apRetargetTimelineLayerUnit layerUnit = new apRetargetTimelineLayerUnit();
                layerUnit.SetTimelineLayer(curUnitID, timeline._layers[i]);

                curUnitID++;
                _layerUnits.Add(layerUnit);
            }
        }
 public ModInfo(apModifierBase.MODIFIER_TYPE modType, string name, Texture2D iconImage, int validationKey)
 {
     _modType       = modType;
     _name          = name;
     _iconImage     = iconImage;
     _validationKey = validationKey;
 }
Example #3
0
        // Add / Remove
        //----------------------------------------------------
        public void AddModifier(apModifierBase modifier, apModifierBase.MODIFIER_TYPE modifierType)
        {
            switch (modifierType)
            {
            case apModifierBase.MODIFIER_TYPE.Base:

                break;

            case apModifierBase.MODIFIER_TYPE.Volume:
                _modifiers_Volume.Add((apModifier_Volume)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.Morph:
                _modifiers_Morph.Add((apModifier_Morph)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.AnimatedMorph:
                _modifiers_AnimatedMorph.Add((apModifier_AnimatedMorph)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.Rigging:
                _modifiers_Rigging.Add((apModifier_Rigging)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.Physic:
                _modifiers_Physic.Add((apModifier_Physic)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.TF:
                _modifiers_TF.Add((apModifier_TF)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.AnimatedTF:
                _modifiers_AnimatedTF.Add((apModifier_AnimatedTF)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.FFD:
                _modifiers_FFD.Add((apModifier_FFD)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.AnimatedFFD:
                _modifiers_AnimatedFFD.Add((apModifier_AnimatedFFD)modifier);
                break;

            default:
                Debug.LogError("TODO : 정의되지 않은 타입 [" + modifier + "]");
                break;
            }
        }
Example #4
0
        public void RemoveModifier(apModifierBase modifier)
        {
            apModifierBase.MODIFIER_TYPE modType = modifier.ModifierType;

            switch (modType)
            {
            case apModifierBase.MODIFIER_TYPE.Base:

                break;

            case apModifierBase.MODIFIER_TYPE.Volume:
                _modifiers_Volume.Remove((apModifier_Volume)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.Morph:
                _modifiers_Morph.Remove((apModifier_Morph)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.AnimatedMorph:
                _modifiers_AnimatedMorph.Remove((apModifier_AnimatedMorph)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.Rigging:
                _modifiers_Rigging.Remove((apModifier_Rigging)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.Physic:
                _modifiers_Physic.Remove((apModifier_Physic)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.TF:
                _modifiers_TF.Remove((apModifier_TF)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.AnimatedTF:
                _modifiers_AnimatedTF.Remove((apModifier_AnimatedTF)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.FFD:
                _modifiers_FFD.Remove((apModifier_FFD)modifier);
                break;

            case apModifierBase.MODIFIER_TYPE.AnimatedFFD:
                _modifiers_AnimatedFFD.Remove((apModifier_AnimatedFFD)modifier);
                break;
            }
        }
        public bool DecodeData(StreamReader sr)
        {
            try
            {
                string   strHeader = sr.ReadLine();
                string[] strParse  = strHeader.Split(new string[] { "/" }, StringSplitOptions.None);

                //Timeline Header 정보를 먼저 파싱하자
                _unitID           = int.Parse(strParse[0]);
                _timelineUniqueID = int.Parse(strParse[1]);

                _guiColor.r = float.Parse(strParse[2]);
                _guiColor.g = float.Parse(strParse[3]);
                _guiColor.b = float.Parse(strParse[4]);
                _guiColor.a = float.Parse(strParse[5]);

                _linkType           = (apAnimClip.LINK_TYPE) int.Parse(strParse[6]);
                _modifierUniqueID   = int.Parse(strParse[7]);
                _linkedModifierType = (apModifierBase.MODIFIER_TYPE) int.Parse(strParse[8]);

                int nLayers = int.Parse(strParse[9]);
                _layerUnits.Clear();

                for (int i = 0; i < nLayers; i++)
                {
                    //Layer를 하나씩 Decode한다.
                    apRetargetTimelineLayerUnit layerUnit = new apRetargetTimelineLayerUnit();
                    layerUnit.DecodeData(sr);
                    _layerUnits.Add(layerUnit);
                }
            }
            catch (Exception ex)
            {
                Debug.LogError("DecodeData Exception : " + ex);
                return(false);
            }

            return(true);
        }
        private Texture2D GetModifierIcon(apModifierBase.MODIFIER_TYPE modType)
        {
            switch (modType)
            {
            case apModifierBase.MODIFIER_TYPE.Volume:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_Volume));

            case apModifierBase.MODIFIER_TYPE.Morph:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_Morph));

            case apModifierBase.MODIFIER_TYPE.AnimatedMorph:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_AnimatedMorph));

            case apModifierBase.MODIFIER_TYPE.Rigging:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_Rigging));

            case apModifierBase.MODIFIER_TYPE.Physic:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_Physic));

            case apModifierBase.MODIFIER_TYPE.TF:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_TF));

            case apModifierBase.MODIFIER_TYPE.AnimatedTF:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_AnimatedTF));

            case apModifierBase.MODIFIER_TYPE.FFD:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_FFD));

            case apModifierBase.MODIFIER_TYPE.AnimatedFFD:
                return(_editor.ImageSet.Get(apImageSet.PRESET.Modifier_AnimatedFFD));

            default:
                Debug.LogError("TODO : 알 수 없는 Modifier [" + modType + "]");
                break;
            }
            return(null);
        }
        //----------------------------------------------------------------------------------------------------
        public static apImageSet.PRESET GetModifierIconType(apModifierBase.MODIFIER_TYPE modType)
        {
            switch (modType)
            {
            case apModifierBase.MODIFIER_TYPE.Base:
                return(apImageSet.PRESET.Modifier_Volume);

            case apModifierBase.MODIFIER_TYPE.Volume:
                return(apImageSet.PRESET.Modifier_Volume);

            case apModifierBase.MODIFIER_TYPE.Morph:
                return(apImageSet.PRESET.Modifier_Morph);

            case apModifierBase.MODIFIER_TYPE.AnimatedMorph:
                return(apImageSet.PRESET.Modifier_AnimatedMorph);

            case apModifierBase.MODIFIER_TYPE.Rigging:
                return(apImageSet.PRESET.Modifier_Rigging);

            case apModifierBase.MODIFIER_TYPE.Physic:
                return(apImageSet.PRESET.Modifier_Physic);

            case apModifierBase.MODIFIER_TYPE.TF:
                return(apImageSet.PRESET.Modifier_TF);

            case apModifierBase.MODIFIER_TYPE.AnimatedTF:
                return(apImageSet.PRESET.Modifier_AnimatedTF);

            case apModifierBase.MODIFIER_TYPE.FFD:
                return(apImageSet.PRESET.Modifier_FFD);

            case apModifierBase.MODIFIER_TYPE.AnimatedFFD:
                return(apImageSet.PRESET.Modifier_AnimatedFFD);
            }
            return(apImageSet.PRESET.Modifier_Volume);
        }
Example #8
0
        /// <summary>
        /// AnimTimeline을 선택하고, 그 안의 AnimTimeLayer를 모두 활성화한다.
        /// 일반적으로 [선택하지 않은 AnimTimeline]들을 모두 해제하는 반면에,
        /// 여기서는 해당 ParamSetGroup에 연동된 AnimTimeline이 AnimClip에 포함된다면 모두 포함시킨다.
        /// </summary>
        /// <param name="modifier"></param>
        /// <param name="paramSetGroups"></param>
        public void SetExclusiveModifierInEditing_MultipleParamSetGroup_General(apModifierBase modifier, apAnimClip targetAnimClip)
        {
            //apCalculatedResultParam.RESULT_TYPE targetResultType = modifier.CalculatedResultType;
            //추가
            //요청한 Modifier가 BoneTransform을 지원하는 경우
            //Rigging은 비활성화 되어서는 안된다.
            apModifierBase.MODIFIER_TYPE[] exGeneralTypes = modifier.GetGeneralExEditableModTypes();
            if (exGeneralTypes == null)
            {
                exGeneralTypes = new apModifierBase.MODIFIER_TYPE[] { modifier.ModifierType };
            }

            for (int i = 0; i < _modifiers.Count; i++)
            {
                bool isValidType = false;
                for (int iGT = 0; iGT < exGeneralTypes.Length; iGT++)
                {
                    if (exGeneralTypes[iGT] == _modifiers[i].ModifierType)
                    {
                        isValidType = true;
                        break;
                    }
                }

                if (isValidType)
                {
                    //AnimClip을 포함하는 ParamSetGroup에 한해서
                    _modifiers[i]._editorExclusiveActiveMod = apModifierBase.MOD_EDITOR_ACTIVE.ExclusiveEnabled;

                    for (int iP = 0; iP < _modifiers[i]._paramSetGroup_controller.Count; iP++)
                    {
                        apModifierParamSetGroup paramSetGroup = _modifiers[i]._paramSetGroup_controller[iP];
                        if (paramSetGroup._keyAnimClip == targetAnimClip)
                        {
                            paramSetGroup._isEnabledExclusive = true;
                        }
                        else
                        {
                            paramSetGroup._isEnabledExclusive = false;
                        }
                    }
                }
                else
                {
                    //지원하는 타입이 아니다.
                    //모두 Disabled한다.
                    _modifiers[i]._editorExclusiveActiveMod = apModifierBase.MOD_EDITOR_ACTIVE.Disabled;

                    for (int iP = 0; iP < _modifiers[i]._paramSetGroup_controller.Count; iP++)
                    {
                        apModifierParamSetGroup paramSetGroup = _modifiers[i]._paramSetGroup_controller[iP];
                        paramSetGroup._isEnabledExclusive = false;
                    }
                }
            }

            //Child MeshGroup에도 모두 적용하자
            if (_parentMeshGroup != null)
            {
                if (_parentMeshGroup._childMeshGroupTransforms != null)
                {
                    for (int i = 0; i < _parentMeshGroup._childMeshGroupTransforms.Count; i++)
                    {
                        apTransform_MeshGroup meshGroupTransform = _parentMeshGroup._childMeshGroupTransforms[i];
                        if (meshGroupTransform._meshGroup != null && meshGroupTransform._meshGroup != _parentMeshGroup)
                        {
                            meshGroupTransform._meshGroup._modifierStack.SetExclusiveModifierInEditing_MultipleParamSetGroup_General(modifier, targetAnimClip);
                        }
                    }
                }
            }
        }
Example #9
0
        /// <summary>
        /// [선택한 Modifier] + [해당 Modifier가 허용하는 다른 Modifier]만 허용한다.
        /// 모든 ParamSetGroup을 허용하므로 에디팅이 조금 다를 수는 있다.
        /// Animation 버전은 따로 만들 것
        /// </summary>
        /// <param name="modifier"></param>
        public void SetExclusiveModifierInEditingGeneral(apModifierBase modifier)
        {
            //apCalculatedResultParam.RESULT_TYPE targetResultType = modifier.CalculatedResultType;
            apModifierBase.MODIFIER_TYPE[] exGeneralTypes = modifier.GetGeneralExEditableModTypes();
            if (exGeneralTypes == null)
            {
                exGeneralTypes = new apModifierBase.MODIFIER_TYPE[] { modifier.ModifierType };
            }

            //추가
            //요청한 Modifier가 BoneTransform을 지원하는 경우
            //Rigging은 비활성화 되어서는 안된다.
            for (int i = 0; i < _modifiers.Count; i++)
            {
                bool isValidType = false;
                for (int iGT = 0; iGT < exGeneralTypes.Length; iGT++)
                {
                    if (exGeneralTypes[iGT] == _modifiers[i].ModifierType)
                    {
                        isValidType = true;
                        break;
                    }
                }

                if (isValidType)
                {
                    //_modifiers[i]._isActive_InEditorExclusive = true;
                    _modifiers[i]._editorExclusiveActiveMod = apModifierBase.MOD_EDITOR_ACTIVE.ExclusiveEnabled;

                    for (int iP = 0; iP < _modifiers[i]._paramSetGroup_controller.Count; iP++)
                    {
                        //ParamSetGroup도 모두다 허용
                        _modifiers[i]._paramSetGroup_controller[iP]._isEnabledExclusive = true;
                    }
                }
                else
                {
                    //불가불가
                    _modifiers[i]._editorExclusiveActiveMod = apModifierBase.MOD_EDITOR_ACTIVE.Disabled;

                    for (int iP = 0; iP < _modifiers[i]._paramSetGroup_controller.Count; iP++)
                    {
                        _modifiers[i]._paramSetGroup_controller[iP]._isEnabledExclusive = false;
                    }
                }
            }

            //Child MeshGroup에도 모두 적용하자
            if (_parentMeshGroup != null)
            {
                if (_parentMeshGroup._childMeshGroupTransforms != null)
                {
                    for (int i = 0; i < _parentMeshGroup._childMeshGroupTransforms.Count; i++)
                    {
                        apTransform_MeshGroup meshGroupTransform = _parentMeshGroup._childMeshGroupTransforms[i];
                        if (meshGroupTransform._meshGroup != null && meshGroupTransform._meshGroup != _parentMeshGroup)
                        {
                            meshGroupTransform._meshGroup._modifierStack.SetExclusiveModifierInEditingGeneral(modifier);
                        }
                    }
                }
            }
        }