public override void Redo()
    {
        VCComponentData data = VCEditor.s_Scene.m_IsoData.m_Components[m_Index];

        data.Import(m_NewData.Export());
        data.UpdateEntity(true);
    }
    public void MirrorComponent(VCComponentData cdata)
    {
        ComponentOutput[0] = cdata.Copy();
        OutputCnt          = 1;

        if (XPlane_Masked)
        {
            MirrorComponentOnce(1);
        }
        if (YPlane_Masked)
        {
            MirrorComponentOnce(2);
        }
        if (ZPlane_Masked)
        {
            MirrorComponentOnce(4);
        }
        if (XYAxis_Masked)
        {
            MirrorComponentOnce(3);
        }
        if (YZAxis_Masked)
        {
            MirrorComponentOnce(6);
        }
        if (ZXAxis_Masked)
        {
            MirrorComponentOnce(5);
        }
        if (Point_Masked)
        {
            MirrorComponentOnce(7);
        }
    }
 public override void Set(VCComponentData data)
 {
     data.Validate();
     m_Data = data.Copy() as VCDecalData;
     m_PositionInput.Vector    = m_Data.m_Position;
     m_RotationInput.Vector    = m_Data.m_Rotation;
     m_ScaleInput.Vector       = new Vector3(m_Data.m_Size, m_Data.m_Size, m_Data.m_Depth);
     m_MirroredCheck.isChecked = m_Data.m_Mirrored;
     m_ColorPicker.FinalColor  = m_Data.m_Color;
     if (m_Data.m_ShaderIndex == 0)
     {
         m_Shader0Check.isChecked = true;
         m_Shader1Check.isChecked = false;
     }
     else if (m_Data.m_ShaderIndex == 1)
     {
         m_Shader1Check.isChecked = true;
         m_Shader0Check.isChecked = false;
     }
     else
     {
         m_Shader0Check.isChecked = true;
         m_Shader1Check.isChecked = false;
     }
 }
Beispiel #4
0
 public override void Set(VCComponentData data)
 {
     data.Validate();
     m_Data = data.Copy() as VCFixedPartData;
     m_PositionInput.Vector   = m_Data.m_Position;
     m_VisibleCheck.isChecked = m_Data.m_Visible;
 }
    public override void Undo()
    {
        VCComponentData data = m_Data.Copy();

        data.CreateEntity(true, null);
        VCEditor.s_Scene.m_IsoData.m_Components.Insert(m_Index, data);
    }
Beispiel #6
0
    public override void Redo()
    {
        VCComponentData data = m_Data.Copy();

        data.CreateEntity(true, null);
        VCEditor.s_Scene.m_IsoData.m_Components.Insert(m_Index, data);
        VCESelectComponent.s_LastCreate = data.m_Entity.GetComponent <VCEComponentTool>();
    }
Beispiel #7
0
    public virtual VCComponentData Copy()
    {
        VCComponentData copydata = Create(m_Type, Export());

        copydata.m_Entity  = m_Entity;
        copydata.m_CurrIso = m_CurrIso;
        return(copydata);
    }
    public override void Redo()
    {
        VCComponentData data = VCEditor.s_Scene.m_IsoData.m_Components[m_Index];

        data.m_Position = m_NewPosition;
        data.m_Rotation = m_NewRotation;
        data.m_Scale    = m_NewScale;
        data.UpdateEntity(true);
    }
 public override void Set(VCComponentData data)
 {
     data.Validate();
     m_Data = data.Copy() as VCTriphaseFixedPartData;
     m_PositionInput.Vector   = m_Data.m_Position;
     m_VisibleCheck.isChecked = m_Data.m_Visible;
     m_Phase0Check.isChecked  = (m_Data.m_Phase == 0);
     m_Phase1Check.isChecked  = (m_Data.m_Phase == 1);
     m_Phase2Check.isChecked  = (m_Data.m_Phase == 2);
 }
Beispiel #10
0
 public override void Set(VCComponentData data)
 {
     data.Validate();
     m_Data = data.Copy() as VCObjectLightData;
     m_PositionInput.Vector   = m_Data.m_Position;
     m_RotationInput.Vector   = m_Data.m_Rotation;
     m_ScaleInput.Vector      = m_Data.m_Scale;
     m_ColorPicker.FinalColor = m_Data.m_Color;
     m_VisibleCheck.isChecked = m_Data.m_Visible;
 }
