Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Banane9 committed Jan 11, 2025
1 parent 9c5bab9 commit 402ae6d
Show file tree
Hide file tree
Showing 2 changed files with 100 additions and 5 deletions.
11 changes: 6 additions & 5 deletions CommunityBugFixCollection/CommunityBugFixCollection.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,12 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Resonite.Elements.Assets" Version="1.2.2" />
<PackageReference Include="Resonite.Elements.Core" Version="1.4.2" />
<PackageReference Include="Resonite.Elements.Quantity" Version="1.2.2" />
<PackageReference Include="Resonite.FrooxEngine" Version="2024.11.21.479" />
<PackageReference Include="Resonite.ProtoFluxBindings" Version="2024.13.19.479" />
<PackageReference Include="Resonite.Elements.Assets" Version="1.2.3" />
<PackageReference Include="Resonite.Elements.Core" Version="1.4.3" />
<PackageReference Include="Resonite.Elements.Quantity" Version="1.2.3" />
<PackageReference Include="Resonite.FrooxEngine" Version="2025.1.12.1412" />
<PackageReference Include="Resonite.FrooxEngine.Store" Version="1.0.3" />
<PackageReference Include="Resonite.ProtoFluxBindings" Version="2025.3.9.1412" />
<PackageReference Include="Resonite.SkyFrost.Base" Version="2.1.0" />
<PackageReference Include="Resonite.SkyFrost.Base.Models" Version="2.1.0" />
</ItemGroup>
Expand Down
94 changes: 94 additions & 0 deletions CommunityBugFixCollection/ImportMultipleAudioFiles.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
using Elements.Assets;
using Elements.Core;
using FrooxEngine;
using FrooxEngine.Store;
using FrooxEngine.Undo;
using HarmonyLib;
using MonkeyLoader.Resonite;
using SkyFrost.Base;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CommunityBugFixCollection
{
[HarmonyPatchCategory(nameof(ImportMultipleAudioFiles))]
[HarmonyPatch(typeof(UniversalImporter), nameof(UniversalImporter.ImportTask))]
internal sealed class ImportMultipleAudioFiles : ResoniteMonkey<ImportMultipleAudioFiles>
{
public override bool CanBeDisabled => true;

private static async Task ImportAudioAsync(IEnumerable<string> files, World world, float3 position, floatQ rotation, float3 scale)
{
await default(ToWorld);

if (!world.CanSpawnObjects())
return;

var list = files.Where(s => s is not null)
.Select(s => s.Trim())
.ToList();

var count = list.Count;
var rowSize = MathX.Max(1, MathX.CeilToInt(MathX.Sqrt(count)));
var index = 0;

UniLog.Log($"Importing files with Asset Class {AssetClass.Audio}:\n" + string.Join("\n", list));

foreach (var file in list)
{
await default(ToWorld);

var slot = world.LocalUserSpace.AddSlot(Path.GetFileName(file));
slot.CreateSpawnUndoPoint();

var gridOffset = UniversalImporter.GridOffset(ref index, rowSize);
var direction = rotation * gridOffset;
var offset = direction * scale;

slot.GlobalPosition = position + offset;
slot.GlobalRotation = rotation;
slot.GlobalScale = scale;

await default(ToBackground);

Uri uri;
if (File.Exists(file))
uri = await world.Engine.LocalDB.ImportLocalAssetAsync(file, LocalDB.ImportLocation.Original);
else if (!Uri.TryCreate(file, UriKind.Absolute, out uri))
continue;

await default(ToWorld);

var audioPlayerInterface = await slot.SpawnEntity<AudioPlayerInterface, LegacyAudioPlayer>(FavoriteEntity.AudioPlayer);
audioPlayerInterface.InitializeEntity(Path.GetFileName(file));
audioPlayerInterface.SetSource(uri);

if (".wav".Equals(Path.GetExtension(file), StringComparison.OrdinalIgnoreCase))
{
audioPlayerInterface.SetType(AudioTypeGroup.SoundEffect, spatialize: true, 1f);
continue;
}

var audioTypeGroup = await UniversalImporter.DetectAudioTypeGroup(audioPlayerInterface.Clip.Target.Target);

var isMultimedia = audioTypeGroup == AudioTypeGroup.Multimedia;
audioPlayerInterface.SetType(audioTypeGroup, isMultimedia, isMultimedia ? 1 : 0);
}
}

private static bool Prefix(ref Task? __result, AssetClass assetClass, IEnumerable<string> files, World world, float3 position, floatQ rotation, float3 scale)
{
if (assetClass != AssetClass.Audio)
return true;

__result = ImportAudioAsync(files, world, position, rotation, scale);
return false;
}

private static bool Prepare() => Enabled;
}
}

0 comments on commit 402ae6d

Please sign in to comment.