예제 #1
0
    private void CalOffset()
    {
        Vector3 pos = MapUtil.GetMap(m_InitData.m_CurWall).Adjust2Wall(this.transform.position);

        //Debug.LogWarning("calOffset " + pos + " wall=" + m_InitData.m_CurWall + " " + MapUtil.Vector3String(this.transform.position));
        m_Offset = JerryUtil.GetClickPos() - Camera.main.WorldToScreenPoint(pos);
        //第一步,先记录一下位置,不给走
        m_LastDragingPos = JerryUtil.GetClickPos() - m_Offset;
    }
예제 #2
0
    private void Set2SavePos()
    {
        Init2Wall(Enum_Wall.Wall, m_SaveData.saveWall);

        m_InitData.isSeted      = true;
        this.transform.position = MapUtil.GetMap(m_InitData.m_CurWall).m_StartPos + m_SaveData.savePos.MulVal(GameApp.Inst.m_MapGridUnityLenHalf);
        MapUtil.GetMap(m_InitData.m_CurWall).SetOne(this.transform.position, m_Config.size);
        SetOutLineVisible(false);
    }
예제 #3
0
    /// <summary>
    /// 选中
    /// </summary>
    private void SelectSelf(bool isNew = false)
    {
        if (MapUtil.m_SelectId != 0 &&
            !MapUtil.m_SelectOK)
        {
            if (MapUtil.m_SelectNew)
            {
                JerryEventMgr.DispatchEvent(Enum_Event.SetFurn2Package.ToString(), new object[] { MapUtil.m_SelectId });
            }
            else
            {
                JerryEventMgr.DispatchEvent(Enum_Event.CancelSetFurn.ToString(), new object[] { MapUtil.m_SelectId });
            }
        }

        if (isNew)
        {
            RayClickPos fp = MapUtil.GetFirstPos(m_Config.setType);
            //Debug.LogWarning(fp.pos + " x " + fp.wallType + " " + m_Config.setType);
            SelectChange2Wall(Enum_Wall.Wall, fp.wallType, fp.pos);
        }
        else if (m_InitData.m_CurWall != Enum_Wall.None)
        {
            //先浮起来,再记录,保持回退时一致性
            this.transform.position = MapUtil.GetMap(m_InitData.m_CurWall).AdjustFurn2Wall(m_Config.size, true, this.transform.position);

            m_InitData.m_LastPos  = this.transform.position;
            m_InitData.m_LastWall = m_InitData.m_CurWall;

            MapUtil.GetMap(m_InitData.m_CurWall).CleanOne(this.transform.position, m_Config.size);
        }

        //Debug.LogWarning("xxx " + m_InitData.isNew + " " + m_InitData.m_CurWall);

        MapUtil.m_SelectId   = m_Id;
        MapUtil.m_SelectOK   = false;
        MapUtil.m_SelectNew  = isNew;
        MapUtil.m_SelectFurn = this;

        this.gameObject.layer = LayerMask.NameToLayer(Enum_Layer.ActiveFurniture.ToString());
        m_Selected            = true;
        m_InitData.isSeted    = false;

        bool canSet = MapUtil.GetMap(m_InitData.m_CurWall).JudgeSet(this.transform.position, m_Config.size);

        //GridMgr.Inst.ShowGrid(m_Config.setType, m_Config.size.y);
        MeshDraw.Inst.ShowGrid(m_Config.setType, m_Config.size.y);

        SetOutLineVisible(true);
        SetOutLineColor(canSet ? Color.green : Color.red);
        FurnitureShadow.Inst.SetSize(m_Config.size.ToVector3(), m_InitData.m_CurWall);
        FurnitureShadow.Inst.SetVisible(true);
        FurnitureShadow.Inst.SetPosColor(MapUtil.GetMap(m_InitData.m_CurWall).Adjust2Wall(this.transform.position), canSet ? Color.green : Color.red);
        UI_Ctr.Inst.ShowCtr();
    }
예제 #4
0
    /// <summary>
    /// 放回原处
    /// </summary>
    /// <param name="args"></param>
    private void EventCancelSetFurn(object[] args)
    {
        uint id = (uint)args[0];

        if (id != m_Id)
        {
            return;
        }

        if (m_InitData.m_LastWall != Enum_Wall.None)
        {
            Init2Wall(m_InitData.m_CurWall, m_InitData.m_LastWall);

            MapUtil.GetMap(m_InitData.m_CurWall).SetOne(m_InitData.m_LastPos, m_Config.size);
            UnSelect(true);
            this.transform.position = MapUtil.GetMap(m_InitData.m_CurWall).AdjustFurn2Wall(m_Config.size, false, m_InitData.m_LastPos);
        }
    }
