using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameAssets { private readonly UniQuake uq; private readonly Dictionary textures = new Dictionary(); private BrushModel worldModel; private readonly List brushModels = new List(); private readonly List aliasModels = new List(); private uint nextTexNum = 0x10001; public GameAssets(UniQuake uniQuake) { uq = uniQuake; } public uint SetTexture(uint texNum, Texture2D texture) { if (texNum == 0) { // Assign a new texture number while (textures.ContainsKey(nextTexNum)) ++nextTexNum; texNum = nextTexNum++; } if (textures.ContainsKey(texNum)) { Object.Destroy(textures[texNum]); textures.Remove(texNum); } textures.Add(texNum, texture); return texNum; } public bool TryGetTexture(uint texNum, out Texture2D texture) { texture = null; return texNum > 0 && textures.TryGetValue(texNum, out texture); } public void AddAliasModel(AliasModel aliasModel) { aliasModels.Add(aliasModel); } public bool TryGetAliasModel(string name, out AliasModel aliasModel) { foreach (var model in aliasModels) { if (model.Name == name) { aliasModel = model; return true; } } aliasModel = null; return false; } public void AddBrushModel(BrushModel brushModel) { brushModels.Add(brushModel); } public bool TryGetBrushModel(string name, out BrushModel brushModel) { foreach (var model in brushModels) { if (model.Name == name) { brushModel = model; return true; } } brushModel = null; return false; } public void SetWorldModel(BrushModel brushModel) { worldModel?.Dispose(); worldModel = brushModel; } public bool TryGetWorldSubModel(int subModelIndex, out BrushModel.SubModel subModel) { if (worldModel == null || subModelIndex < 0 || subModelIndex >= worldModel.SubModelCount) { subModel = null; return false; } subModel = worldModel.GetSubModel(subModelIndex); return true; } public void Destroy() { if (worldModel != null) { worldModel.Dispose(); worldModel = null; } foreach (var brushModel in brushModels) { brushModel.Dispose(); } brushModels.Clear(); foreach (var aliasModel in aliasModels) { aliasModel.Dispose(); } aliasModels.Clear(); foreach (var texture in textures.Values) { Object.Destroy(texture); } textures.Clear(); } }