public void InitClone(VFCreationDataSource dataSource, VCMeshMgr mesh_mgr, bool for_editor = true) { m_ForEditor = for_editor; m_DataSource = dataSource; // Mesh manager m_MeshMgr = mesh_mgr; }
// Cons & Des for double public void Init(IntVector3 editor_size, VCMeshMgr mesh_mgr, bool for_editor, int meshIndex) { m_ForEditor = for_editor; // Create chunk data source int nx = Mathf.CeilToInt((float)(editor_size.x + 1) / CHUNK_VOXEL_NUM); int ny = Mathf.CeilToInt((float)(editor_size.y + 1) / CHUNK_VOXEL_NUM); int nz = Mathf.CeilToInt((float)(editor_size.z + 1) / CHUNK_VOXEL_NUM); m_DataSource = new VFCreationDataSource(nx, ny, nz); SN++; int nx05 = Mathf.CeilToInt(0.5f * nx); int nx0 = mesh_mgr.m_DaggerMesh ? mesh_mgr.m_LeftSidePos ? 0 : nx05 : 0; int nxMax = mesh_mgr.m_DaggerMesh ? mesh_mgr.m_LeftSidePos ? nx05 : nx : nx; // Create new chunk for (int x = nx0; x < nxMax; x++) { for (int y = 0; y < ny; y++) { for (int z = 0; z < nz; z++) { VFVoxelChunkData chunk = new VFVoxelChunkData(null, VFVoxelChunkData.S_ChunkDataAir); chunk.HelperProc = this; IntVector3 snpos = PackSNToChunkPos(new IntVector3(x, y, z), SN); m_DataSource.writeChunk(snpos.x, snpos.y, snpos.z, chunk, 0); } } } // Mesh manager m_MeshMgr = mesh_mgr; }
void Start() { m_Radius = s_RecentRadius; m_Hardness = s_RecentHardness; m_Strength = s_RecentStrength; m_GLCursor.m_Airbrush = this; m_MeshMgr = VCEditor.Instance.m_MeshMgr; // continous drawing vars m_simDist = VCEditor.s_Scene.m_Setting.EditorWorldSize.magnitude * 0.2f; m_lastHit = Vector3.zero; m_lastDraw = Vector3.one * (-100); // Inspector m_Inspector = VCEUIFreeAirbrushInspector.Instantiate(m_InspectorRes) as VCEUIFreeAirbrushInspector; m_Inspector.transform.parent = VCEditor.Instance.m_UI.m_InspectorGroup; m_Inspector.transform.localPosition = new Vector3(0, -10, 0); m_Inspector.transform.localScale = Vector3.one; m_Inspector.m_ParentBrush = this; m_Inspector.gameObject.SetActive(true); if (m_Eraser) { VCEStatusBar.ShowText("Eraser - Erase color on voxel blocks".ToLocalizationString(), 7, true); } else { VCEStatusBar.ShowText("Airbrush - Paint color on voxel blocks".ToLocalizationString(), 7, true); } }
void InitCreationID(int creationId) { if (m_Computer != null) { m_Computer.Destroy(); } CreationData crd = CreationMgr.GetCreation(creationId); if (crd != null) { m_CreationID = creationId; m_CreationData = crd; m_MeshMgr = GetComponent <VCMeshMgr>(); m_Computer = new VCMCComputer(); m_Computer.Init(new IntVector3(crd.m_IsoData.m_HeadInfo.xSize, crd.m_IsoData.m_HeadInfo.ySize, crd.m_IsoData.m_HeadInfo.zSize), m_MeshMgr, false); // [VCCase] - Create box collider if (crd.m_Attribute.m_Type == ECreation.Vehicle || crd.m_Attribute.m_Type == ECreation.Aircraft || crd.m_Attribute.m_Type == ECreation.Boat || crd.m_Attribute.m_Type == ECreation.SimpleObject || crd.m_Attribute.m_Type == ECreation.AITurret) { m_Computer.m_CreateBoxCollider = true; } } else { m_CreationID = 0; m_CreationData = null; m_Computer = null; m_MeshMgr = null; } }
public void Destroy() { // Destroy current Data Source if (m_DataSource != null) { for (int x = 0; x < m_DataSource.ChunkNum.x; x++) { for (int y = 0; y < m_DataSource.ChunkNum.y; y++) { for (int z = 0; z < m_DataSource.ChunkNum.z; z++) { VFVoxelChunkData vc = m_DataSource.readChunk(x, y, z); if (vc != null) { vc.ClearMem(); } } } } m_DataSource = null; } m_MeshMgr = null; }
void InitCreationIDClone(int creationId, VFCreationDataSource dataSource, VCMeshMgr mesh_mgr) { if (m_Computer != null) { m_Computer.Destroy(); } CreationData crd = CreationMgr.GetCreation(creationId); if (crd != null) { m_CreationID = creationId; m_CreationData = crd; m_MeshMgr = mesh_mgr; m_MeshMgr.m_LeftSidePos = !mesh_mgr.m_LeftSidePos; m_Computer = new VCMCComputer(); m_Computer.InitClone(dataSource, m_MeshMgr, false); if (crd.m_Attribute.m_Type == ECreation.Vehicle || crd.m_Attribute.m_Type == ECreation.Aircraft || crd.m_Attribute.m_Type == ECreation.Boat || crd.m_Attribute.m_Type == ECreation.SimpleObject || crd.m_Attribute.m_Type == ECreation.AITurret) { m_Computer.m_CreateBoxCollider = true; } } else { m_CreationID = 0; m_CreationData = null; m_Computer = null; m_MeshMgr = null; } }
public void InitClone(WhiteCat.CreationController controller, VFCreationDataSource dataSource, VCMeshMgr mesh)//) { m_lastVisible = false; m_Visible = false; InitCreationIDClone(controller.creationData.m_ObjectID, dataSource, mesh); // InitCreationID(controller.creationData.m_ObjectID); this.creationController = controller; controller.onUpdate += UpdateMeshLoader; }
static GameObject InstantiateCreationModel(CreationData crd, Action <Transform> initTransform) { if (crd == null) { return(null); } if (crd.m_Prefab == null) { return(null); } GameObject product = null; if (lastProduct) { var drag = lastProduct.GetComponent <ItemDraggingBase>(); if (drag) { if (lastCreationData == crd) { UnityEngine.Object.Destroy(drag); product = lastProduct; } else { UnityEngine.Object.Destroy(lastProduct); } } lastProduct = null; lastCreationData = null; } if (!product) { product = UnityEngine.Object.Instantiate(crd.m_Prefab) as GameObject; lastProduct = product; lastCreationData = crd; } product.transform.SetParent(null, false); product.SetActive(true); if (initTransform != null) { initTransform(product.transform); } else { product.transform.position = Vector3.zero; product.transform.localScale = Vector3.one; product.transform.rotation = Quaternion.identity; } // 新创建物体初始化 if (lastProduct) { var creationController = product.GetComponent <CreationController>(); creationController.enabled = true; if (crd.m_IsoData.m_HeadInfo.Category == EVCCategory.cgDbSword) { // Mesh manager VCMeshMgr[] meshmgrs = product.GetComponentsInChildren <VCMeshMgr>(); CreationMeshLoader[] meshloader = new CreationMeshLoader[2]; for (int i = 0; i < meshmgrs.Length; i++) { meshmgrs[i].m_ColorMap = crd.m_IsoData.m_Colors; meshmgrs[i].Init(); meshloader[i] = meshmgrs[i].gameObject.AddComponent <CreationMeshLoader>(); meshloader[i].m_Meshdagger = crd.m_IsoData.m_HeadInfo.Category == EVCCategory.cgDbSword; meshloader[i].Init(creationController); } // Mesh loader //meshloader[0].Init(creationController); //meshloader[1].Init(creationController); //meshloader[1].InitClone(creationController, meshloader[0].m_Computer.m_DataSource, meshmgrs[1]); } else { // Mesh manager VCMeshMgr meshmgr = product.GetComponentInChildren <VCMeshMgr>(); meshmgr.m_ColorMap = crd.m_IsoData.m_Colors; meshmgr.Init(); // Mesh loader CreationMeshLoader meshloader = meshmgr.gameObject.AddComponent <CreationMeshLoader>(); meshloader.Init(creationController); } // meshmgr.m_ColorMap = crd.m_IsoData.m_Colors; //meshmgr.Init(); //// Mesh loader //CreationMeshLoader meshloader = meshmgr.gameObject.AddComponent<CreationMeshLoader>(); //meshloader.Init(creationController); // Decal data VCDecalHandler[] dclhs = product.GetComponentsInChildren <VCDecalHandler>(true); foreach (VCDecalHandler dclh in dclhs) { dclh.m_Iso = crd.m_IsoData; } } return(product); }
private void BuildStructure() { m_Prefab = new GameObject("Creation_" + m_ObjectID.ToString() + " (" + m_IsoData.m_HeadInfo.Name + ")"); m_Prefab.transform.parent = VCEditor.Instance.m_CreationGroup.transform; m_Prefab.transform.localPosition = Vector3.zero; m_Prefab.layer = VCConfig.s_ProductLayer; m_Prefab.SetActive(false); m_Root = new GameObject("Root"); m_Root.transform.parent = m_Prefab.transform; m_Root.transform.localPosition = Vector3.zero; m_Root.layer = VCConfig.s_ProductLayer; m_PartGroup = new GameObject("Parts"); m_PartGroup.transform.parent = m_Root.transform; m_PartGroup.transform.localPosition = Vector3.zero; m_PartGroup.layer = VCConfig.s_ProductLayer; m_MeshGroup = new GameObject("Meshes"); m_MeshGroup.transform.parent = m_Root.transform; m_MeshGroup.transform.localPosition = Vector3.zero; m_MeshGroup.layer = VCConfig.s_ProductLayer; m_DecalGroup = new GameObject("Decals"); m_DecalGroup.transform.parent = m_Root.transform; m_DecalGroup.transform.localPosition = Vector3.zero; m_DecalGroup.layer = VCConfig.s_ProductLayer; m_EffectGroup = new GameObject("Effects"); m_EffectGroup.transform.parent = m_Root.transform; m_EffectGroup.transform.localPosition = Vector3.zero; m_EffectGroup.layer = VCConfig.s_ProductLayer; m_RootL = new GameObject("Root_L"); m_RootL.transform.parent = m_Prefab.transform; m_RootL.transform.localPosition = Vector3.zero; m_RootL.layer = VCConfig.s_ProductLayer; m_PartGroupL = new GameObject("Parts_L"); m_PartGroupL.transform.parent = m_RootL.transform; m_PartGroupL.transform.localPosition = Vector3.zero; m_PartGroupL.layer = VCConfig.s_ProductLayer; m_MeshGroupL = new GameObject("Meshes_L"); m_MeshGroupL.transform.parent = m_RootL.transform; m_MeshGroupL.transform.localPosition = Vector3.zero; m_MeshGroupL.layer = VCConfig.s_ProductLayer; m_DecalGroupL = new GameObject("Decals_L"); m_DecalGroupL.transform.parent = m_RootL.transform; m_DecalGroupL.transform.localPosition = Vector3.zero; m_DecalGroupL.layer = VCConfig.s_ProductLayer; m_EffectGroupL = new GameObject("Effects_L"); m_EffectGroupL.transform.parent = m_RootL.transform; m_EffectGroupL.transform.localPosition = Vector3.zero; m_EffectGroupL.layer = VCConfig.s_ProductLayer; bool dbRoot = m_IsoData.m_HeadInfo.Category == EVCCategory.cgDbSword; VCESceneSetting sceneSetting = m_IsoData.m_HeadInfo.FindSceneSetting(); foreach (VCComponentData cdata in m_IsoData.m_Components) { if (cdata.m_Type == EVCComponent.cpDecal) { if (dbRoot) { bool isleft = cdata.m_Position.x < 0.5f * m_IsoData.m_HeadInfo.xSize * sceneSetting.m_VoxelSize; if (isleft) { cdata.CreateEntity(false, m_DecalGroupL.transform); } else { cdata.CreateEntity(false, m_DecalGroup.transform); } } else { cdata.CreateEntity(false, m_DecalGroup.transform); } } else if (cdata.m_Type == EVCComponent.cpEffect) { if (dbRoot) { bool isleft = cdata.m_Position.x < 0.5f * m_IsoData.m_HeadInfo.xSize * sceneSetting.m_VoxelSize; if (isleft) { cdata.CreateEntity(false, m_EffectGroupL.transform); } else { cdata.CreateEntity(false, m_EffectGroup.transform); } } else { cdata.CreateEntity(false, m_EffectGroup.transform); } } else if (cdata.m_Type == EVCComponent.cpDbSwordHilt) { if ((cdata as VCFixedHandPartData).m_LeftHand) { cdata.CreateEntity(false, m_PartGroupL.transform); VCParticlePlayer pp = cdata.m_Entity.AddComponent <VCParticlePlayer>(); pp.FunctionTag = VCParticlePlayer.ftDamaged; pp.LocalPosition = cdata.m_Entity.GetComponent <VCEComponentTool>().m_SelBound.transform.localPosition; m_MeshMgrL = m_MeshGroupL.AddComponent <VCMeshMgr>(); m_MeshMgrL.m_VoxelSize = sceneSetting.m_VoxelSize; m_MeshMgrL.m_ColorMap = m_IsoData.m_Colors; m_MeshMgrL.m_ColliderDirty = false; m_MeshMgrL.m_MeshMat = null; m_MeshMgrL.m_DaggerMesh = true; m_MeshMgrL.m_LeftSidePos = cdata.m_Position.x < 0.5f * m_IsoData.m_HeadInfo.xSize * sceneSetting.m_VoxelSize; m_MeshMgrL.Init(); } else { cdata.CreateEntity(false, m_PartGroup.transform); VCParticlePlayer pp = cdata.m_Entity.AddComponent <VCParticlePlayer>(); pp.FunctionTag = VCParticlePlayer.ftDamaged; pp.LocalPosition = cdata.m_Entity.GetComponent <VCEComponentTool>().m_SelBound.transform.localPosition; m_MeshMgr = m_MeshGroup.AddComponent <VCMeshMgr>(); m_MeshMgr.m_VoxelSize = sceneSetting.m_VoxelSize; m_MeshMgr.m_ColorMap = m_IsoData.m_Colors; m_MeshMgr.m_ColliderDirty = false; m_MeshMgr.m_MeshMat = null; m_MeshMgr.m_DaggerMesh = true; m_MeshMgr.m_LeftSidePos = cdata.m_Position.x < 0.5f * m_IsoData.m_HeadInfo.xSize * sceneSetting.m_VoxelSize; m_MeshMgr.Init(); } } else { cdata.CreateEntity(false, m_PartGroup.transform); VCParticlePlayer pp = cdata.m_Entity.AddComponent <VCParticlePlayer>(); pp.FunctionTag = VCParticlePlayer.ftDamaged; pp.LocalPosition = cdata.m_Entity.GetComponent <VCEComponentTool>().m_SelBound.transform.localPosition; m_MeshMgr = m_MeshGroup.AddComponent <VCMeshMgr>(); m_MeshMgr.m_VoxelSize = sceneSetting.m_VoxelSize; m_MeshMgr.m_ColorMap = m_IsoData.m_Colors; m_MeshMgr.m_ColliderDirty = false; m_MeshMgr.m_MeshMat = null; m_MeshMgr.m_DaggerMesh = false; m_MeshMgr.m_LeftSidePos = false; m_MeshMgr.Init(); } } if (m_MeshMgr == null) { m_MeshMgr = m_MeshGroup.AddComponent <VCMeshMgr>(); m_MeshMgr.m_VoxelSize = sceneSetting.m_VoxelSize; m_MeshMgr.m_ColorMap = m_IsoData.m_Colors; m_MeshMgr.m_ColliderDirty = false; m_MeshMgr.m_MeshMat = null; m_MeshMgr.m_DaggerMesh = false; m_MeshMgr.m_LeftSidePos = false; m_MeshMgr.Init(); } }