コード例 #1
0
    ///创建方块堆
    private void CreateCubes()
    {
        if (m_info == null)
        {
            return;
        }

        ModelCube prefab = Resources.Load <ModelCube>("Prefabs/ModelCube");

        if (prefab == null)
        {
            return;
        }

        m_cubes = new List <ModelCube>();
        for (int i = 0; i < m_info.Cubes.Count; ++i)
        {
            CubeModelData data = m_info.Cubes[i];
            if (data == null)
            {
                continue;
            }

            ModelCube cube = GameObject.Instantiate <ModelCube>(prefab);
            cube.transform.parent        = transform;
            cube.transform.localPosition = data.Pos;
            cube.ModelData = data;
            m_cubes.Add(cube);
            UpdateWHD(cube);
        }
    }
コード例 #2
0
    private void CheckInput()
    {
        if(MainCamera == null || Target == null)
            return;

        if(Input.GetKey(KeyCode.D))
        {
            m_inputState = InputState.Deletion;
        }
        else if(Status == GameStatus.Editor && Input.GetKey(KeyCode.A))
        {
            m_inputState = InputState.Addition;
        }
        else if(Input.GetKey(KeyCode.W))
        {
            m_inputState = InputState.Mark;
        }
        else
            m_inputState = InputState.None;

        if(m_clickable && Input.GetMouseButtonDown(0))
        {
            //从摄像机发出到点击坐标的射线
            Ray ray = MainCamera.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if(Physics.Raycast(ray, out hitInfo, 100f, 1<<8))
            {
                //划出射线,只有在scene视图中才能看到
                Debug.DrawLine(ray.origin, hitInfo.point);
                ModelCube target = hitInfo.collider.gameObject.GetComponent<ModelCube>();
                if(target != null)
                {
                    Vector3 point = target.transform.InverseTransformPoint(hitInfo.point);

                    switch(m_inputState)
                    {
                        case InputState.Mark:
                            //cube.Mark();
                            break;
                        case InputState.Deletion:
                            Target.DeleteCube(target);
                            break;
                        case InputState.Addition:
                            CubeFaceType face = ClickFace(point);
                            Target.AddCube(target, face);
                            break;
                    }//end switch
                }//end null
            }//end ray
        }//end buttondown
    }
コード例 #3
0
    //删除方块
    public bool DeleteCube(ModelCube target)
    {
        if (!m_editable)
        {
            return(false);
        }

        if (m_cubes.Contains(target))
        {
            if (m_cubes.Count == 1)
            {
                return(false);
            }

            m_cubes.Remove(target);
            UpdateWHD(target);
        }
        target.Break();
        return(true);
    }
コード例 #4
0
    //更新长宽高
    private void UpdateWHD(ModelCube cube)
    {
        //标记原点或者顶点
        if (cube.ModelData.Pos.x < m_origin.x)
        {
            m_origin.x = cube.ModelData.Pos.x;
        }
        else if (cube.ModelData.Pos.x > m_peak.x)
        {
            m_peak.x = cube.ModelData.Pos.x;
        }

        if (cube.ModelData.Pos.y < m_origin.y)
        {
            m_origin.y = cube.ModelData.Pos.y;
        }
        else if (cube.ModelData.Pos.y > m_peak.y)
        {
            m_peak.y = cube.ModelData.Pos.y;
        }
        ;

        if (cube.ModelData.Pos.z < m_origin.z)
        {
            m_origin.z = cube.ModelData.Pos.z;
        }
        else if (cube.ModelData.Pos.z > m_peak.z)
        {
            m_peak.z = cube.ModelData.Pos.z;
        }

        Vector3 temp = m_peak - m_origin;

        m_info.Width  = (int)temp.x + 1;
        m_info.Heigth = (int)temp.y + 1;
        m_info.Depth  = (int)temp.z + 1;

        Debug.Log("origin:" + m_origin.ToString() + "peak:" + m_peak.ToString());
    }
コード例 #5
0
    public bool AddCube(ModelCube target, CubeFaceType face)
    {
        if (!m_editable)
        {
            return(false);
        }
        ModelCube prefab = Resources.Load <ModelCube>("Prefabs/ModelCube");

        if (prefab == null)
        {
            return(false);
        }

        int     current = 1;
        Vector3 offset  = Vector3.right;

        switch (face)
        {
        case CubeFaceType.Top:
            offset  = Vector3.up;
            current = m_info.Heigth;
            break;

        case CubeFaceType.Bottom:
            offset  = Vector3.down;
            current = m_info.Heigth;
            break;

        case CubeFaceType.Front:
            offset  = Vector3.forward;
            current = m_info.Depth;
            break;

        case CubeFaceType.Back:
            offset  = Vector3.back;
            current = m_info.Depth;
            break;

        case CubeFaceType.Right:
            offset  = Vector3.right;
            current = m_info.Width;
            break;

        case CubeFaceType.Left:
            offset  = Vector3.left;
            current = m_info.Width;
            break;
        }

        if (current >= GameConst.CubeMax)
        {
            return(false);
        }

        CubeModelData data = new CubeModelData();

        data.Pos = target.ModelData.Pos + offset;
        m_info.Cubes.Add(data);

        ModelCube cube = GameObject.Instantiate <ModelCube>(prefab);

        cube.transform.parent        = transform;
        cube.transform.localPosition = data.Pos;
        cube.ModelData = data;
        m_cubes.Add(cube);

        UpdateWHD(cube);
        return(true);
    }