Skip to content

Commit a1009f8

Browse files
committed
Merge commit 'ecda646189d1f7a1536277783b6e95dec4454cbe'
Fix problems with text parsing problems in Apple.CoreHaptics on iOS systems with Danish language (and others where decimal separator is ,).
1 parent fdc82ea commit a1009f8

File tree

12 files changed

+79
-14
lines changed

12 files changed

+79
-14
lines changed

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# CHANGELOG
22
All notable changes to this project will be documented in this file.
33

4+
## [1.3.0] - 2025-01-13
5+
### Changed
6+
- Pattern serialization supports systems that use commas for decimals
7+
48
## [1.2.3] - 2024-12-10
59
- Add Apache 2.0 license file.
610
- Remove out-of-date documentation file.
@@ -14,7 +18,7 @@ All notable changes to this project will be documented in this file.
1418
- Updating how Info.plist files are generated for native libraries.
1519
- Info.plist files are now each generated when libraries are built
1620
- Settings for the Info.plist file are configured in CoreHaptics.xcconfig
17-
- Updated projet to generate XML (human readable) for debug and binary for release when generating Info.plist
21+
- Updated project to generate XML (human readable) for debug and binary for release when generating Info.plist
1822
- Encoded version(s) in the xcconfig and generated Info.plist should align with the plug-in version reported in `package.json`
1923

2024
## [1.2.0] - 2024-02-23

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/CHHapticParameter.cs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using System;
2+
using System.Globalization;
23
using System.Runtime.InteropServices;
4+
using Apple.UnityJSON;
35

46
namespace Apple.CoreHaptics
57
{
68
[Serializable]
7-
public class CHHapticParameter : ICHHapticPatternEntry
9+
public class CHHapticParameter : ICHHapticPatternEntry, ISerializable
810
{
911
public CHHapticDynamicParameterID ParameterID;
1012
public float ParameterValue;
@@ -30,6 +32,16 @@ public CHHapticParameter(CHHapticDynamicParameterID parameterId, float parameter
3032
ParameterValue = parameterValue;
3133
Time = time;
3234
}
35+
36+
public string Serialize(Serializer serializer) {
37+
var ret = "{\n";
38+
ret += $"\t\t\t\t\"ParameterID\": \"{ParameterID}\",\n";
39+
ret += ((FormattableString)$"\t\t\t\t\"ParameterValue\": {ParameterValue},\n").ToString(CultureInfo.InvariantCulture);
40+
ret += ((FormattableString)$"\t\t\t\t\"Time\": {Time}\n").ToString(CultureInfo.InvariantCulture);
41+
42+
ret += "\t\t\t}\n";
43+
return ret;
44+
}
3345
}
3446

3547
/// <summary>

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/CHHapticParameterCurve.cs

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
using System;
2+
using System.Globalization;
23
using System.Collections.Generic;
34
using UnityEngine;
5+
using Apple.UnityJSON;
46

57
namespace Apple.CoreHaptics
68
{
79
[Serializable]
8-
public class CHHapticParameterCurve : ICHHapticPatternEntry
10+
public class CHHapticParameterCurve : ICHHapticPatternEntry, ISerializable
911
{
1012
public CHHapticDynamicParameterID ParameterID;
1113
public float Time;
@@ -32,5 +34,23 @@ public void UpdateControlPointsFromAnimationCurve(AnimationCurve curve)
3234
ParameterCurveControlPoints.Add(new CHHapticParameterCurveControlPoint(key.time, Mathf.Clamp(key.value, -1, 1)));
3335
}
3436
}
37+
38+
public string Serialize(Serializer serializer) {
39+
var ret = "{\n";
40+
ret += $"\t\t\t\t\"ParameterID\": \"{ParameterID}\",\n";
41+
ret += ((FormattableString)$"\t\t\t\t\"Time\": {Time},\n").ToString(CultureInfo.InvariantCulture);
42+
ret += $"\t\t\t\t\"ParameterCurveControlPoints\": [\n";
43+
for(int idx=0; idx<ParameterCurveControlPoints.Count; idx++) {
44+
ret += ParameterCurveControlPoints[idx].Serialize(serializer);
45+
if (idx < ParameterCurveControlPoints.Count+1) {
46+
ret += ",\n";
47+
} else {
48+
ret += "\n";
49+
}
50+
}
51+
ret += "\t\t\t\t]";
52+
ret += "\t\t\t}\n";
53+
return ret;
54+
}
3555
}
3656
}

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/CHHapticParameterCurveControlPoint.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using System;
2+
using System.Globalization;
23
using System.Runtime.InteropServices;
4+
using Apple.UnityJSON;
35

46
namespace Apple.CoreHaptics
57
{
68
[Serializable]
7-
public class CHHapticParameterCurveControlPoint
9+
public class CHHapticParameterCurveControlPoint : ISerializable
810
{
911
public float Time;
1012
public float ParameterValue;
@@ -16,6 +18,14 @@ public CHHapticParameterCurveControlPoint(float time, float parameterValue)
1618
Time = time;
1719
ParameterValue = parameterValue;
1820
}
21+
22+
public string Serialize(Serializer serializer) {
23+
var ret = "\t\t\t\t\t{\n";
24+
ret += ((FormattableString)$"\t\t\t\t\t\t\"Time\": {Time},\n").ToString(CultureInfo.InvariantCulture);
25+
ret += ((FormattableString)$"\t\t\t\t\t\t\"ParameterValue\": {ParameterValue}\n").ToString(CultureInfo.InvariantCulture);
26+
ret += "\t\t\t\t\t}";
27+
return ret;
28+
}
1929
}
2030

