Example #1
0
 void ClearPreLoadEntity()
 {
     if (m_preLoadDic != null)
     {
         var iter = m_preLoadDic.GetEnumerator();
         while (iter.MoveNext())
         {
             var objArray = iter.Current.Value;
             for (int i = 0; i < objArray.Length; i++)
             {
                 Engine.IRenderObj obj = objArray[i];
                 if (obj != null)
                 {
                     Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                     if (rs != null)
                     {
                         if (rs.CanRemovePreLoad(obj.GetID()))
                         {
                             rs.RemoveRenderObj(obj);
                         }
                     }
                 }
             }
             objArray = null;
         }
         m_preLoadDic.Clear();
     }
 }
Example #2
0
    public void ShowFxTips(uint effectResId)
    {
        m_trans_fxRoot.gameObject.SetActive(true);

        table.ResourceDataBase rdb = GameTableManager.Instance.GetTableItem <table.ResourceDataBase>(effectResId);
        if (rdb == null)
        {
            return;
        }

        Engine.IRenderSystem es = Engine.RareEngine.Instance().GetRenderSystem();
        if (es == null)
        {
            return;
        }

        string path = rdb.strPath;

        Engine.IEffect effect = null;

        if (es.CreateEffect(ref path, ref effect))
        {
            Transform transf = effect.GetNodeTransForm();

            if (transf == null)
            {
                return;
            }

            transf.parent        = m_trans_fxRootContent;
            transf.localPosition = Vector3.zero;

            m_trans_fxRootContent.SetChildLayer(LayerMask.NameToLayer("UI"));
        }
    }
Example #3
0
    Transform CreateEffect(int num = 1)
    {
        Engine.IEffect m_effect = null;
        for (int i = 0; i < num; i++)
        {
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs != null)
            {
                table.ResourceDataBase rd = GameTableManager.Instance.GetTableItem <table.ResourceDataBase>(50007);
                if (rd == null)
                {
                    return(null);
                }

                string path = rd.strPath;

                bool success = rs.CreateEffect(ref path, ref m_effect, OnCreateEffectEvent, Engine.TaskPriority.TaskPriority_Immediate);
                if (success)
                {
                    m_effect.GetNode().SetScale(Vector3.one);
                    m_effect.GetNode().GetTransForm().SetChildLayer(LayerMask.NameToLayer("UI"));
                }
            }
        }

        if (m_effect != null)
        {
            return(m_effect.GetNodeTransForm());
        }

        return(null);
    }
Example #4
0
        public void DestroyFx()
        {
            if (rs == null)
            {
                rs = Engine.RareEngine.Instance().GetRenderSystem();
            }

            // transform.DetachChildren();
            Engine.IEffect effect = rs.GetEffect(m_effectid);
            if (effect != null)
            {
                rs.RemoveEffect(effect);
            }
            if (m_hitNode != null)
            {
                FollowFxNode node = m_hitNode as FollowFxNode;
                if (node != null)
                {
                    node.FreeToNodePool();
                }
            }

            //m_effectid = 0;
            m_skillId     = 0;
            m_attacker    = null;
            m_targetObj   = null;
            m_SkillTarget = null;

            // SkillEffectHelper.Instance.FreeFollowGameObject(gameObject);
            bDestory = true;
            bStart   = false;
            //   DestroyImmediate(gameObject);
        }
Example #5
0
 public void AddParticle(uint resId, Action <Engine.IEffect> oncomplete = null, Engine.EffectCallback endCallback = null)
 {
     //ReleaseParticle();
     m_uResId = resId;
     Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
     if (rs != null)
     {
         table.ResourceDataBase rd = GameTableManager.Instance.GetTableItem <table.ResourceDataBase>(resId);
         if (rd == null)
         {
             Engine.Utility.Log.Error("ID为{0}的资源为空", resId);
             return;
         }
         string path = rd.strPath;
         if (string.IsNullOrEmpty(path))
         {
             return;
         }
         m_oncomplete = oncomplete;
         bool success = rs.CreateEffect(ref path, ref m_effect, OnCreateEffectEvent, Engine.TaskPriority.TaskPriority_Immediate, cb: endCallback);
         if (success)
         {
             UpdateEffectWidget();
         }
     }
 }
