Esempio n. 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);
            }
        }
    }
Esempio n. 2
0
    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);
    }
Esempio n. 3
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);
 }
Esempio n. 4
0
    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);
    }
Esempio n. 5
0
 /// <summary>
 ///  清楚选择
 /// </summary>
 protected void ClearSelect()
 {
     //如果是员工
     if (selectNpc != null && selectNpc as NpcAIWorkerCpt)
     {
         NpcAIWorkerCpt npcAIWorker = selectNpc as NpcAIWorkerCpt;
         //恢复偷懒
         npcAIWorker.SetDazeEnabled(true);
     }
     selectNpc = null;
     selectBed = null;
     if (dialogSelectView != null)
     {
         Destroy(dialogSelectView.gameObject);
         dialogSelectView = null;
     }
 }
Esempio n. 6
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);
    }
Esempio n. 7
0
    /// <summary>
    /// 设置数据
    /// </summary>
    /// <param name="baseNpc"></param>
    public void SetData(BaseNpcAI baseNpc)
    {
        this.targetNpcAI = baseNpc;
        //添加通知
        baseNpc.AddObserver(this);

        CharacterBean characterData = baseNpc.characterData;

        if (characterData == null)
        {
            return;
        }
        SetCharacterUI(characterData);
        if (baseNpc as NpcAICustomerCpt)
        {
            SetDataForCustomerFood((NpcAICustomerCpt)baseNpc);
            //如果时好友顾客也显示名字
            if (baseNpc as NpcAICostomerForFriendCpt)
            {
                SetName(characterData.baseInfo.name);
            }
        }
        else if (baseNpc as NpcAICustomerForHotelCpt)
        {
            SetDataForCustomerHotel(baseNpc as NpcAICustomerForHotelCpt);
        }
        else if (baseNpc as NpcAIWorkerCpt)
        {
            SetName(characterData.baseInfo.name);
            SetDataForWork((NpcAIWorkerCpt)baseNpc);
        }
        else if (baseNpc as NpcAIRascalCpt)
        {
            SetName(characterData.baseInfo.name);
            SetDataForRascal((NpcAIRascalCpt)baseNpc);
        }
        else
        {
            SetName(characterData.baseInfo.name);
        }
    }
Esempio n. 8
0
    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);
    }
Esempio n. 9
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);
    }
Esempio n. 10
0
 /// <summary>
 /// 意图-继续闹事
 /// </summary>
 protected void SetIntentForContinueMakeTrouble()
 {
     npcFight = null;
     objFightShow.SetActive(false);
     StartCoroutine(CoroutineForStartMakeTrouble());
 }
Esempio n. 11
0
 private void Start()
 {
     mNpcAI = GetComponent <BaseNpcAI>();
 }
