Beispiel #1
0
        public static PsScriptMgr Deserialize(Factory factory, byte[] data)
        {
            if (null == data)
            {
                return(null);
            }

            factory.Init();

            PsScriptMgr scriptMgr = new PsScriptMgr(factory);

            MemoryStream sm = new MemoryStream(data, false);

            using (BinaryReader r = new BinaryReader(sm))
            {
                int    varDatalength = r.ReadInt32();
                byte[] varData       = r.ReadBytes(varDatalength);

                scriptMgr.mVarMgr = VariableMgr.Import(varData);

                int count = r.ReadInt32();

                for (int i = 0; i < count; i++)
                {
                    int id = r.ReadInt32();

                    PsScript script = PsScript.Load(scriptMgr, id);
                    if (null == script)
                    {
                        continue;
                    }

                    if (!script.Init())
                    {
                        continue;
                    }

                    scriptMgr.mScriptList.Add(script);

                    script.Restore(r);
                }

                DeserializeList(scriptMgr.mScriptLoadList, r);
                DeserializeList(scriptMgr.mScriptRemoveList, r);
            }

            return(scriptMgr);
        }
Beispiel #2
0
        void LoadScript()
        {
            if (mScriptLoadList.Count <= 0)
            {
                return;
            }

            int[] loadArray = mScriptLoadList.ToArray();

            foreach (int id in loadArray)
            {
                PsScript q = FindScriptById(id);

                if (null != q)
                {
                    Debug.LogError("Duplicated Script:" + q);
                    continue;
                }

                PsScript script = PsScript.Load(this, id);
                if (null == script)
                {
                    continue;
                }

                if (!script.Init())
                {
                    continue;
                }

                mScriptList.Add(script);
                mScriptLoadList.Remove(id);

                Debug.Log("begin script:" + script.Id);
                //脚本开始事件发生后,可能会loadscript。导致向mScriptLoadList添加新元素而发生异常。
                //所以改为遍历数组。
                InternalEvent.Instance.EmitScriptBegin(script);
            }
        }