Esempio n. 1
0
    /// <summary>
    /// 设置意图
    /// </summary>
    /// <param name="passerIntent"></param>
    /// <param name="movePosition"></param>
    public void SetIntent(PasserIntentEnum passerIntent, TownBuildingEnum buildingEnum, Vector3 eventPosition)
    {
        this.passerIntent = passerIntent;
        StopAllCoroutines();
        switch (passerIntent)
        {
        case PasserIntentEnum.LeaveTown:
            IntentForLeaveTown();
            break;

        case PasserIntentEnum.StayInTown:
            IntentForStayInTown();
            break;

        case PasserIntentEnum.GoToBuilding:
            IntentForGoToBuilding(buildingEnum);
            break;

        case PasserIntentEnum.StayInBuilding:
            IntentForStayInBuilding(buildingToGo);
            break;

        case PasserIntentEnum.LeaveBuilding:
            IntentForLeaveBuilding();
            break;

        case PasserIntentEnum.GoToEvent:
            IntentForGoToEvent(eventPosition);
            break;

        case PasserIntentEnum.LookOnEvent:
            IntentForLookOnEvent();
            break;
        }
    }
Esempio n. 2
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);
    }
Esempio n. 3
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);
    }
Esempio n. 4
0
    /// <summary>
    ///  //随机获取一个要去的地方
    /// </summary>
    public void SetRandomBuildingToGo()
    {
        TownBuildingEnum buildingToGo = RandomUtil.GetRandomEnum <TownBuildingEnum>();

        if (buildingToGo == TownBuildingEnum.Town)
        {
            SetIntent(PasserIntentEnum.StayInTown);
        }
        else
        {
            SetIntent(PasserIntentEnum.GoToBuilding, buildingToGo);
        }
    }
Esempio n. 5
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));
    }
Esempio n. 6
0
    /// <summary>
    /// 检测故事 自动触发剧情
    /// </summary>
    public bool EventTriggerForStory(TownBuildingEnum positionType, int OutOrIn)
    {
        if (!CheckEventTrigger())
        {
            return(false);
        }
        GameDataBean  gameData  = GameDataHandler.Instance.manager.GetGameData();
        StoryInfoBean storyInfo = StoryInfoHandler.Instance.manager.CheckStory(gameData, SceneUtil.GetCurrentScene(), positionType, OutOrIn);

        if (storyInfo != null)
        {
            EventTriggerForStory(storyInfo);
            return(true);
        }
        else
        {
            return(false);
        }
    }
Esempio n. 7
0
 public StoryInfoBean CheckStory(GameDataBean gameData, ScenesEnum scenesEnum, TownBuildingEnum positionType, int outOrIn)
 {
     if (mapStory == null)
     {
         return(null);
     }
     foreach (long key in mapStory.Keys)
     {
         StoryInfoBean storyInfo = mapStory[key];
         //TODO 检测条件
         //判断场景是否符合
         if (scenesEnum != storyInfo.GetStoryScene())
         {
             continue;
         }
         //判断该事件是否可重复触发
         if (storyInfo.trigger_loop == 0)
         {
             //如果已经触发过该事件
             if (gameData.CheckTriggeredEvent(storyInfo.id))
             {
                 continue;
             }
         }
         //检测触发条件
         if (!EventTriggerEnumTools.CheckIsAllTrigger(gameData, storyInfo.trigger_condition))
         {
             continue;
         }
         //如果是小镇
         if (storyInfo.story_scene == (int)ScenesEnum.GameTownScene)
         {
             //判断地点是否正确
             if (positionType != (TownBuildingEnum)storyInfo.location_type || outOrIn != storyInfo.out_in)
             {
                 continue;
             }
         }
         return(storyInfo);
     }
     return(null);
 }
