Exemple #1
0
    public static Map GetMap(Enum_Wall type)
    {
        switch (type)
        {
        case Enum_Wall.Left:
        {
            return(m_LeftSideWall);
        }

        case Enum_Wall.Wall:
        {
            return(m_Wall);
        }

        case Enum_Wall.Right:
        {
            return(m_RightSideWall);
        }

        case Enum_Wall.Floor:
        {
            return(m_FloorWall);
        }
        }
        return(null);
    }
Exemple #2
0
    /// <summary>
    /// 刚转过的时候,为了让靠边,位置强修正
    /// </summary>
    /// <param name="pos"></param>
    /// <returns></returns>
    public Vector3 ChangeWallAdjust2Bound(Vector3 pos, Enum_Wall fromWall)
    {
        switch (m_Type)
        {
        case Enum_Wall.Wall:
        {
            if (fromWall == Enum_Wall.Left)
            {
                pos.x = m_StartPos.x;
            }
            else if (fromWall == Enum_Wall.Right)
            {
                pos.x = m_StartPos.x + m_Size.x * GameApp.Inst.m_MapGridUnityLen;
            }
        }
        break;

        case Enum_Wall.Left:
        case Enum_Wall.Right:
        {
            if (fromWall == Enum_Wall.Wall)
            {
                pos.z = m_StartPos.z + m_Size.z * GameApp.Inst.m_MapGridUnityLen;
            }
        }
        break;
        }
        return(pos);
    }
Exemple #3
0
    public static Vector2 SizeXYZ2XY(MapUtil.IVector3 size, Enum_Wall type)
    {
        Vector2 ret;

        ret.x = (type == Enum_Wall.Wall || type == Enum_Wall.Floor) ? size.x : size.z;
        ret.y = (type == Enum_Wall.Floor) ? size.z : size.y;
        return(ret);
    }
Exemple #4
0
 public static MapUtil.IVector3 ChangeObjSize(MapUtil.IVector3 size, Enum_Wall fromType, Enum_Wall toType)
 {
     MapUtil.IVector3 ret = new MapUtil.IVector3(size);
     if (((fromType == Enum_Wall.Left || fromType == Enum_Wall.Right) &&
          (toType == Enum_Wall.Floor || toType == Enum_Wall.Wall)) ||
         ((fromType == Enum_Wall.Floor || fromType == Enum_Wall.Wall) &&
          (toType == Enum_Wall.Left || toType == Enum_Wall.Right)))
     {
         ret.x = size.z;
         ret.z = size.x;
     }
     return(ret);
 }
Exemple #5
0
 /// <summary>
 /// 设置大小,选中时,切换墙面时
 /// </summary>
 /// <param name="size"></param>
 /// <param name="setType"></param>
 public void SetSize(Vector3 size, Enum_Wall wallType)
 {
     //Debug.LogWarning("size = " + MapUtil.Vector3String(size));
     size = size * GameApp.Inst.m_MapGridUnityLen;
     if (wallType == Enum_Wall.Floor)
     {
         size.y = 0.001f;
     }
     else if (wallType == Enum_Wall.Wall)
     {
         size.z = 0.001f;
     }
     else
     {
         size.x = 0.001f;
     }
     this.transform.localScale = size;
 }
Exemple #6
0
    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="type"></param>
    public void Init(Enum_Wall type, Vector3 startPos, MapUtil.IVector3 size)
    {
        m_Type     = type;
        m_StartPos = startPos;
        m_Size     = size;

        m_SizeXY = GridXYZ2XY(m_Size);

        m_Flag = new bool[2, m_SizeXY.x, m_SizeXY.y];
        for (int k = 0; k < 2; k++)
        {
            for (int i = 0; i < m_SizeXY.x; i++)
            {
                for (int j = 0; j < m_SizeXY.y; j++)
                {
                    m_Flag[k, i, j] = false;
                }
            }
        }
    }
Exemple #7
0
    public static Vector3 GetObjEulerAngles(Enum_Wall wallType)
    {
        switch (wallType)
        {
        case Enum_Wall.Left:
        {
            return(new Vector3(0, -90, 0));
        }

        case Enum_Wall.Right:
        {
            return(new Vector3(0, 90, 0));
        }

        case Enum_Wall.Wall:
        case Enum_Wall.Floor:
        {
            return(Vector3.zero);
        }
        }
        return(Vector3.zero);
    }
Exemple #8
0
    public static Enum_Wall WallLayer2WallEnum(int layer)
    {
        Enum_Wall ret = Enum_Wall.None;

        if (layer == Enum_Layer.Wall.GetHashCode())
        {
            ret = Enum_Wall.Wall;
        }
        else if (layer == Enum_Layer.LeftWall.GetHashCode())
        {
            ret = Enum_Wall.Left;
        }
        else if (layer == Enum_Layer.RightWall.GetHashCode())
        {
            ret = Enum_Wall.Right;
        }
        else if (layer == Enum_Layer.FloorWall.GetHashCode())
        {
            ret = Enum_Wall.Floor;
        }
        return(ret);
    }
Exemple #9
0
 /// <summary>
 /// 选中转墙
 /// </summary>
 /// <param name="fromWall"></param>
 /// <param name="toWall"></param>
 /// <param name="pos"></param>
 private void SelectChange2Wall(Enum_Wall fromWall, Enum_Wall toWall, Vector3 pos)
 {
     Init2Wall(fromWall, toWall);
     FurnitureShadow.Inst.SetSize(m_Config.size.ToVector3(), m_InitData.m_CurWall);
     Place2Pos(pos, false);
 }
Exemple #10
0
 /// <summary>
 /// 初始化到墙
 /// </summary>
 /// <param name="fromWall"></param>
 /// <param name="toWall"></param>
 private void Init2Wall(Enum_Wall fromWall, Enum_Wall toWall)
 {
     m_Config.size = MapUtil.ChangeObjSize(m_Config.size, fromWall, toWall);
     m_InitData    = MapUtil.InitFurn(m_Config.size, m_Config.setType, m_InitData, toWall);
     this.transform.eulerAngles = MapUtil.GetObjEulerAngles(m_InitData.m_CurWall);
 }
Exemple #11
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);
    }
Exemple #12
0
    public static FurnitureInitData InitFurn(IVector3 size, MapUtil.SetType setType, FurnitureInitData oldData, Enum_Wall wall)
    {
        if (oldData == null)
        {
            oldData = new FurnitureInitData();
        }

        oldData.m_CurWall = wall;

        GetMap(oldData.m_CurWall).GetMinMaxPos(size, setType, ref oldData);
        oldData.m_AdjustPar = GetMap(oldData.m_CurWall).GetAdjustPar(size);

        return(oldData);
    }