Exemplo n.º 1
0
 /// <summary>
 /// 设置算账数据
 /// </summary>
 public bool SetPay(OrderForBase order, NpcAIWorkerCpt workNpc)
 {
     if (workNpc != null)
     {
         if (order.counter.counterStatus == BuildCounterCpt.CounterStatusEnum.Idle)
         {
             order.counter.SetCounterStatus(BuildCounterCpt.CounterStatusEnum.Ready);
             if (order as OrderForCustomer != null)
             {
                 workNpc.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Accounting, (OrderForCustomer)order);
             }
             else if (order as OrderForHotel != null)
             {
                 workNpc.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Accounting, (OrderForHotel)order);
             }
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         return(false);
     }
 }
Exemplo n.º 2
0
    /// <summary>
    ///  分配厨师做饭
    /// </summary>
    public bool SetChefForCook(OrderForCustomer orderForCustomer, NpcAIWorkerCpt chefCpt)
    {
        BuildStoveCpt stoveCpt = null;

        if (chefCpt == null)
        {
            return(false);
        }
        for (int i = 0; i < listStoveCpt.Count; i++)
        {
            BuildStoveCpt itemStove = listStoveCpt[i];
            //检测是否能到达烹饪点
            if (itemStove.stoveStatus == BuildStoveCpt.StoveStatusEnum.Idle && CheckUtil.CheckPath(chefCpt.transform.position, itemStove.GetCookPosition()))
            {
                stoveCpt = itemStove;
                break;
            }
        }
        if (chefCpt != null && stoveCpt != null)
        {
            orderForCustomer.stove = stoveCpt;
            orderForCustomer.stove.SetStoveStatus(BuildStoveCpt.StoveStatusEnum.Ready);
            orderForCustomer.chef = chefCpt;
            chefCpt.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Cook, orderForCustomer);
            return(true);
        }
        else
        {
            return(false);
        }
    }
Exemplo n.º 3
0
 /// <summary>
 /// 设置清理床单
 /// </summary>
 /// <param name="orderForHotel"></param>
 /// <param name="waiterCpt"></param>
 public bool SetCleanBed(OrderForHotel orderForHotel, NpcAIWorkerCpt waiterCpt)
 {
     if (waiterCpt != null)
     {
         waiterCpt.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.WaiterBed, orderForHotel);
         return(true);
     }
     return(false);
 }
Exemplo n.º 4
0
 /// <summary>
 /// 设置清理食物
 /// </summary>
 /// <returns></returns>
 public bool SetCleanFood(OrderForCustomer orderForCustomer, NpcAIWorkerCpt waiterCpt)
 {
     if (waiterCpt != null)
     {
         waiterCpt.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.WaiterClean, orderForCustomer);
         return(true);
     }
     return(false);
 }
Exemplo n.º 5
0
    public void BuildWork(CharacterBean characterBean, Vector3 position)
    {
        GameObject workerObj = Instantiate(objWorkModel, objWorkModel.transform);

        workerObj.transform.SetParent(objContainer.transform);
        workerObj.SetActive(true);
        workerObj.transform.localScale = new Vector3(1, 1);
        workerObj.transform.position   = (position + new Vector3(Random.Range(-1, 1), 0));

        NpcAIWorkerCpt npcAI = workerObj.GetComponent <NpcAIWorkerCpt>();

        npcAI.SetCharacterData(characterBean);
        npcAI.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Idle);
        listNpcWorker.Add(npcAI);
    }
Exemplo n.º 6
0
 public NpcAIRascalCpt SetFight(List <NpcAIRascalCpt> listRascal, NpcAIWorkerCpt workNpc)
 {
     if (CheckUtil.ListIsNull(listRascal))
     {
         return(null);
     }
     for (int i = 0; i < listRascal.Count; i++)
     {
         NpcAIRascalCpt itemRascal = listRascal[i];
         if (itemRascal.npcFight == null)
         {
             itemRascal.npcFight = workNpc;
             workNpc.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Beater, itemRascal);
             return(itemRascal);
         }
     }
     return(null);
 }