2131
/// <summary>

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/CHHapticPattern.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
using System;
22
using System.Collections.Generic;
3+
using static System.FormattableString;
4+
using System.Globalization;
35
using UnityEngine;
46
using Apple.UnityJSON;
57

@@ -75,7 +77,7 @@ public CHHapticPattern(string ahapText)
7577
public string Serialize(Serializer serializer)
7678
{
7779
var ret = "{\n";
78-
ret += $"\t\"Version\": {Version},\n";
80+
ret += ((FormattableString)$"\t\"Version\": {Version},\n").ToString(CultureInfo.InvariantCulture);
7981
if (Metadata.HasMetadata())
8082
{
8183
ret += $"\t\"Metadata\": {Metadata.ToJSONString()},\n";

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/HapticEvents/CHHapticAudioContinuousEvent.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using static System.FormattableString;
3+
using System.Globalization;
24
using Apple.UnityJSON;
35

46
namespace Apple.CoreHaptics
@@ -25,7 +27,7 @@ public CHHapticAudioContinuousEvent(CHHapticEvent e) {
2527
public override string Serialize(Serializer serializer) {
2628
var ret = "{\n";
2729
ret += SerializeTypeAndTime();
28-
ret += $",\n\t\t\t\t\"EventDuration\": {EventDuration}";
30+
ret += ((FormattableString)$",\n\t\t\t\t\"EventDuration\": {EventDuration}").ToString(CultureInfo.InvariantCulture);
2931

3032
ret += SerializeEventParams();
3133

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/HapticEvents/CHHapticAudioCustomEvent.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using static System.FormattableString;
3+
using System.Globalization;
24
using System.IO;
35

46
using Apple.UnityJSON;
@@ -84,7 +86,7 @@ public override string Serialize(Serializer serializer) {
8486
ret += SerializeTypeAndTime();
8587
ret += ",\n";
8688
if (EventDuration > 0) {
87-
ret += $"\t\t\t\t\"EventDuration\": {EventDuration},\n";
89+
ret += ((FormattableString)$"\t\t\t\t\"EventDuration\": {EventDuration},\n").ToString(CultureInfo.InvariantCulture);
8890
}
8991

9092
ret += $"\t\t\t\t\"EventWaveformPath\": \"{EventWaveformPath}\"";

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/HapticEvents/CHHapticContinuousEvent.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
using System;
2+
using static System.FormattableString;
3+
using System.Globalization;
4+
using UnityEngine;
25
using Apple.UnityJSON;
36

47
namespace Apple.CoreHaptics
@@ -25,7 +28,7 @@ public CHHapticContinuousEvent(CHHapticEvent e) {
2528
public override string Serialize(Serializer serializer) {
2629
var ret = "{\n";
2730
ret += SerializeTypeAndTime();
28-
ret += $",\n\t\t\t\t\"EventDuration\": {EventDuration}";
31+
ret += ((FormattableString)$",\n\t\t\t\t\"EventDuration\": {EventDuration}").ToString(CultureInfo.InvariantCulture);
2932

3033
ret += SerializeEventParams();
3134

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/PatternComponents/HapticEvents/CHHapticEvent.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
using System;
22
using System.Collections.Generic;
3+
using static System.FormattableString;
4+
using System.Globalization;
5+
using UnityEngine;
36
using Apple.UnityJSON;
47

58
namespace Apple.CoreHaptics
@@ -22,7 +25,7 @@ public virtual string Serialize(Serializer serializer) {
2225

2326
internal string SerializeTypeAndTime() {
2427
var ret = $"\t\t\t\t\"EventType\": \"{EventType}\",\n";
25-
ret += $"\t\t\t\t\"Time\": {Time}";
28+
ret += ((FormattableString)$"\t\t\t\t\"Time\": {Time}").ToString(CultureInfo.InvariantCulture);;
2629
return ret;
2730
}
2831

@@ -33,7 +36,8 @@ internal string SerializeEventParams() {
3336

3437
for (var idx = 0; idx < EventParameters.Count; idx++) {
3538
var ep = EventParameters[idx];
36-
ret += $"\n\t\t\t\t\t{{\"ParameterID\": \"{ep.ParameterID}\", \"ParameterValue\": {ep.ParameterValue}}}";
39+
// Ensure string interpolation uses decimals, not commas
40+
ret += ((FormattableString)$"\n\t\t\t\t\t{{\"ParameterID\": \"{ep.ParameterID}\", \"ParameterValue\": {ep.ParameterValue}}}").ToString(CultureInfo.InvariantCulture);
3741

3842
// Add a comma for all but the last Param
3943
if (idx != EventParameters.Count - 1) {

plug-ins/Apple.CoreHaptics/Apple.CoreHaptics_Unity/Assets/Apple.CoreHaptics/Source/UnityJSON/Serializer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,11 @@ public string Serialize(object obj, NodeOptions options = NodeOptions.Default)
116116
{
117117
result = SerializeBool((bool)obj);
118118
}
119+
else if (obj is double doubleValue)
120+
{
121+
// Format floats with a decimal, not a comma
122+
result = doubleValue.ToString(new CultureInfo("en-US", false));
123+
}
119124
else
120125
{
121126
result = obj.ToString();

0 commit comments

Comments
 (0)