示例#1
0
        public MonoBehaviorAssetData(BinaryReader reader, int length)
        {
            int startOffset = (int)reader.BaseStream.Position;

            gameObject = new AssetPtr(reader);
            enabled    = reader.ReadInt32();
            script     = new AssetPtr(reader);
            name       = reader.ReadAlignedString();
            int headerLen = (int)reader.BaseStream.Position - startOffset;

            switch (script.pathID)
            {
            case LevelBehaviorData.PathID:
                data = new LevelBehaviorData(reader, length - headerLen);
                break;

            case LevelCollectionBehaviorData.PathID:
                data = new LevelCollectionBehaviorData(reader, length - headerLen);
                break;

            case BeatmapDataBehaviorData.PathID:
                data = new BeatmapDataBehaviorData(reader, length - headerLen);
                break;

            default:
                data = new UnknownBehaviorData(reader, length - headerLen);
                break;
            }
        }
示例#2
0
        public BeatmapDifficulty ToAssets(
            SerializedAssets.Transaction assets,
            string levelFolderPath,
            string levelID,
            Characteristic characteristic
            )
        {
            string beatmapFile          = Path.Combine(levelFolderPath, _beatmapFilename);
            var    beatmapData          = BeatmapDataBehaviorData.FromJsonFile(beatmapFile, assets.apkVersion);
            string characteristicPart   = ((characteristic == Characteristic.Standard) ? "" : characteristic.ToString());
            string assetName            = levelID + characteristicPart + _difficulty.ToString() + "BeatmapData";
            MonoBehaviorAssetData monob = new MonoBehaviorAssetData()
            {
                script = assets.scriptIDToScriptPtr[BeatmapDataBehaviorData.ScriptID],
                name   = assetName,
                data   = beatmapData,
            };
            AssetPtr assetPtr = assets.AppendAsset(monob);

            return(new BeatmapDifficulty()
            {
                difficulty = (int)_difficulty,
                difficultyRank = _difficultyRank,
                noteJumpMovementSpeed = _noteJumpMovementSpeed,
                noteJumpStartBeatOffset = _noteJumpStartBeatOffset,
                beatmapData = assetPtr,
            });
        }
示例#3
0
        public static SpriteAssetData CreateSprite(SerializedAssets assets, AssetPtr customTexture)
        {
            // Default Sprite
            ulong pd = 45;
            var   sp = assets.GetAssetAt(pd);

            if (!sp.data.GetType().Equals(typeof(SpriteAssetData)))
            {
                Console.WriteLine($"[ERROR] Default Sprite data does not exist at PathID: {pd} instead it has Type {sp.data.GetType()} with TypeID: {sp.typeID} and classid: {assets.types[sp.typeID].classID}");
            }
            var sprite = sp.data as SpriteAssetData;

            return(new SpriteAssetData()
            {
                name = "CustomPackCover",
                texture = customTexture,
                atlasTags = sprite.atlasTags,
                extrude = sprite.extrude,
                floats = sprite.floats,
                guid = sprite.guid,
                isPolygon = sprite.isPolygon,
                second = sprite.second,
                spriteAtlas = sprite.spriteAtlas,
                bytesAfterTexture = sprite.bytesAfterTexture
            });
        }