Example #6
0
        //-------------------------------------------------------------------------------------------------------
        private void MoveDir()
        {
            if (m_Owner == null)
            {
                return;
            }

            Vector3 pos = m_Owner.GetPos();

            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }
            m_curScene = rs.GetActiveScene();
            if (m_curScene == null)
            {
                return;
            }

            // 先设置人物旋转
            Quaternion rotate = new Quaternion();

            rotate.eulerAngles = new Vector3(0, m_param.m_dir, 0);

            Matrix4x4 mat = new Matrix4x4();

            mat.SetTRS(Vector3.zero, rotate, Vector3.one);
            m_dir = mat.GetColumn(2);

            if (!m_bIgnoreMoveAction)
            {
                m_Owner.PlayAction(m_param.strRunAct, 0, m_param.m_speed);
            }

            stEntityBeginMove move = new stEntityBeginMove();

            move.uid = m_Owner.GetUID();
            Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.ENTITYSYSTEM_ENTITYBEGINMOVE, move);

            if (!m_bMoving)
            {
                Engine.Utility.Log.Error("MoveDir----------- {0}-------------------------------------", m_param.m_dir);

                m_vLastPos    = pos;
                m_lastSyncPos = m_vLastPos;

                m_bMoving = true;
                if (!m_bIgnoreMoveAction)
                {
                    m_Owner.PlayAction(m_param.strRunAct, 0, m_param.m_speed);
                }

                //Engine.Utility.TimerAxis.Instance().KillTimer(0, this);
                //Engine.Utility.TimerAxis.Instance().SetTimer(0, 33, this, TimerAxis.INFINITY_CALL, "EntityMove");
                m_LastTime = Engine.Utility.TimeHelper.GetTickCount();
            }
        }
Example #7
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////////
    public bool Create(string strRenderObj, int nSize, GameObject parentObj)
    {
        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (rs == null)
        {
            Engine.Utility.Log.Error("获取RenderSystem失败!");
            return(false);
        }

        // 对象创建
        if (m_Root == null)
        {
            m_Root = new GameObject("RTObj");
            if (parentObj != null)
            {
                m_Root.transform.parent = parentObj.transform;
            }
        }

        //
        m_RenderObj = null;
        rs.CreateRenderObj(ref strRenderObj, ref m_RenderObj, CreateRenderObjEvent, null, Engine.TaskPriority.TaskPriority_Normal);
        if (m_RenderObj == null)
        {
            Engine.Utility.Log.Error("创建Renderobj失败{0}!", strRenderObj);
            return(false);
        }

        m_RenderObj.SetLayer((int)Engine.RenderLayer.ShowModel);
        // 默认播放站立动作
        m_RenderObj.Play(Client.EntityAction.Stand);

        // CreateCamera
        Camera cam = CreateCamera();

        //  m_RenderText = new RenderTexture(nSize, nSize, 24, RenderTextureFormat.ARGB32);
        m_RenderText = RenderTexture.GetTemporary(nSize, nSize, 24, RenderTextureFormat.ARGB4444);
        if (m_RenderText == null)
        {
            return(false);
        }
        cam.targetTexture = m_RenderText;

        // 对象挂在父节点上
        if (m_Root != null)
        {
            m_RenderObj.GetNode().GetTransForm().parent = m_Root.transform;
            m_Camera.transform.parent = m_Root.transform;
        }

        return(true);
    }
