Example #1
0
 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);
         }
     }
 }
Example #2
0
    /// <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);
        }
    }
Example #3
0
    /// <summary>
    /// 离开城镇
    /// </summary>
    public void IntentForLeaveTown()
    {
        SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>();

        //获取城镇出口位置
        movePosition = sceneTownManager.GetRandomTownDoorPosition();
        characterMoveCpt.SetDestination(movePosition);
    }
Example #4
0
    /// <summary>
    /// 镇上闲逛
    /// </summary>
    public void IntentForStayInTown()
    {
        //开始逛街
        SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>();

        movePosition = sceneTownManager.GetRandomBuildingInsidePosition(TownBuildingEnum.Town);
        characterMoveCpt.SetDestination(movePosition);
    }
Example #5
0
    public IEnumerator StartBuild()
    {
        while (isBuildNpc)
        {
            yield return(new WaitForSeconds(buildInterval));

            SceneTownManager sceneTownManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneTownManager>();
            Vector3          npcPosition      = sceneTownManager.GetRandomTownDoorPosition();
            BuilderPasser(npcPosition);
        }
    }
Example #6
0
    /// <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);
    }
Example #7
0
    /// <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);
    }
Example #8
0
    /// <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));
    }
Example #9
0
    /// <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);
    }