Beispiel #11
0
    public static VCComponentData Create(EVCComponent type, byte[] buffer)
    {
        VCComponentData cdata = Create(type);

        if (cdata != null)
        {
            cdata.Import(buffer);
        }
        return(cdata);
    }
 public override void Set(VCComponentData data)
 {
     data.Validate();
     m_Data = data.Copy() as VCQuadphaseFixedPartData;
     m_PositionInput.Vector    = m_Data.m_Position;
     m_VisibleCheck.isChecked  = m_Data.m_Visible;
     m_Phase0Check.isChecked   = (m_Data.m_Phase & 1) == 0;
     m_Phase1Check.isChecked   = (m_Data.m_Phase & 1) == 1;
     m_SmallBigCheck.isChecked = (m_Data.m_Phase & 2) == 2;
     m_MotorCheck.isChecked    = (m_Data.m_Phase & 4) != 4;
 }
 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 override void Set(VCComponentData data)
    {
        data.Validate();
        m_Data = data.Copy() as VCObjectPivotData;
        m_PositionInput.Vector = m_Data.m_Position;
        m_RotationInput.Vector = m_Data.m_Rotation;
        m_ScaleInput.Vector    = m_Data.m_Scale;

        m_VisibleCheck.isChecked = m_Data.m_Visible;

        m_AnlgeLable.text         = m_Data.m_PivotAng.ToString();
        m_AnlgeSlider.sliderValue = Convert.ToSingle(m_Data.m_PivotAng) / 720 + 0.5f;
    }
 public override void Set(VCComponentData data)
 {
     data.Validate();
     m_Data = data.Copy() as VCFixedHandPartData;
     m_PositionInput.Vector = m_Data.m_Position;
     m_RotationInput.Vector = m_Data.m_Rotation;
     if (m_VisibleCheck)
     {
         m_VisibleCheck.isChecked = m_Data.m_Visible;
     }
     m_Phase0Check.isChecked = m_Data.m_LeftHand;
     m_Phase1Check.isChecked = !m_Data.m_LeftHand;
 }
Beispiel #16
0
 // Find Component
 public int GetComponentIndex(VCComponentData cdata)
 {
     if (cdata != null)
     {
         for (int i = 0; i < m_Components.Count; ++i)
         {
             if (m_Components[i] == cdata)
             {
                 return(i);
             }
         }
     }
     return(-1);
 }
