/// <summary> /// 获取最近的楼梯 /// </summary> /// <param name="position"></param> /// <returns></returns> public BuildStairsCpt GetCloseStairs(Vector3 position) { if (CheckUtil.ListIsNull(listStairsCpt)) { return(null); } float tempDistance = float.MaxValue; BuildStairsCpt closeStairs = null; for (int i = 0; i < listStairsCpt.Count; i++) { BuildStairsCpt buildStairs = listStairsCpt[i]; //如果不能到达则不用 if (!CheckUtil.CheckPath(position, buildStairs.GetStairsPosition())) { continue; } float itemDistance = Vector3.Distance(position, buildStairs.GetStairsPosition()); if (tempDistance > itemDistance) { closeStairs = buildStairs; tempDistance = itemDistance; } } return(closeStairs); }
/// <summary> /// 意图-前往二楼 /// </summary> public void SetIntentForGoToStairsForFirst() { BuildStairsCpt buildStairs = InnHandler.Instance.GetCloseStairs(transform.position); if (buildStairs == null) { npcAIWorker.SetShout(TextHandler.Instance.manager.GetTextById(13402)); orderForHotel.customer.ChangeMood(-99999); SetIntent(AccostIntentEnum.Idle); return; } npcAIWorker.SetShout(TextHandler.Instance.manager.GetTextById(13404)); InnHandler.Instance.GetStairsByRemarkId(buildStairs.remarkId, out Vector3 layerFirstPosition, out Vector3 layerSecondPosition); orderForHotel.layerFirstStairsPosition = layerFirstPosition; orderForHotel.layerSecondStairsPosition = layerSecondPosition; npcAIWorker.SetCharacterMove(layerFirstPosition); //根据魅力增加好感 int addMood = npcAIWorker.characterData.CalculationAccostAddMood(); orderForHotel.customer.ChangeMood(addMood); //设置相同的移动速度 orderForHotel.customer.characterMoveCpt.SetMoveSpeed(npcAIWorker.characterMoveCpt.moveSpeed); orderForHotel.customer.SetIntent(NpcAICustomerForHotelCpt.CustomerHotelIntentEnum.GoToStairsForFirst); }
/// <summary> /// 前往二楼楼梯 /// </summary> public void SetIntentForGoToStairsForSecond() { BuildStairsCpt buildStairs = InnHandler.Instance.GetCloseStairs(transform.position); bedPro.SetActive(false); OrderForHotel orderForHotel = order as OrderForHotel; InnHandler.Instance.GetStairsByRemarkId(buildStairs.remarkId, out Vector3 layerFirstPosition, out Vector3 layerSecondPosition); orderForHotel.layerFirstStairsPositionForClean = layerFirstPosition; orderForHotel.layerSecondStairsPositionForClean = layerSecondPosition; npcAIWorker.SetCharacterMove(layerSecondPosition); }
/// <summary> /// 意图-前往二楼 /// </summary> public void SetIntentForGoToStairsForFirst() { bedPro.SetActive(true); OrderForHotel orderForHotel = order as OrderForHotel; BuildStairsCpt buildStairs = InnHandler.Instance.GetCloseStairs(transform.position); if (buildStairs == null) { npcAIWorker.SetShout(TextHandler.Instance.manager.GetTextById(13402)); SetIntent(WaiterIntentEnum.Idle); return; } InnHandler.Instance.GetStairsByRemarkId(buildStairs.remarkId, out Vector3 layerFirstPosition, out Vector3 layerSecondPosition); orderForHotel.layerFirstStairsPositionForClean = layerFirstPosition; orderForHotel.layerSecondStairsPositionForClean = layerSecondPosition; npcAIWorker.SetCharacterMove(layerFirstPosition); }
/// <summary> /// 通过备注ID获取楼梯位置 /// </summary> /// <param name="remarkId"></param> /// <param name="layerFirstPosition"></param> /// <param name="layerSecondPosition"></param> public void GetStairsPosition(string remarkId, out Vector3 layerFirstPosition, out Vector3 layerSecondPosition) { layerFirstPosition = Vector3.zero; layerSecondPosition = Vector3.zero; if (CheckUtil.ListIsNull(listStairsCpt)) { return; } for (int i = 0; i < listStairsCpt.Count; i++) { BuildStairsCpt buildStairs = listStairsCpt[i]; if (buildStairs.remarkId.Equals(remarkId)) { if (buildStairs.layer == 1) { layerFirstPosition = buildStairs.GetStairsPosition(); } else if (buildStairs.layer == 2) { layerSecondPosition = buildStairs.GetStairsPosition(); } } } }
/// <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); }