#region Copyright & License Information /* * Copyright 2007-2018 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. For more * information, see COPYING. */ #endregion using System; using System.Drawing; using OpenRA.FileSystem; namespace OpenRA.Graphics { public interface IModel { uint Frames { get; } uint Sections { get; } float[] TransformationMatrix(uint section, uint frame); float[] Size { get; } float[] Bounds(uint frame); ModelRenderData RenderData(uint section); /// Returns the smallest rectangle that covers all rotations of all frames in a model Rectangle AggregateBounds { get; } } public struct ModelRenderData { public readonly int Start; public readonly int Count; public readonly Sheet Sheet; public ModelRenderData(int start, int count, Sheet sheet) { Start = start; Count = count; Sheet = sheet; } } public interface IModelCache : IDisposable { IModel GetModelSequence(string model, string sequence); bool HasModelSequence(string model, string sequence); IVertexBuffer VertexBuffer { get; } } public interface IModelSequenceLoader { Action OnMissingModelError { get; set; } IModelCache CacheModels(IReadOnlyFileSystem fileSystem, ModData modData, IReadOnlyDictionary modelDefinitions); } public class PlaceholderModelSequenceLoader : IModelSequenceLoader { public Action OnMissingModelError { get; set; } class PlaceholderModelCache : IModelCache { public IVertexBuffer VertexBuffer { get { throw new NotImplementedException(); } } public void Dispose() { } public IModel GetModelSequence(string model, string sequence) { throw new NotImplementedException(); } public bool HasModelSequence(string model, string sequence) { throw new NotImplementedException(); } } public PlaceholderModelSequenceLoader(ModData modData) { } public IModelCache CacheModels(IReadOnlyFileSystem fileSystem, ModData modData, IReadOnlyDictionary modelDefinitions) { return new PlaceholderModelCache(); } } }