/// <summary>
 /// 해당 타르트의 범위 바깥에 해당 토핑이 있는지 검사합니다.
 /// </summary>
 public bool IsToppingOutOfRange(Tart nowTart, Topping nowTopping)
 {
     if (nowTopping.gameObject.transform.position.x > nowTart.limitPos1.gameObject.transform.position.x &&
         nowTopping.gameObject.transform.position.z > nowTart.limitPos1.gameObject.transform.position.z &&
         nowTopping.gameObject.transform.position.x < nowTart.limitPos2.gameObject.transform.position.x &&
         nowTopping.gameObject.transform.position.z < nowTart.limitPos2.gameObject.transform.position.z)
     {//y축의 정보는 사용하지 않음...
         return(false);
     }
     else
     {
         return(true);
     }
 }
    public void Init()
    {
        if (answerTartRealPos == null)
        {
            LogManager.Log("answerTartRealPos 없음");
        }

        if (teamRedTart == null)
        {
            teamRedTart = GameObject.FindGameObjectWithTag("TeamRedTart").GetComponent <Tart>();
        }
        if (teamBlueTart == null)
        {
            teamBlueTart = GameObject.FindGameObjectWithTag("TeamBlueTart").GetComponent <Tart>();
        }

        if (answerTartObj == null)
        {
            answerTartObj = GameObject.FindGameObjectWithTag("AnswerTart");
        }
    }
    public float CheckScoreV2(Tart myTart)
    {
        Init();
        Tart answerTart = tartManager.answerTart; //정답 타르트를 가져왔다.

        if (answerTart == null)
        {
            LogManager.Log("앤서타르트 없음,");
        }
        else
        {
            for (int i = 0; i < answerTart.toppingList.Count; i++)
            {
                //1. 정답 타르트의 토핑 리스트에서 토핑 하나를 뽑아낸다.
                ToppingData answerTopping = answerTart.toppingList[i];
                log(i + "번째 정답 토핑을 채점을 시작합니다.");

                //2. 그리고 내 타르트에서 그것과 같은 사이즈, 넘버를 가진 녀석'들'을 뽑아낸다.
                //- 저번과 같이 그냥 배열에다가 인덱스를 저장하는 것으로 해도 될듯.
                int[] sameToppingIndex    = new int[24];
                int   sameToppingIndexVal = 0;


                for (int j = 0; j < myTart.toppingList.Count; j++)
                {
                    if (answerTopping.toppingSize == myTart.toppingList[j].toppingSize &&
                        answerTopping.toppingNum == myTart.toppingList[j].toppingNum)
                    {
                        if (myTart.toppingList[j].isCheck != true) //2-2.채점 완료한 녀석들은 같은 사이즈, 넘버를 가졌더라도 이 범위에서 제외한다.
                        {
                            sameToppingIndex[sameToppingIndexVal] = j;
                            log("내 타르트의 토핑 중 " + sameToppingIndex[sameToppingIndexVal] + "번째의 토핑인" + myTart.toppingList[j].thisObject.name + "과 비교하도록 합니다.");
                            sameToppingIndexVal += 1; //하나 추가하고.
                        }
                    }
                }

                log("현재 " + sameToppingIndexVal + "개의 토핑과 비교합니다.");
                //만약 같은 토핑이 발견되어지지 않았다면?
                //앞에서 다 찾았다는 뜻이기도 하니까, 위로 올려보낸다.
                if (sameToppingIndexVal == 0)
                {
                    log("비교할 토핑이 없습니다. 다음 정답 토핑 채점을 시작합니다.");
                    continue;
                }

                //이렇게 똑같은 녀석들을 뽑아왔다. 다음은...
                // 3. 정답 타르트의 한 토핑과, 내 타르트에서 뽑아낸 녀석들을 비교하여 가장 가까운 녀석을 찾아낸다.
                //'거리값이 가장 적은 녀석'을 찾아낸다.

                log("거리를 비교하여 가장 가까운 토핑을 찾아내겠습니다.");

                float minDis           = 25252;
                int   lastToppingIndex = 0; //마지막 최종 채점을 받을 토핑의 인덱스.
                for (int k = 0; k < sameToppingIndexVal; k++)
                {
                    float myPosX = myTart.toppingList[sameToppingIndex[k]].thisObject.transform.localPosition.x;
                    float myPosZ = myTart.toppingList[sameToppingIndex[k]].thisObject.transform.localPosition.z;

                    Vector2 tempMyPos = new Vector2(myPosX, myPosZ);
                    log("이 토핑의 위치는" + tempMyPos);
                    Vector2 tempAnswerPos = new Vector2(answerTopping.answerPosX, answerTopping.answerPosZ);
                    float   compareDis    = Vector2.Distance(tempAnswerPos, tempMyPos);
                    log("현재 가장 가까운 거리는 " + minDis + " 입니다.");
                    log(myTart.toppingList[sameToppingIndex[k]].thisObject.name + "의 거리는 " + compareDis + "입니다.");

                    if (minDis > compareDis)
                    {
                        log(myTart.toppingList[sameToppingIndex[k]].thisObject.name + "를 제일 가까운 토핑으로 등록합니다.");
                        minDis           = compareDis;
                        lastToppingIndex = sameToppingIndex[k];
                    }
                }
                log("가까운 토핑 등록이 끝났습니다. 가장 가까운 토핑은 " + myTart.toppingList[lastToppingIndex].thisObject.name + " 입니다.");
                //거리값이 작은 녀석을 찾았을 것이다. 그렇다면 이제
                // 4. 그 가장 가까운 녀석을 채점완료(isCheck)표시하고, 거리별 점수를 지급한다.
                myTart.toppingList[lastToppingIndex].Check(); //채점 완료 표시.
                if (minDis > lastCheckDis)                    //가장 작은 녀석이 채점 범위를 넘어섰을 때.
                {
                    log("정답 토핑에 비해 너무 멀리 있습니다. 0점을 지급합니다.");
                    myScore += 0; //0점 지급.
                }
                else //채점 범위 내에 있을 때.
                {
                    if (minDis <= allowDis) //이 정도는 만점으로 쳐주기.
                    {
                        float score = answerTopping.toppingScore;
                        log("거리가 매우 가깝기 때문에 만점을 지급합니다. : " + score);
                        myScore += (int)score;
                    }
                    else //아닐 때.
                    {
                        float temp  = minDis / lastCheckDis; //0~1의 값이 나온다.
                        float temp2 = answerTopping.toppingScore * temp;  //감점되어야 할 점수가 나온다.
                        float temp3 = answerTopping.toppingScore - temp2; //총 점수에서 감점한다.
                        log("거리가 애매하기 때문에 계산된 점수를 지급합니다." + temp3);
                        myScore += (int)temp3;                            //myScore에 추가.
                    }
                }
            }

            //마지막 감점 검사!
            for (int i = 0; i < myTart.toppingList.Count; i++)
            {
                if (myTart.toppingList[i].isCheck == false)
                {
                    log("상관없는 토핑이 있습니다. 감점합니다.");
                    switch (myTart.toppingList[i].toppingSize)
                    {
                    case 1:    //소형
                        myScore -= 1;
                        break;

                    case 2:
                        myScore -= 2;
                        break;

                    case 3:
                        myScore -= 4;
                        break;

                    default:
                        break;
                    }
                }
            }
        }

        if (myScore <= 0)
        {
            myScore = 0;
        }
        log("채점을 마쳤습니다. 총 점수는 " + myScore + "점 입니다.");
        return(myScore);
    }