/// <summary> /// 获取随机空闲的座位 /// </summary> /// <returns></returns> public BuildBedCpt GetIdleBed() { if (listBedCpt == null) { return(null); } List <BuildBedCpt> idleBedList = new List <BuildBedCpt>(); for (int i = 0; i < listBedCpt.Count; i++) { BuildBedCpt itemBed = listBedCpt[i]; if (itemBed.GetBedStatus() == BuildBedCpt.BedStatusEnum.Idle) { idleBedList.Add(itemBed); } } if (idleBedList.Count == 0) { return(null); } BuildBedCpt buildBed = RandomUtil.GetRandomDataByList(idleBedList); buildBed.SetBedStatus(BuildBedCpt.BedStatusEnum.Ready); return(buildBed); }
public OrderForHotel(NpcAICustomerForHotelCpt customer, BuildBedCpt bed) { this.customer = customer; this.bed = bed; orderHotelStatus = OrderHotelStatusEnum.Start; sleepTime = UnityEngine.Random.Range(1, 3); }
/// <summary> /// 前往客栈处理 /// </summary> public virtual void HandleForGoToInn() { if (characterMoveCpt.IsAutoMoveStop()) { //判断点是否关门 if (InnHandler.Instance.GetInnStatus() == InnHandler.InnStatusEnum.Open) { //首先判断还有没有床位 BuildBedCpt buildBedCpt = InnHandler.Instance.GetIdleBed(); if (buildBedCpt != null) { //如果没有关门分派一个接待 SetIntent(CustomerHotelIntentEnum.WaitAccost); //创建订单 orderForHotel = InnHandler.Instance.CreateOrderForHotel(this, buildBedCpt); //记录 InnHandler.Instance.RecordCustomer(orderForHotel); characterShoutCpt.Shout(TextHandler.Instance.manager.GetTextById(13401)); } else { SetIntent(CustomerHotelIntentEnum.Leave); } } else { SetIntent(CustomerHotelIntentEnum.Leave); } } }
/// <summary> /// 创建一个住宿订单 /// </summary> /// <param name="npc"></param> /// <param name="buildBedCpt"></param> /// <returns></returns> public OrderForHotel CreateOrderForHotel(NpcAICustomerForHotelCpt npc, BuildBedCpt buildBedCpt) { OrderForHotel order = new OrderForHotel(npc, buildBedCpt); hotelQueue.Add(order); listOrder.Add(order); return(order); }
/// <summary> /// 找到所有桌子 /// </summary> /// <returns></returns> public List <BuildBedCpt> InitBedList(InnBuildBean innBuildData) { if (bedContainer == null) { return(listBedCpt); } BuildBedCpt[] tableArray = bedContainer.GetComponentsInChildren <BuildBedCpt>(); listBedCpt = TypeConversionUtil.ArrayToList(tableArray); //设置每张床的美观值 try { List <InnResBean> listFurnitureData = innBuildData.GetFurnitureList(2); List <InnResBean> listFloorData = innBuildData.GetFloorList(2); List <InnResBean> listWallData = innBuildData.GetWallList(2); Dictionary <Vector3, InnResBean> mapFurnitureData = new Dictionary <Vector3, InnResBean>(); Dictionary <Vector3, InnResBean> mapFloorData = new Dictionary <Vector3, InnResBean>(); Dictionary <Vector3, InnResBean> mapWallData = new Dictionary <Vector3, InnResBean>(); foreach (InnResBean innResData in listFurnitureData) { mapFurnitureData.Add(TypeConversionUtil.Vector3BeanToVector3(innResData.startPosition), innResData); } foreach (InnResBean innResData in listFloorData) { mapFloorData.Add(TypeConversionUtil.Vector3BeanToVector3(innResData.startPosition), innResData); } foreach (InnResBean innResData in listWallData) { mapWallData.Add(TypeConversionUtil.Vector3BeanToVector3(innResData.startPosition), innResData); } if (listBedCpt != null) { for (int i = 0; i < listBedCpt.Count; i++) { BuildBedCpt buildBedCpt = listBedCpt[i]; float totalAddAesthetics = 0; float totalSubAesthetics = 0; GetAroundAesthetics(mapFurnitureData, buildBedCpt.transform.position, 3, out float addFurnitureAesthetics, out float subFurnitureAesthetics); totalAddAesthetics += addFurnitureAesthetics; totalSubAesthetics += subFurnitureAesthetics; GetAroundAesthetics(mapFloorData, buildBedCpt.transform.position - new Vector3(0.5f, 0.5f), 3, out float addFloorAesthetics, out float subFloorAesthetics); totalAddAesthetics += addFloorAesthetics; totalSubAesthetics += subFloorAesthetics; GetAroundAesthetics(mapWallData, buildBedCpt.transform.position - new Vector3(0.5f, 0.5f), 3, out float addWallAesthetics, out float subWallAesthetics); totalAddAesthetics += addWallAesthetics; totalSubAesthetics += subWallAesthetics; buildBedCpt.SetAddAesthetics((float)decimal.Round(decimal.Parse(totalAddAesthetics + ""), 1), (float)decimal.Round(decimal.Parse(totalSubAesthetics + ""), 1)); } } } catch { } return(listBedCpt); }
/// <summary> /// 清理所有床 /// </summary> public void CleanAllBed() { if (listBedCpt == null) { return; } for (int i = 0; i < listBedCpt.Count; i++) { BuildBedCpt buildBed = listBedCpt[i]; buildBed.CleanBed(); } }
/// <summary> /// 设置床的范围 /// </summary> /// <param name="isShow"></param> protected void SetBedRangeStatus(bool isShow) { //打开所有床位的范围显示 BuildBedCpt[] listBed = InnBuildHandler.Instance.builderForFurniture.GetAllBed(); if (!CheckUtil.ArrayIsNull(listBed)) { for (int i = 0; i < listBed.Length; i++) { BuildBedCpt buildBed = listBed[i]; buildBed.ShowRange(isShow); } } }
public void SetData(BuildBedCpt buildBedCpt) { this.buildBedCpt = buildBedCpt; BuildBedBean buildBedData = buildBedCpt.buildBedData; SetName(buildBedData.bedName); //设置价格 buildBedCpt.GetPrice(out long basePriceS, out long addPriceS); SetPrice(basePriceS, addPriceS); SetBed(buildBedData); buildBedCpt.GetAesthetics(out float addAesthetics, out float subAesthetics, out float totalthetics); SetAesthetics(addAesthetics, subAesthetics); buildBedCpt.ShowRange(true); }
/// <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; } }
/// <summary> /// 判断是否还有床位 /// </summary> /// <returns></returns> public BuildBedCpt GetIdleBed() { BuildBedCpt buildBedCpt = innHotelHandler.GetIdleBed(); return(buildBedCpt); }
/// <summary> /// 建造家具 /// </summary> /// <param name="listBuildPosition"></param> protected void BuildItemForFurniture(List <Vector3> listBuildPosition) { GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData(); //将家具添加到家具容器中 buildItemCpt.transform.parent = InnBuildHandler.Instance.builderForFurniture.buildContainer.transform; //增加一个家具 InnResBean addData = new InnResBean(buildItemCpt.buildItemData.id, buildItemCpt.transform.position, listBuildPosition, buildItemCpt.direction); //如果是门。需要重置一下墙体 if (buildItemCpt.buildItemData.build_type == (int)BuildItemTypeEnum.Door) { //gameData.GetInnBuildData().InitWall(innBuildManager); //innWallBuilder.StartBuild(); } else if (buildItemCpt.buildItemData.build_type == (int)BuildItemTypeEnum.Bed) { //如果是床。需要加上备注ID BuildBedCpt buildBedCpt = (BuildBedCpt)buildItemCpt; buildBedCpt.buildBedData.isSet = true; addData.remarkId = buildBedCpt.buildBedData.remarkId; } else if (buildItemCpt.buildItemData.build_type == (int)BuildItemTypeEnum.Stairs) { BuildStairsCpt buildStairsCpt = (BuildStairsCpt)buildItemCpt; //所有坐标下移 List <Vector3> listFirstBuildPosition = new List <Vector3>(); foreach (Vector3 itemPosition in listBuildPosition) { Vector3 firstPostion = itemPosition + new Vector3(0, -100, 0); listFirstBuildPosition.Add(firstPostion); //删除当前坐标下的建筑 BuildItemForDismantle(buildLayer - 1, firstPostion, firstPostion); } //楼下也要添加同样的数据 GameObject objFirstStairs = Instantiate(InnBuildHandler.Instance.builderForFurniture.buildContainer, buildItemCpt.gameObject); objFirstStairs.transform.position += new Vector3(0, -100, 0); BuildStairsCpt firstStairs = objFirstStairs.GetComponent <BuildStairsCpt>(); firstStairs.SetLayer(buildLayer - 1); InnResBean addFirstData = new InnResBean(firstStairs.buildItemData.id, objFirstStairs.transform.position, listFirstBuildPosition, firstStairs.direction); //设置相同的备注ID addData.remarkId = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N); addData.remark = "2"; addFirstData.remarkId = addData.remarkId; addFirstData.remark = "1"; gameData.GetInnBuildData().AddFurniture(buildLayer - 1, addFirstData); firstStairs.SetRemarkId(addData.remarkId); buildStairsCpt.SetRemarkId(addData.remarkId); } gameData.GetInnBuildData().AddFurniture(buildLayer, addData); //背包里删除一个 ItemBean itemData = gameData.AddBuildNumber(buildItemCpt.buildItemData.id, -1); //动画 buildItemCpt.transform .DOScale(new Vector3(0.2f, 0.2f, 0.2f), 0.5f) .From() .SetEase(Ease.OutBack); if (buildItemCpt.buildItemData.build_type == (int)BuildItemTypeEnum.Bed || itemData.itemNumber <= 0) { //如果没有了,则不能继续建造 ClearSelectBuildItem(); } else { //如果还有则实例化一个新的 //物体先在建筑控件上显示 GameObject objCopy = Instantiate(GameControlHandler.Instance.gameObject, buildItemCpt.gameObject); objCopy.transform.localScale = new Vector3(1, 1, 1); buildItemCpt = objCopy.GetComponent <BaseBuildItemCpt>(); } }
/// <summary> /// 通过ID获取家具Obj /// </summary> /// <param name="id"></param> /// <returns></returns> public GameObject GetFurnitureObjById(InnResBean furnitureData, Transform tfFather, BuildBedBean buildBedData) { BuildItemBean buildItemData = GetBuildDataById(furnitureData.id); GameObject furnitureObjModel = GetModel(dicFurnitureCpt, "model/furniture", buildItemData.model_name); GameObject furnitureObj = Instantiate(tfFather.gameObject, furnitureObjModel); BaseBuildItemCpt buildItemCpt = furnitureObj.GetComponent <BaseBuildItemCpt>(); List <string> listIcon = buildItemData.GetIconList(); switch ((BuildItemTypeEnum)buildItemData.build_type) { case BuildItemTypeEnum.Counter: BuildCounterCpt buildCounter = (BuildCounterCpt)buildItemCpt; Sprite spLeftCounter = GetFurnitureSpriteByName(listIcon[0] + "_0"); Sprite spRightCounter = GetFurnitureSpriteByName(listIcon[0] + "_1"); Sprite spDownCounter = GetFurnitureSpriteByName(listIcon[0] + "_2"); Sprite spUpCounter = GetFurnitureSpriteByName(listIcon[0] + "_3"); buildCounter.SetData(buildItemData, spLeftCounter, spRightCounter, spDownCounter, spUpCounter); break; case BuildItemTypeEnum.Stove: BuildStoveCpt buildStove = (BuildStoveCpt)buildItemCpt; Sprite spLeftStove = GetFurnitureSpriteByName(listIcon[0] + "_0"); Sprite spRightStove = GetFurnitureSpriteByName(listIcon[0] + "_1"); Sprite spDownStove = GetFurnitureSpriteByName(listIcon[0] + "_2"); Sprite spUpStove = GetFurnitureSpriteByName(listIcon[0] + "_3"); buildStove.SetData(buildItemData, spLeftStove, spRightStove, spDownStove, spUpStove); break; case BuildItemTypeEnum.Table: BuildTableCpt buildTable = (BuildTableCpt)buildItemCpt; Sprite spLeftChair = GetFurnitureSpriteByName(listIcon[1] + "_0"); Sprite spRightChair = GetFurnitureSpriteByName(listIcon[1] + "_1"); Sprite spDownChair = GetFurnitureSpriteByName(listIcon[1] + "_2"); Sprite spUpChair = GetFurnitureSpriteByName(listIcon[1] + "_3"); if (buildItemData.model_name.Equals("Table_1")) { Sprite spTable = GetFurnitureSpriteByName(listIcon[0]); buildTable.SetData(buildItemData, spTable, spLeftChair, spRightChair, spDownChair, spUpChair); } else if (buildItemData.model_name.Equals("Table_2")) { Sprite spLeftTable = GetFurnitureSpriteByName(listIcon[0] + "_0"); Sprite spRightTable = GetFurnitureSpriteByName(listIcon[0] + "_1"); Sprite spDownTable = GetFurnitureSpriteByName(listIcon[0] + "_2"); Sprite spUpTable = GetFurnitureSpriteByName(listIcon[0] + "_3"); buildTable.SetData(buildItemData, spLeftTable, spRightTable, spDownTable, spUpTable, spLeftChair, spRightChair, spDownChair, spUpChair); } break; case BuildItemTypeEnum.Decoration: BuildDecorationCpt buildDecoration = (BuildDecorationCpt)buildItemCpt; Sprite spDecoration = GetFurnitureSpriteByName(buildItemData.icon_key); buildDecoration.SetData(buildItemData, spDecoration); break; case BuildItemTypeEnum.Door: BuildDoorCpt buildDoor = (BuildDoorCpt)buildItemCpt; Sprite spDoor = GetFurnitureSpriteByName(listIcon[0]); buildDoor.SetData(buildItemData, spDoor); break; case BuildItemTypeEnum.Floor: BuildFloorCpt buildFloor = (BuildFloorCpt)buildItemCpt; Sprite spFloor = GetFloorSpriteByName(buildItemData.icon_key); buildFloor.SetData(buildItemData, spFloor); break; case BuildItemTypeEnum.Wall: BuildWallCpt buildWall = (BuildWallCpt)buildItemCpt; Sprite spWall = GetWallSpriteByName(buildItemData.icon_key); buildWall.SetData(buildItemData, spWall); break; case BuildItemTypeEnum.Bed: BuildBedCpt buildBed = (BuildBedCpt)buildItemCpt; buildBed.SetData(buildItemData, buildBedData); break; case BuildItemTypeEnum.Stairs: BuildStairsCpt buildStairs = (BuildStairsCpt)buildItemCpt; buildStairs.SetData(buildItemData); buildStairs.SetRemarkId(furnitureData.remarkId); if (furnitureData.remark != null && furnitureData.remark.Equals("1")) { buildStairs.SetLayer(1); } else { buildStairs.SetLayer(2); } break; default: buildItemCpt.SetData(buildItemData); break; } return(furnitureObj); }
/// <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; } }