void ShootRay(Vector3 mousePos)
    {
        Vector3 from, clickWorldPoint, normalDir;

        GeometryTool.GetShootingRay(mousePos, out from, out clickWorldPoint, out normalDir);

        //debug用
        voxelBuilder.SetClickPointOnRay(clickWorldPoint);
        voxelBuilder.SetClickNormalDir(normalDir);

        int nowFloor, nowY, nowX;
        //mahjongMap的平面朝向是固定的,所以不作座標變換
        bool isHit = voxelBuilder.DoClick(from, normalDir, out nowFloor, out nowY, out nowX);

        if (!isHit)
        {
            return;
        }

        var funptr = DoWhat();

        for (var y = 0; y < voxelBuilder.GetAddCountY(); ++y)
        {
            for (var x = 0; x < voxelBuilder.GetAddCountX(); ++x)
            {
                var node = voxelBuilder.GetVoxel(nowFloor, nowY + 2 * y, nowX + 2 * x);
                if (node == null)
                {
                    continue;
                }

                voxelBuilder.DoOperation(node, funptr);
            }
        }
    }
示例#2
0
    public void OnSceneGUI()
    {
        Vector3 from, dir;

        GeometryTool.GetShootingRay(Event.current.mousePosition, out from, out dir);
        Vector3 hitPoint, hitNormal;

        controller.from.position = from;
        var isHitSphere = rayHitSphere(from, dir, out hitPoint, out hitNormal);

        if (!isHitSphere)
        {
            return;
        }

        if (Event.current.button == 1)//right button
        {
            Vector3 hitOnPlane;
            var     hitTerrain = getHitPlane(hitPoint, hitNormal, out hitOnPlane);
            if (hitTerrain == null)
            {
                Debug.Log("no hit plane");
                return;
            }

            if (Event.current.type == EventType.MouseDrag || Event.current.type == EventType.MouseDown)
            {
                // Debug.Log(hitTerrain.name);
                isUsingBrush = true;

                hitTerrain.setBrushLocalPosFrom(hitOnPlane);
                hitTerrain.useBrush(true);

                hitTerrain.updateNeighborsBrush(true);
                Event.current.Use(); // 中斷鏡頭的旋轉
                return;
            }

            if (isUsingBrush == true)
            {
                isUsingBrush = false;

                hitTerrain.setBrushLocalPosFrom(hitOnPlane);
                hitTerrain.useBrush(false);

                hitTerrain.updateNeighborsBrush(false);
            }
        }
    }
示例#3
0
    void ShootRay(Vector3 mousePos)
    {
        Vector3 from, clickWorldPoint, normalDir;

        GeometryTool.GetShootingRay(mousePos, out from, out clickWorldPoint, out normalDir);

        var voxelBuilder = groupRelationBuilder.GetVoxelBuilder();
        //假裝自己是在對voxelBuilder發射
        var localFrom = groupRelationBuilder.transform.InverseTransformPoint(from);

        int  nowFloor, nowY, nowX;
        bool isHit = voxelBuilder.DoClick(localFrom, normalDir, out nowFloor, out nowY, out nowX, true);

        if (!isHit)
        {
            return;
        }

        var selectGroup = voxelBuilder.GetVoxel(nowFloor, nowY, nowX).group;

        groupRelationBuilder.SetNowSelectGroup(selectGroup);
    }