示例#1
0
 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;
 }
示例#2
0
    // 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;
    }
示例#3
0
    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);
        }
    }
示例#4
0
    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;
        }
    }
示例#5
0
 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;
 }
示例#6
0
    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;
        }
    }
示例#7
0
    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;
    }
示例#8
0
    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);
    }
示例#9
0
    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();
        }
    }