/// <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(); } }
/// <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); }
/// <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); }