コード例 #1
0
    public void BuildGuestTeam(NpcTeamBean npcTeam, Vector3 npcPosition)
    {
        if (npcTeam == null)
        {
            return;
        }
        //设置小队相关
        string teamCode  = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N);
        Color  teamColor = new Color(UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f));
        //设置是否想吃
        bool isWant = IsWantEat(CustomerTypeEnum.Team);

        //获取小队成员数据
        npcTeam.GetTeamCharacterData(out List <CharacterBean> listLeader, out List <CharacterBean> listMembers);
        //设置小队人数(团队领袖全生成,小队成员随机生成)
        int npcNumber = UnityEngine.Random.Range(listLeader.Count + 1, listLeader.Count + 1 + npcTeam.team_number);

        for (int i = 0; i < npcNumber; i++)
        {
            CharacterBean characterData = null;
            if (i < listLeader.Count)
            {
                characterData = listLeader[i];
            }
            else
            {
                characterData = RandomUtil.GetRandomDataByList(listMembers);
            }
            //如果发现成员数据为空 默认取领导的
            if (characterData == null)
            {
                characterData = listLeader[0];
            }
            //随机生成身体数据
            characterData.body.CreateRandomEye();


            GameObject npcObj    = BuildNpc(listGuestTeamHide, objGuestTeamModel, characterData, npcPosition + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f)));
            BaseNpcAI  baseNpcAI = npcObj.GetComponent <BaseNpcAI>();
            baseNpcAI.SetCharacterData(characterData);
            baseNpcAI.AddStatusIconForGuestTeam(teamColor);
            NpcAICustomerForGuestTeamCpt customerAI = baseNpcAI.GetComponent <NpcAICustomerForGuestTeamCpt>();
            customerAI.SetTeamData(teamCode, npcTeam, i, teamColor);
            if (GameTimeHandler.Instance.GetDayStatus() == GameTimeHandler.DayEnum.Work && isWant)
            {
                customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Want);
            }
            else
            {
                customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Walk);
            }
        }
    }
コード例 #2
0
    /// <summary>
    /// 初始化角色
    /// </summary>
    public void InitCharacter()
    {
        GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData();

        if (gameData.userCharacter != null && npcAI != null && npcAI as NpcAIUserCpt)
        {
            npcAI.SetCharacterData(gameData.userCharacter);
            audioForWalk.clip = AudioHandler.Instance.manager.GetSoundClip("sound_walk_1");
            GameConfigBean gameConfig = GameDataHandler.Instance.manager.GetGameConfig();
            audioForWalk.volume = gameConfig.soundVolume * 0.5f;
        }
    }
コード例 #3
0
ファイル: NpcEventBuilder.cs プロジェクト: wobushiren79/IL
    public void BuildTownFriendsForTeam(NpcTeamBean teamData, Vector3 npcPosition)
    {
        if (teamData == null)
        {
            return;
        }
        if (listExistTeamId.Contains(teamData.id))
        {
            return;
        }
        //设置小队相关
        string teamCode  = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N);
        Color  teamColor = new Color(UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f));

        //获取小队成员数据
        teamData.GetTeamCharacterData(out List <CharacterBean> listLeader, out List <CharacterBean> listMembers);
        GameDataBean gameData = GameDataHandler.Instance.manager.GetGameData();
        //设置小队人数(团队领袖全生成,小队成员随机生成)
        int npcNumber = listLeader.Count + listMembers.Count;

        for (int i = 0; i < npcNumber; i++)
        {
            CharacterBean characterData = null;
            if (i < listLeader.Count)
            {
                characterData = listLeader[i];
            }
            else
            {
                characterData = listMembers[i - listLeader.Count];
            }

            //获取好感
            CharacterFavorabilityBean characterFavorability = gameData.GetCharacterFavorability(characterData.npcInfoData.id);

            GameObject npcObj = Instantiate(objContainer, objFriendModel);

            npcObj.transform.localScale = new Vector3(1, 1);
            npcObj.transform.position   = npcPosition + new Vector3(UnityEngine.Random.Range(-0.5f, 0.5f), UnityEngine.Random.Range(-0.5f, 0.5f));

            BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>();
            baseNpcAI.SetCharacterData(characterData);
            baseNpcAI.AddStatusIconForFriend();
            baseNpcAI.AddStatusIconForGuestTeam(teamColor);
            baseNpcAI.SetFavorabilityData(characterFavorability);

            NpcAICostomerForFriendCpt customerAI = baseNpcAI.GetComponent <NpcAICostomerForFriendCpt>();
            customerAI.SetTeamData(teamCode, teamData, i, teamColor);
            customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Want);
        }
        listExistTeamId.Add(teamData.id);
    }
