// 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; }
// 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; } }
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); }
/// <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); } } } } }
/// <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); } } } } }