/// <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 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> /// <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); }
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); }
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 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); }
/// <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; } }