Example #8
0
        //-------------------------------------------------------------------------------------------------------
        private void CloseTerrainPos(ref Vector3 curPos)
        {
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }

            // 再计算移动速度
            m_curScene = rs.GetActiveScene();
            if (m_curScene == null)
            {
                return;
            }

            //和周围墙做碰撞修正
            // 计算得到新位置,还需要做一次碰撞检测,看是否可以行走
            //Ray rayLine = new Ray(m_vLastPos, pos - m_vLastPos);
            //Engine.ColliderInfo colliderInfo = new Engine.ColliderInfo();
            //float fDis = Vector3.Distance(pos, m_vLastPos);
            //if (m_curScene.GetColliderInfo(ref rayLine, ref colliderInfo))
            //{
            //    //Engine.Utility.Log.Trace("Dis:{0}", colliderInfo.distance);
            //    if (colliderInfo.distance < 1.5f) // 应当是玩家的半径
            //    {
            //        //                     if (colliderInfo.distance < fDis)
            //        //                     {
            //        //                         pos = m_vLastPos + Vector3.Normalize(m_vSpeed) * colliderInfo.distance;
            //        //                     }
            //        //                     else
            //        //                     {
            //        //            m_jumpSpeed =  Vector3.up * _jumpUp;
            //        //             m_vSpeed = m_jumpSpeed ;
            //        m_vSpeed = m_vSpeed - Vector3.Dot(m_vSpeed, colliderInfo.normal) * colliderInfo.normal;
            //        pos = m_vLastPos + m_vSpeed * Time.deltaTime;
            //        /*                    }*/
            //    }
            //}

            Engine.TerrainInfo info;
            if (m_curScene.GetTerrainInfo(ref curPos, out info))
            {
                //斜坡速度衰减.... 去掉
                //Vector3 right = Vector3.Cross(info.normal, m_dir);
                //Vector3 speed = Vector3.Cross(right, info.normal);
                //float cos = Vector3.Dot(m_dir, speed);

                //m_fSpeedTerrainFact = cos;
            }

            curPos.y = info.pos.y;
        }
Example #9
0
 public void ReleaseParticle()
 {
     m_uResId = 0;
     if (null != m_effect)
     {
         Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
         if (rs != null)
         {
             rs.RemoveEffect(m_effect);
         }
         m_effect = null;
     }
 }
Example #10
0
    public SequencerManager()
    {
        m_RenderSystem = Engine.RareEngine.Instance().GetRenderSystem();

        //任务触发
        Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.TASK_DONE, OnEvent);
        Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.TASK_ACCEPT, OnEvent);
        Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.TASK_CANSUBMIT, OnEvent);

        Engine.Utility.EventEngine.Instance().AddEventListener((int)Client.GameEventID.CHAPTER_EFFECT_END, OnChapterEnd);



        //table.SequencerData
        List <table.SequencerData> tableList = GameTableManager.Instance.GetTableList <table.SequencerData>();

        for (int i = 0; i < tableList.Count; i++)
        {
            table.SequencerData data = tableList[i];

            switch (data.TriggerType)
            {
            case (int)TriggerType.task:
                m_TaskTriggerType.Add(data);
                break;

            case (int)TriggerType.chapterEnd:
                m_ChapterType.Add(data);
                break;
            }
        }

        List <table.ChapterDabaBase> lstchapter = GameTableManager.Instance.GetTableList <table.ChapterDabaBase>();

        table.ChapterDabaBase database = null;

        for (int i = 0, imax = lstchapter.Count; i < imax; i++)
        {
            database = lstchapter[i];

            switch ((TriggerType)database.TriggerType)
            {
            case TriggerType.task:
                m_lstChapterTaskTrigger.Add(database);
                break;

            default:
                break;
            }
        }
    }
Example #11
0
        private object SetPos(object param)
        {
            if (m_Owner != null)
            {
                Vector3 pos             = (Vector3)param;
                Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                if (rs == null)
                {
                    return(null);
                }
                // 取下地表高度
                // 再计算移动速度
                Engine.IScene curScene = rs.GetActiveScene();
                if (curScene == null)
                {
                    return(null);
                }
                Engine.TerrainInfo info;
                if (curScene.GetTerrainInfo(ref pos, out info))
                {
                    //if (pos.y < info.pos.y)
                    {
                        pos.y = info.pos.y;// +0.08f; // 往上提一个距离
                    }
                }

                //if (pos.y <= 10f)
                //{
                //    if (!EntitySystem.m_ClientGlobal.IsMainPlayer(m_Owner))
                //    {
                //        Vector3 mainPos = EntitySystem.m_ClientGlobal.MainPlayer.GetPos();
                //        pos.y = mainPos.y;
                //    }
                //}


                //if (EntitySystem.m_ClientGlobal.IsMainPlayer(m_Owner))
                //{
                //    Engine.Utility.Log.LogGroup("XXF", "Entity.SetPos ({0},{1})", pos.x,-pos.z);
                //}

                m_Owner.SetPos(ref pos);
            }
            else
            {
                Engine.Utility.Log.LogGroup("XXF", "Entity.SetPos m_Owner is null");
            }

            return(null);
        }