Beispiel #17
0
    public static VCComponentData Create(VCPartInfo part)
    {
        if (part == null)
        {
            return(null);
        }
        VCComponentData data = Create(part.m_Type);

        data.m_ComponentId = part.m_ID;
        data.m_Type        = part.m_Type;
        data.m_Position    = Vector3.zero;
        data.m_Rotation    = Vector3.zero;
        data.m_Scale       = Vector3.one;
        data.m_Visible     = true;
        return(data);
    }
    void ShowDataInspector(string respath, VCComponentData setdata)
    {
        HideDataInspector();
        m_DataInspector = GameObject.Instantiate(Resources.Load(respath) as GameObject) as GameObject;
        m_DataInspector.transform.parent        = VCEditor.Instance.m_UI.m_InspectorGroup;
        m_DataInspector.transform.localPosition = new Vector3(0, -30, -1f);
        m_DataInspector.transform.localScale    = Vector3.one;
        m_DataInspector.SetActive(true);
        VCEUIComponentInspector cins = m_DataInspector.GetComponent <VCEUIComponentInspector>();

        cins.m_SelectBrush = this;
        cins.Set(setdata);

        // Bone Panel
        ShowBonePanel();
    }
    public override void Set(VCComponentData data)
    {
        data.Validate();
        m_Data = data.Copy() as VCGeneralPartData;
        m_PositionInput.Vector = m_Data.m_Position;
        m_RotationInput.Vector = m_Data.m_Rotation;
        m_ArmorPartIndex       = m_Data.m_ExtendData;
        if (m_VisibleCheck)
        {
            m_VisibleCheck.isChecked = m_Data.m_Visible;
        }

        WhiteCat.VCPArmorPivot m_VCPArmorPivot = m_SelectBrush.GetVCPArmorPivotByIndex(m_Data.m_ExtendData);
        if (m_VCPArmorPivot)
        {
            VCEditor.Instance.m_UI.bonePanel.Show(m_VCPArmorPivot);
        }
    }
 void OnSelectionChange()
 {
     s_LastCreate = null;
     if (m_Selection.Count == 1)
     {
         VCComponentData sel_data       = m_Selection[0].m_Component.m_Data;
         VCPartData      sel_part_data  = sel_data as VCPartData;
         VCDecalData     sel_decal_data = sel_data as VCDecalData;
         if (sel_part_data != null)
         {
             ShowDataInspector(VCConfig.s_PartTypes[sel_part_data.m_Type].m_InspectorRes, sel_data);
         }
         else if (sel_decal_data != null)
         {
             ShowDataInspector("GUI/Prefabs/Inspectors/Components Inspectors/inspector decal image", sel_data);
         }
     }
     if (m_Selection.Count > 0)
     {
         VCEStatusBar.ShowText(m_Selection.Count.ToString() + " " + "component(s)".ToLocalizationString() + " " + "selected".ToLocalizationString(), 4);
     }
 }
    private void MirrorComponentOnce(int mirror)
    {
        for (int i = 0; i < OutputCnt; ++i)
        {
            VCComponentData real  = ComponentOutput[i];
            VCComponentData image = ComponentOutput[i].Copy();
            ComponentOutput[i + OutputCnt] = image;
            image.m_Position.x             = ((mirror & 1) > 0)  ?  (2.0f * m_WorldPosX - real.m_Position.x)  :  (real.m_Position.x);
            image.m_Position.y             = ((mirror & 2) > 0)  ?  (2.0f * m_WorldPosY - real.m_Position.y)  :  (real.m_Position.y);
            image.m_Position.z             = ((mirror & 4) > 0)  ?  (2.0f * m_WorldPosZ - real.m_Position.z)  :  (real.m_Position.z);

            bool xsym = true;
            if (image is VCPartData)
            {
                xsym = (VCConfig.s_Parts[image.m_ComponentId].m_Symmetric == 1);
            }
            if (image is VCDecalData)
            {
                xsym = true;
            }

            if (xsym)
            {
                if ((mirror & 1) > 0)
                {
                    //image.m_Rotation.x = image.m_Rotation.x;
                    image.m_Rotation.y = -image.m_Rotation.y;
                    image.m_Rotation.z = -image.m_Rotation.z;
                    if (image is IVCMultiphaseComponentData)
                    {
                        (image as IVCMultiphaseComponentData).InversePhase();
                    }
                }
                if ((mirror & 2) > 0)
                {
                    image.m_Rotation.x = -image.m_Rotation.x;
                    //image.m_Rotation.y = image.m_Rotation.y;
                    image.m_Rotation.z = 180f - image.m_Rotation.z;
                    if (image is IVCMultiphaseComponentData)
                    {
                        (image as IVCMultiphaseComponentData).InversePhase();
                    }
                }
                if ((mirror & 4) > 0)
                {
                    //image.m_Rotation.x = image.m_Rotation.x;
                    image.m_Rotation.y = 180f - image.m_Rotation.y;
                    image.m_Rotation.z = -image.m_Rotation.z;
                    if (image is IVCMultiphaseComponentData)
                    {
                        (image as IVCMultiphaseComponentData).InversePhase();
                    }
                }
            }
            else
            {
                if ((mirror & 1) > 0)
                {
                    if (image is IVCMultiphaseComponentData)
                    {
                        (image as IVCMultiphaseComponentData).InversePhase();
                    }
                }
            }

            image.m_Rotation = VCEMath.NormalizeEulerAngle(image.m_Rotation);
        }
        OutputCnt = OutputCnt << 1;
    }