Esempio n. 12
0
    /// <summary>
    /// Npc Item
    /// </summary>
    public static void GUINpcInfoItem(GameObject objNpcContainer, NpcInfoBean npcInfo)
    {
        if (GUILayout.Button("获取场景位置数据", GUILayout.Width(120), GUILayout.Height(20)))
        {
            BaseNpcAI npcAI = objNpcContainer.GetComponentInChildren <BaseNpcAI>();
            npcInfo.position_x = npcAI.transform.position.x;
            npcInfo.position_y = npcAI.transform.position.y;
        }
        GUILayout.Label("NPCID:", GUILayout.Width(100), GUILayout.Height(20));
        npcInfo.id     = long.Parse(EditorGUILayout.TextArea(npcInfo.id + "", GUILayout.Width(100), GUILayout.Height(20)));
        npcInfo.npc_id = npcInfo.id;
        GUILayout.BeginHorizontal();
        npcInfo.npc_type = (int)EditorUI.GUIEnum <NpcTypeEnum>("Npc类型:", npcInfo.npc_type);
        NpcTypeEnum npcType = (NpcTypeEnum)npcInfo.npc_type;

        GUILayout.Label("对话选项:", GUILayout.Width(100), GUILayout.Height(20));
        npcInfo.talk_types = EditorUI.GUIEditorText(npcInfo.talk_types, 50);
        GUILayout.EndHorizontal();
        if (npcType != NpcTypeEnum.Passerby)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("姓名:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.name = EditorGUILayout.TextArea(npcInfo.name + "", GUILayout.Width(100), GUILayout.Height(20));
            GUILayout.Label("性别:1男 2女", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.sex = int.Parse(EditorGUILayout.TextArea(npcInfo.sex + "", GUILayout.Width(30), GUILayout.Height(20)));
            GUILayout.Label("称号:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.title_name = EditorGUILayout.TextArea(npcInfo.title_name + "", GUILayout.Width(100), GUILayout.Height(20));
            GUILayout.Label("朝向 1左 2右", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.face = int.Parse(EditorGUILayout.TextArea(npcInfo.face + "", GUILayout.Width(30), GUILayout.Height(20)));
            GUILayout.Label("位置XY:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.position_x = float.Parse(EditorGUILayout.TextArea(npcInfo.position_x + "", GUILayout.Width(100), GUILayout.Height(20)));
            npcInfo.position_y = float.Parse(EditorGUILayout.TextArea(npcInfo.position_y + "", GUILayout.Width(100), GUILayout.Height(20)));
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();

            GUILayout.Label("眼睛:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.eye_id = EditorGUILayout.TextArea(npcInfo.eye_id + "", GUILayout.Width(200), GUILayout.Height(20));
            string eyePath = "Assets/Texture/Character/Eye/";
            EditorUI.GUIPic(eyePath, npcInfo.eye_id);
            GUILayout.Label("眼睛颜色:", GUILayout.Width(100), GUILayout.Height(20));
            ColorBean eyeColorData = new ColorBean(npcInfo.eye_color);
            Color     eyeColor     = eyeColorData.GetColor();;
            eyeColor          = EditorGUILayout.ColorField(eyeColor, GUILayout.Width(50), GUILayout.Height(20));
            npcInfo.eye_color = eyeColor.r + "," + eyeColor.g + "," + eyeColor.b + "," + eyeColor.a;

            GUILayout.Label("嘴巴:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.mouth_id = EditorGUILayout.TextArea(npcInfo.mouth_id + "", GUILayout.Width(200), GUILayout.Height(20));
            string mouthPath = "Assets/Texture/Character/Mouth/";
            EditorUI.GUIPic(mouthPath, npcInfo.mouth_id);
            GUILayout.Label("嘴巴颜色:", GUILayout.Width(100), GUILayout.Height(20));
            ColorBean mouthColorData = new ColorBean(npcInfo.mouth_color);
            Color     mouthColor     = mouthColorData.GetColor();;
            mouthColor          = EditorGUILayout.ColorField(mouthColor, GUILayout.Width(50), GUILayout.Height(20));
            npcInfo.mouth_color = mouthColor.r + "," + mouthColor.g + "," + mouthColor.b + "," + mouthColor.a;

            GUILayout.Label("头发:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.hair_id = EditorGUILayout.TextArea(npcInfo.hair_id + "", GUILayout.Width(200), GUILayout.Height(20));
            string hairPath = "Assets/Texture/Character/Hair/";
            EditorUI.GUIPic(hairPath, npcInfo.hair_id);
            GUILayout.Label("头发颜色:", GUILayout.Width(100), GUILayout.Height(20));
            ColorBean hairColorData = new ColorBean(npcInfo.hair_color);
            Color     hairColor     = hairColorData.GetColor();;
            hairColor          = EditorGUILayout.ColorField(hairColor, GUILayout.Width(50), GUILayout.Height(20));
            npcInfo.hair_color = hairColor.r + "," + hairColor.g + "," + hairColor.b + "," + hairColor.a;

            GUILayout.Label("皮肤颜色:", GUILayout.Width(100), GUILayout.Height(20));
            ColorBean skinColorData = new ColorBean(npcInfo.skin_color);
            Color     skinColor     = skinColorData.GetColor();;
            skinColor          = EditorGUILayout.ColorField(skinColor, GUILayout.Width(50), GUILayout.Height(20));
            npcInfo.skin_color = skinColor.r + "," + skinColor.g + "," + skinColor.b + "," + skinColor.a;

            GUILayout.EndHorizontal();


            GUILayout.BeginHorizontal();

            GUILayout.Label("命:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_life = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_life + "", GUILayout.Width(50), GUILayout.Height(20)));
            GUILayout.Label("厨:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_cook = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_cook + "", GUILayout.Width(50), GUILayout.Height(20)));
            GUILayout.Label("速:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_speed = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_speed + "", GUILayout.Width(50), GUILayout.Height(20)));
            GUILayout.Label("算:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_account = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_account + "", GUILayout.Width(50), GUILayout.Height(20)));
            GUILayout.Label("魅:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_charm = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_charm + "", GUILayout.Width(50), GUILayout.Height(20)));
            GUILayout.Label("武:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_force = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_force + "", GUILayout.Width(50), GUILayout.Height(20)));
            GUILayout.Label("运:", GUILayout.Width(30), GUILayout.Height(20));
            npcInfo.attributes_lucky = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_lucky + "", GUILayout.Width(50), GUILayout.Height(20)));
            if (npcType == NpcTypeEnum.RecruitTown)
            {
                GUILayout.Label("忠诚:", GUILayout.Width(30), GUILayout.Height(20));
                npcInfo.attributes_loyal = int.Parse(EditorGUILayout.TextArea(npcInfo.attributes_loyal + "", GUILayout.Width(50), GUILayout.Height(20)));
                GUILayout.Label("工资 S:", GUILayout.Width(30), GUILayout.Height(20));
                npcInfo.wage_s = int.Parse(EditorGUILayout.TextArea(npcInfo.wage_s + "", GUILayout.Width(50), GUILayout.Height(20)));
            }
            GUILayout.Label("喜欢的东西ID(用,分隔):", GUILayout.Width(150), GUILayout.Height(20));
            npcInfo.love_items = EditorGUILayout.TextArea(npcInfo.love_items + "", GUILayout.Width(100), GUILayout.Height(20));
            GUILayout.Label("喜欢的菜品:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.love_menus = EditorGUILayout.TextArea(npcInfo.love_menus + "", GUILayout.Width(50), GUILayout.Height(20));
            GUILayout.Label("技能:", GUILayout.Width(100), GUILayout.Height(20));
            npcInfo.skill_ids = EditorUI.GUIEditorText(npcInfo.skill_ids, 100);
            GUILayout.EndHorizontal();
        }
        GUILayout.BeginHorizontal();
        EditorUI.GUIText("|", 10);
        EditorUI.GUIText("面具:", 50);
        npcInfo.mask_id = long.Parse(EditorGUILayout.TextArea(npcInfo.mask_id + "", GUILayout.Width(100), GUILayout.Height(20)));
        string        maskPath = "Assets/Texture/Character/Dress/Mask/";
        ItemsInfoBean maskInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.mask_id);

        if (maskInfo != null)
        {
            EditorUI.GUIPic(maskPath, maskInfo.icon_key);
        }
        EditorUI.GUIText("|", 10);
        EditorUI.GUIText("帽子:", 50);
        npcInfo.hat_id = long.Parse(EditorGUILayout.TextArea(npcInfo.hat_id + "", GUILayout.Width(100), GUILayout.Height(20)));
        string        hatPath = "Assets/Texture/Character/Dress/Hat/";
        ItemsInfoBean hatInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.hat_id);

        if (hatInfo != null)
        {
            EditorUI.GUIPic(hatPath, hatInfo.icon_key);
        }
        EditorUI.GUIText("|", 10);
        EditorUI.GUIText("衣服:", 50);
        npcInfo.clothes_id = long.Parse(EditorGUILayout.TextArea(npcInfo.clothes_id + "", GUILayout.Width(100), GUILayout.Height(20)));
        string        clothesPath = "Assets/Texture/Character/Dress/Clothes/";
        ItemsInfoBean clothesInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.clothes_id);

        if (clothesInfo != null)
        {
            EditorUI.GUIPic(clothesPath, clothesInfo.icon_key);
        }
        EditorUI.GUIText("|", 10);
        EditorUI.GUIText("鞋子:", 50);
        npcInfo.shoes_id = long.Parse(EditorGUILayout.TextArea(npcInfo.shoes_id + "", GUILayout.Width(100), GUILayout.Height(20)));
        string        shoesPath = "Assets/Texture/Character/Dress/Shoes/";
        ItemsInfoBean shoesInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.shoes_id);

        if (shoesInfo != null)
        {
            EditorUI.GUIPic(shoesPath, shoesInfo.icon_key);
        }
        EditorUI.GUIText("|", 10);
        EditorUI.GUIText("武器:", 50);
        npcInfo.hand_id = long.Parse(EditorGUILayout.TextArea(npcInfo.hand_id + "", GUILayout.Width(100), GUILayout.Height(20)));
        ItemsInfoBean handInfo = GameItemsHandler.Instance.manager.GetItemsById(npcInfo.hand_id);

        if (handInfo != null)
        {
            EditorUI.GUIText(handInfo.name, 50);
        }

        EditorUI.GUIText("|", 10);
        GUILayout.EndHorizontal();
        npcInfo.condition = EditorUI.GUIListData <ShowConditionEnum>("Npc出现条件", npcInfo.condition);
    }
Esempio n. 13
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;
            }
        }
    }
Esempio n. 14
0
    /// <summary>
    /// 选中物体处理
    /// </summary>
    public void HandleForSelect()
    {
        if (EventSystem.current.IsPointerOverGameObject())
        {
            return;
        }
        //偷懒员工选中处理
        NpcAIWorkerCpt workerDaze = HandleForDazeWorker();

        if (Input.GetButtonDown(InputInfo.Confirm))
        {
            if (dialogSelectView != null)
            {
                return;
            }
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            //如有已经提前选中了偷懒的员工
            if (workerDaze != null)
            {
                AudioHandler.Instance.PlaySound(AudioSoundEnum.Fight);
                workerDaze.SetExpression(CharacterExpressionCpt.CharacterExpressionEnum.Surprise, 3);
                workerDaze.SetDazeBufferTime(10);
                workerDaze.SetIntent(NpcAIWorkerCpt.WorkerIntentEnum.Idle);
                return;
            }
            RaycastHit2D[] hitAll = Physics2D.RaycastAll(mousePos, Vector2.zero);
            foreach (RaycastHit2D itemHit in hitAll)
            {
                if (itemHit.collider.transform.tag.Equals(TagInfo.Tag_NpcBody))
                {
                    GameObject objSelect = itemHit.collider.gameObject;
                    selectNpc = objSelect.GetComponentInParent <BaseNpcAI>();
                    if (selectNpc)
                    {
                        AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForShow);
                        DialogBean dialogData = new DialogBean();
                        dialogSelectView = DialogHandler.Instance.CreateDialog <SelectForNpcDialogView>(DialogEnum.SelectForNpc, this, dialogData);
                        ((SelectForNpcDialogView)dialogSelectView).SetData(selectNpc);
                        //如果是员工
                        if (selectNpc as NpcAIWorkerCpt)
                        {
                            NpcAIWorkerCpt npcAIWorker = selectNpc as NpcAIWorkerCpt;
                            npcAIWorker.SetDazeEnabled(false);
                        }
                        return;
                    }
                }
                else if (itemHit.collider.transform.tag.Equals(TagInfo.Tag_Bed))
                {
                    GameObject objSelect = itemHit.collider.gameObject;
                    selectBed = objSelect.GetComponentInParent <BuildBedCpt>();
                    if (selectBed)
                    {
                        AudioHandler.Instance.PlaySound(AudioSoundEnum.ButtonForShow);
                        DialogBean dialogData = new DialogBean();
                        dialogSelectView = DialogHandler.Instance.CreateDialog <SelectForBedDialogView>(DialogEnum.SelectForBed, this, dialogData);
                        ((SelectForBedDialogView)dialogSelectView).SetData(selectBed);
                        return;
                    }
                }
            }
            selectNpc = null;
            selectBed = null;
        }
    }