Beispiel #1
0
        public void WriteTrack(string path, string password = null)
        {
            using (BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)))
            {
                // TRACK INFO
                writer.Write(TrackInfo.Name);
                writer.Write(TrackInfo.Author);
                writer.Write(TrackInfo.ImageLen);
                if (TrackInfo.Image != null)
                {
                    writer.Write(TrackInfo.Image);
                }
                writer.Write(TrackInfo.SliderValue);
                writer.Write(password != null); // write TRUE if password is not null

                // ASSETS
                writer.Write(Assets.Count);
                foreach (var asset in Assets)
                {
                    var basset = AssetConverter.ConvertToBinaryAsset(asset);
                    if (password != null)
                    {
                        basset.EncryptBytes(password);
                    }
                    basset.WriteBinaryAsset(writer);
                }
            }
        }
Beispiel #2
0
        private byte[] ConvertWorld(ImportedObject obj)
        {
            var world = new NwWorld();

            {
                var texs = new List <NwTexture2D>();
                foreach (var t in obj.Textures)
                {
                    var bm = AssetConverter.ToNwTexture2D(t.SrcBitmap, t.Name);
                    texs.Add(bm);
                }

                var cubes = new List <NwCubemap>();
                cubes.Add(AssetConverter.ToNwTextureCube(new Bitmap[]
                {
                    Resources.posx2,
                    Resources.posy2,
                    Resources.posz2,
                    Resources.negx2,
                    Resources.negy2,
                    Resources.negz2,
                }, null));

                var mats = new List <NwMaterial>();
                foreach (var m in obj.Materials)
                {
                    var mat = AssetConverter.ToNwMaterial(m, m.Name, ref texs, ref cubes);
                    mats.Add(mat);
                }
                world.Texture2Ds = texs.ToArray();
                world.Cubemaps   = cubes.ToArray();
                world.Materials  = mats.ToArray();

                var meshes = new List <NwMesh>();
                foreach (var mesh in obj.Meshes)
                {
                    meshes.Add(AssetConverter.ToNwMesh(mesh));
                }
                world.Meshes = meshes.ToArray();

                var colMeshes = new List <NwColliderMesh>();
                foreach (var mesh in obj.Meshes)
                {
                    colMeshes.Add(AssetConverter.ToNwColliderMesh(mesh));
                }
                world.ColliderMeshes = colMeshes.ToArray();

                world.Environments    = new NwEnvironment[1];
                world.Environments[0] = new NwEnvironment()
                {
                    EnvMap = world.Cubemaps[0].Hash,
                };
            }
            var json = Util.SerializeJson(world);
            var comp = Util.Compress(Encoding.UTF8.GetBytes(json));

            return(comp);
        }
Beispiel #3
0
        public override IFileRepository ForDefaultCulture()
        {
            var assetConverter        = new AssetConverter();
            var identifiersConverter  = new CollectionResponseConverter <string, string>(new ConverterAdapter <string>());
            var responseConverter     = new ResponseConverter <FileDTO, Asset>(assetConverter);
            var bulkResponseConverter = new DictionaryRangeResponseConverter <FileDTO, string, Asset>(assetConverter, value => value.Identifier);
            var pageResponseConverter = new CollectionPageResponseConverter <FileDTO, Asset>(assetConverter);

            return(new FileRepository(this.serviceClient, identifiersConverter, responseConverter, bulkResponseConverter, pageResponseConverter));
        }
