Ejemplo n.º 1
0
    //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));
    }
Ejemplo n.º 2
0
    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);
    }