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;
     }
 }
    public override VCComponentData Get()
    {
        VCDecalData data = m_Data.Copy() as VCDecalData;

        data.m_Position = m_PositionInput.Vector;
        data.m_Rotation = VCEMath.NormalizeEulerAngle(m_RotationInput.Vector);
        Vector3 scale = m_ScaleInput.Vector;

        data.m_Size     = scale.x;
        data.m_Depth    = scale.z;
        scale.y         = scale.x;
        data.m_Mirrored = m_MirroredCheck.isChecked;
        data.m_Color    = m_ColorPicker.FinalColor;
        if (m_Shader0Check.isChecked)
        {
            data.m_ShaderIndex = 0;
        }
        else if (m_Shader1Check.isChecked)
        {
            data.m_ShaderIndex = 1;
        }
        else
        {
            data.m_ShaderIndex = 0;
        }

        data.Validate();
        m_PositionInput.Vector = data.m_Position;
        m_RotationInput.Vector = data.m_Rotation;
        m_ScaleInput.Vector    = scale;

        return(data);
    }
Exemple #3
0
 // Query a decal index for a specified VCDecalAsset
 public int QueryNewDecalIndex(VCDecalAsset vcdcl)
 {
     if (vcdcl == null)
     {
         return(-1);
     }
     // Find the same decal
     for (int i = 0; i < DECAL_ARR_CNT; ++i)
     {
         if (m_DecalAssets[i] != null && vcdcl.m_Guid == m_DecalAssets[i].m_Guid)
         {
             return(i);
         }
     }
     // Find a null position
     for (int i = 0; i < DECAL_ARR_CNT; ++i)
     {
         if (m_DecalAssets[i] == null)
         {
             return(i);
         }
     }
     // Full, find not used
     int[] used_count = new int [DECAL_ARR_CNT];
     for (int i = 0; i < DECAL_ARR_CNT; ++i)
     {
         used_count[i] = 0;
     }
     foreach (VCComponentData cdata in m_Components)
     {
         if (cdata.m_Type == EVCComponent.cpDecal)
         {
             VCDecalData ddata = cdata as VCDecalData;
             if (ddata != null)
             {
                 if (ddata.m_AssetIndex >= 0 && ddata.m_AssetIndex < DECAL_ARR_CNT)
                 {
                     used_count[ddata.m_AssetIndex]++;
                 }
             }
         }
     }
     for (int i = 0; i < DECAL_ARR_CNT; ++i)
     {
         if (used_count[i] == 0)
         {
             return(i);
         }
     }
     // Unfortunately, no decal avaliable
     return(-1);
 }
 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);
     }
 }
 public void OnApplyClick()
 {
     m_SelectBrush.ApplyInspectorChange();
     m_Data = Get().Copy() as VCDecalData;
 }
    void Update()
    {
        if (VCEditor.SelectedDecalGUID == 0)
        {
            return;
        }
        if (VCEditor.SelectedDecalIndex < 0)
        {
            return;
        }
        if (VCEditor.SelectedDecal == null)
        {
            return;
        }
        if (VCEInput.s_Cancel)
        {
            Cancel();
            return;
        }
        m_DecalInst.m_Guid = VCEditor.SelectedDecalGUID;

        float      voxel_size = VCEditor.s_Scene.m_Setting.m_VoxelSize;
        RaycastHit rch;

        if (!VCEInput.s_MouseOnUI && VCEMath.RayCastVoxel(VCEInput.s_PickRay, out rch, VCEMath.MC_ISO_VALUE))
        {
            AdjustBrush();
            m_DecalInst.gameObject.SetActive(true);
            Vector3    point  = rch.point * 2;
            IntVector3 ipoint = new IntVector3(point);
            m_Tool.SetPivotPos(ipoint.ToVector3() * 0.5f * voxel_size);
            m_DecalInst.transform.localRotation = Quaternion.LookRotation(-rch.normal);
            m_DecalInst.transform.Rotate(-rch.normal, m_RotateAngle, Space.World);

            bool canput = true;
            List <VCComponentData> poscdatas = VCEditor.s_Scene.m_IsoData.FindComponentsAtPos(m_DecalInst.transform.localPosition, VCDecalData.s_ComponentId);
            foreach (VCComponentData cd in poscdatas)
            {
                VCDecalData ddata = cd as VCDecalData;
                if (ddata != null)
                {
                    if (ddata.m_Guid == m_DecalInst.m_Guid)
                    {
                        canput = false;
                        break;
                    }
                }
            }

            // Mirror
            if (VCEditor.s_Mirror.Enabled_Masked)
            {
                VCEditor.s_Mirror.CalcPrepare(VCEditor.s_Scene.m_Setting.m_VoxelSize);
                if (m_DecalInst.transform.localPosition.x == VCEditor.s_Mirror.WorldPos.x && VCEditor.s_Mirror.XPlane_Masked)
                {
                    canput = false;
                }
                if (m_DecalInst.transform.localPosition.y == VCEditor.s_Mirror.WorldPos.y && VCEditor.s_Mirror.YPlane_Masked)
                {
                    canput = false;
                }
                if (m_DecalInst.transform.localPosition.z == VCEditor.s_Mirror.WorldPos.z && VCEditor.s_Mirror.ZPlane_Masked)
                {
                    canput = false;
                }
            }
            if (canput)
            {
                m_Tool.m_SelBound.m_BoundColor = GLComponentBound.s_Green;
                m_Tool.m_SelBound.m_Highlight  = false;
            }
            else
            {
                m_Tool.m_SelBound.m_BoundColor = GLComponentBound.s_Red;
                m_Tool.m_SelBound.m_Highlight  = true;
            }

            if (Input.GetMouseButtonDown(0) && canput)
            {
                Do();
            }
        }
        else
        {
            m_DecalInst.gameObject.SetActive(false);
        }
    }
    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");
        }
    }