コード例 #4
0
ファイル: NpcEventBuilder.cs プロジェクト: wobushiren79/IL
    public void BuildTownFriendsForOne(CharacterBean characterData, CharacterFavorabilityBean characterFavorability, Vector3 npcPosition)
    {
        //生成NPC
        GameObject npcObj = BuildNpc(listFriendHide, objFriendModel, characterData, npcPosition);

        BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>();

        baseNpcAI.SetCharacterData(characterData);
        baseNpcAI.SetFavorabilityData(characterFavorability);
        baseNpcAI.AddStatusIconForFriend();

        NpcAICostomerForFriendCpt customerAI = baseNpcAI.GetComponent <NpcAICostomerForFriendCpt>();

        customerAI.SetIntent(NpcAICustomerCpt.CustomerIntentEnum.Want);

        listExistNpcId.Add(characterData.npcInfoData.id);
    }
コード例 #5
0
    /// <summary>
    ///  展示NPC
    /// </summary>
    public static GameObject ShowNpc(GameObject objNpcContainer, GameObject objNpcModel, CharacterBean characterData)
    {
        CptUtil.RemoveChildsByActiveInEditor(objNpcContainer);
        GameObject objNpc = GameObject.Instantiate(objNpcModel, objNpcContainer.transform);

        objNpc.SetActive(true);
        objNpc.transform.position = new Vector3(characterData.npcInfoData.position_x, characterData.npcInfoData.position_y);

        BaseNpcAI baseNpcAI = objNpc.GetComponent <BaseNpcAI>();

        baseNpcAI.Awake();

        CharacterDressCpt characterDress = CptUtil.GetCptInChildrenByName <CharacterDressCpt>(baseNpcAI.gameObject, "Body");

        characterDress.Awake();

        baseNpcAI.SetCharacterData(characterData);
        return(objNpc);
    }
コード例 #6
0
ファイル: NpcNormalBuilder.cs プロジェクト: wobushiren79/IL
    public GameObject BuildNpc(Queue <GameObject> listHide, GameObject objModel, CharacterBean characterData, Vector3 startPosition)
    {
        if (characterData == null || characterData.body == null)
        {
            return(null);
        }

        GameObject npcObj = null;

        if (listHide.Count > 0)
        {
            npcObj = listHide.Dequeue();
            if (npcObj == null)
            {
                return(BuildNpc(listHide, objModel, characterData, startPosition));
            }
        }
        else
        {
            npcObj = Instantiate(objContainer, objModel);
        }
        if (!npcObj.activeSelf)
        {
            npcObj.gameObject.SetActive(true);
        }
        npcObj.transform.localScale = new Vector3(1, 1);
        npcObj.transform.position   = startPosition;

        BaseNpcAI baseNpcAI = npcObj.GetComponent <BaseNpcAI>();

        baseNpcAI.ClearAllStatusIcon();

        //如果没有眼睛
        if (CheckUtil.StringIsNull(characterData.body.eye))
        {
            //随机生成身体数据
            characterData.body.CreateRandomEye();
        }
        baseNpcAI.SetCharacterData(characterData);
        return(npcObj);
    }
コード例 #7
0
    public GameObject CreateNpc(long createNpcId, Vector3 position, int number)
    {
        CharacterBean characterData = null;
        GameObject    objNpc        = null;

        if (createNpcId == 0)
        {
            characterData = new CharacterBean();
        }
        else
        {
            characterData = new CharacterBean(mapNpcInfo[createNpcId]);
        }

        if (characterData == null)
        {
            LogUtil.LogError("没有找到id为" + createNpcId + "的NPC");
            return(null);
        }

        objNpc = Instantiate(StoryInfoHandler.Instance.manager.objNpcModel, StoryInfoHandler.Instance.builderForStory.transform);
        BaseNpcAI baseNpcAI = objNpc.GetComponent <BaseNpcAI>();

        baseNpcAI.Awake();

        CharacterDressCpt characterDress = CptUtil.GetCptInChildrenByName <CharacterDressCpt>(baseNpcAI.gameObject, "Body");

        characterDress.Awake();

        baseNpcAI.transform.localPosition = position;
        baseNpcAI.SetCharacterData(characterData);
        baseNpcAI.name = "character_" + number;
        objNpc.SetActive(true);

        return(objNpc);
    }
