Esempio n. 1
0
        public static Kn5 FromFile(string filename, bool skipTextures, bool readNodesAsBytes = true)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException(filename);
            }

            var kn5 = new Kn5(filename);

            using (var reader = new Kn5Reader(filename)) {
                kn5.FromFile_Header(reader);

                if (skipTextures)
                {
                    kn5.FromFile_Textures(reader, BlankKn5TextureLoader.Instance);
                }
                else
                {
                    kn5.FromFile_Textures(reader, DefaultKn5TextureLoader.Instance);
                }

                kn5.FromFile_Materials(reader);
                kn5.FromFile_Nodes(reader, readNodesAsBytes);
            }

            return(kn5);
        }
Esempio n. 2
0
        public void Combine(Kn5 other, float[] position, float[] rotation) {
            if (position.Any(x => !Equals(x, 0f)) || rotation.Any(x => !Equals(x, 0f))) {
                other.RootNode.Transform = CalculateMatrix(position, rotation);
            }

            Combine(other);
        }
Esempio n. 3
0
        public static Kn5 FromFile(string filename, IKn5TextureLoader textureLoader = null, IKn5MaterialLoader materialLoader = null,
                                   IKn5NodeLoader nodeLoader = null)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException(filename);
            }

            var kn5 = new Kn5(filename);

            (textureLoader = textureLoader ?? DefaultKn5TextureLoader.Instance).OnNewKn5(filename);
            (materialLoader = materialLoader ?? DefaultKn5MaterialLoader.Instance).OnNewKn5(filename);
            (nodeLoader = nodeLoader ?? DefaultKn5NodeLoader.Instance).OnNewKn5(filename);

            using (var reader = new Kn5Reader(filename)) {
                kn5.FromFile_Header(reader);
                kn5.FromFile_Textures(reader, textureLoader);
                if (nodeLoader != SkippingNodeLoader.Instance || materialLoader != SkippingMaterialLoader.Instance)
                {
                    kn5.FromFile_Materials(reader, materialLoader);
                    kn5.FromFile_Nodes(reader, nodeLoader);
                }
            }

            return(kn5);
        }
Esempio n. 4
0
 public void DisposeFor(Kn5 kn5) {
     var keyPrefix = _kn5.OriginalFilename + "//";
     var keys = _materials.Keys.Where(x => x.StartsWith(keyPrefix)).ToList();
     foreach (var key in keys) {
         _materials[key].Dispose();
         _materials.Remove(key);
     }
 }
Esempio n. 5
0
        public static Kn5 FromStream(Stream entry, IKn5TextureLoader textureLoader = null)
        {
            var kn5 = new Kn5(string.Empty);

            using (var reader = new Kn5Reader(entry)) {
                kn5.FromFile_Header(reader);
                kn5.FromFile_Textures(reader, textureLoader ?? DefaultKn5TextureLoader.Instance);
                kn5.FromFile_Materials(reader);
                kn5.FromFile_Nodes(reader, false);
            }

            return(kn5);
        }
Esempio n. 6
0
        public static Kn5 FromDirectory(string dir, bool jsonMode) {
            if (!Directory.Exists(dir)) {
                throw new DirectoryNotFoundException(dir);
            }

            var kn5 = new Kn5(dir);
            
            kn5.FromDirectory_Header(dir);
            kn5.FromDirectory_Textures(dir);
            kn5.FromDirectory_Materials(dir);
            kn5.FromDirectory_Nodes(dir, jsonMode);

            return kn5;
        }
Esempio n. 7
0
        public static Kn5 FromDirectory(string dir, bool jsonMode)
        {
            if (!Directory.Exists(dir))
            {
                throw new DirectoryNotFoundException(dir);
            }

            var kn5 = new Kn5(dir);

            kn5.FromDirectory_Header(dir);
            kn5.FromDirectory_Textures(dir);
            kn5.FromDirectory_Materials(dir);
            kn5.FromDirectory_Nodes(dir, jsonMode);

            return(kn5);
        }
Esempio n. 8
0
        public static Kn5 FromStream(Stream entry, IKn5TextureLoader textureLoader = null, IKn5MaterialLoader materialLoader = null,
                                     IKn5NodeLoader nodeLoader = null)
        {
            var kn5 = new Kn5(string.Empty);

            using (var reader = new Kn5Reader(entry)) {
                kn5.FromFile_Header(reader);
                kn5.FromFile_Textures(reader, textureLoader ?? DefaultKn5TextureLoader.Instance);
                if (nodeLoader != SkippingNodeLoader.Instance || materialLoader != SkippingMaterialLoader.Instance)
                {
                    kn5.FromFile_Materials(reader, materialLoader ?? DefaultKn5MaterialLoader.Instance);
                    kn5.FromFile_Nodes(reader, nodeLoader ?? DefaultKn5NodeLoader.Instance);
                }
            }

            return(kn5);
        }
Esempio n. 9
0
        public static Kn5 FromFile(string filename, IKn5TextureLoader textureLoader = null)
        {
            if (!File.Exists(filename))
            {
                throw new FileNotFoundException(filename);
            }

            var kn5 = new Kn5(filename);

            using (var reader = new Kn5Reader(filename)) {
                kn5.FromFile_Header(reader);
                kn5.FromFile_Textures(reader, textureLoader ?? DefaultKn5TextureLoader.Instance);
                kn5.FromFile_Materials(reader);
                kn5.FromFile_Nodes(reader, false);
            }

            return(kn5);
        }
