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); }
// 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"); } }