Beispiel #22
0
    public bool Import(byte[] buffer, VAOption options)
    {
        if (buffer == null)
        {
            return(false);
        }
        Reset(options);
        int min_iso_size = 48;

        if (buffer.Length < min_iso_size)
        {
            return(false);
        }

        using (MemoryStream ms_iso = new MemoryStream(buffer))
        {
            BinaryReader r = new BinaryReader(ms_iso);

            // Header
            string check_str = r.ReadString();                  // r, string
            if (check_str != "VCISO")
            {
                r.Close();
                return(false);
            }
            int l = 0;
            m_HeadInfo.Version  = r.ReadInt32();                // r, int
            m_HeadInfo.Category = (EVCCategory)(r.ReadInt32()); // r, int
            string author = "";
            if (m_HeadInfo.Version >= 0x02020000)
            {
                author = r.ReadString();
            }
            m_HeadInfo.Name = r.ReadString();                   // r, string
            m_HeadInfo.Desc = r.ReadString();                   // r, string
            string remarks = "";
            if (m_HeadInfo.Version >= 0x02020000)
            {
                remarks = r.ReadString();
            }
            m_HeadInfo.xSize = r.ReadInt32();    // r, int
            m_HeadInfo.ySize = r.ReadInt32();    // r, int
            m_HeadInfo.zSize = r.ReadInt32();    // r, int
            l = r.ReadInt32();                   // r, int
            m_HeadInfo.IconTex = r.ReadBytes(l); // r, byte[]
            //m_HeadInfo.EnsureIconTexValid();

            m_HeadInfo.Author  = "";
            m_HeadInfo.Remarks = "";
            if (m_HeadInfo.Version >= 0x02020000)
            {
                for (int c = 0; c < author.Length; ++c)
                {
                    m_HeadInfo.Author += (char)(author[c] ^ (char)(0xAC));
                }
                for (int c = 0; c < remarks.Length; ++c)
                {
                    m_HeadInfo.Remarks += (char)(remarks[c] ^ (char)(0xAC));
                }
            }

            switch (m_HeadInfo.Version)
            {
            case 0x02000000:
            case 0x02010000:
            case 0x02020000:
            case 0x02020001:
            {
                // Counts
                int mat_cnt = r.ReadInt32();                    // r, int
                int dcl_cnt = 0;
                if (m_HeadInfo.Version >= 0x02010000)
                {
                    dcl_cnt = r.ReadInt32();                    // r, int
                }
                int com_cnt = r.ReadInt32();                    // r, int
                int vxl_cnt = r.ReadInt32();                    // r, int
                int clr_cnt = r.ReadInt32();                    // r, int

                // Materials
                for (int i = 0; i < mat_cnt; ++i)
                {
                    ulong guid = r.ReadUInt64();                        // r, ulong;
                    if (guid != 0)
                    {
                        l = r.ReadInt32();                              // r, int
                        byte[] mat_buffer = r.ReadBytes(l);             // r, byte[]

                        // Option
                        // If for editor, find mats in VCEAssetMgr for the iso, or create mats in VCEAssetMgr.
                        if (m_Options.ForEditor)
                        {
                            //if ( VCEAssetMgr.s_Materials.ContainsKey(guid) )
                            //{
                            //    m_Materials[i] = VCEAssetMgr.s_Materials[guid];
                            //}
                            //else
                            //{
                            //    VAMaterial vcmat = new VAMaterial ();
                            //    vcmat.Import(mat_buffer);
                            //    VCEAssetMgr.s_TempMaterials.Add(guid, vcmat);
                            //    m_Materials[i] = vcmat;
                            //}
                        }
                        // If not for editor, these materials are belong to the iso.
                        else
                        {
                            m_Materials[i] = new VAMaterial();
                            m_Materials[i].Import(mat_buffer);
                        }
                    }
                }
                // Decals
                for (int i = 0; i < dcl_cnt; ++i)
                {
                    ulong guid = r.ReadUInt64();                        // r, ulong;
                    if (guid != 0)
                    {
                        l = r.ReadInt32();                              // r, int
                        byte[] dcl_buffer = r.ReadBytes(l);             // r, byte[]

                        // Option
                        // If for editor, find decals in VCEAssetMgr for the iso, or create decals in VCEAssetMgr.
                        if (m_Options.ForEditor)
                        {
                            if (VCEAssetMgr.s_Decals.ContainsKey(guid))
                            {
                                m_DecalAssets[i] = VCEAssetMgr.s_Decals[guid];
                            }
                            else
                            {
                                VCDecalAsset vcdcl = new VCDecalAsset();
                                vcdcl.Import(dcl_buffer);
                                VCEAssetMgr.s_TempDecals.Add(guid, vcdcl);
                                m_DecalAssets[i] = vcdcl;
                            }
                        }
                        // If not for editor, these decals are belong to the iso.
                        else
                        {
                            m_DecalAssets[i] = new VCDecalAsset();
                            m_DecalAssets[i].Import(dcl_buffer);
                        }
                    }
                }

                // Read compressed data
                //
                using (MemoryStream ms_zip = new MemoryStream())
                {
                    l = r.ReadInt32();                          // r, int
                    ms_zip.Write(r.ReadBytes(l), 0, l);         // r, byte[]	zip, byte[]

                    // Decompress data
                    //
                    using (MemoryStream ms_unzip = new MemoryStream())
                    {
                        ms_zip.Seek((long)(0), SeekOrigin.Begin);
                        IonicZlib.Decompress(ms_zip, ms_unzip);
                        ms_unzip.Seek((long)(0), SeekOrigin.Begin);
                        BinaryReader r_unzip = new BinaryReader(ms_unzip);

                        // Components
                        for (int i = 0; i < com_cnt; ++i)
                        {
                            l = r_unzip.ReadInt32();                                    // unzip, int
                            if (l > 0)
                            {
                                byte[]          com_buffer = r_unzip.ReadBytes(l);                              // unzip, byte[]
                                EVCComponent    com_type   = (EVCComponent)(r_unzip.ReadInt32());               // unzip, int
                                VCComponentData cdata      = VCComponentData.Create(com_type, com_buffer);
                                if (cdata != null)
                                {
                                    //cdata.m_CurrIso = this;
                                    m_Components.Add(cdata);
                                }
                            }
                        }

                        if (m_HeadInfo.Version >= 0x02020001)
                        {
                            ulong sig = r_unzip.ReadUInt64();
                            if (m_HeadInfo.HeadSignature != sig)
                            {
                                Debug.LogError("Check sig failed");
                                return(false);
                            }
                        }

                        // Voxels
                        for (int i = 0; i < vxl_cnt; ++i)
                        {
                            int    key = r_unzip.ReadInt32();                           // unzip, int
                            ushort val = r_unzip.ReadUInt16();                          // unzip, ushort
                            m_Voxels[key] = (VCVoxel)(val);
                        }

                        // Colors
                        for (int i = 0; i < clr_cnt; ++i)
                        {
                            int     key = r_unzip.ReadInt32();                          // unzip, int
                            Color32 val;
                            val.r = r_unzip.ReadByte();                                 // unzip, byte
                            val.g = r_unzip.ReadByte();                                 // unzip, byte
                            val.b = r_unzip.ReadByte();                                 // unzip, byte
                            val.a = r_unzip.ReadByte();                                 // unzip, byte
                            m_Colors.Add(key, val);
                        }
                        r_unzip.Close();
                    }
                }
                break;
            }

            default: return(false);
            }
            r.Close();
            return(true);
        }
    }
 public VCEAlterComponent(int index, VCComponentData old_data, VCComponentData new_data)
 {
     m_Index   = index;
     m_OldData = old_data.Copy();
     m_NewData = new_data.Copy();
 }
    // 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'
        }
    }
    protected override void Do()
    {
        if (VCEditor.SelectedDecalGUID == 0)
        {
            return;
        }
        if (VCEditor.SelectedDecalIndex < 0)
        {
            return;
        }
        if (VCEditor.SelectedDecal == null)
        {
            return;
        }
        m_Action = new VCEAction();

        VCDecalData dcldata = VCComponentData.CreateDecal() as VCDecalData;

        if (dcldata != null)
        {
            dcldata.m_ComponentId = VCDecalData.s_ComponentId;
            dcldata.m_Type        = EVCComponent.cpDecal;
            dcldata.m_Position    = m_DecalInst.transform.localPosition;
            dcldata.m_Rotation    = VCEMath.NormalizeEulerAngle(m_DecalInst.transform.localEulerAngles);
            dcldata.m_Scale       = Vector3.one;
            dcldata.m_Visible     = true;
            dcldata.m_CurrIso     = VCEditor.s_Scene.m_IsoData;
            dcldata.m_Guid        = VCEditor.SelectedDecalGUID;
            dcldata.m_AssetIndex  = VCEditor.SelectedDecalIndex;
            dcldata.m_Size        = m_DecalInst.m_Size;
            dcldata.m_Depth       = m_DecalInst.m_Depth;
            dcldata.m_Mirrored    = m_DecalInst.m_Mirrored;
            dcldata.m_ShaderIndex = m_DecalInst.m_ShaderIndex;
            dcldata.m_Color       = m_DecalInst.m_Color;
            dcldata.Validate();

            ulong olddcl_guid = VCEditor.s_Scene.m_IsoData.DecalGUID(VCEditor.SelectedDecalIndex);
            ulong newdcl_guid = VCEditor.SelectedDecalGUID;
            if (olddcl_guid != newdcl_guid)
            {
                VCEAlterDecalMap modify = new VCEAlterDecalMap(VCEditor.SelectedDecalIndex, olddcl_guid, newdcl_guid);
                modify.Redo();
                m_Action.Modifies.Add(modify);
            }

            VCEditor.s_Mirror.CalcPrepare(VCEditor.s_Scene.m_Setting.m_VoxelSize);
            // Mirror
            if (VCEditor.s_Mirror.Enabled_Masked)
            {
                VCEditor.s_Mirror.MirrorComponent(dcldata);

                for (int i = VCEditor.s_Mirror.OutputCnt - 1; i >= 0; --i)
                {
                    VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i];
                    if (VCEditor.s_Scene.m_IsoData.IsComponentIn(image.m_Position))
                    {
                        VCEAddComponent modify = new VCEAddComponent(VCEditor.s_Scene.m_IsoData.m_Components.Count, image);
                        modify.Redo();
                        m_Action.Modifies.Add(modify);
                    }
                }
            }
            // No mirror
            else
            {
                VCEAddComponent modify = new VCEAddComponent(VCEditor.s_Scene.m_IsoData.m_Components.Count, dcldata);
                modify.Redo();
                m_Action.Modifies.Add(modify);
            }
            m_Action.Register();
        }
        else
        {
            Debug.LogWarning("Decal data create failed");
        }
    }
    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'
        }
    }
    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();
    }
 public VCEDelComponent(int index, VCComponentData data)
 {
     m_Index = index;
     m_Data  = data.Copy();
 }
