Beispiel #1
0
        /// <summary>
        /// 加载摄像机。
        /// </summary>
        private void LoadCamera(int missionID, MapData data, Action loaded = null)// = null
        {
            AssetCacheMgr.GetInstanceAutoRelease(MogoWorld.globalSetting.mainCamera, (prefab, id, go) =>
            {
                if (m_currentMap != null)
                {
                    go.name = Mogo.Util.Utils.GetFileNameWithoutExtention(MogoWorld.globalSetting.mainCamera);
                    var obj = go as GameObject;
                    obj.AddComponent <MogoMainCamera>();
                    //var fade = obj.AddComponent<FadeCamera>();
                    //fade.enabled = false;
                    //var light = obj.AddComponent<MogoCameraLighting>();
                    //light.enabled = false;

                    var camera = obj.GetComponent <Camera>();

                    UnityEngine.Object.Destroy(camera.GetComponent <AudioListener>());

                    camera.backgroundColor = m_currentMap.cameraColor;
                    camera.far             = m_currentMap.cameraFar;

                    if (data != null &&
                        data.layerList != null && data.layerList.Count != 0 &&
                        data.distanceList != null && data.distanceList.Count != 0 &&
                        data.layerList.Count == data.distanceList.Count)
                    {
                        var cull          = (go as GameObject).AddComponent <MogoCameraCullByLayer>();
                        cull.LayerList    = data.layerList;
                        cull.DistanceList = data.distanceList;
                    }

                    EventDispatcher.TriggerEvent(SettingEvent.BuildSoundEnvironment, missionID);
                }
                if (loaded != null)
                {
                    loaded();
                }
                TimerHeap.AddTimer(500, 0, MogoMessageBox.HideLoading);
            });
        }
