public override void IntentForLeave() { //添加好感 if (orderForCustomer != null) { PraiseTypeEnum praiseType = orderForCustomer.innEvaluation.GetPraise(); if (praiseType == PraiseTypeEnum.Excited || praiseType == PraiseTypeEnum.Happy) { int AddFavorability = 0; if (praiseType == PraiseTypeEnum.Excited) { AddFavorability = 1; } else if (praiseType == PraiseTypeEnum.Happy) { } characterFavorabilityData.AddFavorability(AddFavorability); //弹出喜爱图标 if (AddFavorability > 0) { SetExpression(CharacterExpressionCpt.CharacterExpressionEnum.Love, 10); } } } base.IntentForLeave(); orderForCustomer = new OrderForCustomer(CustomerTypeEnum.Friend, this); }
/// <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 void ShowCustomerFoodData() { if (targetNpcAIForCustomerFood == null) { return; } OrderForCustomer orderForCustomer = targetNpcAIForCustomerFood.GetOrderForCustomer(); if (orderForCustomer != null) { if (orderForCustomer.table) { objMood.SetActive(true); } if (targetNpcAIForCustomerFood.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.Leave) { objFunction.SetActive(false); btExpel.gameObject.SetActive(false); } else { objFunction.SetActive(true); btExpel.gameObject.SetActive(true); } } }
/// <summary> /// 意图-前往餐桌 /// </summary> /// <param name="buildTableCpt"></param> public void IntentForGoToSeat(OrderForCustomer orderForCustomer) { //停止等待 if (gameObject == null) { return; } StopAllCoroutines(); this.orderForCustomer = orderForCustomer; //判断路径是否有效 if (CheckUtil.CheckPath(transform.position, orderForCustomer.table.GetSeatPosition())) { //开启满意度 characterMoodCpt.SetMood(orderForCustomer.innEvaluation.GetPraise()); //前往桌子 movePosition = orderForCustomer.table.GetSeatPosition(); characterMoveCpt.SetDestination(movePosition); //记录该顾客 InnHandler.Instance.RecordCustomer(orderForCustomer); } else { SetMood(30); EndOrderAndLeave(); } }
/// <summary> /// 创建一个订单 /// </summary> /// <param name="npc"></param> /// <returns></returns> public OrderForCustomer CreateOrder(NpcAICustomerCpt npc) { OrderForCustomer order = new OrderForCustomer(npc.customerType, npc); npc.SetOrderForCustomer(order); listOrder.Add(order); return(order); }
/// <summary> /// 设置做菜 /// </summary> /// <param name="orderForCustomer"></param> public void StartCook(OrderForCustomer orderForCustomer) { if (orderForCustomer == null) { return; } SetIntent(ChefIntentEnum.GoToCook, orderForCustomer); }
/// <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="orderForCustomer"></param> public void SetIntentForSendFood(OrderForCustomer orderForCustomer) { sendPro.SetActive(true); npcAIWorker.SetTake(orderForCustomer.foodCpt.gameObject); orderForCustomer.foodCpt.transform.DOLocalMove(Vector3.zero, 0.2f); //orderForCustomer.foodCpt.transform.localPosition = Vector3.zero; movePosition = orderForCustomer.table.GetTablePosition(); npcAIWorker.characterMoveCpt.SetDestination(movePosition); }
/// <summary> /// 意图-排队就餐 /// </summary> public virtual void IntentForWaitSeat() { //加入排队队伍 //添加一个订单 OrderForCustomer orderForCustomer = InnHandler.Instance.CreateOrder(this); InnHandler.Instance.cusomerQueue.Add(orderForCustomer); StartCoroutine(CoroutineForStartWaitSeat()); }
/// <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> /// <param name="orderForCustomer"></param> /// <param name="menuOwn"></param> /// <returns></returns> public MenuInfoBean OrderForFood(OrderForCustomer orderForCustomer, MenuOwnBean menuOwn) { //食物数据库里有这个数据 if (menuOwn == null) { return(null); } return(OrderForFood(orderForCustomer, menuOwn.menuId)); }
/// <summary> /// 设置意图 /// </summary> /// <param name="workerIntent"></param> /// <param name="orderForCustomer"></param> /// <param name="npcAIRascal"></param> public void SetIntent(WorkerIntentEnum workerIntent, OrderForCustomer orderForCustomer, NpcAIRascalCpt npcAIRascal, OrderForHotel orderForHotel) { StopAllCoroutines(); RemoveStatusIconByType(CharacterStatusIconEnum.Pro); this.workerIntent = workerIntent; switch (workerIntent) { case WorkerIntentEnum.Idle: SetIntentForIdle(); break; case WorkerIntentEnum.Daze: SetIntentForDaze(); break; case WorkerIntentEnum.Cook: SetIntentForCook(orderForCustomer); break; case WorkerIntentEnum.WaiterSend: SetIntentForWaiterSend(orderForCustomer); break; case WorkerIntentEnum.WaiterClean: SetIntentForWaiterCleanTable(orderForCustomer); break; case WorkerIntentEnum.WaiterBed: SetIntentForWaiterCleanBed(orderForHotel); break; case WorkerIntentEnum.Accounting: if (orderForCustomer != null) { SetIntentForAccounting(orderForCustomer); } else if (orderForHotel != null) { SetIntentForAccounting(orderForHotel); } break; case WorkerIntentEnum.AccostSolicit: SetIntentForAccostSolicit(); break; case WorkerIntentEnum.AccostGuide: SetIntentForAccostGuide(orderForHotel); break; case WorkerIntentEnum.Beater: SetIntentForBeater(npcAIRascal); break; } NotifyAllObserver((int)WorkerNotifyEnum.StatusChange, (int)workerIntent); }
/// <summary> /// 尝试结束订单 /// </summary> /// <param name="orderForCustomer"></param> public void EndOrder(OrderForCustomer orderForCustomer) { //食物已被清理 if (orderForCustomer.foodCpt == null //顾客已经离开 && listOrder.Contains(orderForCustomer)) { listOrder.Remove(orderForCustomer); } }
public void SetIntent(CustomerIntentEnum intent, OrderForCustomer orderForCustomer) { //删除进度图标 RemoveStatusIconByType(CharacterStatusIconEnum.Pro); //停止所有进程 if (this) { StopAllCoroutines(); } this.customerIntent = intent; switch (customerIntent) { case CustomerIntentEnum.Walk: IntentForWalk(); break; case CustomerIntentEnum.Want: IntentForWant(); break; case CustomerIntentEnum.WaitSeat: IntentForWaitSeat(); break; case CustomerIntentEnum.GotoSeat: IntentForGoToSeat(orderForCustomer); break; case CustomerIntentEnum.WaitFood: IntentForWaitFood(); break; case CustomerIntentEnum.Eatting: IntentForEatting(); break; case CustomerIntentEnum.GotoPay: IntentForGotoPay(); break; case CustomerIntentEnum.WaitPay: IntentForWaitPay(); break; case CustomerIntentEnum.Leave: IntentForLeave(); break; case CustomerIntentEnum.WaitAccost: IntentForWaitAccost(); break; } NotifyAllObserver((int)CustomerNotifyEnum.StatusChange, (int)intent); }
/// <summary> /// 意图-排队就餐 /// </summary> public override void IntentForWaitSeat() { //加入排队队伍 //添加一个订单 OrderForCustomer orderForCustomer = InnHandler.Instance.CreateOrder(this); InnHandler.Instance.cusomerQueue.Add(orderForCustomer); if (teamRank == 0) { StartCoroutine(CoroutineForStartWaitSeat()); } }
/// <summary> /// 意图-闲置 /// </summary> public void SetIntentForIdle() { cookPro.SetActive(false); chefIntent = ChefIntentEnum.Idle; //设置灶台为空闲 if (orderForCustomer != null && orderForCustomer.stove != null) { orderForCustomer.stove.SetStoveStatus(BuildStoveCpt.StoveStatusEnum.Idle); } orderForCustomer = null; npcAIWorker.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Idle); }
/// <summary> /// 意图-前往取餐 /// </summary> /// <param name="orderForCustomer"></param> public void SetIntentForGoToGetFood(OrderForCustomer orderForCustomer) { if (CheckUtil.CheckPath(transform.position, orderForCustomer.stove.GetTakeFoodPosition())) { sendPro.SetActive(true); movePosition = orderForCustomer.stove.GetTakeFoodPosition(); npcAIWorker.characterMoveCpt.SetDestination(movePosition); } else { SetIntent(WaiterIntentEnum.Idle); } }
/// <summary> /// 离开处理 /// </summary> public virtual void HandleForLeave() { //到目标点就删除 if (!characterMoveCpt.IsAutoMoveStop()) { return; } SetIntent(CustomerIntentEnum.None); gameObject.SetActive(false); gameObject.transform.position = new Vector3(0, -10000, 0); orderForCustomer = new OrderForCustomer(CustomerTypeEnum.Normal, this); timeWaitSeat = 20; NpcHandler.Instance.builderForCustomer.listHideNpc.Enqueue(gameObject); }
/// <summary> /// 设置食物 /// </summary> /// <param name="foodData"></param> public void CreateFood(InnFoodManager innFoodManager, OrderForCustomer orderForCustomer) { //创建食物 GameObject foodObj = Instantiate(itemFoodModel, objFoodContainer.transform); foodObj.SetActive(true); foodObj.transform.position = GameUtil.GetTransformInsidePosition2D(foodObj.transform, 0.5f); FoodForCustomerCpt foodCpt = foodObj.GetComponent <FoodForCustomerCpt>(); foodCpt.SetData(orderForCustomer.foodData, orderForCustomer.foodLevel); orderForCustomer.foodCpt = foodCpt; //食物创建动画 foodCpt.CreateAnim(); }
/// <summary> /// 点指定食物 /// </summary> /// <param name="orderForCustomer"></param> /// <param name="menuId"></param> /// <returns></returns> public MenuInfoBean OrderForFood(OrderForCustomer orderForCustomer, long menuId) { GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); //食物数据库里有这个数据 MenuInfoBean menuInfo = InnFoodHandler.Instance.manager.GetFoodDataById(menuId); if (menuInfo != null && gameData.CheckIsSellMenu(menuId)) { orderForCustomer.foodData = menuInfo; foodQueue.Add(orderForCustomer); RecordCustomerForMenu(orderForCustomer, menuId); return(menuInfo); } return(null); }
/// <summary> /// 意图-前往做菜 /// </summary> /// <param name="orderForCustomer"></param> public void SetIntentForGoToCook(OrderForCustomer orderForCustomer) { //如果订单是否有效 if (!orderForCustomer.CheckOrder()) { SetIntent(ChefIntentEnum.Idle); return; } movePosition = orderForCustomer.stove.GetCookPosition(); if (movePosition == null) { LogUtil.Log("厨师寻路失败-没有灶台烹饪点"); return; } npcAIWorker.characterMoveCpt.SetDestination(movePosition); cookPro.SetActive(true); }
/// <summary> /// 结算所有客户 /// </summary> public void SettlementAllCustomer() { if (CheckUtil.ListIsNull(listOrder)) { return; } GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); for (int i = 0; i < listOrder.Count; i++) { OrderForBase itemOrder = listOrder[i]; if (itemOrder == null) { continue; } if (itemOrder as OrderForCustomer != null) { OrderForCustomer orderForCustomer = itemOrder as OrderForCustomer; if (orderForCustomer.customer != null && (orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.Eatting || orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.GotoPay || orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.WaitPay || orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.Pay)) { if (orderForCustomer.foodData == null) { continue; } MenuOwnBean menuOwn = gameData.GetMenuById(orderForCustomer.foodData.id); menuOwn.GetPrice(orderForCustomer.foodData, out long payMoneyL, out long payMoneyM, out long payMoneyS); PayMoney(itemOrder, payMoneyL, payMoneyM, payMoneyS, false); } } else if (itemOrder as OrderForHotel != null) { OrderForHotel orderForHotel = itemOrder as OrderForHotel; BuildBedBean buildBedData = orderForHotel.bed.buildBedData; PayMoney(itemOrder, buildBedData.priceL * orderForHotel.sleepTime, buildBedData.priceM * orderForHotel.sleepTime, buildBedData.priceS * orderForHotel.sleepTime, false); } } }
/// <summary> /// 记录顾客点菜 /// </summary> public void RecordCustomerForMenu(OrderForCustomer order, long menuId) { GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); //成就记录 UserAchievementBean userAchievement = gameData.GetAchievementData(); //如果是团队 if (order.customerType == CustomerTypeEnum.Team) { NpcTeamBean teamData = ((NpcAICustomerForGuestTeamCpt)order.customer).teamData; userAchievement.AddMenuForCustomer(order.customerType, teamData.id + "", menuId); } else if (order.customerType == CustomerTypeEnum.Friend) { CharacterBean characterData = ((NpcAICostomerForFriendCpt)order.customer).characterData; userAchievement.AddMenuForCustomer(order.customerType, characterData.baseInfo.characterId, menuId); } }
/// <summary> /// 处理-排队 /// </summary> public void HandleForCusomerQueue() { if (!CheckUtil.ListIsNull(cusomerQueue)) { BuildTableCpt tableCpt = innTableHandler.GetIdleTable(); if (tableCpt != null) { //排队成功 OrderForCustomer orderForCustomer = cusomerQueue[0]; //移除排队列表 cusomerQueue.RemoveAt(0); //设置座位 orderForCustomer.table = tableCpt; //设置客户前往座位 orderForCustomer.customer.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.GotoSeat, orderForCustomer); } } }
/// <summary> /// 设置意图 /// </summary> /// <param name="chefIntent"></param> /// <param name="orderForCustomer"></param> public void SetIntent(ChefIntentEnum chefIntent, OrderForCustomer orderForCustomer) { this.chefIntent = chefIntent; this.orderForCustomer = orderForCustomer; switch (chefIntent) { case ChefIntentEnum.Idle: SetIntentForIdle(); break; case ChefIntentEnum.GoToCook: SetIntentForGoToCook(orderForCustomer); break; case ChefIntentEnum.Cooking: SetIntentForCooking(orderForCustomer); break; } }
/// <summary> /// 随机点餐 /// </summary> /// <returns></returns> public MenuInfoBean OrderForFood(OrderForCustomer orderForCustomer) { GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); //获取正在出售的菜品 List <MenuOwnBean> listOwnMenu = gameData.GetMenuListForSell(); if (listOwnMenu.Count == 0) { return(null); } //随机获取一个菜品 MenuOwnBean menuOwnItem = RandomUtil.GetRandomDataByList(listOwnMenu); if (menuOwnItem == null) { return(null); } return(OrderForFood(orderForCustomer, menuOwnItem)); }
/// <summary> /// 强制结束一个订单 /// </summary> /// <param name="orderForCustomer"></param> /// <param name="isPraise">是否评价</param> public void EndOrderForForce(OrderForCustomer orderForCustomer, bool isPraise) { //如果已经安排了位置 if (orderForCustomer.table != null) { //如果食物还没有吃完时 则直接删除食物 if (orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.GotoSeat || orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.WaitFood || orderForCustomer.customer.customerIntent == NpcAICustomerCpt.CustomerIntentEnum.Eatting) { orderForCustomer.table.CleanTable(); //如果食物是正在做或者还没有送过来,也直接删除 if (orderForCustomer.foodCpt != null) { Destroy(orderForCustomer.foodCpt.gameObject); } } //如果食物已经吃完,则应该在清理列表中 //支付一半的钱 //PayMoney(orderForCustomer, 0.5f); } //根据心情评价客栈 前提订单里有他 if (isPraise) { InnPraise(orderForCustomer.innEvaluation.GetPraise()); } //如果桌子还属于这个顾客 //如果在排队,移除排队 if (cusomerQueue.Contains(orderForCustomer)) { cusomerQueue.Remove(orderForCustomer); } if (foodQueue.Contains(orderForCustomer)) { foodQueue.Remove(orderForCustomer); } if (sendQueue.Contains(orderForCustomer)) { sendQueue.Remove(orderForCustomer); } EndOrder(orderForCustomer); }
/// <summary> /// 处理-前往获取食物 /// </summary> public void HandleForGoToGetFood() { OrderForCustomer orderForCustomer = order as OrderForCustomer; if (order.CheckOrder()) { if (npcAIWorker.characterMoveCpt.IsAutoMoveStop()) { SetIntent(WaiterIntentEnum.SendFood, orderForCustomer); } } else { //删除食物 if (orderForCustomer.foodCpt != null) { Destroy(orderForCustomer.foodCpt.gameObject); } SetIntent(WaiterIntentEnum.Idle); } }
/// <summary> /// 意图-做菜中 /// </summary> /// <param name="orderForCustomer"></param> public void SetIntentForCooking(OrderForCustomer orderForCustomer) { //检测是否能烹饪 GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); bool canCook = gameData.CheckCookFood(orderForCustomer.foodData); if (canCook) { //扣除食材 gameData.DeductIng(orderForCustomer.foodData); //记录食材消耗 InnHandler.Instance.ConsumeIngRecord(orderForCustomer.foodData); //设置灶台状态 orderForCustomer.stove.SetStoveStatus(BuildStoveCpt.StoveStatusEnum.Cooking); StartCoroutine(StartCook()); } else { npcAIWorker.characterShoutCpt.Shout(TextHandler.Instance.manager.GetTextById(13001)); orderForCustomer.customer.SendForCanNotCook(); SetIntent(ChefIntentEnum.Idle); } }
/// <summary> /// 表情处理 /// </summary> public void HandleForMood() { if (targetNpcAIForCustomerFood != null) { OrderForCustomer order = targetNpcAIForCustomerFood.GetOrderForCustomer(); if (order != null && order.table != null) { PraiseTypeEnum praiseType = order.innEvaluation.GetPraise(); string praiseTypeStr = order.innEvaluation.GetPraiseDetails(); SetMood(praiseTypeStr, targetNpcAIForCustomerFood.characterMoodCpt.GetCurrentMoodSprite()); } } if (targetNpcAIForCustomerHotel != null) { OrderForHotel order = targetNpcAIForCustomerHotel.orderForHotel; if (order != null && order.GetOrderStatus() != OrderHotelStatusEnum.End) { PraiseTypeEnum praiseType = order.innEvaluation.GetPraise(); string praiseTypeStr = order.innEvaluation.GetPraiseDetails(); SetMood(praiseTypeStr, targetNpcAIForCustomerHotel.characterMoodCpt.GetCurrentMoodSprite()); } } }