Example #1
0
    void DestroyTargetBrick()
    {
        RaycastHit _raycastHit;
        Ray        _ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        if (Physics.Raycast(_ray, out _raycastHit, 256))
        {
            Vector3 _hitPoint = _raycastHit.point;
            if (_raycastHit.collider.gameObject.name != "CubeBrick(Clone)")
            {
                return;
            }

            IntVec3 _cubeIdx = new IntVec3(_raycastHit.collider.gameObject.transform.position);

            if (m_buildBrickMap.ContainsKey(_cubeIdx) == true)
            {
                CubeBrick _cb = m_buildBrickMap[_cubeIdx];

                //清理targetBrick
                m_buildBrickMap.Remove(_cubeIdx);
                Object.DestroyImmediate(_cb.m_go);

                CubeBrick _cbNgb = _cb.GetBrickDirP();
                if (_cbNgb != null)
                {
                    _cbNgb.SetBrickDirN(null);
                }

                _cbNgb = _cb.GetBrickDirN();
                if (_cbNgb != null)
                {
                    _cbNgb.SetBrickDirP(null);
                }

                //无论哪种情况都需要检查上面的brick
                IntVec3 _upIdx = new IntVec3(_cubeIdx);
                _upIdx.y += 1;
                if (m_buildBrickMap.ContainsKey(_upIdx) == true)
                {
                    m_checkListMap.Add(_upIdx, m_buildBrickMap[_upIdx]);
                }

                //如果targetBrick为PY方向 或者 targetBrick无相邻对象,则通知其上面的brick
                if ((_cb.m_dirP == PYAxis) || (_cb.m_dirN == NoDir && _cb.m_dirP == NoDir))
                {
                    return;
                }

                //如果targetBrick为其它方向,则通知其相邻方向和上面的brick
                if (_cb.m_dirP != NoDir)
                {
                    _cbNgb = _cb.GetBrickDirP();
                    if (_cbNgb != null)
                    {
                        m_checkListMap.Add(_cbNgb.GetIdx(), _cbNgb);
                    }
                }

                if (_cb.m_dirN != NoDir)
                {
                    _cbNgb = _cb.GetBrickDirN();
                    if (_cbNgb != null)
                    {
                        m_checkListMap.Add(_cbNgb.GetIdx(), _cbNgb);
                    }
                }
            }
        }
    }