Beispiel #2
0
        public void SetNPCSign(NPCSignState state)
        {
            switch (state)
            {
            case NPCSignState.Doing:
                signState = NPCSignState.Doing;
                if (NPCDoingSign != null)
                {
                    NPCDoingSign.SetActive(true);
                }
                else
                {
                    AssetCacheMgr.GetInstanceAutoRelease(NPC_QUESTION_MARK_NAME, (prefabName, dbid, obj) =>
                    {
                        if (obj != null && Transform != null)
                        {
                            NPCDoingSign = obj as GameObject;
                            NPCDoingSign.transform.parent        = Transform.Find("slot_billboard");
                            NPCDoingSign.transform.localPosition = Vector3.zero;
                            NPCDoingSign.transform.localRotation = Quaternion.identity;
                            NPCDoingSign.transform.localScale    = new Vector3(1, 1, 1);

                            if (signState != NPCSignState.Doing)
                            {
                                NPCDoingSign.SetActive(false);
                                Debug.LogError("Are you kidding me?" + ID);
                            }
                            else
                            {
                                //Debug.Log("NPCDoingSign.SetActive(true)" + ID);
                            }
                        }
                        else
                        {
                            Debug.LogError("find dengyongjian" + ID);
                        }
                    });
                }
                break;

            case NPCSignState.Done:
                signState = NPCSignState.Done;
                if (NPCDoneSign != null)
                {
                    NPCDoneSign.SetActive(true);
                }
                else
                {
                    AssetCacheMgr.GetInstanceAutoRelease(NPC_EXCLAMATION_MARK_NAME, (prefabName, dbid, obj) =>
                    {
                        if (obj != null && Transform != null)
                        {
                            NPCDoneSign = obj as GameObject;
                            NPCDoneSign.transform.parent        = Transform.Find("slot_billboard");
                            NPCDoneSign.transform.localPosition = Vector3.zero;
                            NPCDoneSign.transform.localRotation = Quaternion.identity;
                            NPCDoneSign.transform.localScale    = new Vector3(1, 1, 1);

                            if (signState != NPCSignState.Done)
                            {
                                NPCDoneSign.SetActive(false);
                                Debug.LogError("Are you kidding me?" + ID);
                            }
                            else
                            {
                                //Debug.Log("NPCDoingSign.SetActive(true)" + ID);
                            }
                        }
                        else
                        {
                            Debug.LogError("find dengyongjian" + ID);
                        }
                    });
                }
                break;

            case NPCSignState.None:
                if (NPCDoingSign != null)
                {
                    NPCDoingSign.SetActive(false);
                }
                if (NPCDoneSign != null)
                {
                    NPCDoneSign.SetActive(false);
                }
                break;
            }
        }
    private void CreateCharacterModel(AvatarModelData ai, int vocation, CharacterInfoData ci, Action loaded)
    {
        if (m_avatarList.ContainsKey(vocation) && loaded != null)
        {
            if (m_avatarList[vocation].actorParent != null)
            {
                loaded();
                return;
            }
            if (m_avatarList[vocation].gameObject != null)
            {
                AssetCacheMgr.ReleaseInstance(m_avatarList[vocation].gameObject);
            }
        }
        AssetCacheMgr.GetInstanceAutoRelease(ai.prefabName, (prefab, id, go) =>
        {
            var ety                      = new EtyAvatar();
            ety.vocation                 = vocation;
            ety.equipList                = ci.EquipList;
            ety.weapon                   = ci.Weapon;
            ety.CreatePosition           = ci.Location;
            var avatar                   = (go as GameObject);
            ety.gameObject               = avatar;
            avatar.name                  = vocation.ToString();
            var cc                       = avatar.GetComponent <Collider>() as CharacterController;
            cc.radius                    = 0.5f;
            ety.animator                 = avatar.GetComponent <Animator>();
            ety.animator.applyRootMotion = false;
            ety.PlayerShader             = PlayerShader;
            ety.FakeLightShader          = FakeLightShader;
            //MogoFXManager.Instance.AttachShadow(avatar, string.Concat(avatar.name, "_Shadow"), 0, 0, 0, 1.5f, 1.5f, 1);

            if (vocation == 1)
            {
                MogoFXManager.Instance.AttachShadow(avatar, string.Concat(avatar.name, "_Shadow"), 0, 0, 0, 1.5f, 1.5f, 1, -0.4f, 0.01f, -0.5f);
            }
            else if (vocation == 2)
            {
                MogoFXManager.Instance.AttachShadow(avatar, string.Concat(avatar.name, "_Shadow"), 0, 0, 0, 1.5f, 1.5f, 1, 0, 0.01f, 0.2f);
            }
            else if (vocation == 3)
            {
                MogoFXManager.Instance.AttachShadow(avatar, string.Concat(avatar.name, "_Shadow"), 0, 0, 0, 1.5f, 1.5f, 1, 0, 0.01f, 0.2f);
            }
            else if (vocation == 4)
            {
                MogoFXManager.Instance.AttachShadow(avatar, string.Concat(avatar.name, "_Shadow"), 0, 0, 0, 1.5f, 1.5f, 1, 0, 0.01f, 0.2f);
            }
            else if (vocation == 3 || vocation == 4)
            {
                // �����ڴ�
                AssetCacheMgr.GetInstanceAutoRelease("fx_jqqd.prefab", (prefabb, idd, goo) =>
                {
                    GameObject goFX           = (GameObject)goo;
                    goFX.transform.parent     = avatar.transform;
                    goFX.transform.localScale = Vector3.one;

                    if (vocation == 3)
                    {
                        goFX.transform.localPosition = new Vector3(0, 2.2f, 0);
                    }
                    else
                    {
                        goFX.transform.localPosition = new Vector3(0, 2f, 0);
                    }
                });
            }

            #region ����

            if (m_Animators.ContainsKey(vocation))
            {
                m_Animators[vocation] = avatar.GetComponent <Animator>();
            }
            else
            {
                m_Animators.Add(vocation, avatar.GetComponent <Animator>());
            }

            #endregion

            avatar.transform.position   = ci.Location;
            avatar.transform.localScale = Vector3.one;

            ety.sfxHandler = avatar.AddComponent <SfxHandler>();

            #region ��Ч �� ��Чɾ��������ʱ��

            if (!m_sfxHandlers.ContainsKey(vocation))
            {
                SfxHandler handler = avatar.GetComponent <SfxHandler>();
                if (handler == null)
                {
                    handler = avatar.AddComponent <SfxHandler>();
                }
                m_sfxHandlers.Add(vocation, handler);
                uint timer = uint.MaxValue;
                m_fxTimes.Add(vocation, timer);
            }

            #endregion

            ety.actorParent = avatar.AddComponent <ActorParent>();
            ety.actorParent.SetNakedEquid(ai.nakedEquipList);
            ety.InitEquip();

            if (m_avatarList.ContainsKey(vocation))
            {
                m_avatarList[vocation].sfxHandler.RemoveAllFX();
                AssetCacheMgr.ReleaseInstance(m_avatarList[vocation].gameObject);
            }
            ety.Hide();
            m_avatarList[vocation] = ety;
            AssetCacheMgr.GetResource(ci.controller,
                                      (obj) =>
            {
                var controller = obj as RuntimeAnimatorController;
                if (ety.animator)
                {
                    ety.animator.runtimeAnimatorController = controller;
                }
                if (loaded != null)
                {
                    loaded();
                }
            });
        });
    }
