Skip to content
This repository was archived by the owner on Jan 12, 2026. It is now read-only.

Commit 51ca600

Browse files
committed
Byte[] dynamic asset
1 parent ec1270c commit 51ca600

File tree

5 files changed

+36
-28
lines changed

5 files changed

+36
-28
lines changed

src/Rive.Maui/DynamicAsset.cs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,8 @@ namespace Rive.Maui;
22

33
public class DynamicAsset
44
{
5-
public DynamicAsset()
6-
{
7-
}
8-
9-
public DynamicAsset(string name, string filename, string extension)
10-
{
11-
Name = name;
12-
Filename = filename;
13-
Extension = extension;
14-
}
15-
165
public required string Name { get; set; }
17-
public required string Filename { get; set; }
18-
public required string Extension { get; set; }
6+
public string? Filename { get; set; }
7+
public string? FileExtension { get; set; }
8+
public byte[]? FileBytes { get; set; }
199
}

src/Rive.Maui/EventReceivedArgs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
namespace Rive.Maui;
22

3-
public record EventReceivedArgs(string Name, RivePlayerEvent Type, Dictionary<string, object>? Properties);
3+
public record StateMachineEventReceivedArgs(string Name, RivePlayerEvent Type, Dictionary<string, object>? Properties);

src/Rive.Maui/Platforms/Android/AssetLoader.cs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,39 @@ public override bool LoadContents(FileAsset asset, byte[] inBandBytes)
2020
if (dynamicAsset == null)
2121
return false;
2222

23-
var resourceIdentifier = _context.Resources?.GetIdentifier(dynamicAsset.Filename, "drawable", _context.PackageName) ?? 0;
24-
if (resourceIdentifier == 0)
25-
return false;
23+
byte[]? newData = null;
24+
if (!string.IsNullOrWhiteSpace(dynamicAsset.Filename))
25+
{
26+
var resourceIdentifier = _context.Resources?.GetIdentifier(dynamicAsset.Filename, "drawable", _context.PackageName) ?? 0;
27+
if (resourceIdentifier == 0)
28+
return false;
2629

27-
using var stream = _context.Resources?.OpenRawResource(resourceIdentifier);
28-
if (stream == null)
29-
return false;
30+
using var stream = _context.Resources?.OpenRawResource(resourceIdentifier);
31+
if (stream == null)
32+
return false;
3033

31-
using var memoryStream = new MemoryStream();
32-
stream.CopyTo(memoryStream);
34+
using var memoryStream = new MemoryStream();
35+
stream.CopyTo(memoryStream);
36+
37+
newData = memoryStream.ToArray();
38+
}
39+
40+
if (dynamicAsset.FileBytes != null)
41+
newData = dynamicAsset.FileBytes;
42+
43+
if (newData == null)
44+
return false;
3345

3446
switch (asset)
3547
{
3648
case ImageAsset imageAsset:
37-
imageAsset.Decode(memoryStream.ToArray());
49+
imageAsset.Decode(newData);
3850
return true;
3951
case FontAsset fontAsset:
40-
fontAsset.Decode(memoryStream.ToArray());
52+
fontAsset.Decode(newData);
4153
return true;
4254
case AudioAsset audioAsset:
43-
audioAsset.Decode(memoryStream.ToArray());
55+
audioAsset.Decode(newData);
4456
return true;
4557
default:
4658
return false;

src/Rive.Maui/Platforms/Android/EventListener.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void NotifyEvent(RiveEvent evt)
2121

2222
var properties = evt.Properties
2323
.ToDictionary<KeyValuePair<string, Object>, string, object>(k => k.Key, k => k.Value);
24-
var args = new EventReceivedArgs(evt.Name, type, properties);
24+
var args = new StateMachineEventReceivedArgs(evt.Name, type, properties);
2525

2626
virtualView.EventReceivedManager.HandleEvent(this, args, nameof(RivePlayer.EventReceived));
2727
virtualView.EventReceivedCommand?.Execute(args);

src/Rive.Maui/Platforms/iOS/CustomRiveView.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,13 @@ public void SetRiveResource(string? resourceName)
5757
if (dynamicAsset == null)
5858
return false;
5959

60-
var newData = GetNSDataForResource(dynamicAsset.Filename, dynamicAsset.Extension);
60+
NSData? newData = null;
61+
if (!string.IsNullOrWhiteSpace(dynamicAsset.Filename) && !string.IsNullOrWhiteSpace(dynamicAsset.FileExtension))
62+
newData = GetNSDataForResource(dynamicAsset.Filename, dynamicAsset.FileExtension);
63+
64+
if (dynamicAsset.FileBytes != null)
65+
newData = NSData.FromArray(dynamicAsset.FileBytes);
66+
6167
if (newData == null)
6268
return false;
6369

@@ -165,7 +171,7 @@ private void Tick()
165171
{
166172
var properties = evt.Properties
167173
?.ToDictionary<KeyValuePair<NSString, NSObject>, string, object>(k => k.Key, k => k.Value);
168-
var args = new EventReceivedArgs(evt.Name, (RivePlayerEvent)evt.Type, properties);
174+
var args = new StateMachineEventReceivedArgs(evt.Name, (RivePlayerEvent)evt.Type, properties);
169175
control.EventReceivedManager.HandleEvent(this, args, nameof(RivePlayer.EventReceived));
170176
control.EventReceivedCommand?.Execute(args);
171177
}

0 commit comments

Comments
 (0)