Beispiel #4
0
        private NwObject ConvertObject(ImportedObject obj)
        {
            var o = new NwObject();

            {
                o.Name        = obj.Name;
                o.Description = obj.Description;
                o.Version     = obj.Version;
                o.Editor      = obj.Editor;
                o.EditorURL   = obj.EditorURL;

                var texs = new List <NwTexture2D>();
                foreach (var t in obj.Textures)
                {
                    var bm = AssetConverter.ToNwTexture2D(t.SrcBitmap, t.Name);
                    texs.Add(bm);
                }

                var cubes = new List <NwCubemap>();

                var mats = new List <NwMaterial>();
                foreach (var m in obj.Materials)
                {
                    var mat = AssetConverter.ToNwMaterial(m, m.Name, ref texs, ref cubes);
                    mats.Add(mat);
                }
                o.Texture2Ds = texs.ToArray();
                o.Cubemaps   = cubes.ToArray();
                o.Materials  = mats.ToArray();

                if (obj.Bones != null)
                {
                    var bones = new List <NwBone>();

                    foreach (var b in obj.Bones)
                    {
                        var bone = AssetConverter.ToNwBone(b);
                        bones.Add(bone);
                    }
                    o.Bones = bones.ToArray();
                }


                o.Mesh = AssetConverter.ToNwMesh(obj.Meshes[0]);

                o.CollisionShape = new NwCollisionCapsule()
                {
                    Height = 1.6f,
                    Radius = 0.3f,
                };

                o.PhysicalMaterial = new NwPhysicalMaterial();
            }
            return(o);
        }
        private NwCharacter ConvertCharacter(ImportedObject obj)
        {
            var c = new NwCharacter();

            {
                c.Name        = obj.Name;
                c.Description = obj.Description;
                c.Version     = obj.Version;
                c.Editor      = obj.Editor;
                c.EditorURL   = obj.EditorURL;

                var texs = new List <NwTexture2D>();
                foreach (var t in obj.Textures)
                {
                    var bm = AssetConverter.ToNwTexture2D(t.SrcBitmap, t.Name);
                    texs.Add(bm);
                }

                var cubes = new List <NwCubemap>();

                var mats = new List <NwMaterial>();
                foreach (var m in obj.Materials)
                {
                    var mat = AssetConverter.ToNwMaterial(m, m.Name, ref texs, ref cubes);
                    mats.Add(mat);
                }
                c.Texture2Ds = texs.ToArray();
                c.Cubemaps   = cubes.ToArray();
                c.Materials  = mats.ToArray();

                var bones = new List <NwBone>();
                foreach (var b in obj.Bones)
                {
                    var bone = AssetConverter.ToNwBone(b);
                    bones.Add(bone);
                }
                c.Bones = bones.ToArray();

                c.Mesh = AssetConverter.ToNwMesh(obj.Meshes[0]);

                c.CollisionShape = new NwCollisionCapsule()
                {
                    Height = 1.6f,
                    Radius = 0.3f,
                };

                c.Mass = 50.0f;
            }
            return(c);
        }
Beispiel #6
0
        public void OnObjectLoaded(NwObject obj)
        {
            var wo = AssetConverter.FromNwObject(obj);

            MMW.Invoke(() =>
            {
                wo.Load();

                var go = CreateGameObject(wo, wo.Name, "Deferred Physical");
                go.AddComponent <CollisionRenderer>();
                MMW.RegistGameObject(go);

                gameObj = go;
            });
        }
Beispiel #7
0
        public void OnCharacterLoaded(NwCharacter ch)
        {
            var chara = AssetConverter.FromNwCharacter(ch);

            MMW.Invoke(() =>
            {
                chara.Load();

                var go = CreateGameObject(chara, chara.Name, "Deferred Physical");
                go.AddComponent <CollisionRenderer>();
                MMW.RegistGameObject(go);

                gameObj = go;
            });
        }
Beispiel #8
0
        private byte[] ConvertCharacter(ImportedObject obj)
        {
            var ch = new NwCharacter();

            {
                ch.Name = obj.Name;

                var texs = new List <NwTexture2D>();
                foreach (var t in obj.Textures)
                {
                    var bm = AssetConverter.ToNwTexture2D(t.SrcBitmap, t.Name);
                    texs.Add(bm);
                }

                var cubes = new List <NwCubemap>();

                var mats = new List <NwMaterial>();
                foreach (var m in obj.Materials)
                {
                    var mat = AssetConverter.ToNwMaterial(m, m.Name, ref texs, ref cubes);
                    mats.Add(mat);
                }
                ch.Texture2Ds = texs.ToArray();
                ch.Cubemaps   = cubes.ToArray();
                ch.Materials  = mats.ToArray();

                var bones = new List <NwBone>();
                foreach (var b in obj.Bones)
                {
                    var bone = AssetConverter.ToNwBone(b);
                    bones.Add(bone);
                }
                ch.Bones = bones.ToArray();

                ch.Mesh = AssetConverter.ToNwMesh(obj.Meshes[0]);

                //ch.Height = 1.6f;
                //ch.WidthRadius = 0.3f;
                ch.EyePosition = new Vector3f(0.0f, 1.42f, 0.2f);
                ch.Mass        = 50.0f;
            }

            var json = Util.SerializeJson(ch);
            var comp = Util.Compress(Encoding.UTF8.GetBytes(json));

            return(comp);
        }