Beispiel #4
0
        public override void CreateModel()
        {
            //AvatarModelData data = AvatarModelData.dataMap[(int)vocation];
            //Debug.Log("EntityNPC.CreateModel(id=" + ID + ")");

            int modelID = NPCData.dataMap[(int)ID].mode;

            if (!AvatarModelData.dataMap.ContainsKey(modelID) && modelID != 150000)
            {
                return;
            }

            if (modelID != 150000)
            {
                AvatarModelData data = AvatarModelData.dataMap[modelID];

                AssetCacheMgr.GetInstanceAutoRelease(data.prefabName,
                                                     (prefab, guid, gameObject) =>
                {
                    GameObject            = gameObject as GameObject;
                    Transform             = (gameObject as GameObject).transform;
                    Transform.position    = position;
                    Transform.eulerAngles = rotation;
                    // Transform.localScale = scale;

                    animator = GameObject.GetComponent <Animator>();
                    SetIdleAction();

                    motor    = null;
                    npcMotor = GameObject.AddComponent <MogoMotorNPC>();

                    Transform.tag    = "NPC";
                    GameObject.layer = 17;    //Trap?
                    UpdatePosition();

                    ap = Transform.GetComponent <ActorNPC>();
                    if (ap == null)
                    {
                        Transform.gameObject.AddComponent <ActorNPC>();
                        ap = Transform.GetComponent <ActorNPC>();
                        (ap as ActorNPC).theEntity = this;
                    }

                    SphereCollider collider = Transform.gameObject.AddComponent <SphereCollider>();
                    collider.isTrigger      = true;
                    collider.center         = Vector3.zero;
                    collider.radius         = NPCData.dataMap[(int)ID].colliderRange / ((Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) < Transform.localScale.z ? (Transform.localScale.x < Transform.localScale.y ? Transform.localScale.x : Transform.localScale.y) : Transform.localScale.z);

                    BillboardLogicManager.Instance.AddInfoBillboard(ID, Transform, this, false);
                    BillboardLogicManager.Instance.SetHead(this);
                    EventDispatcher.TriggerEvent <Vector3, uint>(BillboardLogicManager.BillboardLogicEvent.UPDATEBILLBOARDPOS, Transform.position, ID);

                    MogoFXManager.Instance.AddShadow(GameObject, ID, 1 / Transform.localScale.x, 1 / Transform.localScale.y, 1 / Transform.localScale.z);

                    if (MogoWorld.thePlayer.CurrentTask != null)
                    {
                        if (MogoWorld.thePlayer.CurrentTask.conditionType == 1 && MogoWorld.thePlayer.CurrentTask.condition != null &&
                            MogoWorld.thePlayer.CurrentTask.condition.Count >= 3 && TaskData.dataMap.Get(MogoWorld.thePlayer.CurrentTask.condition[2]).npc == (int)ID)
                        {
                            SetNPCSign(NPCSignState.Doing);
                        }

                        if (MogoWorld.thePlayer.CurrentTask.isShowNPCTip == 1)
                        {
                            SetNPCSign(NPCSignState.Done);
                        }
                    }

                    ((GameObject)gameObject).AddComponent <MogoObjOpt>().ObjType = MogoObjType.NPC;

                    if (((GameObject)gameObject).GetComponent <Animator>() != null)
                    {
                        ((GameObject)gameObject).GetComponent <Animator>().enabled = false;
                    }

                    if (((GameObject)gameObject).GetComponent <Animation>() != null)
                    {
                        ((GameObject)gameObject).GetComponent <Animation>().enabled = false;
                    }

                    if (!NPCManager.npcEntitiePosition.ContainsKey((uint)ID))
                    {
                        NPCManager.npcEntitiePosition.Add((uint)ID, Transform.position);
                    }

                    EventDispatcher.TriggerEvent(Events.TaskEvent.CheckNpcInRange);

                    NPCCheckThink();
                }
                                                     );
            }
            else
            {
                GameObject            = new GameObject();
                GameObject.name       = "Sky_NPC";
                Transform             = GameObject.transform;
                Transform.position    = position;
                Transform.eulerAngles = rotation;
                // Transform.localScale = scale;
                Transform.tag = "NPC";

                UpdatePosition();

                ActorNPC ap = Transform.GetComponent <ActorNPC>();
                if (ap == null)
                {
                    Transform.gameObject.AddComponent <ActorNPC>();
                    ap = Transform.GetComponent <ActorNPC>();
                    (ap as ActorNPC).theEntity = this;
                }

                SphereCollider collider = Transform.gameObject.AddComponent <SphereCollider>();
                collider.isTrigger = true;
                collider.center    = Vector3.zero;
                collider.radius    = 5;
            }
        }