Exemplo n.º 1
0
        static public void CallEvent(string objMgPath, string eventName, MulticastDelegate delgt, params object[] eventParams)
        {
            try
            {
                delgt.DynamicInvoke(eventParams);
                if (!PurviewMgr.IsMainHost)
                {
                    object[] newparams = new object[eventParams.Length];

                    for (int i = 0; i < eventParams.Length; i++)
                    {
                        if (eventParams[i] is IGameObj)
                        {
                            newparams[i] = new GameObjSyncInfo(((IGameObj)eventParams[i]).MgPath);
                        }
                        else
                        {
                            newparams[i] = eventParams[i];
                        }
                    }

                    // 通过网络协议传递给主机
                    SyncCasheWriter.SubmitNewEvent(objMgPath, eventName, newparams);
                }
            }
            catch (Exception ex)
            {
                Log.Write(ex.ToString());
            }
        }
Exemplo n.º 2
0
        public virtual bool Update(float second)
        {
            if (PurviewMgr.IsMainHost)
            {
                /* 1.更新场景物体
                 * 2.处理消息缓冲区
                 * 3.更新其他组件
                 * 4.广播同步消息
                 * */
                GameManager.UpdateMgr.Update(second);

                // 处理消息缓冲区
                SyncCasheReader.ReadCashe(sceneMgr);

                GameManager.UpdataComponent(second);

                // 广播同步消息
                outputCashe.SendPackage();
                SyncCasheWriter.Update(second);
            }
            else
            {
                /* 1.处理同步消息缓冲区
                 * 1.更新场景物体  其中会添加需要发送的同步消息
                 * 2.更新其他组件
                 * 3.发送同步消息
                 * */
                GameManager.UpdateMgr.Update(second);
                GameManager.UpdataComponent(second);
                // 处理消息缓冲区
                SyncCasheReader.ReadCashe(sceneMgr);
                // 发送同步消息
                outputCashe.SendPackage();
                SyncCasheWriter.Update(second);
            }

            return(false);
        }