Example #12
0
        //-------------------------------------------------------------------------------------------------------

        /**
         * @brief 用来处理游戏中退回到登录或者选人界面 或者地图时使用
         * @param bFlag 标识是否清理主角 true清理主角
         */
        public void Clear(bool bFlag = false)
        {
            Engine.IRenderSystem renderSys = Engine.RareEngine.Instance().GetRenderSystem();
            if (renderSys != null && bFlag)
            {
                // 设置主Camera
                string         strCameraName = "MainCamera";
                Engine.ICamera cam           = renderSys.GetCamera(ref strCameraName);
                if (cam != null)
                {
                    cam.Enable(false);
                }
            }

            // 停止背景音乐
            Engine.IAudio audio = Engine.RareEngine.Instance().GetAudio();
            if (audio != null && bFlag)
            {
                audio.StopMusic();
            }

            if (bFlag)
            {
                CmdManager.Instance().Clear();
            }
            if (m_ControllerSys != null)
            {
                m_ControllerSys.GetCombatRobot().Stop(true);
            }

            if (MainPlayer != null)
            {
                MainPlayer.SendMessage(EntityMessage.EntityCommand_StopMove, MainPlayer.GetPos());
            }

            if (m_EntitySys != null)
            {
                m_EntitySys.Clear(bFlag);
            }

            if (m_MapSystem != null)
            {
                m_MapSystem.ExitMap();
            }
            MainPlayer = null;

            Engine.RareEngine.Instance().UnloadUnusedResources();
        }
Example #13
0
    public void DestroyFx()
    {
        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (rs == null)
        {
            return;
        }

        Engine.IEffect effect = rs.GetEffect(m_effectid);
        if (effect != null)
        {
            rs.RemoveEffect(effect);
        }
        bPlay = false;
        if (m_placeNode != null)
        {
            m_placeNode.FreeToNodePool();
        }
    }
Example #14
0
        public override void FireEvent()
        {
            if (!AffectedObject)
            {
                return;
            }

            if (!Application.isPlaying && Application.isEditor)
            {
            }
            else
            {
                table.MapDataBase data = GameTableManager.Instance.GetTableItem <table.MapDataBase>(sceneID);
                if (data == null)
                {
                    return;
                }
                table.ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <table.ResourceDataBase>(data.dwResPath);
                if (resDB == null)
                {
                    return;
                }

                Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                if (rs != null)
                {
                    string        str   = resDB.strPath;
                    Engine.IScene scene = rs.EnterScene(ref str, SequencerManager.Instance());
                    if (scene != null)
                    {
                        ///¼ÓÔس¡¾°
                        SequencerManager.Instance().Pause();

                        scene.StartLoad(Vector3.one);

                        //±£´æÏÂmapid
                        Client.IMapSystem map = Client.ClientGlobal.Instance().GetMapSystem();
                        SequencerManager.Instance().m_MapID = map.GetMapID();
                    }
                }
            }
        }
Example #15
0
    /// <summary>
    /// 主角复活
    /// </summary>
    void MainPlayerRelive()
    {
        IPlayer mainPlyer = Client.ClientGlobal.Instance().MainPlayer;

        if (mainPlyer != null)
        {
            if (Client.ClientGlobal.Instance().MainPlayer.IsDead())
            {
                DataManager.Manager <UIPanelManager>().HidePanel(PanelID.ReLivePanel);

                Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                if (rs != null)
                {
                    rs.EnableGray(false);
                }

                mainPlyer.SendMessage(EntityMessage.EntityCommand_SetPos, mainPlyer.GetPos());
                mainPlyer.ChangeState(CreatureState.Normal);
            }
        }
    }
Example #16
0
    //-------------------------------------------------------------------------------------------------------
    public bool Create(Client.IPlayer player, int nSize, GameObject parentObj, Client.SkillSettingState eState = Client.SkillSettingState.StateOne)
    {
        if (player == null)
        {
            return(false);
        }

        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (rs == null)
        {
            Engine.Utility.Log.Error("获取RenderSystem失败!");
            return(false);
        }

        // 对象创建
        if (m_Root == null)
        {
            m_Root = new GameObject("RTObj");
            if (parentObj != null)
            {
                m_Root.transform.parent = parentObj.transform;
            }
        }

        //
        m_RenderObj = null;

        Client.IEntitySystem es = Client.ClientGlobal.Instance().GetEntitySystem();
        if (es == null)
        {
            return(false);
        }

        List <GameCmd.SuitData> lstSuit = null;

        player.GetSuit(out lstSuit);

        return(Create(lstSuit, player.GetProp((int)PlayerProp.Job), player.GetProp((int)PlayerProp.Sex), nSize, parentObj, eState));
    }
