/// <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); } }
/// <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); } }
/// <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); }
/// <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(); }
/// <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); }
/// <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); }
/// <summary> /// 设置清理食物 /// </summary> /// <returns></returns> public bool SetCleanFood(OrderForCustomer orderForCustomer, NpcAIWorkerCpt waiterCpt) { if (waiterCpt != null) { waiterCpt.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.WaiterClean, orderForCustomer); return(true); } return(false); }
/// <summary> /// 初始化工作者的数据 /// </summary> public void InitWorkerData() { //初始化优先级 for (int i = 0; i < listNpcWorker.Count; i++) { NpcAIWorkerCpt npcAI = listNpcWorker[i]; npcAI.InitWorkerInfo(); } }
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 + ""; } }
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); }
/// <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; } }
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); }
/// <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(); } }
/// <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); }
public virtual void Awake() { npcAIWorker = GetComponent <NpcAIWorkerCpt>(); }
/// <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; } }