Esempio n. 1
0
            /// <summary>
            /// 创建对象。
            /// </summary>
            /// <param name="obj">对象。</param>
            /// <param name="spawned">对象是否已被获取。</param>
            public void Register(T obj, bool spawned)
            {
                if (obj == null)
                {
                    throw new GameFrameworkException("Object is invalid.");
                }

                Object <T> internalObject = Object <T> .Create(obj, spawned);

                m_Objects.Add(obj.Name, internalObject);
                m_ObjectMap.Add(obj.Target, internalObject);

                if (Count > m_Capacity)
                {
                    Release();
                }
            }
Esempio n. 2
0
        /// <summary>
        /// 注册文件系统。
        /// </summary>
        /// <param name="name">要注册的文件系统的名称。</param>
        /// <param name="fileSystem">要注册的文件系统。</param>
        /// <returns>是否注册文件系统成功。</returns>
        public bool RegisterFileSystem(string name, IFileSystem fileSystem)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new GameFrameworkException("Name is invalid.");
            }

            if (fileSystem == null)
            {
                throw new GameFrameworkException("File system is invalid.");
            }

            FileSystem fileSystemImpl = (FileSystem)fileSystem;

            if (!fileSystemImpl.AddName(name))
            {
                return(false);
            }

            m_RegisteredFileSystems.Add(name, fileSystemImpl);
            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// 删除指定文件。
        /// </summary>
        /// <param name="name">要删除的文件名称。</param>
        /// <returns>是否删除指定文件成功。</returns>
        public bool DeleteFile(string name)
        {
            if (m_Access != FileSystemAccess.Write && m_Access != FileSystemAccess.ReadWrite)
            {
                throw new GameFrameworkException("File system is not writable.");
            }

            if (string.IsNullOrEmpty(name))
            {
                throw new GameFrameworkException("Name is invalid.");
            }

            int blockIndex = 0;

            if (!m_FileDatas.TryGetValue(name, out blockIndex))
            {
                return(false);
            }

            m_FileDatas.Remove(name);

            BlockData  blockData   = m_BlockDatas[blockIndex];
            int        stringIndex = blockData.StringIndex;
            StringData stringData  = m_StringDatas[stringIndex].Clear();

            m_FreeStringIndexes.Enqueue(stringIndex);
            m_FreeStringDatas.Enqueue(stringData);
            m_StringDatas.Remove(stringIndex);
            WriteStringData(stringIndex, stringData);

            blockData = blockData.Free();
            m_BlockDatas[blockIndex] = blockData;
            if (!TryCombineFreeBlocks(blockIndex))
            {
                m_FreeBlockIndexes.Add(blockData.Length, blockIndex);
                WriteBlockData(blockIndex);
            }

            m_Stream.Flush();
            return(true);
        }