Example #17
0
    public void Release()
    {
        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (rs == null)
        {
            Engine.Utility.Log.Error("获取RenderSystem失败!");
            return;
        }


        if (m_PuppetObj != null)
        {
            ClientGlobal.Instance().GetEntitySystem().RemoveEntity(m_PuppetObj);
            m_PuppetObj = null;
            m_RenderObj = null;
        }
        if (m_RenderObj != null)
        {
            rs.RemoveRenderObj(m_RenderObj);
        }

        if (m_Camera != null)
        {
            GameObject.DestroyImmediate(m_Camera);
        }
        if (m_RenderText != null)
        {
            m_RenderText.Release();
            GameObject.DestroyImmediate(m_RenderText);
            m_RenderText = null;
        }


        if (m_Root != null)
        {
            GameObject.DestroyImmediate(m_Root);
            m_Root = null;
        }
    }
Example #18
0
        public void DestroyFx()
        {
            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }

            Engine.IEffect effect = rs.GetEffect(m_effectid);
            if (effect != null)
            {
                rs.RemoveEffect(effect);
            }

            Destroy(gameObject);
            if (m_hitNode != null)
            {
                ArrowFxNode node = m_hitNode as ArrowFxNode;
                if (node != null)
                {
                    node.FreeToNodePool();
                }
            }
        }
Example #19
0
    //正常播放完成
    public void PlaybackFinished(WellFired.USSequencer sequencer)
    {
        m_IsPlay = false;

        if (m_SequencerCamera != null)
        {
            GameObject obj    = GameObject.Find("MainCamera");
            Camera     camera = obj.GetComponent <Camera>();
            if (camera != m_SequencerCamera)
            {
                camera.enabled = true;
            }
        }
        m_SequencerCamera = null;
        m_SequencerData   = null;


        // 取消回调
        if (sequencer != null)
        {
            sequencer.PlaybackFinished -= this.PlaybackFinished;
            sequencer.BeforeUpdate     -= this.BeforeUpdate;
        }

        try
        {
            //显示npc
            Client.IEntitySystem es = Client.ClientGlobal.Instance().GetEntitySystem();
            if (es != null)
            {
                es.ShowEntity(true);
            }

            //删除剧情gameobject
            if (m_SequencerGameObject != null)
            {
                GameObject.Destroy(m_SequencerGameObject);
                m_SequencerGameObject = null;
            }
            Debug.Log("清理剧情对象");

            //清理剧情对象
            ClearSequencerTempObject();

            //打开声音
            Client.ClientGlobal.Instance().MuteGameSound(false);
        }
        catch
        {
            goto Exit0;
        }
Exit0:
        //隐藏提示
        TipsManager.Instance.EnableTips(true);

        //DataManager.Manager<UIPanelManager>().ShowStoryCachePanel();
        Debug.Log("剧情结束显示UI");
        RoleStateBarManager.ShowHeadStatus();
        //剧情结束隐藏黑边
        DataManager.Manager <UIPanelManager>().HideStory();
        Debug.Log("剧情结束隐藏黑边");
        Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.STORY_PLAY_OVER, null);

        //却换到原场景
        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (m_MapID != 0)
        {
            // 剧情播放完毕加载原场景
            table.MapDataBase data = GameTableManager.Instance.GetTableItem <table.MapDataBase>(m_MapID);
            if (data == null)
            {
                return;
            }
            table.ResourceDataBase resDB = GameTableManager.Instance.GetTableItem <table.ResourceDataBase>(data.dwResPath);
            if (resDB == null)
            {
                return;
            }

            if (rs != null)
            {
                string        str   = resDB.strPath;
                Engine.IScene scene = rs.EnterScene(ref str, SequencerManager.Instance());
                if (scene != null)
                {
                    ///加载场景
                    SequencerManager.Instance().Pause();

                    scene.StartLoad(Vector3.one);
                }
            }
            m_MapID = 0;
        }
    }
