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; }
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); }
/// <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(); }
/// <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); } }
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); }
/// <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("重叠"); } }
/// <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); }
/// <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); }
/// <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); }