public List <VCEComponentTool> MirrorImage(VCEComponentTool c) { VCEditor.s_Mirror.CalcPrepare(VCEditor.s_Scene.m_Setting.m_VoxelSize); // Mirror if (VCEditor.s_Mirror.Enabled_Masked) { List <VCEComponentTool> list_ret = new List <VCEComponentTool> (); VCEditor.s_Mirror.MirrorComponent(c.m_Data); for (int i = 1; i < VCEditor.s_Mirror.OutputCnt; ++i) { VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i]; List <VCComponentData> projections = VCEditor.s_Scene.m_IsoData.FindComponentsAtPos(image.m_Position, image.m_ComponentId); foreach (VCComponentData iter in projections) { if (!VCEMath.IsEqualRotation(iter.m_Rotation, image.m_Rotation)) { continue; } if (iter.m_Scale != image.m_Scale) { 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; } } VCEComponentTool imct = iter.m_Entity.GetComponent <VCEComponentTool>(); if (imct == null) { continue; } if (imct == c) { continue; } list_ret.Add(imct); } } return(list_ret); } // No mirror else { return(new List <VCEComponentTool> ()); } }
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(); }
void OnRotating(Vector3 axis, float angle) { float hvs = VCEditor.s_Scene.m_Setting.m_VoxelSize * 0.5f; VCEditor.s_Mirror.CalcPrepare(hvs * 2); foreach (SelectInfo si in m_Selection) { Vector3 cached_rot = si.m_Component.transform.eulerAngles; si.m_Component.transform.eulerAngles = si.m_OldRotation; si.m_Component.transform.Rotate(axis, angle, Space.World); si.m_DragRotation = si.m_Component.transform.eulerAngles; si.m_DragRotation = VCEMath.NormalizeEulerAngle(si.m_DragRotation); si.m_NewRotation = si.m_DragRotation; si.m_Component.transform.eulerAngles = cached_rot; Vector3 tmp_rot = si.m_Component.m_Data.m_Rotation; si.m_Component.m_Data.m_Rotation = si.m_NewRotation; si.m_Component.m_Data.Validate(); if (si.m_Component.m_Data.m_Rotation != si.m_NewRotation) { si.m_NewRotation = cached_rot; si.m_Component.m_Data.m_Rotation = si.m_NewRotation; si.m_Component.m_Data.Validate(); } si.m_NewRotation = si.m_Component.transform.eulerAngles = si.m_Component.m_Data.m_Rotation; if (m_DataInspector != null) { m_DataInspector.GetComponent <VCEUIComponentInspector>().Set(si.m_Component.m_Data); } si.m_Component.m_Data.m_Rotation = tmp_rot; // Mirror if (VCEditor.s_Mirror.Enabled_Masked) { Vector3[] old_rots = new Vector3[8]; VCEditor.s_Mirror.MirrorComponent(si.m_Component.m_Data); for (int i = 0; i < VCEditor.s_Mirror.OutputCnt; ++i) { old_rots[i] = VCEditor.s_Mirror.ComponentOutput[i].m_Rotation; } VCComponentData tmpdata = si.m_Component.m_Data.Copy(); tmpdata.m_Rotation = si.m_NewRotation; VCEditor.s_Mirror.MirrorComponent(tmpdata); for (int i = 1; i < VCEditor.s_Mirror.OutputCnt; ++i) { VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i]; List <VCComponentData> edits = VCEditor.s_Scene.m_IsoData.FindComponentsAtPos(image.m_Position, image.m_ComponentId); foreach (VCComponentData iter in edits) { if (!VCEMath.IsEqualRotation(iter.m_Rotation, old_rots[i])) { continue; } if (iter.m_Scale != image.m_Scale) { 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) { iter.m_Entity.transform.eulerAngles = image.m_Rotation; } } } } // End 'mirror' } }
// Moving Gizmo void OnMoving(Vector3 offset) { float hvs = VCEditor.s_Scene.m_Setting.m_VoxelSize * 0.5f; VCEditor.s_Mirror.CalcPrepare(hvs * 2); foreach (SelectInfo si in m_Selection) { si.m_DragPosition += offset; si.m_NewPosition.x = Mathf.Round(si.m_DragPosition.x / hvs) * hvs; si.m_NewPosition.y = Mathf.Round(si.m_DragPosition.y / hvs) * hvs; si.m_NewPosition.z = Mathf.Round(si.m_DragPosition.z / hvs) * hvs; Vector3 tmp_pos = si.m_Component.m_Data.m_Position; si.m_Component.m_Data.m_Position = si.m_NewPosition; si.m_Component.m_Data.Validate(); si.m_NewPosition = si.m_Component.transform.position = si.m_Component.m_Data.m_Position; if (m_DataInspector != null) { m_DataInspector.GetComponent <VCEUIComponentInspector>().Set(si.m_Component.m_Data); } si.m_Component.m_Data.m_Position = tmp_pos; // Mirror if (VCEditor.s_Mirror.Enabled_Masked) { Vector3[] old_poses = 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; } VCComponentData tmpdata = si.m_Component.m_Data.Copy(); tmpdata.m_Position = si.m_NewPosition; VCEditor.s_Mirror.MirrorComponent(tmpdata); for (int i = 1; i < VCEditor.s_Mirror.OutputCnt; ++i) { VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i]; 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, image.m_Rotation)) { continue; } if (iter.m_Scale != image.m_Scale) { 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) { iter.m_Entity.transform.position = image.m_Position; } } } } // End 'mirror' } }
// 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!"); } }