Example #20
0
    public bool Create(List <GameCmd.SuitData> lstSuit, int nJob, int nSex, int nSize, GameObject parentObj, SkillSettingState eState = SkillSettingState.StateOne)
    {
        Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
        if (rs == null)
        {
            Engine.Utility.Log.Error("获取RenderSystem失败!");
            return(false);
        }

        // 对象创建
        if (m_Root == null)
        {
            m_Root = new GameObject("RTObj");
            if (parentObj != null)
            {
                m_Root.transform.parent = parentObj.transform;
            }
        }

        //
        m_RenderObj = null;

        Client.IEntitySystem es = Client.ClientGlobal.Instance().GetEntitySystem();
        if (es == null)
        {
            return(false);
        }

        Client.EntityCreateData data = new Client.EntityCreateData();
        data.ID      = ++s_uPuppetID;
        data.strName = "";

        //int speed = player.GetProp((int)WorldObjProp.MoveSpeed);
        data.PropList = new EntityAttr[(int)PuppetProp.End - (int)EntityProp.Begin];
        int index = 0;

        data.PropList[index++] = new EntityAttr((int)PuppetProp.Job, nJob);
        data.PropList[index++] = new EntityAttr((int)PuppetProp.Sex, nSex);
        //data.PropList[index++] = new EntityAttr((int)EntityProp.BaseID, 0);
        //data.PropList[index++] = new EntityAttr((int)WorldObjProp.MoveSpeed, speed);
        data.eSkillState = eState;
        data.bViewModel  = true;
        // 处理时装外观数据
        EntityViewProp[] propList = new EntityViewProp[(int)Client.EquipPos.EquipPos_Max];
        index             = 0;
        propList[index++] = new EntityViewProp((int)Client.EquipPos.EquipPos_Body, 0);
        propList[index++] = new EntityViewProp((int)Client.EquipPos.EquipPos_Weapon, 0);

        if (lstSuit.Count > 0)
        {
            for (int i = 0; i < lstSuit.Count; ++i)
            {
                if (lstSuit[i] == null)
                {
                    continue;
                }

                int pos = GetPropPos((Client.EquipPos)lstSuit[i].suit_type, propList);
                if (pos >= 0)
                {
                    propList[pos] = new EntityViewProp((int)lstSuit[i].suit_type, (int)lstSuit[i].baseid);
                }
                else
                {
                    Client.EquipPos equipPos = (Client.EquipPos)lstSuit[i].suit_type;
                    propList[index++] = new EntityViewProp((int)equipPos, (int)lstSuit[i].baseid);
                }
            }
        }

        data.ViewList = propList;
        data.nLayer   = LayerMask.NameToLayer("ShowModel");

        m_PuppetObj = es.CreateEntity(Client.EntityType.EntityType_Puppet, data, true) as Client.IPuppet;
        if (m_PuppetObj == null)
        {
            Engine.Utility.Log.Error("创建Renderobj失败{0}!", "");
            return(false);
        }

        m_RenderObj = m_PuppetObj.renderObj;
        if (m_RenderObj == null)
        {
            return(false);
        }

        // 默认播放站立动作
        m_RenderObj.Play(Client.EntityAction.Stand);
        m_RenderObj.SetLayer((int)Engine.RenderLayer.ShowModel); // showModel

        // CreateCamera
        Camera cam = CreateCamera();

        m_RenderText = new RenderTexture(nSize, nSize, 24, RenderTextureFormat.ARGB32);
        if (m_RenderText == null)
        {
            return(false);
        }
        cam.targetTexture = m_RenderText;

        // 对象挂在父节点上
        if (m_Root != null)
        {
            m_RenderObj.GetNode().GetTransForm().parent = m_Root.transform;
            m_Camera.transform.parent = m_Root.transform;
        }

        return(true);
    }
