Beispiel #1
0
    }   //Move 상태 AI

    void HoldStateAction()
    {
        //그룹이 없는 상태 -> 식사가 끝나고 이동을 마친 상태
        if (myGroup == null)
        {
            //지불자이면 카운터의 대기열에 서게 됨.
            if (isPayer)
            {
                currentState = G_STATE.PAY;
            }
            //지불자가 아니면 게임 오브젝트 제거(퇴장)
            else
            {
                Destroy(gameObject);
            }
            return;
        }

        GameObject[] groundList = myTable.GetComponent <AccessPositionOfObject>().GetAllGround();

        for (int i = 0; i < groundList.Length; i++)
        {
            if (RayCastGround(transform.position) == groundList[i])
            {
                myGround     = groundList[i];
                currentState = G_STATE.SIT;
                if (myGroup.GetComponent <GuestAction>().currentState == G_STATE.SIT)
                {   //일행도 앉아있다면 테이블의 상태를 USING(1)로 전환
                    myTable.GetComponent <TableStateManager>().stateOfTable = T_STATE.USING;
                }
                groundList[i].GetComponent <GroundUnit>().SetAbsolutePassable(false);    //손님이 자리잡은 땅을 절대 지나갈 수 없게 함
            }
        }
    }   //Hold 상태 AI
Beispiel #2
0
    void MoveStateAction()
    {
        if (isMoving && path != null)
        {     //경로가 존재하며 이동 명령을 받은 경우
            if (counter >= 0)
            { //목적지 도달까지
                thisPosition = transform.position;

                if (path[counter].GetPosition() != thisPosition)
                {   //이동
                    iTween.MoveTo(gameObject, iTween.Hash("x", path[counter].GetPosition().x, "y", path[counter].GetPosition().y, "speed", moveSpeed, "easetype", iTween.EaseType.linear));
                }
                else
                {
                    counter--;
                }
            }
            //목적지 도달 시
            else
            {
                isMoving = false;
                path.Clear();
                currentState = G_STATE.HOLD;
            }
        }

        if (path == null)
        {
            counter  = -1;
            isMoving = false;
        }
    }   //Move 상태 AI
Beispiel #3
0
 // Use this for initialization
 void Start()
 {
     timer        = 0.0f;
     waitForOrder = false;
     prevState    = G_STATE.MOVE;
     counterToPay = GameObject.Find("CounterSprite");
 }
Beispiel #4
0
    }   //Hold 상태 AI

    void SitStateAction()
    {
        timer += Time.deltaTime;
        if (timer >= timeToOrderSec)   //일정 시간이 지나면 주문
        {
            timer        = 0;
            currentState = G_STATE.ORDER;
        }
    }   //Sit 상태 AI
Beispiel #5
0
    public void ShowActionMarker(G_STATE _state)
    {
        switch (_state)
        {
        //식사 상태 이미지 적용
        case G_STATE.EAT:
        {
            myImg.sprite = eatingImg;
            break;
        }

        //대기 상태 이미지중에서 임의로 선택하여 적용
        case G_STATE.SIT:
        {
            myImg.sprite = waitingImg[Random.Range(0, waitingImg.Length)];

            //이 테이블의 그룹에 속한 모든 손님들이 똑같이 SIT상태가 되어야만 적용
            List <GameObject> guestGroup = transform.parent.GetComponentInChildren <TableStateManager>().guestGroup;
            for (int i = 0; i < guestGroup.Count; i++)
            {
                if (guestGroup[i].GetComponent <GuestAction>().currentState == G_STATE.SIT)
                {
                    continue;
                }
                myImg.sprite = null;
            }
            break;
        }

        case G_STATE.WAIT:
        {
            myImg.sprite = waitingImg[Random.Range(0, waitingImg.Length)];
            break;
        }

        //주문 상태 이미지 적용
        case G_STATE.ORDER:
            myImg.sprite = orderImg;
            break;

        default:
            myImg.sprite  = null;
            myImg.enabled = false;
            break;
        }

        if (myImg.sprite != null)
        {
            myImg.enabled = true;
        }
    }
Beispiel #6
0
    void Update()
    {
        curState = GetComponentInParent <GuestAction>().currentState;
        switch (curState)
        {
        case STATE.MOVE:
            MoveAnimation();
            break;

        case STATE.HOLD:
            StopAnimation();
            break;
        }
    }
Beispiel #7
0
    void Update()
    {
        switch (currentState)
        {
        case G_STATE.MOVE:        //이동 처리
            MoveStateAction();
            break;

        case G_STATE.HOLD:        //목표 지점까지 이동 완료 (Move 다음 행동 분기점)
            HoldStateAction();
            break;

        case G_STATE.SIT:         //착석
            SitStateAction();
            break;

        case G_STATE.ORDER:     //주문 요청
            OrderStateAction();
            break;

        case G_STATE.EAT:
            EatStateAction();
            break;

        case G_STATE.PAY:
            PayStateAction();
            break;
        }

        if (prevState != currentState)
        {
            if (myTable != null)
            {
                myTable.transform.parent
                .GetComponentInChildren <TableActMarker>().ShowActionMarker(currentState);
            }
            prevState = currentState;
        }
    }
Beispiel #8
0
    }                     //Order 상태 AI

    void EatStateAction() //Eat 상태 AI
    {
        timer += Time.deltaTime;
        if (timer >= timeToEatSec)
        {
            //방금 식사가 완료된 상태
            if (myTable != null)
            {
                TableStateManager table = myTable.GetComponent <TableStateManager>();
                table.DecideWhoPay();
                table.stateOfTable = T_STATE.DIRTY;
                currentState       = G_STATE.MOVE;
                table.guestGroup.Clear();
                table.transform.parent.GetComponentInChildren <TableActMarker>().ShowActionMarker(currentState);
                myMenus = table.GetOrderMenus();
                myTable = null;
                myGroup = null;
                myGround.GetComponent <GroundUnit>().SetAbsolutePassable(true);
            }
            //값을 지불한 상태(PayAtCounter 스크립트 참조)
            else
            {
                currentState = G_STATE.MOVE;
            }
            GameObject moveToGround = null;
            if (isPayer)
            {
                moveToGround = counterToPay.GetComponent <PayAtCounter>().EnqueueGuestForPay(gameObject);
                MoveThisGround(moveToGround);
            }
            else
            {
                moveToGround = RayCastGround(GameObject.Find("GuestSpawn").transform.position);
                MoveThisGround(moveToGround);
            }
        }
    }
Beispiel #9
0
 public void SetCurrentState(G_STATE _state)
 {
     currentState = _state;
 }