Beispiel #9
0
        public static void AssetConverterInit()
        {
            // use concrete asset for concrete extension
            AssetConverter.RegisterExtension <TextAsset>(".txt");
            AssetConverter.RegisterExtension <DocAsset>(".doc");
            AssetConverter.RegisterExtension <DocAsset>(".docx");
            AssetConverter.RegisterExtension <JpgAsset>(".jpg");
            AssetConverter.RegisterExtension <PngAsset>(".png");
            AssetConverter.RegisterExtension <PdfAsset>(".pdf");

            // for concrete asset use concrete asset converter
            AssetConverter.RegisterConverter <TextAsset, TextAssetConverter>();
            AssetConverter.RegisterConverter <WebAsset, TextAssetConverter>();
            AssetConverter.RegisterConverter <JpgAsset, ImageAssetConverter>();
            AssetConverter.RegisterConverter <PngAsset, ImageAssetConverter> ();
            AssetConverter.RegisterConverter <PdfAsset, PdfAssetConverter>();
        }
    void Test <T>(AssetId id,
                  AssetId[] prerequisites,
                  Func <T, ISerializer, T> serdes,
                  Func <T, T> canonicalize = null) where T : class
    {
        prerequisites ??= Array.Empty <AssetId>();
        var allIds = prerequisites.Append(id);

        var resultsDir = Path.Combine(_baseDir, "re", "ConversionTests");

        var baseAsset = (T)_baseApplier.LoadAsset(id);

        if (canonicalize != null)
        {
            baseAsset = canonicalize(baseAsset);
        }

        var(baseBytes, baseNotes) = Asset.Save(baseAsset, serdes);
        var baseJson = Asset.SaveJson(baseAsset, JsonUtil);

        var idStrings  = allIds.Select(x => $"{x.Type}.{x.Id}").ToArray();
        var assetTypes = allIds.Select(x => x.Type).Distinct().ToHashSet();

        var mapping = AssetMapping.Global;

        using (var unpacker = new AssetConverter(
                   mapping,
                   _disk,
                   JsonUtil,
                   new[] { BaseAssetMod },
                   UnpackedAssetMod))
        {
            unpacker.Convert(idStrings, assetTypes, null);
        }

        var unpackedAsset = (T)BuildApplier(UnpackedAssetMod, AssetMapping.Global).LoadAsset(id);

        Assert.NotNull(unpackedAsset);
        var(unpackedBytes, unpackedNotes) = Asset.Save(unpackedAsset, serdes);
        var unpackedJson = Asset.SaveJson(unpackedAsset, JsonUtil);

        Asset.Compare(resultsDir,
                      id.ToString(),
                      baseBytes,
                      unpackedBytes,
                      new[]
        /// <summary>
        /// Collects info about data and injects it into track's assets list.
        /// </summary>
        public void RegisterAssets(Track track)
        {
            try
            {
                var filePaths = NTDFiles.Items;
                foreach (string file in filePaths)
                {
                    // WEB ASSET
                    if (Regex.IsMatch(file, WebAssetPattern))
                    {
                        Match  m   = Regex.Match(file, WebAssetPattern);
                        string url = m.Groups[1].Value;

                        WebAsset webAsset = new WebAsset(url);
                        track.Assets.Add(webAsset);
                        continue;
                    }

                    // MODIFY
                    if (_modifyMode)
                    {
                        Match m = Regex.Match(file, ModifyTrackPattern);
                        if (m.Success)
                        {
                            int indexOfAsset = int.Parse(m.Groups[1].Value) - 1;
                            track.Assets.Add(_track.Assets[indexOfAsset]);
                            continue;
                        }
                    }

                    // OTHER FILES
                    FileInfo fi    = new FileInfo(file);
                    Type     type  = AssetConverter.GetAssetTypeByExtension(fi.Extension);
                    var      bytes = File.ReadAllBytes(file);

                    var basset = new BinaryAsset(type, bytes);
                    var asset  = AssetConverter.ResolveBinaryAsset(basset);
                    track.Assets.Add(asset);
                }
            } catch (Exception e)
            {
                throw new ForUserException(
                          "A Problem occured during registering assets. Details: " + e.Message);
            }
        }
Beispiel #12
0
        protected override void OnLoad()
        {
            var decomp = Util.Decompress(Resources.coin_cupper);
            var data   = Util.DeserializeJson <NwObject>(Encoding.UTF8.GetString(decomp));

            cupperCoin             = AssetConverter.FromNwObject(data);
            cupperCoin.Purchasable = false;
            cupperCoin.Hash        = Util.ComputeHash(Resources.coin_cupper, 12);
            cupperCoin.Load();

            decomp                 = Util.Decompress(Resources.coin_silver);
            data                   = Util.DeserializeJson <NwObject>(Encoding.UTF8.GetString(decomp));
            silverCoin             = AssetConverter.FromNwObject(data);
            silverCoin.Purchasable = false;
            silverCoin.Hash        = Util.ComputeHash(Resources.coin_silver, 12);
            silverCoin.Load();

            decomp               = Util.Decompress(Resources.coin_gold);
            data                 = Util.DeserializeJson <NwObject>(Encoding.UTF8.GetString(decomp));
            goldCoin             = AssetConverter.FromNwObject(data);
            goldCoin.Purchasable = false;
            goldCoin.Hash        = Util.ComputeHash(Resources.coin_gold, 12);
            goldCoin.Load();

            var wr = MMW.GetAsset <WorldResources>();

            wr.Objects.Add(cupperCoin.Hash, cupperCoin);
            wr.Objects.Add(silverCoin.Hash, silverCoin);
            wr.Objects.Add(goldCoin.Hash, goldCoin);

            var mr = GameObject.GetComponent <MeshRenderer>();

            bounds = mr.Mesh.Bounds;

            var size = bounds.Size.X * bounds.Size.Z;

            if (size > 400.0f)
            {
                maxCoin = (int)Math.Log10(size);
            }

            userData = MMW.GetAsset <UserData>();
            time     = userData.CoinSpownTime;
        }
Beispiel #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="nsPath"></param>
        /// <returns></returns>
        public static Track ReadTrack(string nsPath)
        {
            try
            {
                Track t = new Track();
                using (BinaryReader reader = new BinaryReader(File.OpenRead(nsPath)))
                {
                    // TRACK INFO
                    t.TrackInfo.Name        = reader.ReadString();
                    t.TrackInfo.Author      = reader.ReadString();
                    t.TrackInfo.ImageLen    = reader.ReadInt32();
                    t.TrackInfo.Image       = reader.ReadBytes(t.TrackInfo.ImageLen);
                    t.TrackInfo.SliderValue = reader.ReadDouble();
                    t.TrackInfo.Encrypted   = reader.ReadBoolean();

                    string password = null;
                    if (t.TrackInfo.Encrypted)
                    {
                        var dialog = InfoDialog.ShowValueDialog("Enter the password:"******"Fail with interpreting the track.");
            }
        }
Beispiel #14
0
        private byte[] ConvertObject(ImportedObject obj)
        {
            var o = new NwObject();

            {
                o.Name = obj.Name;

                var texs = new List <NwTexture2D>();
                foreach (var t in obj.Textures)
                {
                    var bm = AssetConverter.ToNwTexture2D(t.SrcBitmap, t.Name);
                    texs.Add(bm);
                }

                var cubes = new List <NwCubemap>();

                var mats = new List <NwMaterial>();
                foreach (var m in obj.Materials)
                {
                    var mat = AssetConverter.ToNwMaterial(m, m.Name, ref texs, ref cubes);
                    mats.Add(mat);
                }
                o.Texture2Ds = texs.ToArray();
                o.Cubemaps   = cubes.ToArray();
                o.Materials  = mats.ToArray();
                o.Mesh       = AssetConverter.ToNwMesh(obj.Meshes[0]);

                //o.Height = 1.6f;
                //o.WidthRadius = 0.3f;

                o.PhysicalMaterial = new NwPhysicalMaterial();
            }
            var json = Util.SerializeJson(o);
            var comp = Util.Compress(Encoding.UTF8.GetBytes(json));

            return(comp);
        }
Beispiel #15
0
        /// <summary>
        /// Execute the machine to process its contents
        /// </summary>
        public void Execute()
        {
            // get the asset type
            var type = AssetConverter.ExtractType(_asset);

            // switch execution based on the asset type
            switch (type)
            {
            case Data.AssetType.Surface:
                Execute_Surface();
                break;

            case Data.AssetType.Prop:
                Execute_Prop();
                break;

            case Data.AssetType.Plant:
                Execute_Prop();
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
Beispiel #16
0
 /// <summary>
 /// Converts a texture to a TextureInformation
 /// </summary>
 /// <param name="texture"></param>
 /// <returns></returns>
 public static TextureInformation ToTextureInformation(this Texture texture)
 {
     return(AssetConverter.ExtractInformation(texture));
 }
Beispiel #17
0
    static void Main(string[] args)
    {
#if DEBUG
        PerfTracker.IsTracing = true;
#endif
        PerfTracker.StartupEvent("Entered main");
        AssetSystem.LoadEvents();
        PerfTracker.StartupEvent("Built event parsers");

        var commandLine = new CommandLineOptions(args);
        if (commandLine.Mode == ExecutionMode.Exit)
        {
            return;
        }

        PerfTracker.StartupEvent($"Running as {commandLine.Mode}");
        var disk     = new FileSystem();
        var jsonUtil = new FormatJsonUtil();

        var baseDir = ConfigUtil.FindBasePath(disk);
        if (baseDir == null)
        {
            throw new InvalidOperationException("No base directory could be found.");
        }

        PerfTracker.StartupEvent($"Found base directory {baseDir}");

        if (commandLine.Mode == ExecutionMode.ConvertAssets)
        {
            using var converter = new AssetConverter(
                      AssetMapping.Global,
                      disk,
                      jsonUtil,
                      commandLine.ConvertFrom,
                      commandLine.ConvertTo);

            converter.Convert(
                commandLine.DumpIds,
                commandLine.DumpAssetTypes,
                commandLine.ConvertFilePattern);

            return;
        }

        var(exchange, services) = AssetSystem.SetupAsync(baseDir, AssetMapping.Global, disk, jsonUtil).Result;
        IRenderPass mainPass = null;
        if (commandLine.NeedsEngine)
        {
            mainPass = BuildEngine(commandLine, exchange);
        }

        services.Add(new StdioConsoleReader());

        var assets = exchange.Resolve <IAssetManager>();
        AutodetectLanguage(exchange, assets);

        switch (commandLine.Mode) // ConvertAssets handled above as it requires a specialised asset system setup
        {
        case ExecutionMode.Game: Albion.RunGame(exchange, services, mainPass, baseDir, commandLine); break;

        case ExecutionMode.BakeIsometric: IsometricTest.Run(exchange, commandLine); break;

        case ExecutionMode.DumpData:
            PerfTracker.BeginFrame();     // Don't need to show verbose startup logging while dumping
            var tf = new TextFormatter();
            exchange.Attach(tf);
            var parsedIds = commandLine.DumpIds?.Select(AssetId.Parse).ToArray();

            if ((commandLine.DumpFormats & DumpFormats.Json) != 0)
            {
                var dumper = new DumpJson();
                exchange.Attach(dumper);
                dumper.Dump(baseDir, commandLine.DumpAssetTypes, parsedIds);
                dumper.Remove();
            }

            if ((commandLine.DumpFormats & DumpFormats.Text) != 0)
            {
                var dumper = new DumpText();
                exchange.Attach(dumper);
                dumper.Dump(baseDir, commandLine.DumpAssetTypes, parsedIds);
                dumper.Remove();
            }

            if ((commandLine.DumpFormats & DumpFormats.Png) != 0)
            {
                var dumper = new DumpGraphics(commandLine.DumpFormats);
                exchange.Attach(dumper);
                dumper.Dump(baseDir, commandLine.DumpAssetTypes, parsedIds);
                dumper.Remove();
            }

            if ((commandLine.DumpFormats & DumpFormats.Annotated) != 0)
            {
                var dumper = new DumpAnnotated();
                exchange.Attach(dumper);
                dumper.Dump(baseDir, commandLine.DumpAssetTypes, parsedIds);
                dumper.Remove();
            }

            //if ((commandLine.DumpFormats & DumpFormats.Tiled) != 0)
            //    DumpTiled.Dump(baseDir, assets, commandLine.DumpAssetTypes, parsedIds);
            break;

        case ExecutionMode.Exit: break;
        }

        Console.WriteLine("Exiting");
        exchange.Dispose();
    }
        public void Init()
        {
            loggerMock = new Mock <ILogger <AssetConverter> >();

            assetConverter = new AssetConverter(loggerMock.Object);
        }
Beispiel #19
0
 /// <summary>
 /// Converts a <see cref="Geometry"/> to a <see cref="GeometryInformation"/>
 /// </summary>
 /// <param name="geometry"></param>
 /// <returns></returns>
 public static GeometryInformation ToGeometryInformation(this Geometry geometry)
 {
     return(AssetConverter.ExtractInformation(geometry));
 }