Example #21
0
        private void OnEvent(int nEventID, object param)
        {
            // 地表没有创建成功的时候,就已经收到了角色和NPC的创建 这里重新设置位置和地表做碰撞
            if (nEventID == (int)GameEventID.SYSTEM_LOADSCENECOMPELETE)
            {
                //List<IPlayer> lstPlayer;
                FindAllEntity <IPlayer>(ref lstPlayer);
                for (int i = 0; i < lstPlayer.Count; ++i)
                {
                    Vector3 pos = lstPlayer[i].GetPos();
                    lstPlayer[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstPlayer.Clear();

                //List<INPC> lstNPC;
                FindAllEntity <INPC>(ref lstNPC);
                for (int i = 0; i < lstNPC.Count; ++i)
                {
                    Vector3 pos = lstNPC[i].GetPos();
                    lstNPC[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstNPC.Clear();

                //List<IBox> lstBox;
                FindAllEntity <IBox>(ref lstBox);
                for (int i = 0; i < lstBox.Count; ++i)
                {
                    Vector3 pos = lstBox[i].GetPos();
                    pos.y += 0.2f;
                    lstBox[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstBox.Clear();

                //List<IRobot> lstRobot;
                FindAllEntity <IRobot>(ref lstRobot);
                for (int i = 0; i < lstRobot.Count; ++i)
                {
                    Vector3 pos = lstRobot[i].GetPos();
                    lstRobot[i].SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
                }
                lstRobot.Clear();
                // 请求同步移动时间
                ReqMoveServerTime();
            }
            else if (nEventID == (int)GameEventID.RECONNECT_SUCESS) // 重新连接成功
            {
                stReconnectSucess st = (stReconnectSucess)param;
                if (st.isLogin)
                {
                    Clear(false); // 不清理除主角
                    // 请求同步移动时间
                    ReqMoveServerTime();
                }
                else
                {//强制同步
                    GameCmd.stUserMoveMoveUserCmd_C cmd = new GameCmd.stUserMoveMoveUserCmd_C();
                    cmd.client_time = 0;
                    List <GameCmd.Pos> list = new List <GameCmd.Pos>();
                    GameCmd.Pos        pp   = new GameCmd.Pos();
                    pp.x = 0;
                    pp.y = 0;
                    list.Add(pp);
                    cmd.poslist.AddRange(list);
                    m_ClientGlobal.netService.Send(cmd);
                }
            }
            else if (nEventID == (int)GameEventID.NETWORK_CONNECTE_CLOSE)// 网络断开
            {
                if (m_ClientGlobal.MainPlayer != null)
                {
                    m_ClientGlobal.MainPlayer.SendMessage(EntityMessage.EntityCommand_RemoveLinkAllEffect);
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_ENTITYDEAD) // 实体死亡
            {
                stEntityDead ed = (stEntityDead)param;
                if (m_ClientGlobal.IsMainPlayer(ed.uid))
                {
                    Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                    if (rs != null)
                    {
                        rs.EnableGray(true);
                    }
                }
                IEntity en = FindEntity(ed.uid);
                if (en != null)
                {
                    AddEffectOnEntity(en, false);
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_RELIVE)
            {
                stEntityRelive ed = (stEntityRelive)param;
                if (m_ClientGlobal.IsMainPlayer(ed.uid))
                {
                    Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                    if (rs != null)
                    {
                        rs.EnableGray(false);
                    }
                }

                IEntity en = FindEntity(ed.uid);
                if (en != null)
                {
                    AddEffectOnEntity(en, true);
                }
            }
            else if (nEventID == (int)GameEventID.PLAYER_LOGIN_SUCCESS)
            {
                Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
                if (rs != null)
                {
                    rs.EnableGray(false);
                }

                // 请求同步移动时间
                ReqMoveServerTime();
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_LEAVEMAP) // 离开地图
            {
                // 清理地图上所有对象
                Clear(false);

                // 切地图时让主角停止移动
                IPlayer mainPlayer = EntitySystem.m_ClientGlobal.MainPlayer;
                if (mainPlayer != null)
                {
                    bool ismoving = (bool)mainPlayer.SendMessage(Client.EntityMessage.EntityCommand_IsMove, null);
                    if (ismoving)
                    {
                        mainPlayer.SendMessage(Client.EntityMessage.EntityCommand_StopMove, mainPlayer.GetPos());
                    }
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_CHANGEAREA) // 区域变化 动作处理
            {
                stEntityChangeArea changeArea = (stEntityChangeArea)param;
                IEntity            en         = FindEntity(changeArea.uid);
                if (en != null && en.GetEntityType() == EntityType.EntityType_Player)
                {
                    string strCurAni   = (string)en.SendMessage(EntityMessage.EntityCommand_GetCurAni, null);
                    bool   bChangeArea = false;
                    if (changeArea.eType == MapAreaType.Safe || changeArea.eType == MapAreaType.Fish)
                    {
                        if (strCurAni == EntityAction.Stand_Combat)
                        {
                            strCurAni   = EntityAction.Stand;
                            bChangeArea = true;
                        }

                        if (strCurAni == EntityAction.Run_Combat)
                        {
                            strCurAni   = EntityAction.Run;
                            bChangeArea = true;
                        }
                    }
                    else
                    {
                        if (strCurAni == EntityAction.Stand)
                        {
                            strCurAni   = EntityAction.Stand_Combat;
                            bChangeArea = true;
                        }

                        if (strCurAni == EntityAction.Run)
                        {
                            strCurAni   = EntityAction.Run_Combat;
                            bChangeArea = true;
                        }
                    }

                    if (bChangeArea)
                    {
                        PlayAni anim_param = new PlayAni();
                        anim_param.strAcionName = strCurAni;
                        anim_param.fSpeed       = 1;
                        anim_param.nStartFrame  = 0;
                        anim_param.nLoop        = -1;
                        anim_param.fBlendTime   = 0.1f;
                        en.SendMessage(EntityMessage.EntityCommand_PlayAni, anim_param);
                    }
                }
            }
            else if (nEventID == (int)GameEventID.ENTITYSYSTEM_CREATEENTITY)
            {
                stCreateEntity create = (stCreateEntity)param;
                IEntity        en     = FindEntity(create.uid);
                if (en != null)
                {
                    EntityManager.Instance().OnCreateEntity(en);
                }
            }
        }
Example #22
0
        private void OnCreateRenderObj(Engine.IRenderObj obj, object param)
        {
            if (m_EntityView == null)
            {
                return;
            }

            if (m_EntityView.GetNode() == null)
            {
                Engine.Utility.Log.Error("OnCreateRenderObj  m_EntityView.GetNode() is null");
                return;
            }
            int nID        = GetProp((int)EntityProp.BaseID);
            var table_data = GameTableManager.Instance.GetTableItem <table.ItemDataBase>((uint)nID);

            if (table_data != null)
            {
                m_EntityView.GetNode().SetScale(UnityEngine.Vector3.one * table_data.scale * 0.01f);
            }

            if (nID == 60001)
            {
                UnityEngine.Vector3 pos = GetPos();
                pos.y += 0.05f;
                SendMessage(EntityMessage.EntityCommand_SetPos, (object)pos);
            }
            // 根据全局配置设置阴影
            //int nShadowLevel = EntitySystem.m_ClientGlobal.gameOption.GetInt("Render", "shadow", 1);
            //m_EntityView.SetShadowLevel(nShadowLevel);


            Engine.IRenderSystem rs = Engine.RareEngine.Instance().GetRenderSystem();
            if (rs == null)
            {
                return;
            }
            // 取下地表高度
            // 再计算移动速度
            Engine.IScene curScene = rs.GetActiveScene();
            if (curScene == null)
            {
                return;
            }
            Material mat = curScene.GetBoxMat();

            if (mat != null)
            {
                if (m_EntityView.GetMaterial() == null)
                {
                    return;
                }
                Texture tex = m_EntityView.GetMaterial().mainTexture;
                mat.mainTexture = tex;
                m_EntityView.ApplySharedMaterial(mat);
            }


            Vector3 currPos = GetPos();

            SetPos(ref currPos);

            Client.stCreateEntity createEntity = new Client.stCreateEntity();
            createEntity.uid = GetUID();
            Engine.Utility.EventEngine.Instance().DispatchEvent((int)GameEventID.ENTITYSYSTEM_CREATEENTITY, createEntity);
            //             if (!m_sendPickMsg && CanAutoPick())
            //             {
            //                 m_sendPickMsg = true;
            //                 Engine.Utility.EventEngine.Instance().DispatchEvent((int)Client.GameEventID.ROBOTCOMBAT_PICKUPITEM, new Client.stPickUpItem() { itemid = GetID(), state = 0 });
            //             }
        }