예제 #5
0
    private Vector3 AdjustPos(Vector3 pos)
    {
        //Debug.LogWarning("pp1=" + MapUtil.Vector3String(pos) + " ad=" + MapUtil.Vector3String(m_InitData.m_AdjustPar));
        pos = pos - m_InitData.m_AdjustPar - MapUtil.GetMap(m_InitData.m_CurWall).m_StartPos;

        Vector3 p1 = pos / GameApp.Inst.m_MapGridUnityLen;

        p1.x = Mathf.RoundToInt(p1.x);
        p1.y = Mathf.RoundToInt(p1.y);
        p1.z = Mathf.RoundToInt(p1.z);

        //Debug.LogWarning("pp2=" + MapUtil.Vector3String(pos) + " " + MapUtil.Vector3String(p1));

        pos = MapUtil.GetMap(m_InitData.m_CurWall).m_StartPos + m_InitData.m_AdjustPar + p1 * GameApp.Inst.m_MapGridUnityLen;

        //Debug.LogWarning("pp3=" + MapUtil.Vector3String(pos));

        return(pos);
    }
예제 #6
0
    /// <summary>
    /// 放置
    /// </summary>
    /// <param name="args"></param>
    private void EventSetOneFurn(object[] args)
    {
        uint id = (uint)args[0];

        if (id != m_Id)
        {
            return;
        }

        //Debug.LogWarning((m_InitData == null) + " x " + m_InitData.m_CurWall + " " + this.name);

        if (MapUtil.GetMap(m_InitData.m_CurWall).SetOne(this.transform.position, m_Config.size))
        {
            UnSelect(true);
            this.transform.position = MapUtil.GetMap(m_InitData.m_CurWall).AdjustFurn2Wall(m_Config.size, false, this.transform.position);

            UI_Tip.Inst.ShowTip("设置OK");
        }
        else
        {
            UI_Tip.Inst.ShowTip("重叠");
        }
    }
예제 #7
0
 /// <summary>
 /// 刷新保存信息的位置
 /// </summary>
 public void RefreshSaveDataPos()
 {
     m_SaveData.type     = m_Config.type;
     m_SaveData.saveWall = m_InitData.m_CurWall;
     m_SaveData.savePos  = new MapUtil.IVector3((this.transform.position - MapUtil.GetMap(m_InitData.m_CurWall).m_StartPos) / GameApp.Inst.m_MapGridUnityLenHalf);
 }
예제 #8
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="pos"></param>
    /// <param name="canChangeWall">是否检测换面</param>
    /// <returns>是否切换了面</returns>
    private bool Place2Pos(Vector3 pos, bool canChangeWall = false)
    {
        //Debug.LogWarning("pos1 " + MapUtil.Vector3String(pos)
        //    + " wall:" + m_InitData.m_CurWall
        //    + " posGrid:" + MapUtil.GetMap(m_InitData.m_CurWall).Pos2Grid(pos));

        pos = AdjustPos(pos);
        pos = MapUtil.GetMap(m_InitData.m_CurWall).AdjustFurn2Wall(m_Config.size, true, pos);
        Enum_Wall changeType = Enum_Wall.None;

        //Debug.LogWarning("pos=" + MapUtil.Vector3String(m_Pos)
        //    + " Min:" + MapUtil.Vector3String(m_InitData.m_MinPos)
        //    + " Max:" + MapUtil.Vector3String(m_InitData.m_MaxPos)
        //    + " ad:" + MapUtil.Vector3String(m_InitData.m_AdjustPar)
        //    + " size:" + m_Config.size);

        if (m_InitData.m_CurWall == Enum_Wall.Wall)
        {
            pos.x = Mathf.Clamp(pos.x, m_InitData.m_MinPos.x, m_InitData.m_MaxPos.x);
            if (pos.x <= m_InitData.m_MinPos.x)
            {
                if (!canChangeWall)
                {
                    pos.x = m_InitData.m_MinPos.x + GameApp.Inst.m_MapGridUnityLen;
                }
                else
                {
                    changeType = Enum_Wall.Left;
                }
            }
            else if (pos.x >= m_InitData.m_MaxPos.x)
            {
                if (!canChangeWall)
                {
                    pos.x = m_InitData.m_MaxPos.x - GameApp.Inst.m_MapGridUnityLen;
                }
                else
                {
                    changeType = Enum_Wall.Right;
                }
            }
            else
            {
                pos.x = Mathf.Clamp(pos.x, m_InitData.m_MinPos.x + GameApp.Inst.m_MapGridUnityLen, m_InitData.m_MaxPos.x - GameApp.Inst.m_MapGridUnityLen);
            }
            pos.y = Mathf.Clamp(pos.y, m_InitData.m_MinPos.y, m_InitData.m_MaxPos.y);
        }
        else if (m_InitData.m_CurWall == Enum_Wall.Left ||
                 m_InitData.m_CurWall == Enum_Wall.Right)
        {
            pos.z = Mathf.Clamp(pos.z, m_InitData.m_MinPos.z, m_InitData.m_MaxPos.z);
            if (pos.z >= m_InitData.m_MaxPos.z)
            {
                if (!canChangeWall)
                {
                    pos.z = m_InitData.m_MaxPos.z - GameApp.Inst.m_MapGridUnityLen;
                }
                else
                {
                    changeType = Enum_Wall.Wall;
                }
            }
            else
            {
                pos.z = Mathf.Clamp(pos.z, m_InitData.m_MinPos.z, m_InitData.m_MaxPos.z - GameApp.Inst.m_MapGridUnityLen);
            }

            pos.y = Mathf.Clamp(pos.y, m_InitData.m_MinPos.y, m_InitData.m_MaxPos.y);
        }
        else if (m_InitData.m_CurWall == Enum_Wall.Floor)
        {
            pos.x = Mathf.Clamp(pos.x, m_InitData.m_MinPos.x, m_InitData.m_MaxPos.x);
            pos.z = Mathf.Clamp(pos.z, m_InitData.m_MinPos.z, m_InitData.m_MaxPos.z);
        }

        if (changeType != Enum_Wall.None)
        {
            //Debug.LogWarning("yyyyyyyyyyyy " + MapUtil.Vector3String(m_Pos));
            //这一步不标记状态,因为已经越界了

            pos = MapUtil.GetMap(m_InitData.m_CurWall).AdjustFurn2Wall(m_Config.size, false, pos);
            transform.position = pos;

            SelectChange2Wall(m_InitData.m_CurWall, changeType, MapUtil.GetMap(changeType).ChangeWallAdjust2Bound(pos, m_InitData.m_CurWall));
        }
        else
        {
            //Debug.LogWarning("xxxxxxxxxxxxxx " + MapUtil.Vector3String(m_Pos)
            //    + "\nMin:" + MapUtil.Vector3String(m_InitData.m_MinPos)
            //    + " Max:" + MapUtil.Vector3String(m_InitData.m_MaxPos)
            //    + "\nWall:" + m_InitData.m_CurWall);
            transform.position = pos;

            bool canSet = MapUtil.GetMap(m_InitData.m_CurWall).JudgeSet(this.transform.position, m_Config.size);
            //Debug.LogWarning("xxxxxxxxxxxxx");
            FurnitureShadow.Inst.SetPosColor(MapUtil.GetMap(m_InitData.m_CurWall).Adjust2Wall(this.transform.position), canSet ? Color.green : Color.red);
            SetOutLineColor(canSet ? Color.green : Color.red);
        }

        return(changeType == Enum_Wall.None ? false : true);
    }
