public void ApplyInspectorChange() { if (m_Selection.Count != 1) { return; } if (m_DataInspector == null) { return; } VCEditor.s_Mirror.CalcPrepare(VCEditor.s_Scene.m_Setting.m_VoxelSize); m_Action = new VCEAction(); VCComponentData old_data = m_Selection[0].m_Component.m_Data; VCComponentData new_data = m_DataInspector.GetComponent <VCEUIComponentInspector>().Get(); // Mirror if (VCEditor.s_Mirror.Enabled_Masked) { VCComponentData[] old_img_data = new VCComponentData [8]; VCEditor.s_Mirror.MirrorComponent(old_data); for (int i = 0; i < VCEditor.s_Mirror.OutputCnt; ++i) { old_img_data[i] = VCEditor.s_Mirror.ComponentOutput[i].Copy(); } VCEditor.s_Mirror.MirrorComponent(new_data); for (int i = 0; i < VCEditor.s_Mirror.OutputCnt; ++i) { VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i]; List <VCComponentData> edits = VCEditor.s_Scene.m_IsoData.FindComponentsAtPos(old_img_data[i].m_Position, image.m_ComponentId); foreach (VCComponentData iter in edits) { if (i > 0 && m_Selection.Find(it => it.m_Component.m_Data == iter) != null) { continue; } if (!VCEMath.IsEqualRotation(iter.m_Rotation, old_img_data[i].m_Rotation)) { continue; } if (!VCEMath.IsEqualVector(iter.m_Scale, old_img_data[i].m_Scale)) { continue; } if (iter.m_Visible != old_img_data[i].m_Visible) { continue; } if (old_img_data[i] is IVCMultiphaseComponentData && iter is IVCMultiphaseComponentData) { if ((old_img_data[i] as IVCMultiphaseComponentData).Phase != (iter as IVCMultiphaseComponentData).Phase) { continue; } } int index = VCEditor.s_Scene.m_IsoData.GetComponentIndex(iter); if (index < 0) { continue; } // Special process for wheels if (i != 0 && image is VCQuadphaseFixedPartData) { (image as VCQuadphaseFixedPartData).m_Phase = ((image as VCQuadphaseFixedPartData).m_Phase & 1) | ((iter as VCQuadphaseFixedPartData).m_Phase & 2); } VCEAlterComponent modify = new VCEAlterComponent(index, iter, image); m_Action.Modifies.Add(modify); } } } // No mirror else { int index = VCEditor.s_Scene.m_IsoData.GetComponentIndex(old_data); if (index < 0) { return; } VCEAlterComponent modify = new VCEAlterComponent(index, old_data, new_data); m_Action.Modifies.Add(modify); } VCEStatusBar.ShowText("Changes applied".ToLocalizationString(), 2); m_Action.Do(); }
// All Gizmo End void OnGizmoEnd() { if (m_GizmoAction != null) { VCEditor.s_Mirror.CalcPrepare(VCEditor.s_Scene.m_Setting.m_VoxelSize); foreach (SelectInfo si in m_Selection) { bool modified = false; if (!VCEMath.IsEqualVector(si.m_NewPosition, si.m_OldPosition)) { modified = true; } if (!VCEMath.IsEqualRotation(si.m_NewRotation, si.m_OldRotation)) { modified = true; } if (!VCEMath.IsEqualVector(si.m_NewScale, si.m_OldScale)) { modified = true; } if (modified) { VCEAlterComponentTransform modify = new VCEAlterComponentTransform( VCEditor.s_Scene.m_IsoData.GetComponentIndex(si.m_Component.m_Data), si.m_OldPosition, si.m_OldRotation, si.m_OldScale, si.m_NewPosition, si.m_NewRotation, si.m_NewScale); m_GizmoAction.Modifies.Add(modify); // Mirror if (VCEditor.s_Mirror.Enabled_Masked) { Vector3[] old_poses = new Vector3[8]; Vector3[] old_rots = new Vector3[8]; Vector3[] old_scales = new Vector3[8]; VCEditor.s_Mirror.MirrorComponent(si.m_Component.m_Data); for (int i = 0; i < VCEditor.s_Mirror.OutputCnt; ++i) { old_poses[i] = VCEditor.s_Mirror.ComponentOutput[i].m_Position; old_rots[i] = VCEditor.s_Mirror.ComponentOutput[i].m_Rotation; old_scales[i] = VCEditor.s_Mirror.ComponentOutput[i].m_Scale; } VCComponentData tmpdata = si.m_Component.m_Data.Copy(); tmpdata.m_Position = si.m_NewPosition; tmpdata.m_Rotation = si.m_NewRotation; tmpdata.m_Scale = si.m_NewScale; VCEditor.s_Mirror.MirrorComponent(tmpdata); for (int i = 1; i < VCEditor.s_Mirror.OutputCnt; ++i) { VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i]; image.Validate(); List <VCComponentData> edits = VCEditor.s_Scene.m_IsoData.FindComponentsAtPos(old_poses[i], image.m_ComponentId); foreach (VCComponentData iter in edits) { if (!VCEMath.IsEqualRotation(iter.m_Rotation, old_rots[i])) { continue; } if (iter.m_Scale != old_scales[i]) { continue; } if (iter.m_Visible != image.m_Visible) { continue; } if (image is IVCMultiphaseComponentData && iter is IVCMultiphaseComponentData) { if ((image as IVCMultiphaseComponentData).Phase != (iter as IVCMultiphaseComponentData).Phase) { continue; } } if (m_Selection.Find(it => it.m_Component.m_Data == iter) == null) { VCEAlterComponentTransform modify_mirror = new VCEAlterComponentTransform( VCEditor.s_Scene.m_IsoData.GetComponentIndex(iter), iter.m_Position, iter.m_Rotation, iter.m_Scale, image.m_Position, image.m_Rotation, image.m_Scale); m_GizmoAction.Modifies.Add(modify_mirror); } } } } // End 'mirror' } } if (m_GizmoAction.Modifies.Count > 0) { m_GizmoAction.Do(); m_GizmoAction = null; } } else { Debug.LogWarning("Must be some problem here!"); } }