Esempio n. 10
0
        public static Kn5 FromStream(Stream entry, bool skipTextures = false) {
            var kn5 = new Kn5(string.Empty);

            using (var reader = new Kn5Reader(entry)) {
                kn5.FromFile_Header(reader);

                if (skipTextures) {
                    kn5.FromFile_SkipTextures(reader);
                } else {
                    kn5.FromFile_Textures(reader);
                }

                kn5.FromFile_Materials(reader);
                kn5.FromFile_Nodes(reader);
            }

            return kn5;
        }
Esempio n. 11
0
        public Task UpdateOverridesForAsync(Kn5 kn5, string textureName, DeviceContextHolder contextHolder) {
            IOverridedTextureProvider provider;
            if (!_overridedProviders.TryGetValue(kn5.OriginalFilename, out provider)) return Task.Delay(0);

            var keyPrefix = kn5.OriginalFilename + "//";
            if (OptionOverrideAsync) {
                return Task.WhenAll(_textures.Where(x => x.Key.StartsWith(keyPrefix))
                                            .Select(key => key.Value)
                                            .Where(x => textureName == null || string.Equals(x.Name, textureName, StringComparison.OrdinalIgnoreCase))
                                            .OfType<RenderableTexture>().Select(async texture => {
                                                var overrided = await provider.GetOverridedDataAsync(texture.Name);
                                                if (overrided != null) {
                                                    await texture.LoadOverrideAsync(overrided, contextHolder.Device);
                                                } else {
                                                    texture.Override = null;
                                                }
                                            }));
            }


            foreach (var texture in _textures.Where(x => x.Key.StartsWith(keyPrefix))
                                    .Select(key => key.Value)
                                    .Where(x => textureName == null || string.Equals(x.Name, textureName, StringComparison.OrdinalIgnoreCase))
                                    .OfType<RenderableTexture>()) {
                try {
                    var overrided = provider.GetOverridedData(texture.Name);
                    if (overrided != null) {
                        texture.LoadOverride(overrided, contextHolder.Device);
                    } else {
                        texture.Override = null;
                    }
                } catch (Exception e) {
                    Logging.Warning("Can’t load override texture: " + e);
                    texture.Override = null;
                }
            }

            return Task.Delay(0);
        }
Esempio n. 12
0
        public static Kn5 FromFile(string filename, bool skipTextures = false) {
            if (!File.Exists(filename)) {
                throw new FileNotFoundException(filename);
            }

            var kn5 = new Kn5(filename);

            using (var reader = new Kn5Reader(filename)) {
                kn5.FromFile_Header(reader);

                if (skipTextures) {
                    kn5.FromFile_SkipTextures(reader);
                } else {
                    kn5.FromFile_Textures(reader);
                }

                kn5.FromFile_Materials(reader);
                kn5.FromFile_Nodes(reader);
            }

            return kn5;
        }
Esempio n. 13
0
 public TrackMapPreparationRenderer(Kn5 kn5) : base(kn5) {
     Camera = new CameraOrtho();
 }
Esempio n. 14
0
            public CarTextureDialogViewModel([CanBeNull] BaseRenderer renderer, [CanBeNull] CarSkinObject activeSkin, [NotNull] Kn5 kn5, [NotNull] string textureName) {
                _renderer = renderer;
                _activeSkin = activeSkin;
                _kn5 = kn5;
                TextureName = textureName;

                var format = Regex.Match(textureName, @"(?<=\.)([a-zA-Z]{3,4})$").Value;
                TextureFormat = string.IsNullOrWhiteSpace(format) ? null : format.ToUpperInvariant();

                byte[] data;
                Data = kn5.TexturesData.TryGetValue(textureName, out data) ? data : null;
            }
Esempio n. 15
0
 public void Combine(Kn5 other) {
     RootNode.Children.Add(other.RootNode);
 }
Esempio n. 16
0
        public void DisposeFor(Kn5 kn5) {
            var keyPrefix = kn5.OriginalFilename + "//";
            var keys = _textures.Keys.Where(x => x.StartsWith(keyPrefix)).ToList();
            foreach (var key in keys) {
                _textures[key].Dispose();
                _textures.Remove(key);
            }

            var entry = _kn5Entries.FirstOrDefault(x => x.Kn5 == kn5);
            if (entry == null) return;
            _kn5Entries.Remove(entry);
        }
Esempio n. 17
0
 public Task UpdateOverridesForAsync(Kn5 kn5, DeviceContextHolder contextHolder) {
     return UpdateOverridesForAsync(kn5, null, contextHolder);
 }
Esempio n. 18
0
 public IEnumerable<IRenderableTexture> GetFor(Kn5 kn5) {
     var keyPrefix = kn5.OriginalFilename + "//";
     return _textures.Where(x => x.Key.StartsWith(keyPrefix)).Select(key => key.Value);
 }
Esempio n. 19
0
 public TrackMapRenderer(Kn5 kn5) {
     _kn5 = kn5;
 }
Esempio n. 20
0
 public UvRenderer(Kn5 kn5) {
     _kn5 = kn5;
     Width = 2048;
     Height = 2048;
 }
Esempio n. 21
0
 public void SetKn5(Kn5 kn5) {
     _kn5 = kn5;
 }
Esempio n. 22
0
 public void SetKn5(string filename, Kn5 kn5) {
     _kn5Entries.Add(new Kn5Entry {
         Filename = filename,
         Kn5 = kn5
     });
 }
 public AmbientShadowKn5ObjectRenderer(Kn5 kn5, string carLocation = null) {
     _kn5 = kn5;
     _carHelper = new CarHelper(_kn5, carLocation);
     _scene = new RenderableList();
 }