//public bool NeedUserReset(Object2D realUser, List<Object2D> otherUsers, out Object2D intersectedUser) //{ // bool flag = false; // float epsilon = translationSpeed * Time.fixedDeltaTime; // for (int i = 0; i < otherUsers.Count; i++) // { // //if (this.id == otherUnits[i].GetID()) // // continue; // if (realUser.IsIntersect(otherUsers[i], epsilon)) // { // //resultData.AddUserReset(); // //isFirst = false; // Transform2D b = realUser.transform; // (=this) // Transform2D a = otherUsers[i].transform; // (=unitList[i]) // if (Vector2.Dot(a.forward, b.forward) >= 0) // 한쪽만 reset 해야 되는 경우 // { // Vector2 dir = a.localPosition - b.localPosition; // if (Vector2.Dot(b.forward, dir) >= 0) // b의 바라보는 방향 기준으로 a가 b보다 앞쪽에 있는 경우 b를 reset 시킨다 // { // Debug.Log(string.Format("{0}의 바라보는 방향 기준으로 {1}가 {0}보다 앞쪽에 있는 경우", "b", "a")); // flag = true; // } // else // b의 바라보는 방향 기준으로 a가 b보다 뒤쪽에 있는 경우 a를 reset 시킨다 // { // Debug.Log(string.Format("{0}의 바라보는 방향 기준으로 {1}가 {0}보다 뒤쪽에 있는 경우", "b", "a")); // flag = false; // //if (targetUnit.status == "IDLE")// TODO: 다른 경우가 있는가? 즉, intersectedUnit이 IDLE이 아닐 가능성은? // //{ // // resetOtherUnit = true; // // targetUnit.status = "USER_RESET"; // //} // } // } // else // 둘다 reset 해야 되는 경우 // { // Debug.Log(string.Format("둘다 reset 해야 되는 경우")); // flag = true; // //resetThisUnit = true; // //if (targetUnit.status == "IDLE") // //{ // // resetOtherUnit = true; // // targetUnit.status = "USER_RESET"; // //} // } // } // } // return flag; //} public bool NeedUserReset(Object2D realUser, Object2D otherUser) { return(realUser.IsIntersect(otherUser, translationSpeed * Time.fixedDeltaTime)); }
public bool NeedUserReset(Object2D realUser, List <Object2D> otherUsers, out Object2D intersectedUser) { bool flag = false; float translationSpeed = 4; float epsilon = translationSpeed * Time.fixedDeltaTime; Object2D targetUser = null; for (int i = 0; i < otherUsers.Count; i++) { //if (this.id == otherUnits[i].GetID()) // continue; if (realUser.IsIntersect(otherUsers[i], epsilon)) { //resultData.AddUserReset(); //isFirst = false; Transform2D b = realUser.transform; // (=this) Transform2D a = otherUsers[i].transform; // (=unitList[i]) if (Vector2.Dot(a.forward, b.forward) >= 0) // 한쪽만 reset 해야 되는 경우 { Vector2 dir = a.localPosition - b.localPosition; if (Vector2.Dot(b.forward, dir) >= 0) // b의 바라보는 방향 기준으로 a가 b보다 앞쪽에 있는 경우 b를 reset 시킨다 { //Debug.Log(string.Format("{0}의 바라보는 방향 기준으로 {1}가 {0}보다 앞쪽에 있는 경우", "b", "a")); flag = true; targetUser = otherUsers[i]; } else // b의 바라보는 방향 기준으로 a가 b보다 뒤쪽에 있는 경우 a를 reset 시킨다 { //Debug.Log(string.Format("{0}의 바라보는 방향 기준으로 {1}가 {0}보다 뒤쪽에 있는 경우", "b", "a")); flag = false; //if (targetUnit.status == "IDLE")// TODO: 다른 경우가 있는가? 즉, intersectedUnit이 IDLE이 아닐 가능성은? //{ // resetOtherUnit = true; // targetUnit.status = "USER_RESET"; //} } } else // 둘다 reset 해야 되는 경우 { //Debug.Log(string.Format("둘다 reset 해야 되는 경우")); flag = true; targetUser = otherUsers[i]; //resetThisUnit = true; //if (targetUnit.status == "IDLE") //{ // resetOtherUnit = true; // targetUnit.status = "USER_RESET"; //} } } } intersectedUser = targetUser; return(flag); }