예제 #9
0
파일: Map.cs 프로젝트: laijingfeng/RoomTest
    /// <summary>
    ///
    /// </summary>
    /// <param name="pos"></param>
    /// <param name="size"></param>
    /// <param name="mainJudge"></param>
    /// <param name="workType">012-CleanJudgeSet</param>
    /// <returns></returns>
    private bool DoCleanJudgeSet(Vector3 pos, MapUtil.IVector3 size, bool mainJudge = true, int workType = 0)
    {
        pos = AdjustFurn2Wall(size, false, pos);

        MapUtil.IVector3 min = GridXYZ2XY(Pos2Grid(GetCornerPos(pos, size, true)));
        MapUtil.IVector3 max = GridXYZ2XY(Pos2Grid(GetCornerPos(pos, size, false)));

        //Debug.LogWarning("min=" + min
        //    + " max=" + max
        //    + "\npos=" + MapUtil.Vector3String(pos)
        //    + " size=" + size
        //    + "\nmain=" + mainJudge
        //    + " type=" + workType
        //    + " wall=" + m_Type);

        for (int i = min.x; i <= max.x; i++)
        {
            for (int j = min.y; j <= max.y; j++)
            {
                if (workType == 0)
                {
                    m_Flag[GameApp.Inst.CurNodeIdx, i, j] = false;
                }
                else if (workType == 1)
                {
                    if (m_Flag[GameApp.Inst.CurNodeIdx, i, j] == true)
                    {
                        return(false);
                    }
                }
                else
                {
                    m_Flag[GameApp.Inst.CurNodeIdx, i, j] = true;
                }
            }
        }

        if (mainJudge)
        {
            if (m_Type == Enum_Wall.Wall)
            {
                if (min.x == 0)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Left).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }

                if (max.x + 1 == m_Size.x)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Right).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }

                if (min.y == 0)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Floor).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }
            }
            else if (m_Type == Enum_Wall.Left || m_Type == Enum_Wall.Right)
            {
                if (max.x + 1 == m_Size.z)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Wall).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }

                if (min.y == 0)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Floor).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }
            }
            else if (m_Type == Enum_Wall.Floor)
            {
                if (max.y + 1 == m_Size.z)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Wall).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }

                if (min.x == 0)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Left).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }

                if (max.x + 1 == m_Size.x)
                {
                    if (!MapUtil.GetMap(Enum_Wall.Right).DoCleanJudgeSet(pos, size, false, workType))
                    {
                        return(false);
                    }
                }
            }
        }

        return(true);
    }