private bool JudgeCanDrag(int view_index_, int model_width, ENUM_ITEM_DIRECTION neighbour_dir) { int neighbour_index = -1; switch (neighbour_dir) { case ENUM_ITEM_DIRECTION.E_UP: neighbour_index = CartoonUtil.GetUpIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size); break; case ENUM_ITEM_DIRECTION.E_DOWN: neighbour_index = CartoonUtil.GetDownIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size); break; case ENUM_ITEM_DIRECTION.E_LEFT: neighbour_index = CartoonUtil.GetLeftIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size); break; case ENUM_ITEM_DIRECTION.E_RIGHT: neighbour_index = CartoonUtil.GetRightIndex(view_index_, model_width, this.anchor_w_size, this.anchor_h_size); break; } if (-1 == neighbour_index) { return(false); } return(CanBeExchanged(neighbour_index)); }
private bool JudgeCanDrag(CartoonLongRotateView view_, ENUM_ITEM_DIRECTION neighbour_dir) { Vector3[] fourCornersArray = new Vector3[4]; view_.m_rect.GetWorldCorners(fourCornersArray); //Vector2[] fourScreenCornersArray = new Vector2[4]; //for (int i = 0; i < fourCornersArray.Length; ++i) //{ // fourScreenCornersArray[i] = m_cam.WorldToScreenPoint(fourCornersArray[i]); //} switch (neighbour_dir) { case ENUM_ITEM_DIRECTION.E_UP: case ENUM_ITEM_DIRECTION.E_DOWN: { return(JudgeOverflow(fourCornersArray, m_play_rect_4_corners, ENUM_JUDGE_TYPE.E_Y)); } case ENUM_ITEM_DIRECTION.E_LEFT: case ENUM_ITEM_DIRECTION.E_RIGHT: { return(JudgeOverflow(fourCornersArray, m_play_rect_4_corners, ENUM_JUDGE_TYPE.E_X)); } default: return(false); } }
//private void OnClick(GameObject obj) //{ // ((CartoonRotate)(this.m_model)).ClockwiseRotate(); // Vector3 next_ang = this.transform.localEulerAngles + new Vector3(0.0f, 0.0f, -90.0f); // CustomTweenRotation.Begin(this.gameObject, 0.5f, Quaternion.Euler(next_ang)); //} public void Dragging(GameObject go, Vector2 delta, Vector2 pos) { Vector2 from = pos + delta; Vector2 local_pos; if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, from, null, out local_pos)) { from = local_pos; if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, pos, null, out local_pos)) { Vector2 to = local_pos; Vector3 normal = Vector3.Cross(to, from); Vector3 normal_one = normal.normalized; Vector3 delta_ang = new Vector3(0, 0, Vector2.Angle(from, to) * normal_one.z); //Debug.Log("delta ang " + delta_ang + "normal one " + normal_one.z); if (null != IsCanDrag) { ENUM_ROTATE_DIR r_dir = delta_ang.z < 0.0f ? ENUM_ROTATE_DIR.E_CLOCKWISE : ENUM_ROTATE_DIR.E_ANTI_CLOCKWISE; if (false == IsCanDrag(this, (CartoonRotate)this.m_model, r_dir)) { if (CanTurnButNotChangeDir(delta_ang.z, r_dir)) { transform.Rotate(delta_ang, Space.World); } return; } } transform.Rotate(delta_ang, Space.World); ENUM_ITEM_DIRECTION next_dir = this.CalcCurDir(); if (this.m_dir != next_dir) { this.m_dir = next_dir; if (normal_one.z < 0) { ((CartoonRotate)(this.m_model)).ClockwiseRotate(); } else { ((CartoonRotate)(this.m_model)).AntiClockwiseRotate(); } } } } }
//public void DragBegin(GameObject go, Vector2 pos) //{ //} public void Dragging(GameObject go, Vector2 delta, Vector2 pos) { Vector2 From = pos + delta; Vector2 local_pos; if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, From, m_cam, out local_pos)) { From = local_pos; if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.m_rect, pos, m_cam, out local_pos)) { Vector2 to = local_pos; Vector3 normal = Vector3.Cross(to, From); Vector3 delta_ang = new Vector3(0, 0, Vector2.Angle(From, to) * normal.normalized.z); //Debug.Log("delta ang " + delta_ang); if (null != IsCanDrag) { ENUM_ROTATE_DIR r_dir = delta_ang.z < 0.0f ? ENUM_ROTATE_DIR.E_CLOCKWISE : ENUM_ROTATE_DIR.E_ANTI_CLOCKWISE; if (false == IsCanDrag(this, (CartoonRotate)this.m_model, r_dir)) { return; } } transform.Rotate(delta_ang, Space.World); ENUM_ITEM_DIRECTION next_dir = this.CalcCurDir(); if (this.m_dir != next_dir) { this.m_dir = next_dir; if (null != OnDragging) { OnDragging(this, (CartoonRotate)this.m_model); } } } } }
private bool CanTurnButNotChangeDir(float delta_ang_, ENUM_ROTATE_DIR turn_dir_) { float next_ang = CalcCurAng() + delta_ang_; ENUM_ITEM_DIRECTION cur_dir = this.CalcCurDir(); switch (cur_dir) { case ENUM_ITEM_DIRECTION.E_DOWN: if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_) { if (90.0f <= next_ang && next_ang <= 135.0f) { return(true); } } else { if (45.0f <= next_ang && next_ang <= 90.0f) { return(true); } } break; case ENUM_ITEM_DIRECTION.E_LEFT: if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_) { if (0.0f <= next_ang && next_ang <= 45.0f) { return(true); } } else { if (315.0f <= next_ang && next_ang <= 360.0f) { return(true); } } break; case ENUM_ITEM_DIRECTION.E_RIGHT: if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_) { if (180.0f <= next_ang && next_ang <= 225.0f) { return(true); } } else { if (135.0f <= next_ang && next_ang <= 180.0f) { return(true); } } break; case ENUM_ITEM_DIRECTION.E_UP: if (ENUM_ROTATE_DIR.E_CLOCKWISE == turn_dir_) { if (270.0f <= next_ang && next_ang <= 315.0f) { return(true); } } else { if (225.0f <= next_ang && next_ang <= 270.0f) { return(true); } } break; } return(false); }
public static int GetDirDelta(ENUM_ITEM_DIRECTION from, ENUM_ITEM_DIRECTION to) { return(0); }