Beispiel #29
0
 public abstract void Set(VCComponentData data);
Beispiel #30
0
    protected override void Do()
    {
        m_Action = new VCEAction();

        VCComponentData data = VCComponentData.Create(VCEditor.SelectedPart);

        if (data != null)
        {
            data.m_ComponentId = VCEditor.SelectedPart.m_ID;
            data.m_Type        = VCEditor.SelectedPart.m_Type;
            data.m_Position    = m_PartInst.transform.localPosition;
            data.m_Rotation    = Vector3.zero;
            data.m_Scale       = Vector3.one;
            data.m_Visible     = true;
            data.m_CurrIso     = VCEditor.s_Scene.m_IsoData;
            data.Validate();

            VCEditor.s_Mirror.CalcPrepare(VCEditor.s_Scene.m_Setting.m_VoxelSize);
            // Mirror
            if (VCEditor.s_Mirror.Enabled_Masked)
            {
                VCEditor.s_Mirror.MirrorComponent(data);

                for (int i = VCEditor.s_Mirror.OutputCnt - 1; i >= 0; --i)
                {
                    VCComponentData image = VCEditor.s_Mirror.ComponentOutput[i];
                    if (VCEditor.s_Scene.m_IsoData.IsComponentIn(image.m_Position))
                    {
                        List <VCComponentData> conflicts = VCEditor.s_Scene.m_IsoData.FindComponentsAtPos(image.m_Position, image.m_ComponentId);
                        foreach (VCComponentData conflict in conflicts)
                        {
                            if (conflict.m_Scale != image.m_Scale)
                            {
                                continue;
                            }
                            if (conflict.m_Visible != image.m_Visible)
                            {
                                continue;
                            }

                            if (image is IVCMultiphaseComponentData && conflict is IVCMultiphaseComponentData)
                            {
                                if ((image as IVCMultiphaseComponentData).Phase != (conflict as IVCMultiphaseComponentData).Phase)
                                {
                                    continue;
                                }
                            }

                            // Delete conflict
                            int index = VCEditor.s_Scene.m_IsoData.GetComponentIndex(conflict);
                            if (index < 0)
                            {
                                continue;
                            }
                            VCEDelComponent del = new VCEDelComponent(index, conflict);
                            del.Redo();
                            m_Action.Modifies.Add(del);
                        }
                        VCEAddComponent modify = new VCEAddComponent(VCEditor.s_Scene.m_IsoData.m_Components.Count, image);
                        modify.Redo();
                        m_Action.Modifies.Add(modify);
                    }
                }
                m_Action.Register();
            }
            // No mirror
            else
            {
                VCFixedHandPartData fixdata = data as VCFixedHandPartData;
                if (fixdata != null)
                {
                    fixdata.m_LeftHand = data.m_Position.x < VCEditor.s_Scene.m_IsoData.m_HeadInfo.xSize * VCEditor.s_Scene.m_Setting.m_VoxelSize * 0.5f;
                }

                VCEAddComponent modify = new VCEAddComponent(VCEditor.s_Scene.m_IsoData.m_Components.Count, data);
                m_Action.Modifies.Add(modify);
                m_Action.Do();
            }
        }
        else
        {
            Debug.LogWarning("Forget to add this part's implementation ?");
        }
    }