Exemplo n.º 7
0
    /// <summary>
    /// 通过不同的工作类型分配不同的工作
    /// </summary>
    public bool DistributionWorkForType(WorkerDetilsEnum workDetailsType, NpcAIWorkerCpt workNpc)
    {
        switch (workDetailsType)
        {
        case WorkerDetilsEnum.AccountantForPay:
            if (!CheckUtil.ListIsNull(innPayHandler.listCounterCpt))
            {
                for (int i = 0; i < innPayHandler.listCounterCpt.Count; i++)
                {
                    BuildCounterCpt counterCpt = innPayHandler.listCounterCpt[i];
                    if (!CheckUtil.ListIsNull(counterCpt.payQueue))
                    {
                        bool isSuccess = innPayHandler.SetPay(counterCpt.payQueue[0], workNpc);
                        if (isSuccess)
                        {
                            counterCpt.payQueue.RemoveAt(0);
                            return(true);
                        }
                    }
                }
            }
            break;

        case WorkerDetilsEnum.ChefForCook:
            //排队做菜处理
            if (!CheckUtil.ListIsNull(foodQueue))
            {
                bool isSuccess = innCookHandler.SetChefForCook(foodQueue[0], workNpc);
                if (isSuccess)
                {
                    foodQueue.RemoveAt(0);
                    return(true);
                }
            }
            break;

        case WorkerDetilsEnum.WaiterForSend:
            //排队送菜处理
            if (!CheckUtil.ListIsNull(sendQueue))
            {
                OrderForCustomer orderForSend = sendQueue[0];
                bool             isSuccess    = innWaiterHandler.SetSendFood(orderForSend, workNpc);
                if (isSuccess)
                {
                    sendQueue.Remove(orderForSend);
                    return(true);
                }
            }
            break;

        case WorkerDetilsEnum.WaiterForCleanTable:
            //排队清理处理
            if (!CheckUtil.ListIsNull(cleanQueue))
            {
                //搜寻最近的桌子
                OrderForCustomer clearItem = null;
                float            distance  = float.MaxValue;
                for (int i = 0; i < cleanQueue.Count; i++)
                {
                    OrderForCustomer itemOrder    = cleanQueue[i];
                    float            tempDistance = Vector3.Distance(itemOrder.table.GetTablePosition(), workNpc.transform.position);
                    if (tempDistance < distance)
                    {
                        distance  = tempDistance;
                        clearItem = itemOrder;
                    }
                }
                if (clearItem == null)
                {
                    return(false);
                }
                bool isSuccess = innWaiterHandler.SetCleanFood(clearItem, workNpc);
                if (isSuccess)
                {
                    cleanQueue.Remove(clearItem);
                    return(true);
                }
            }
            break;

        case WorkerDetilsEnum.WaiterForCleanBed:
            //排队床单清理处理
            if (!CheckUtil.ListIsNull(bedCleanQueue))
            {
                OrderForHotel orderForHotel = bedCleanQueue[0];
                bool          isSuccess     = innWaiterHandler.SetCleanBed(orderForHotel, workNpc);
                if (isSuccess)
                {
                    bedCleanQueue.Remove(orderForHotel);
                    return(true);
                }
            }
            break;

        case WorkerDetilsEnum.AccostForSolicit:
            workNpc.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.AccostSolicit);
            return(true);

        case WorkerDetilsEnum.AccostForGuide:
            //等待接待
            if (!CheckUtil.ListIsNull(hotelQueue))
            {
                OrderForHotel orderForHotel = hotelQueue[0];
                workNpc.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.AccostGuide, orderForHotel);
                hotelQueue.Remove(orderForHotel);
                return(true);
            }
            break;

        case WorkerDetilsEnum.BeaterForDrive:
            //分派打架人选
            if (!CheckUtil.ListIsNull(rascalrQueue))
            {
                NpcAIRascalCpt npcAIRascal = innFightHandler.SetFight(rascalrQueue, workNpc);
                if (npcAIRascal)
                {
                    //rascalrQueue.Remove(npcAIRascal);
                    return(true);
                }
            }
            break;
        }
        return(false);
    }
Exemplo n.º 8
0
    /// <summary>
    /// 选中物体处理
    /// </summary>
    public void HandleForSelect()
    {
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }
        //偷懒员工选中处理
        NpcAIWorkerCpt workerDaze = HandleForDazeWorker();

        if (Input.GetButtonDown(InputInfo.Confirm))
        {
            if (dialogSelectView != null)
            {
                return;
            }
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            //如有已经提前选中了偷懒的员工
            if (workerDaze != null)
            {
                AudioHandler.Instance.PlaySound(AudioSoundEnum.Fight);
                workerDaze.SetExpression(CharacterExpressionCpt.CharacterExpressionEnum.Surprise, 3);
                workerDaze.SetDazeBufferTime(10);
                workerDaze.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Idle);
                return;
            }
            RaycastHit2D[] hitAll = Physics2D.RaycastAll(mousePos, Vector2.zero);
            foreach (RaycastHit2D itemHit in hitAll)
            {
                if (itemHit.collider.transform.tag.Equals(TagInfo.Tag_NpcBody))
                {
                    GameObject objSelect = itemHit.collider.gameObject;
                    selectNpc = objSelect.GetComponentInParent <BaseNpcAI>();
                    if (selectNpc)
                    {
                        AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForShow);
                        DialogBean dialogData = new DialogBean();
                        dialogSelectView = DialogHandler.Instance.CreateDialog <SelectForNpcDialogView>(DialogEnum.SelectForNpc, this, dialogData);
                        ((SelectForNpcDialogView)dialogSelectView).SetData(selectNpc);
                        //如果是员工
                        if (selectNpc as NpcAIWorkerCpt)
                        {
                            NpcAIWorkerCpt npcAIWorker = selectNpc as NpcAIWorkerCpt;
                            npcAIWorker.SetDazeEnabled(false);
                        }
                        return;
                    }
                }
                else if (itemHit.collider.transform.tag.Equals(TagInfo.Tag_Bed))
                {
                    GameObject objSelect = itemHit.collider.gameObject;
                    selectBed = objSelect.GetComponentInParent <BuildBedCpt>();
                    if (selectBed)
                    {
                        AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForShow);
                        DialogBean dialogData = new DialogBean();
                        dialogSelectView = DialogHandler.Instance.CreateDialog <SelectForBedDialogView>(DialogEnum.SelectForBed, this, dialogData);
                        ((SelectForBedDialogView)dialogSelectView).SetData(selectBed);
                        return;
                    }
                }
            }
            selectNpc = null;
            selectBed = null;
        }
    }