Beispiel #1
0
    public override void Start()
    {
        base.Start();

        GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData();
        //初始化场景

        SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();
        InnBuildBean    innBuildData    = gameData.GetInnBuildData();

        sceneInnManager.InitScene(innBuildData.innWidth, innBuildData.innHeight);

        //innBuildData.ChangeInnSize(2, innBuildManager, 9, 9);


        //构建地板
        InnBuildHandler.Instance.builderForFloor.StartBuild();
        //构建墙壁
        InnBuildHandler.Instance.builderForWall.StartBuild();
        //构建建筑
        InnBuildHandler.Instance.builderForFurniture.StartBuild();

        //初始化客栈处理
        InnHandler.Instance.InitInn();
        InnHandler.Instance.InitRecord();
        //其他场景切过来需要重置一下客栈数据
        InnHandler.Instance.CloseInn();
        //设置天气
        GameWeatherHandler.Instance.SetWeather(GameCommonInfo.CurrentDayData.weatherToday);
        //打开UI
        UIHandler.Instance.manager.OpenUI <UIGameMain>(UIEnum.GameMain);

        //增加回调
        GameTimeHandler.Instance.RegisterNotifyForTime(NotifyForTime);
        TimeBean timeData = gameData.gameTime;

        if (timeData.hour >= 24 ||
            timeData.hour < 6 ||
            GameTimeHandler.Instance.GetDayStatus() == GameTimeHandler.DayEnum.End)
        {
            //如果是需要切换第二天
            EndDay();
        }
        else
        {
            //如果是其他场景切换过来
            GameTimeHandler.Instance.SetTime(timeData.hour, timeData.minute);
            GameTimeHandler.Instance.SetTimeStatus(false);
            //建造NPC
            RefreshScene();
            //设置位置
            Vector3           startPosition = sceneInnManager.GetTownEntranceLeft();
            ControlForMoveCpt baseControl   = GameControlHandler.Instance.StartControl <ControlForMoveCpt>(GameControlHandler.ControlEnum.Normal);
            baseControl.SetFollowPosition(startPosition);
        }
        //改变四季
        GameSeasonsHandler.Instance.ChangeSeasons();

        StartCoroutine(BuildNavMesh());
    }
Beispiel #2
0
    /// <summary>
    /// 意图-离开
    /// </summary>
    public virtual void IntentForLeave()
    {
        //随机获取一个退出点
        SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();

        movePosition = sceneInnManager.GetRandomSceneExportPosition();
        characterMoveCpt.SetDestination(movePosition);
    }
Beispiel #3
0
 /// <summary>
 /// 意图-离开
 /// </summary>
 protected void SetIntentForLeave()
 {
     if (leavePosition == Vector3.zero)
     {
         SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();
         leavePosition = sceneInnManager.GetRandomSceneExportPosition();
     }
     movePosition = leavePosition + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(-0.5f, 0.5f));
     SetCharacterMove(movePosition);
 }
Beispiel #4
0
 public void NotifyForTime(GameTimeHandler.NotifyTypeEnum notifyType, float timeHour)
 {
     if (notifyType == GameTimeHandler.NotifyTypeEnum.NewDay)
     {
         //初始化场景
         GameDataBean    gameData        = GameDataHandler.Instance.manager.GetGameData();
         InnBuildBean    innBuildData    = gameData.GetInnBuildData();
         SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();
         sceneInnManager.InitScene(innBuildData.innWidth, innBuildData.innHeight);
         //StartCoroutine(CoroutineForBuildNavMesh());
     }
 }
Beispiel #5
0
    /// <summary>
    /// 设置全体意图
    /// </summary>
    public void SetTeamIntent(RascalIntentEnum rascalIntent)
    {
        List <NpcAIRascalCpt> listNpc = NpcHandler.Instance.builderForEvent.GetRascalTeamByTeamCode(teamCode);

        if (rascalIntent == RascalIntentEnum.Leave)
        {
            SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();
            leavePosition = sceneInnManager.GetRandomSceneExportPosition();
        }
        foreach (NpcAIRascalCpt itemNpc in listNpc)
        {
            itemNpc.leavePosition = leavePosition;
            itemNpc.SetIntent(rascalIntent);
        }
    }
Beispiel #6
0
 /// <summary>
 /// 意图-离开
 /// </summary>
 protected void SetIntentForLeave()
 {
     InnHandler.Instance.rascalrQueue.Remove(this);
     npcFight = null;
     characterLifeCpt.gameObject.SetActive(false);
     objFightShow.SetActive(false);
     objRascalSpaceShow.SetActive(false);
     //随机获取一个退出点 如果已经有团队的点则不需要获取
     if (leavePosition == Vector3.zero)
     {
         SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();
         leavePosition = sceneInnManager.GetRandomSceneExportPosition();
     }
     movePosition = leavePosition + new Vector3(Random.Range(-0.5f, 0.5f), Random.Range(-0.5f, 0.5f));
     characterMoveCpt.SetDestination(movePosition);
 }
Beispiel #7
0
    /// <summary>
    /// 意图-散步
    /// </summary>
    public void IntentForWalk()
    {
        SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();

        if (transform.position.x > 0)
        {
            //如果角色在右边生成 出口则设置为左边
            movePosition = sceneInnManager.GetRandomSceneExportPosition(1);
        }
        else
        {
            //如果角色在左边生成 出口则设置为右边
            movePosition = sceneInnManager.GetRandomSceneExportPosition(0);
        }
        characterMoveCpt.SetDestination(movePosition);
    }
Beispiel #8
0
    /// <summary>
    /// 离开处理
    /// </summary>
    public override void HandleForLeave()
    {
        if (!characterMoveCpt.IsAutoMoveStop())
        {
            return;
        }
        switch (guestTeamIntent)
        {
        case CustomerIntentForGuestTeamEnum.GoToTeam:
            //一起离开处理
            guestTeamIntent = CustomerIntentForGuestTeamEnum.WaitTeam;
            List <NpcAICustomerForGuestTeamCpt> listTeamMember = GetGuestTeam();
            bool allReady = true;
            foreach (NpcAICustomerForGuestTeamCpt teamMember in listTeamMember)
            {
                if (teamMember.guestTeamIntent != CustomerIntentForGuestTeamEnum.WaitTeam)
                {
                    allReady = false;
                }
            }
            if (allReady)
            {
                SceneInnManager sceneInnManager = GameScenesHandler.Instance.manager.GetSceneManager <SceneInnManager>();
                Vector3         leavePostion    = sceneInnManager.GetRandomSceneExportPosition();
                foreach (NpcAICustomerForGuestTeamCpt teamMember in listTeamMember)
                {
                    teamMember.guestTeamIntent = CustomerIntentForGuestTeamEnum.Together;
                    teamMember.characterMoveCpt.SetDestination(leavePostion);
                }
            }
            break;

        case CustomerIntentForGuestTeamEnum.Together:
            //gameObject.SetActive(false);
            SetIntent(CustomerIntentEnum.None);
            gameObject.SetActive(false);
            gameObject.transform.position = new Vector3(0, -10000, 0);
            orderForCustomer = null;
            timeWaitSeat     = 20;
            guestTeamIntent  = CustomerIntentForGuestTeamEnum.Together;
            customerType     = CustomerTypeEnum.Team;
            NpcHandler.Instance.builderForCustomer.listGuestTeamHide.Enqueue(gameObject);
            break;
        }
    }