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); }
/// <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); }
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); }
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); }
/// <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; }
/// <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; } } } }
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); }
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); }
/// <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); }
/// <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); }
/// <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); }
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); }