Esempio n. 1
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);
        }
    }
Esempio n. 2
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);
     }
 }
Esempio n. 3
0
    /// <summary>
    /// 偷懒员工处理
    /// </summary>
    public NpcAIWorkerCpt HandleForDazeWorker()
    {
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        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;
                NpcAIWorkerCpt npcAIWorker = objSelect.GetComponentInParent <NpcAIWorkerCpt>();
                if (npcAIWorker)
                {
                    //如果在偷懒 则惊醒
                    if (npcAIWorker.GetWorkerStatus() == NpcAIWorkerCpt.WorkerIntentEnum.Daze)
                    {
                        CursorHandler.Instance.SetCursor(CursorHandler.CursorType.Knock);
                        return(npcAIWorker);
                    }
                }
            }
        }
        CursorHandler.Instance.SetCursor(CursorHandler.CursorType.Def);
        return(null);
    }
Esempio n. 4
0
    /// <summary>
    /// 关闭客栈
    /// </summary>
    public void CloseInn()
    {
        AudioHandler.Instance.StopMusic();
        innStatus = InnStatusEnum.Close;

        //删除所有顾客
        //驱除所有顾客
        NpcHandler.Instance.builderForCustomer.ClearNpc();
        //清理事件NPC
        NpcHandler.Instance.builderForEvent.ClearNpc();
        //清理家族NPC
        NpcHandler.Instance.builderForFamily.ClearNpc();

        for (int i = 0; i < listOrder.Count; i++)
        {
            OrderForBase orderForBase = listOrder[i];
            if (orderForBase as OrderForCustomer != null)
            {
                OrderForCustomer orderCusomer = orderForBase as OrderForCustomer;
                //清理所有食物
                if (orderCusomer.foodCpt != null && orderCusomer.foodCpt.gameObject != null)
                {
                    Destroy(orderCusomer.foodCpt.gameObject);
                }
            }
        }
        //清理所有桌子
        innTableHandler.CleanAllTable();
        //清理所有柜台
        innPayHandler.CleanAllCounter();
        //清理所有灶台
        innCookHandler.CleanAllStove();
        //清理所有的床
        innHotelHandler.CleanAllBed();

        //结束所有拉人活动
        //结束所有引路活动
        for (int i = 0; i < NpcHandler.Instance.builderForWorker.listNpcWorker.Count; i++)
        {
            NpcAIWorkerCpt itemWorker = NpcHandler.Instance.builderForWorker.listNpcWorker[i];
            if (itemWorker != null && itemWorker.aiForAccost.npcAICustomer != null)
            {
                itemWorker.aiForAccost.npcAICustomer.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Leave);
            }
        }

        NpcHandler.Instance.builderForWorker.ClearAllWork();

        rascalrQueue.Clear();
        cusomerQueue.Clear();
        foodQueue.Clear();
        sendQueue.Clear();
        cleanQueue.Clear();
        listOrder.Clear();

        hotelQueue.Clear();
        bedCleanQueue.Clear();
    }
Esempio n. 5
0
 /// <summary>
 /// 设置工作者数据
 /// </summary>
 /// <param name="npcAIWorker"></param>
 public void SetDataForWork(NpcAIWorkerCpt npcAIWorker)
 {
     this.targetNpcAIForWorker = npcAIWorker;
     SetType(TextHandler.Instance.manager.GetTextById(63));
     //设置状态
     objNpcStatus.SetActive(true);
     npcAIWorker.GetWorkerStatus(out string workerStatus);
     SetStatus(workerStatus);
 }
Esempio n. 6
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);
 }
Esempio n. 7
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);
 }
Esempio n. 8
0
 /// <summary>
 /// 初始化工作者的数据
 /// </summary>
 public void InitWorkerData()
 {
     //初始化优先级
     for (int i = 0; i < listNpcWorker.Count; i++)
     {
         NpcAIWorkerCpt npcAI = listNpcWorker[i];
         npcAI.InitWorkerInfo();
     }
 }
Esempio n. 9
0
 public void HandleForUI()
 {
     if (NpcHandler.Instance.builderForWorker.listNpcWorker != null)
     {
         int numberForIdle    = 0;
         int numberForChef    = 0;
         int numberForWaiter  = 0;
         int numberForAccount = 0;
         int numberForAccost  = 0;
         int numberForBeater  = 0;
         for (int i = 0; i < NpcHandler.Instance.builderForWorker.listNpcWorker.Count; i++)
         {
             NpcAIWorkerCpt npcWorker = NpcHandler.Instance.builderForWorker.listNpcWorker[i];
             NpcAIWorkerCpt.WorkerIntentEnum workerIntent = npcWorker.GetWorkerStatus();
             if (workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.Idle || workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.Daze)
             {
                 numberForIdle++;
             }
             else if (workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.Cook)
             {
                 numberForChef++;
             }
             else if (workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.WaiterSend ||
                      workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.WaiterClean ||
                      workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.WaiterSend)
             {
                 numberForWaiter++;
             }
             else if (workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.Accounting)
             {
                 numberForAccount++;
             }
             else if (workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.AccostSolicit ||
                      workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.AccostGuide)
             {
                 numberForAccost++;
             }
             else if (workerIntent == NpcAIWorkerCpt.WorkerIntentEnum.Beater)
             {
                 numberForBeater++;
             }
         }
         tvNumberForIdle.text    = numberForIdle + "";
         tvNumberForChef.text    = numberForChef + "";
         tvNumberForWaiter.text  = numberForWaiter + "";
         tvNumberForAccount.text = numberForAccount + "";
         tvNumberForAccost.text  = numberForAccost + "";
         tvNumberForBeater.text  = numberForBeater + "";
     }
 }
Esempio n. 10
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);
    }
Esempio n. 11
0
 /// <summary>
 ///  清楚选择
 /// </summary>
 protected void ClearSelect()
 {
     //如果是员工
     if (selectNpc != null && selectNpc as NpcAIWorkerCpt)
     {
         NpcAIWorkerCpt npcAIWorker = selectNpc as NpcAIWorkerCpt;
         //恢复偷懒
         npcAIWorker.SetDazeEnabled(true);
     }
     selectNpc = null;
     selectBed = null;
     if (dialogSelectView != null)
     {
         Destroy(dialogSelectView.gameObject);
         dialogSelectView = null;
     }
 }
Esempio n. 12
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);
 }
Esempio n. 13
0
    /// <summary>
    /// 给空闲的员工分配工作
    /// </summary>
    public void DistributionWorkForIdleWorker()
    {
        //获取所有工作者
        NpcWorkerBuilder npcWorkerBuilder = NpcHandler.Instance.builderForWorker;

        if (npcWorkerBuilder == null)
        {
            return;
        }
        List <NpcAIWorkerCpt> listWork = npcWorkerBuilder.listNpcWorker;

        if (listWork == null)
        {
            return;
        }
        for (int i = 0; i < listWork.Count; i++)
        {
            NpcAIWorkerCpt itemWorker = listWork[i];
            //通过优先级设置工作
            itemWorker.SetWorkByPriority();
        }
    }
Esempio n. 14
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);
    }
Esempio n. 15
0
 public virtual void Awake()
 {
     npcAIWorker = GetComponent <NpcAIWorkerCpt>();
 }
Esempio n. 16
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;
        }
    }