Exemple #1
0
        public override void OnMouseDown(int mouseButton, VoxelInfo voxelInfo)
        {
            if (mouseButton == 0)
            {
                Voxel.DestroyBlock(voxelInfo);
            }

            else if (mouseButton == 1)
            {                                        //右键开关门
                if (voxelInfo.GetVoxel() == 70)
                {                                    // 门开
                    Voxel.ChangeBlock(voxelInfo, 7); // 则关
                }

                else if (voxelInfo.GetVoxel() == 7)
                {                                     // 门关
                    Voxel.ChangeBlock(voxelInfo, 70); // 则开
                }
            }
        }
Exemple #2
0
        public static void DestroyBlock(VoxelInfo voxelInfo)
        {
            GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(voxelInfo.GetVoxel())) as GameObject;

            if (voxelObject.GetComponent <VoxelEvents>() != null)
            {
                voxelObject.GetComponent <VoxelEvents>().OnBlockDestroy(voxelInfo);

                voxelInfo.chunk.SetVoxel(voxelInfo.index, 0, true);
                Destroy(voxelObject);
            }
        }
Exemple #3
0
        private void MouseCursorEvents()
        {         // 鼠标位置
            VoxelInfo raycast = Engine.VoxelRaycast(Camera.main.ScreenPointToRay(Input.mousePosition), 9999.9f, false);

            if (raycast != null)
            {
                //创建一个被瞄准体素的拷贝
                GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(raycast.GetVoxel())) as GameObject;

                //voxel有event
                if (voxelObject.GetComponent <VoxelEvents>() != null)
                {
                    voxelObject.GetComponent <VoxelEvents>().OnLook(raycast);

                    // 对于鼠标动作发信息
                    for (int i = 0; i < 3; i++)
                    {
                        if (Input.GetMouseButtonDown(i))
                        {
                            voxelObject.GetComponent <VoxelEvents>().OnMouseDown(i, raycast);
                        }
                        if (Input.GetMouseButtonUp(i))
                        {
                            voxelObject.GetComponent <VoxelEvents>().OnMouseUp(i, raycast);
                        }
                        if (Input.GetMouseButton(i))
                        {
                            voxelObject.GetComponent <VoxelEvents>().OnMouseHold(i, raycast);
                        }
                    }
                }

                Destroy(voxelObject);
            }

            else
            {
                // 未被击中,不显示
                if (SelectedBlockGraphics != null)
                {
                    SelectedBlockGraphics.GetComponent <Renderer>().enabled = false;
                }
            }
        }
Exemple #4
0
        private void CameraLookEvents()
        {         //第一人称视角
            VoxelInfo raycast = Engine.VoxelRaycast(Camera.main.transform.position, Camera.main.transform.forward, Range, false);

            if (raycast != null)
            {
                //创建拷贝
                GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(raycast.GetVoxel())) as GameObject;

                //当体素上有动作
                if (voxelObject.GetComponent <VoxelEvents>() != null)
                {
                    voxelObject.GetComponent <VoxelEvents>().OnLook(raycast);

                    for (int i = 0; i < 3; i++)
                    {
                        if (Input.GetMouseButtonDown(i))
                        {
                            voxelObject.GetComponent <VoxelEvents>().OnMouseDown(i, raycast);
                        }
                        if (Input.GetMouseButtonUp(i))
                        {
                            voxelObject.GetComponent <VoxelEvents>().OnMouseUp(i, raycast);
                        }
                        if (Input.GetMouseButton(i))
                        {
                            voxelObject.GetComponent <VoxelEvents>().OnMouseHold(i, raycast);
                        }
                    }
                }

                Destroy(voxelObject);
            }

            else
            {
                // 瞄空时不显示被选中的ui
                if (SelectedBlockGraphics != null)
                {
                    SelectedBlockGraphics.GetComponent <Renderer>().enabled = false;
                }
            }
        }
Exemple #5
0
        public void Update()
        {
            // 检测chunk存在
            GameObject chunkObject = Engine.PositionToChunk(transform.position);

            if (chunkObject == null)
            {
                return;
            }

            // 获取体素信息
            Chunk     chunk      = chunkObject.GetComponent <Chunk>();
            Index     voxelIndex = chunk.PositionToVoxelIndex(transform.position);
            VoxelInfo voxelInfo  = new VoxelInfo(voxelIndex, chunk);

            // 获取拷贝
            GameObject voxelObject = Instantiate(Engine.GetVoxelGameObject(voxelInfo.GetVoxel())) as GameObject;

            VoxelEvents events = voxelObject.GetComponent <VoxelEvents>();

            if (events != null)
            {
                //进入某体素
                if (chunk != LastChunk || voxelIndex.IsEqual(LastIndex) == false)
                {
                    events.OnBlockEnter(this.gameObject, voxelInfo);
                }
                //停留
                else
                {
                    events.OnBlockStay(this.gameObject, voxelInfo);
                }
            }

            LastChunk = chunk;
            LastIndex = voxelIndex;

            Destroy(voxelObject);
        }
Exemple #6
0
        public override void OnMouseDown(int mouseButton, VoxelInfo voxelInfo)
        {
            if (Globe.isMouseVisible)
            {
                return;
            }

            if (mouseButton == 0)
            {             //左键销毁
                Voxel.DestroyBlock(voxelInfo);
            }
            else if (mouseButton == 1)
            {             //右键放置
                if (voxelInfo.GetVoxel() == 8)
                {         //草(一种植物)可以被覆盖
                    Voxel.PlaceBlock(voxelInfo, ExampleInventory.HeldBlock);
                }
                else
                {                 //其他block不可以
                    VoxelInfo newInfo = new VoxelInfo(voxelInfo.adjacentIndex, voxelInfo.chunk);
                    Voxel.PlaceBlock(newInfo, ExampleInventory.HeldBlock);
                }
            }
        }