コード例 #8
0
    /// <summary>
    /// 刷新场景数据
    /// </summary>
    /// <param name="listData"></param>
    public void RefreshSceneData(List <StoryInfoDetailsBean> listData)
    {
        if (listData == null)
        {
            return;
        }
        if (listStoryTextInfo != null)
        {
            listStoryTextInfo.Clear();
        }
        listStoryTextInfo = null;
        foreach (StoryInfoDetailsBean itemData in listData)
        {
            StoryInfoDetailsBean.StoryInfoDetailsTypeEnum storyInfoDetailsType = itemData.GetStoryInfoDetailsType();
            if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.NpcPosition)
            {
                GameObject objNpc = GetSceneObjByName("character_" + itemData.num);
                BaseNpcAI  npcAI  = null;
                if (objNpc != null)
                {
                    npcAI = objNpc.GetComponent <BaseNpcAI>();
                }

                if (npcAI == null)
                {
                    NpcInfoBean npcInfoBean;
                    if (itemData.npc_id == 0)
                    {
                        npcInfoBean = new NpcInfoBean();
                    }
                    else if (itemData.npc_id == -1)
                    {
                        npcInfoBean = new NpcInfoBean();
                    }
                    else
                    {
                        if (mapNpcInfo.TryGetValue(itemData.npc_id, out NpcInfoBean npcInfo))
                        {
                            npcInfoBean = npcInfo;
                        }
                        else
                        {
                            npcInfoBean = new NpcInfoBean();
                            LogUtil.LogError("创建NPC失败 找不到ID为" + itemData.npc_id + "的NPC信息");
                        }
                    }
                    objNpc = CreateNpc(npcInfoBean.npc_id, new Vector3(itemData.position_x, itemData.position_y), itemData.num);
                    npcAI  = objNpc.GetComponent <BaseNpcAI>();
                }
                npcAI.transform.localPosition = new Vector3(itemData.position_x, itemData.position_y);
                //设置朝向
                npcAI.SetCharacterFace(itemData.face);
            }
            else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.NpcEquip)
            {
                GameObject objNpc = GetSceneObjByName("character_" + itemData.num);
                if (objNpc == null)
                {
                    continue;
                }
                BaseNpcAI npcAI = objNpc.GetComponent <BaseNpcAI>();
                if (npcAI == null)
                {
                    continue;
                }
                SexEnum sex = npcAI.characterData.body.GetSex();
                itemData.GetNpcEquip(sex, out long hatId, out long clothesId, out long shoesId);
                if (hatId != -1)
                {
                    npcAI.characterData.equips.hatTFId = hatId;
                }
                if (clothesId != -1)
                {
                    npcAI.characterData.equips.clothesTFId = clothesId;
                }
                if (shoesId != -1)
                {
                    npcAI.characterData.equips.shoesTFId = shoesId;
                }
                npcAI.SetCharacterData(npcAI.characterData);
            }
            else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.PropPosition)
            {
                GameObject objProp = GetSceneObjByName("prop_" + itemData.num);
                if (objProp == null)
                {
                    GameObject objModel = StoryInfoHandler.Instance.manager.GetStoryPropModelByName(itemData.key_name);
                    objProp      = Instantiate(objModel, StoryInfoHandler.Instance.builderForStory.transform);
                    objProp.name = "prop_" + itemData.num;
                }
                //设置位置和朝向
                objProp.transform.localPosition = new Vector3(itemData.position_x, itemData.position_y);
                Vector3 bodyScale = objProp.transform.localScale;
                switch (itemData.face)
                {
                case 1:
                    bodyScale.x = -1;
                    break;

                case 2:
                    bodyScale.x = 1;
                    break;
                }
                objProp.transform.localScale = bodyScale;
            }
            //如果是对话 查询对话数据
            else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.Talk)
            {
                listStoryTextInfo = textInfoService.QueryDataByMarkId(TextEnum.Story, itemData.text_mark_id);
            }
            else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.NpcDestory)
            {
                int[] numList = StringUtil.SplitBySubstringForArrayInt(itemData.npc_destroy, ',');
                foreach (int num in numList)
                {
                    BaseNpcAI npcAI = CptUtil.GetCptInChildrenByName <BaseNpcAI>(StoryInfoHandler.Instance.builderForStory.gameObject, num + "");
                    DestroyImmediate(npcAI.gameObject);
                }
            }
            else if (storyInfoDetailsType == StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.CameraPosition)
            {
                Vector3 cameraWorldPosition = StoryInfoHandler.Instance.builderForStory.transform.TransformPoint(new Vector3(itemData.position_x, itemData.position_y, -10));

                GameCameraHandler.Instance.manager.camera2D.Follow             = null;
                GameCameraHandler.Instance.manager.camera2D.transform.position = cameraWorldPosition;
            }
            else if (itemData.type == (int)StoryInfoDetailsBean.StoryInfoDetailsTypeEnum.CameraFollowCharacter)
            {
                BaseNpcAI npcAI = CptUtil.GetCptInChildrenByName <BaseNpcAI>(StoryInfoHandler.Instance.builderForStory.gameObject, "character_" + itemData.num);
                GameCameraHandler.Instance.manager.camera2D.Follow = npcAI.transform;
            }
        }
    }