public override void InteractiveDetection(CharacterInteractiveCpt characterInt) { if (Input.GetButtonDown(InputInfo.Interactive_E)) { if (mInteractiveObj != null) { AudioHandler.Instance.PlaySound(AudioSoundEnum.Door); SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); sceneTownManager.GetBuildingDoorPosition(positionChange, out Vector2 outDoorPosition, out Vector2 inDoorPosition); //本身是在外 要转换到里 int checkOutOrIn = 0; if (OutOrIn == 0) { checkOutOrIn = 1; //关闭环境音效 AudioHandler.Instance.PauseEnvironment(); mInteractiveObj.transform.position = inDoorPosition; } //本身是在里 要转换到外 else { checkOutOrIn = 0; //开启环境音效 AudioHandler.Instance.RestoreEnvironment(); mInteractiveObj.transform.position = outDoorPosition; } //检测故事 GameEventHandler.Instance.EventTriggerForStory(positionChange, checkOutOrIn); } } }
/// <summary> /// 检测战斗是否结束 /// </summary> public bool CheckEventEnd() { if (MiniGameHandler.Instance.handlerForCombat.GetMiniGameStatus() != MiniGameStatusEnum.Gameing) { if (npcLocation == TownBuildingEnum.Town) { SetRandomBuildingToGo(); } else { int randomIntent = UnityEngine.Random.Range(0, 2); //一半概率继续留在该建筑 if (randomIntent == 0) { //开始逛街 SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); movePosition = sceneTownManager.GetRandomBuildingInsidePosition(npcLocation); characterMoveCpt.SetDestination(movePosition); //开始逛街 StartCoroutine(CoroutineForStayTimeCountdown(npcLocation)); } //一半概率离开该建筑 else { SetIntent(PasserIntentEnum.LeaveBuilding); } } return(true); } else { return(false); } }
/// <summary> /// 离开城镇 /// </summary> public void IntentForLeaveTown() { SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); //获取城镇出口位置 movePosition = sceneTownManager.GetRandomTownDoorPosition(); characterMoveCpt.SetDestination(movePosition); }
/// <summary> /// 镇上闲逛 /// </summary> public void IntentForStayInTown() { //开始逛街 SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); movePosition = sceneTownManager.GetRandomBuildingInsidePosition(TownBuildingEnum.Town); characterMoveCpt.SetDestination(movePosition); }
public IEnumerator StartBuild() { while (isBuildNpc) { yield return(new WaitForSeconds(buildInterval)); SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); Vector3 npcPosition = sceneTownManager.GetRandomTownDoorPosition(); BuilderPasser(npcPosition); } }
/// <summary> /// 协程-逗留倒计时 /// </summary> /// <param name="buildingEnum"></param> /// <returns></returns> public IEnumerator CoroutineForStayTimeCountdown(TownBuildingEnum buildingEnum) { SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); for (int i = 0; i < 3; i++) { //重新设置地点 movePosition = sceneTownManager.GetRandomBuildingInsidePosition(buildingEnum); characterMoveCpt.SetDestination(movePosition); yield return(new WaitForSeconds(20)); } SetIntent(PasserIntentEnum.LeaveBuilding); }
/// <summary> /// 前往建筑物 /// </summary> public void IntentForGoToBuilding(TownBuildingEnum buildingEnum) { SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); this.buildingToGo = buildingEnum; //获取建筑的门 sceneTownManager.GetBuildingDoorPosition(buildingEnum, out Vector2 outDoorPostion, out Vector2 inDoorPosition); buildingOutDoorPosition = outDoorPostion; buildingInDoorPosition = inDoorPosition; //前往门 characterMoveCpt.SetDestination(buildingOutDoorPosition); }
/// <summary> /// 在建筑物内逗留 /// </summary> public void IntentForStayInBuilding(TownBuildingEnum buildingEnum) { //暂时关闭自动寻路(不关闭的话 无法跨范围移动NPC) // characterMoveCpt.CloseNavMeshAgent(); //进入建筑内部 transform.position = buildingInDoorPosition; //设置当前所在地 SetLocation(buildingEnum); //进入建筑后开启自动寻路 // characterMoveCpt.OpenNavMeshAgent(); //开始逛街 SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); movePosition = sceneTownManager.GetRandomBuildingInsidePosition(buildingEnum); characterMoveCpt.SetDestination(movePosition); //开始逛街 StartCoroutine(CoroutineForStayTimeCountdown(buildingEnum)); }
/// <summary> /// 初始化用户位置 /// </summary> public override ControlForMoveCpt InitUserPosition() { ControlForMoveCpt moveControl = base.InitUserPosition(); SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>(); //位置控制 switch (GameCommonInfo.ScenesChangeData.beforeScene) { case ScenesEnum.GameArenaScene: moveControl.SetPosition(GameCommonInfo.ScenesChangeData.beforeUserPosition); break; case ScenesEnum.GameInnScene: Vector3 doorPosition = sceneTownManager.GetMainTownDoorPosition(); moveControl.SetPosition(doorPosition); break; case ScenesEnum.GameMountainScene: moveControl.SetPosition(sceneTownManager.GetMountainDoorPosition()); break; } return(moveControl); }