示例#4
0
        public AssetPtr AddToAssets(SerializedAssets.Transaction assets, Apk.Transaction apk, string levelID)
        {
            // var watch = System.Diagnostics.Stopwatch.StartNew();
            AudioClipAssetData audioClip    = CreateAudioAsset(apk, levelID);
            AssetPtr           audioClipPtr = assets.AppendAsset(audioClip);

            string             coverPath = Path.Combine(levelFolderPath, _coverImageFilename);
            Texture2DAssetData cover     = Texture2DAssetData.CoverFromImageFile(coverPath, levelID);
            AssetPtr           coverPtr  = assets.AppendAsset(cover);

            AssetPtr environment = new AssetPtr(20, 1); // default environment

            switch (_environmentName)
            {
            case "NiceEnvironment":
                environment = new AssetPtr(38, 3);
                break;

            case "TriangleEnvironment":
                environment = new AssetPtr(0, 252);
                break;

            case "BigMirrorEnvironment":
                environment = new AssetPtr(0, 249);
                break;
            }

            LevelBehaviorData level = new LevelBehaviorData()
            {
                levelID          = levelID,
                songName         = _songName,
                songSubName      = _songSubName,
                songAuthorName   = _songAuthorName,
                levelAuthorName  = _levelAuthorName,
                beatsPerMinute   = _beatsPerMinute,
                songTimeOffset   = _songTimeOffset,
                shuffle          = _shuffle,
                shufflePeriod    = _shufflePeriod,
                previewStartTime = _previewStartTime,
                previewDuration  = _previewDuration,

                audioClip   = audioClipPtr,
                coverImage  = coverPtr,
                environment = environment,

                difficultyBeatmapSets = _difficultyBeatmapSets.Select(s => s.ToAssets(assets, levelFolderPath, levelID)).Where(s => s != null).ToList(),
            };

            MonoBehaviorAssetData monob = new MonoBehaviorAssetData()
            {
                script = new AssetPtr(1, LevelBehaviorData.PathID),
                name   = level.levelID + "Level",
                data   = level,
            };

            // watch.Stop();
            // Console.WriteLine("song: " + watch.ElapsedMilliseconds);

            return(assets.AppendAsset(monob));
        }
示例#5
0
 public BeatmapDifficulty(BinaryReader reader)
 {
     difficulty              = reader.ReadInt32();
     rank                    = reader.ReadInt32();
     noteJumpMovementSpeed   = reader.ReadSingle();
     noteJumpStartBeatOffset = reader.ReadInt32();
     beatmapData             = new AssetPtr(reader);
 }
示例#6
0
 public LevelBehaviorData(BinaryReader reader, int length)
 {
     levelID          = reader.ReadAlignedString();
     songName         = reader.ReadAlignedString();
     subName          = reader.ReadAlignedString();
     authorName       = reader.ReadAlignedString();
     levelAuthor      = reader.ReadAlignedString();
     audioClip        = new AssetPtr(reader);
     bpm              = reader.ReadSingle();
     timeOffset       = reader.ReadSingle();
     shuffle          = reader.ReadSingle();
     shufflePeriod    = reader.ReadSingle();
     previewStartTime = reader.ReadSingle();
     previewDuration  = reader.ReadSingle();
     coverImage       = new AssetPtr(reader);
     environment      = new AssetPtr(reader);
     sets             = reader.ReadPrefixedList(r => new BeatmapSet(r));
 }
示例#7
0
        public BeatmapDifficulty ToAssets(
            SerializedAssets assets,
            string levelFolderPath,
            string levelID,
            Characteristic characteristic
            )
        {
            string          beatmapFile = Path.Combine(levelFolderPath, _beatmapFilename);
            string          jsonData    = File.ReadAllText(beatmapFile);
            BeatmapSaveData saveData    = JsonConvert.DeserializeObject <BeatmapSaveData>(jsonData);

            byte[] projectedData = saveData.SerializeToBinary();

            BeatmapDataBehaviorData beatmapData = new BeatmapDataBehaviorData()
            {
                jsonData      = "",
                signature     = new byte[128], // all zeros
                projectedData = projectedData,
            };
            string characteristicPart   = ((characteristic == Characteristic.Standard) ? "" : characteristic.ToString());
            string assetName            = levelID + characteristicPart + _difficulty.ToString() + "BeatmapData";
            MonoBehaviorAssetData monob = new MonoBehaviorAssetData()
            {
                script = new AssetPtr(1, BeatmapDataBehaviorData.PathID),
                name   = assetName,
                data   = beatmapData,
            };
            AssetPtr assetPtr = assets.AppendAsset(monob);

            return(new BeatmapDifficulty()
            {
                difficulty = (int)_difficulty,
                difficultyRank = _difficultyRank,
                noteJumpMovementSpeed = _noteJumpMovementSpeed,
                noteJumpStartBeatOffset = _noteJumpStartBeatOffset,
                beatmapData = assetPtr,
            });
        }
示例#8
0
 public BeatmapSet(BinaryReader reader)
 {
     characteristic = new AssetPtr(reader);
     difficulties   = reader.ReadPrefixedList(r => new BeatmapDifficulty(r));
 }
示例#9
0
 public MonoBehaviorAssetData()
 {
     gameObject = new AssetPtr(0, 0);
     enabled    = 1;
 }