Esempio n. 8
0
    /// <summary>
    /// 获取建筑物内部顶点坐标
    /// </summary>
    /// <returns></returns>
    public Vector3 GetRandomBuildingInsidePosition(TownBuildingEnum townBuildingEnum)
    {
        if (marketInside == null)
        {
            return(Vector3.zero);
        }
        Transform tfBuilding = null;

        switch (townBuildingEnum)
        {
        case TownBuildingEnum.Town:
            tfBuilding = townInside;
            break;

        case TownBuildingEnum.Market:
            tfBuilding = marketInside;
            break;

        case TownBuildingEnum.Recruitment:
            tfBuilding = recruitmentInside;
            break;

        case TownBuildingEnum.Grocery:
            tfBuilding = groceryInside;
            break;

        case TownBuildingEnum.Dress:
            tfBuilding = dressInside;
            break;

        case TownBuildingEnum.Carpenter:
            tfBuilding = carpenterInside;
            break;

        case TownBuildingEnum.Guild:
            tfBuilding = guildInside;
            break;

        case TownBuildingEnum.Arena:
            tfBuilding = arenaInside;
            break;

        case TownBuildingEnum.Bank:
            tfBuilding = bankInside;
            break;

        case TownBuildingEnum.Pharmacy:
            tfBuilding = pharmacyInside;
            break;

        case TownBuildingEnum.Casino:
            tfBuilding = casinoInside;
            break;

        case TownBuildingEnum.Brothels:
            tfBuilding = brothelsInside;
            break;

        case TownBuildingEnum.BeautySalon:
            tfBuilding = beautySalonInside;
            break;
        }
        if (tfBuilding == null)
        {
            return(Vector3.zero);
        }
        List <Transform> tfList = CptUtil.GetAllCptInChildrenByContainName <Transform>(tfBuilding.gameObject, "Wall_");

        if (CheckUtil.ListIsNull(tfList))
        {
            return(Vector3.zero);
        }
        Transform tfItem = RandomUtil.GetRandomDataByList(tfList);

        return(GameUtil.GetTransformInsidePosition2D(tfItem));;
    }
Esempio n. 9
0
    /// <summary>
    /// 获取建筑物门的位置
    /// </summary>
    /// <param name="townBuilding"></param>
    /// <param name="outDoorPosition"></param>
    /// <param name="inDoorPosition"></param>
    public void GetBuildingDoorPosition(TownBuildingEnum townBuildingEnum, out Vector2 outDoorPosition, out Vector2 inDoorPosition)
    {
        outDoorPosition = Vector2.zero;
        inDoorPosition  = Vector2.zero;
        switch (townBuildingEnum)
        {
        case TownBuildingEnum.Market:
            outDoorPosition = marketOutDoor.transform.position;
            inDoorPosition  = marketInDoor.transform.position;
            break;

        case TownBuildingEnum.Recruitment:
            outDoorPosition = recruitmentOutDoor.transform.position;
            inDoorPosition  = recruitmentInDoor.transform.position;
            break;

        case TownBuildingEnum.Grocery:
            outDoorPosition = groceryOutDoor.transform.position;
            inDoorPosition  = groceryInDoor.transform.position;
            break;

        case TownBuildingEnum.Dress:
            outDoorPosition = dressOutDoor.transform.position;
            inDoorPosition  = dressInDoor.transform.position;
            break;

        case TownBuildingEnum.Carpenter:
            outDoorPosition = carpenterOutDoor.transform.position;
            inDoorPosition  = carpenterInDoor.transform.position;
            break;

        case TownBuildingEnum.Guild:
            outDoorPosition = guildOutDoor.transform.position;
            inDoorPosition  = guildInDoor.transform.position;
            break;

        case TownBuildingEnum.Arena:
            outDoorPosition = arenaOutDoor.transform.position;
            inDoorPosition  = arenaInDoor.transform.position;
            break;

        case TownBuildingEnum.Bank:
            outDoorPosition = bankOutDoor.transform.position;
            inDoorPosition  = bankInDoor.transform.position;
            break;

        case TownBuildingEnum.Pharmacy:
            outDoorPosition = pharmacyOutDoor.transform.position;
            inDoorPosition  = pharmacyInDoor.transform.position;
            break;

        case TownBuildingEnum.Casino:
            outDoorPosition = casinoOutDoor.transform.position;
            inDoorPosition  = casinoInDoor.transform.position;
            break;

        case TownBuildingEnum.Brothels:
            outDoorPosition = brothelsOutDoor.transform.position;
            inDoorPosition  = brothelsInDoor.transform.position;
            break;

        case TownBuildingEnum.BeautySalon:
            outDoorPosition = beautySalonOutDoor.transform.position;
            inDoorPosition  = beautySalonInDoor.transform.position;
            break;
        }
    }
Esempio n. 10
0
 public void SetIntent(PasserIntentEnum passerIntent, TownBuildingEnum buildingEnum)
 {
     SetIntent(passerIntent, buildingEnum, Vector3.zero);
 }
Esempio n. 11
0
 /// <summary>
 /// 设置所在地
 /// </summary>
 /// <param name="buildingType"></param>
 public void SetLocation(TownBuildingEnum buildingType)
 {
     npcLocation = buildingType;
 }