Exemplo n.º 1
0
 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> ());
     }
 }
Exemplo n.º 2
0
    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();
    }
Exemplo n.º 3
0
    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'
        }
    }
Exemplo n.º 4
0
    // 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'
        }
    }
Exemplo n.º 5
0
    // 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!");
        }
    }