From 624def8491e45cfb2ba94441f10ee24945191a2a Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 18:55:51 -0700
Subject: [PATCH 01/26] Updated packages.
---
Checks/ExternalJS.cs | 10 +-
ErrorChecker.csproj | 201 +++++++++++++++++++++++++++++++------
FodyWeavers.xsd | 141 ++++++++++++++++++++++++++
Properties/AssemblyInfo.cs | 4 +-
app.config | 15 +++
packages.config | 66 ++++++++++--
6 files changed, 393 insertions(+), 44 deletions(-)
create mode 100644 FodyWeavers.xsd
create mode 100644 app.config
diff --git a/Checks/ExternalJS.cs b/Checks/ExternalJS.cs
index dd01aae..ddd0270 100644
--- a/Checks/ExternalJS.cs
+++ b/Checks/ExternalJS.cs
@@ -18,7 +18,7 @@
class ExternalJS : Check
{
private Engine engine;
- private readonly IConstraint timeConstraint = new TimeConstraint2(TimeSpan.FromSeconds(30L));
+ private readonly Constraint timeConstraint = new TimeConstraint2(TimeSpan.FromSeconds(30L));
private readonly string fileName;
private bool valid;
@@ -30,21 +30,21 @@ private static void TimeLog(string msg) {
Debug.Log($"[{time}.{time.Millisecond}] [CM-JS] {msg}");
}
- private class TimeConstraint2 : IConstraint
+ private class TimeConstraint2 : Constraint
{
private readonly TimeSpan _timeout;
private CancellationTokenSource cts;
public TimeConstraint2(TimeSpan timeout) => _timeout = timeout;
- public void Check()
+ public override void Check()
{
if (!cts.IsCancellationRequested)
return;
throw new TimeoutException();
}
- public void Reset()
+ public override void Reset()
{
cts?.Dispose();
cts = new CancellationTokenSource(this._timeout);
@@ -107,8 +107,6 @@ private JsValue require(string folder, string file) {
catch (JavaScriptException jse)
{
Debug.Log(jse);
- Debug.Log("LINE: " + jse.LineNumber);
- Debug.Log("COLUMN: " + jse.Column);
}
return null;
}
diff --git a/ErrorChecker.csproj b/ErrorChecker.csproj
index 996f9e7..cd7b8d1 100644
--- a/ErrorChecker.csproj
+++ b/ErrorChecker.csproj
@@ -1,11 +1,12 @@
-
-
-
-
+
+
+
+
+ F:\Programs\CM v3
Debug
AnyCPU
{600D3953-D125-4C0F-A5CF-0E3906D6B6F6}
@@ -41,22 +42,24 @@
4
-
- packages\Costura.Fody.4.1.0\lib\net40\Costura.dll
- True
+
+ packages\Costura.Fody.5.8.0-alpha0098\lib\netstandard1.0\Costura.dll
-
- packages\Esprima.2.0.3\lib\net461\Esprima.dll
- True
+
+ packages\Esprima.3.0.0-beta-7\lib\net462\Esprima.dll
-
- packages\Jint.3.0.0-beta-2034\lib\net461\Jint.dll
- True
+
+ packages\Jint.3.0.0-beta-2041\lib\net462\Jint.dll
$(ChromapperDir)\ChroMapper_Data\Managed\Main.dll
False
+
+ packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll
+ True
+ True
+
$(ChromapperDir)\ChroMapper_Data\Managed\Plugins.dll
False
@@ -66,13 +69,150 @@
False
+
+ packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll
+ True
+ True
+
+
+ packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll
+
+
+
+ packages\System.Console.4.3.1\lib\net46\System.Console.dll
+ True
+ True
+
+
+ packages\System.Diagnostics.DiagnosticSource.7.0.0-rc.1.22426.10\lib\net462\System.Diagnostics.DiagnosticSource.dll
+
+
+ packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll
+ True
+ True
+
+
+ packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll
+ True
+ True
+
+
+ packages\System.IO.4.3.0\lib\net462\System.IO.dll
+ True
+ True
+
+
+ packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll
+ True
+ True
+
+
+
+ packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll
+ True
+ True
+
+
+ packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll
+ True
+ True
+
+
+ packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll
+ True
+ True
+
+
+ packages\System.Linq.4.3.0\lib\net463\System.Linq.dll
+ True
+ True
+
+
+ packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll
+ True
+ True
+
+
+ packages\System.Memory.4.5.5\lib\net461\System.Memory.dll
+
+
+ packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll
+ True
+ True
+
+
+ packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll
+ True
+ True
+
+
+
+ packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll
+
+
+ packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll
+ True
+ True
+
+
+ packages\System.Runtime.4.3.1\lib\net462\System.Runtime.dll
+ True
+ True
+
+
+ packages\System.Runtime.CompilerServices.Unsafe.7.0.0-preview.2.22152.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll
+
+
+ packages\System.Runtime.Extensions.4.3.1\lib\net462\System.Runtime.Extensions.dll
+ True
+ True
+
+
+ packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll
+ True
+ True
+
+
+ packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net463\System.Security.Cryptography.Algorithms.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll
+ True
+ True
+
+
+ packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll
+ True
+ True
+
+
+ packages\System.Text.RegularExpressions.4.3.1\lib\net463\System.Text.RegularExpressions.dll
+ True
+ True
+
-
+
+ packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll
+ True
+ True
+
$(ChromapperDir)\ChroMapper_Data\Managed\Unity.TextMeshPro.dll
@@ -125,10 +265,11 @@
+
+
CodeSigning.pfx
-
@@ -139,22 +280,26 @@
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x64\SignTool" sign /t http://timestamp.digicert.com /fd sha256 /sha1 494ABC44B6FB828C0F185DB80A88C043C4DE77C4 CM-JS.dll
del "$(ChromapperDir)\Plugins\CM-JS\CM-JS.dll"
copy CM-JS.dll "$(ChromapperDir)\Plugins\CM-JS\"
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/FodyWeavers.xsd b/FodyWeavers.xsd
new file mode 100644
index 0000000..05e92c1
--- /dev/null
+++ b/FodyWeavers.xsd
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+ A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
+
+
+
+
+ A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
+
+
+
+
+ A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks
+
+
+
+
+ A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks.
+
+
+
+
+ A list of unmanaged 32 bit assembly names to include, delimited with line breaks.
+
+
+
+
+ A list of unmanaged 64 bit assembly names to include, delimited with line breaks.
+
+
+
+
+ The order of preloaded assemblies, delimited with line breaks.
+
+
+
+
+
+ This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file.
+
+
+
+
+ Controls if .pdbs for reference assemblies are also embedded.
+
+
+
+
+ Controls if runtime assemblies are also embedded.
+
+
+
+
+ Controls whether the runtime assemblies are embedded with their full path or only with their assembly name.
+
+
+
+
+ Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option.
+
+
+
+
+ As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off.
+
+
+
+
+ Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code.
+
+
+
+
+ Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior.
+
+
+
+
+ A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
+
+
+
+
+ A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |.
+
+
+
+
+ A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with |
+
+
+
+
+ A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |.
+
+
+
+
+ A list of unmanaged 32 bit assembly names to include, delimited with |.
+
+
+
+
+ A list of unmanaged 64 bit assembly names to include, delimited with |.
+
+
+
+
+ The order of preloaded assemblies, delimited with |.
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
index dc181cb..2c5949f 100644
--- a/Properties/AssemblyInfo.cs
+++ b/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.2.3.0")]
-[assembly: AssemblyFileVersion("1.2.3.0")]
+[assembly: AssemblyVersion("1.3.0.0")]
+[assembly: AssemblyFileVersion("1.3.0.0")]
diff --git a/app.config b/app.config
new file mode 100644
index 0000000..1e70fd6
--- /dev/null
+++ b/app.config
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages.config b/packages.config
index 0b42177..2fa5c4c 100644
--- a/packages.config
+++ b/packages.config
@@ -1,10 +1,60 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 72ae81191f07cd7230fbb39fe80fb8fdf5510fc6 Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 19:08:13 -0700
Subject: [PATCH 02/26] Add optional float value to event.
---
Wrappers/Event.cs | 3 ++-
Wrappers/Wrapper.cs | 12 +++++++++++-
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/Wrappers/Event.cs b/Wrappers/Event.cs
index 6222252..75d1997 100644
--- a/Wrappers/Event.cs
+++ b/Wrappers/Event.cs
@@ -40,7 +40,8 @@ public Event(Engine engine, MapEvent mapEvent) : base(engine, mapEvent)
(float) GetJsValue(o, "_time"),
(int) GetJsValue(o, "_type"),
(int) GetJsValue(o, "_value"),
- GetCustomData(o)
+ GetCustomData(o),
+ (float) GetJsValueOptional(o, "_floatValue")
), false, GetJsBool(o, "selected"))
{
spawned = false;
diff --git a/Wrappers/Wrapper.cs b/Wrappers/Wrapper.cs
index 81082be..1d0ed94 100644
--- a/Wrappers/Wrapper.cs
+++ b/Wrappers/Wrapper.cs
@@ -32,6 +32,16 @@ protected static double GetJsValue(ObjectInstance o, string key)
return (double)value.ToObject();
}
+ protected static double? GetJsValueOptional(ObjectInstance o, string key)
+ {
+ if (o.TryGetValue(key, out var value))
+ {
+ return (double)value.ToObject();
+ }
+
+ return null;
+ }
+
protected static string GetJsString(ObjectInstance o, string key)
{
o.TryGetValue(key, out var value);
@@ -42,7 +52,7 @@ protected static string GetJsString(ObjectInstance o, string key)
{
if (o.TryGetValue(key, out var value))
{
- return (bool) value.ToObject();
+ return (bool)value.ToObject();
}
return null;
From d79a33ee8f23c77eb5f67cbc64c2e176ddaca06f Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 19:11:59 -0700
Subject: [PATCH 03/26] Add getter/setter for float value.
---
Wrappers/Event.cs | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Wrappers/Event.cs b/Wrappers/Event.cs
index 75d1997..1bfdce0 100644
--- a/Wrappers/Event.cs
+++ b/Wrappers/Event.cs
@@ -31,6 +31,16 @@ public int _value
}
}
+ public float _floatValue
+ {
+ get => wrapped.FloatValue;
+ set
+ {
+ DeleteObject();
+ wrapped.FloatValue = value;
+ }
+ }
+
public Event(Engine engine, MapEvent mapEvent) : base(engine, mapEvent)
{
spawned = true;
From f68a59ba8efdeb315f7ec718ad866283b4afea05 Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 20:24:56 -0700
Subject: [PATCH 04/26] Add placeholder v3 beatmap object.
---
Checks/ExternalJS.cs | 20 ++---
ErrorChecker.csproj | 19 ++--
Wrappers/BpmChange.cs | 87 ------------------
Wrappers/CustomEvent.cs | 89 -------------------
Wrappers/Event.cs | 87 ------------------
Wrappers/Note.cs | 93 --------------------
Wrappers/V2/BpmChange.cs | 93 ++++++++++++++++++++
Wrappers/V2/CustomEvent.cs | 94 ++++++++++++++++++++
Wrappers/V2/Event.cs | 92 +++++++++++++++++++
Wrappers/V2/Note.cs | 98 +++++++++++++++++++++
Wrappers/V2/Wall.cs | 98 +++++++++++++++++++++
Wrappers/V3/Arc.cs | 176 +++++++++++++++++++++++++++++++++++++
Wrappers/V3/BombNote.cs | 76 ++++++++++++++++
Wrappers/V3/BpmChange.cs | 93 ++++++++++++++++++++
Wrappers/V3/Chain.cs | 155 ++++++++++++++++++++++++++++++++
Wrappers/V3/ColorNote.cs | 109 +++++++++++++++++++++++
Wrappers/V3/CustomEvent.cs | 94 ++++++++++++++++++++
Wrappers/V3/Event.cs | 89 +++++++++++++++++++
Wrappers/V3/Wall.cs | 109 +++++++++++++++++++++++
Wrappers/Wall.cs | 93 --------------------
20 files changed, 1400 insertions(+), 464 deletions(-)
delete mode 100644 Wrappers/BpmChange.cs
delete mode 100644 Wrappers/CustomEvent.cs
delete mode 100644 Wrappers/Event.cs
delete mode 100644 Wrappers/Note.cs
create mode 100644 Wrappers/V2/BpmChange.cs
create mode 100644 Wrappers/V2/CustomEvent.cs
create mode 100644 Wrappers/V2/Event.cs
create mode 100644 Wrappers/V2/Note.cs
create mode 100644 Wrappers/V2/Wall.cs
create mode 100644 Wrappers/V3/Arc.cs
create mode 100644 Wrappers/V3/BombNote.cs
create mode 100644 Wrappers/V3/BpmChange.cs
create mode 100644 Wrappers/V3/Chain.cs
create mode 100644 Wrappers/V3/ColorNote.cs
create mode 100644 Wrappers/V3/CustomEvent.cs
create mode 100644 Wrappers/V3/Event.cs
create mode 100644 Wrappers/V3/Wall.cs
delete mode 100644 Wrappers/Wall.cs
diff --git a/Checks/ExternalJS.cs b/Checks/ExternalJS.cs
index ddd0270..b5e255c 100644
--- a/Checks/ExternalJS.cs
+++ b/Checks/ExternalJS.cs
@@ -249,11 +249,11 @@ public override CheckResult PerformCheck(List notes, List
var lastBPMChange = collection.FindLastBpm(atsc.CurrentBeat);
var currentBPM = lastBPMChange?.Bpm ?? atsc.Song.BeatsPerMinute;
- var originalNotes = notes.Select(it => new Note(engine, it)).ToArray();
- var originalWalls = walls.Select(it => new Wall(engine, it)).ToArray();
- var originalEvents = events.Select(it => new Event(engine, it)).ToArray();
- var originalCustomEvents = customEvents.Select(it => new CustomEvent(engine, it)).ToArray();
- var originalBpmChanges = bpmChanges.Select(it => new BpmChange(engine, it)).ToArray();
+ var originalNotes = notes.Select(it => new V2.Note(engine, it)).ToArray();
+ var originalWalls = walls.Select(it => new V2.Wall(engine, it)).ToArray();
+ var originalEvents = events.Select(it => new V2.Event(engine, it)).ToArray();
+ var originalCustomEvents = customEvents.Select(it => new V2.CustomEvent(engine, it)).ToArray();
+ var originalBpmChanges = bpmChanges.Select(it => new V2.BpmChange(engine, it)).ToArray();
try
{
@@ -325,11 +325,11 @@ public override CheckResult PerformCheck(List notes, List
SelectionController.DeselectAll();
var actions = new List();
- actions.AddRange(Reconcile(originalNotes, engine.GetValue("notes").AsArray(), notes, i => new Note(engine, i), BeatmapObject.ObjectType.Note));
- actions.AddRange(Reconcile(originalWalls, engine.GetValue("walls").AsArray(), walls, i => new Wall(engine, i), BeatmapObject.ObjectType.Obstacle));
- actions.AddRange(Reconcile(originalEvents, engine.GetValue("events").AsArray(), events, i => new Event(engine, i), BeatmapObject.ObjectType.Event));
- actions.AddRange(Reconcile(originalCustomEvents, engine.GetValue("customEvents").AsArray(), customEvents, i => new CustomEvent(engine, i), BeatmapObject.ObjectType.CustomEvent));
- actions.AddRange(Reconcile(originalBpmChanges, engine.GetValue("bpmChanges").AsArray(), bpmChanges, i => new BpmChange(engine, i), BeatmapObject.ObjectType.BpmChange));
+ actions.AddRange(Reconcile(originalNotes, engine.GetValue("notes").AsArray(), notes, i => new V2.Note(engine, i), BeatmapObject.ObjectType.Note));
+ actions.AddRange(Reconcile(originalWalls, engine.GetValue("walls").AsArray(), walls, i => new V2.Wall(engine, i), BeatmapObject.ObjectType.Obstacle));
+ actions.AddRange(Reconcile(originalEvents, engine.GetValue("events").AsArray(), events, i => new V2.Event(engine, i), BeatmapObject.ObjectType.Event));
+ actions.AddRange(Reconcile(originalCustomEvents, engine.GetValue("customEvents").AsArray(), customEvents, i => new V2.CustomEvent(engine, i), BeatmapObject.ObjectType.CustomEvent));
+ actions.AddRange(Reconcile(originalBpmChanges, engine.GetValue("bpmChanges").AsArray(), bpmChanges, i => new V2.BpmChange(engine, i), BeatmapObject.ObjectType.BpmChange));
SelectionController.SelectionChangedEvent?.Invoke();
diff --git a/ErrorChecker.csproj b/ErrorChecker.csproj
index cd7b8d1..dea0058 100644
--- a/ErrorChecker.csproj
+++ b/ErrorChecker.csproj
@@ -255,13 +255,21 @@
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -275,6 +283,7 @@
+
diff --git a/Wrappers/BpmChange.cs b/Wrappers/BpmChange.cs
deleted file mode 100644
index ee14f90..0000000
--- a/Wrappers/BpmChange.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using Jint;
-using Jint.Native.Object;
-
-class BpmChange : Wrapper
-{
- public float _time {
- get => wrapped.Time;
- set {
- DeleteObject();
- wrapped.Time = value;
- }
- }
-
- public float _BPM
- {
- get => wrapped.Bpm;
- set
- {
- DeleteObject();
- wrapped.Bpm = value;
- }
- }
-
- public float _beatsPerBar
- {
- get => wrapped.BeatsPerBar;
- set
- {
- DeleteObject();
- wrapped.BeatsPerBar = value;
- }
- }
-
- public float _metronomeOffset
- {
- get => wrapped.MetronomeOffset;
- set
- {
- DeleteObject();
- wrapped.MetronomeOffset = value;
- }
- }
-
- public BpmChange(Engine engine, BeatmapBPMChange bpmChange) : base(engine, bpmChange)
- {
- spawned = true;
- }
-
- public BpmChange(Engine engine, ObjectInstance o) : base(engine, new BeatmapBPMChange(
- (float) GetJsValue(o, "_BPM"),
- (float) GetJsValue(o, "_time")
- ) {
- BeatsPerBar = (float) GetJsValue(o, "_beatsPerBar"),
- MetronomeOffset = (float) GetJsValue(o, "_metronomeOffset")
- }, false, GetJsBool(o, "selected"))
- {
- spawned = false;
-
- DeleteObject();
- }
-
- public override bool SpawnObject(BeatmapObjectContainerCollection collection)
- {
- if (spawned) return false;
-
- collection.SpawnObject(wrapped, false, false);
-
- spawned = true;
- return true;
- }
-
- internal override bool DeleteObject()
- {
- if (!spawned) return false;
-
- var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.BpmChange);
- collection.DeleteObject(wrapped, false);
-
- spawned = false;
- return true;
- }
-
- internal override void Reconcile()
- {
- // Nothing :)
- }
-}
diff --git a/Wrappers/CustomEvent.cs b/Wrappers/CustomEvent.cs
deleted file mode 100644
index 023ed93..0000000
--- a/Wrappers/CustomEvent.cs
+++ /dev/null
@@ -1,89 +0,0 @@
-using System;
-using Jint;
-using Jint.Native.Object;
-
-class CustomEvent : Wrapper
-{
- public float _time {
- get => wrapped.Time;
- set {
- DeleteObject();
- wrapped.Time = value;
- }
- }
-
- public string _type
- {
- get => wrapped.Type;
- set
- {
- DeleteObject();
- wrapped.Type = value;
- }
- }
-
- private Lazy customData;
- private Action reconcile;
- public object _data
- {
- get => wrapped.CustomData == null ? null : customData.Value;
- set
- {
- DeleteObject();
- wrapped.CustomData = JSONWraper.castObjToJSON(value);
- InitWrapper();
- }
- }
-
- public CustomEvent(Engine engine, BeatmapCustomEvent customEvent) : base(engine, customEvent)
- {
- spawned = true;
- InitWrapper();
- }
-
- public CustomEvent(Engine engine, ObjectInstance o) : base(engine, new BeatmapCustomEvent(
- (float) GetJsValue(o, "_time"),
- GetJsString(o, "_type"),
- GetCustomData(o, "_data")
- ), false, GetJsBool(o, "selected"))
- {
- spawned = false;
-
- DeleteObject();
- InitWrapper();
- }
-
- public override bool SpawnObject(BeatmapObjectContainerCollection collection)
- {
- if (spawned) return false;
-
- collection.SpawnObject(wrapped, false, false);
-
- spawned = true;
- return true;
- }
-
- internal override bool DeleteObject()
- {
- if (!spawned) return false;
-
- var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Event);
- collection.DeleteObject(wrapped, false);
-
- spawned = false;
- return true;
- }
-
- private void InitWrapper()
- {
- reconcile = null;
- customData = new Lazy(() =>
- new JSONWraper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
- );
- }
-
- internal override void Reconcile()
- {
- reconcile?.Invoke();
- }
-}
diff --git a/Wrappers/Event.cs b/Wrappers/Event.cs
deleted file mode 100644
index 1bfdce0..0000000
--- a/Wrappers/Event.cs
+++ /dev/null
@@ -1,87 +0,0 @@
-using Jint;
-using Jint.Native.Object;
-
-class Event : VanillaWrapper
-{
- public float _time {
- get => wrapped.Time;
- set {
- DeleteObject();
- wrapped.Time = value;
- }
- }
-
- public int _type
- {
- get => wrapped.Type;
- set
- {
- DeleteObject();
- wrapped.Type = value;
- }
- }
-
- public int _value
- {
- get => wrapped.Value;
- set
- {
- DeleteObject();
- wrapped.Value = value;
- }
- }
-
- public float _floatValue
- {
- get => wrapped.FloatValue;
- set
- {
- DeleteObject();
- wrapped.FloatValue = value;
- }
- }
-
- public Event(Engine engine, MapEvent mapEvent) : base(engine, mapEvent)
- {
- spawned = true;
- }
-
- public Event(Engine engine, ObjectInstance o) : base(engine, new MapEvent(
- (float) GetJsValue(o, "_time"),
- (int) GetJsValue(o, "_type"),
- (int) GetJsValue(o, "_value"),
- GetCustomData(o),
- (float) GetJsValueOptional(o, "_floatValue")
- ), false, GetJsBool(o, "selected"))
- {
- spawned = false;
-
- DeleteObject();
- }
-
- public override bool SpawnObject(BeatmapObjectContainerCollection collection)
- {
- if (spawned) return false;
-
- if (wrapped.CustomData != null && wrapped.CustomData["_lightGradient"] != null)
- {
- wrapped.LightGradient = new MapEvent.ChromaGradient(wrapped.CustomData["_lightGradient"]);
- }
-
- collection.SpawnObject(wrapped, false, false);
-
- spawned = true;
- return true;
- }
-
- internal override bool DeleteObject()
- {
- if (!spawned) return false;
-
- var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Event);
- collection.DeleteObject(wrapped, false);
-
- spawned = false;
- return true;
- }
-}
diff --git a/Wrappers/Note.cs b/Wrappers/Note.cs
deleted file mode 100644
index e2f8e2e..0000000
--- a/Wrappers/Note.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using Jint;
-using Jint.Native.Object;
-
-class Note : VanillaWrapper
-{
- public float _time {
- get => wrapped.Time;
- set {
- DeleteObject();
- wrapped.Time = value;
- }
- }
-
- public int _lineIndex
- {
- get => wrapped.LineIndex;
- set
- {
- DeleteObject();
- wrapped.LineIndex = value;
- }
- }
-
- public int _lineLayer
- {
- get => wrapped.LineLayer;
- set
- {
- DeleteObject();
- wrapped.LineLayer = value;
- }
- }
-
- public int _cutDirection
- {
- get => wrapped.CutDirection;
- set
- {
- DeleteObject();
- wrapped.CutDirection = value;
- }
- }
-
- public int _type
- {
- get => wrapped.Type;
- set
- {
- DeleteObject();
- wrapped.Type = value;
- }
- }
-
- public Note(Engine engine, BeatmapNote note) : base(engine, note)
- {
- spawned = true;
- }
-
- public Note(Engine engine, ObjectInstance o) : base(engine, new BeatmapNote(
- (float) GetJsValue(o, "_time"),
- (int) GetJsValue(o, "_lineIndex"),
- (int) GetJsValue(o, "_lineLayer"),
- (int) GetJsValue(o, "_type"),
- (int) GetJsValue(o, "_cutDirection"),
- GetCustomData(o)
- ), false, GetJsBool(o, "selected"))
- {
- spawned = false;
-
- DeleteObject();
- }
-
- public override bool SpawnObject(BeatmapObjectContainerCollection collection)
- {
- if (spawned) return false;
-
- collection.SpawnObject(wrapped, false, false);
-
- spawned = true;
- return true;
- }
-
- internal override bool DeleteObject()
- {
- if (!spawned) return false;
-
- var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note);
- collection.DeleteObject(wrapped, false);
-
- spawned = false;
- return true;
- }
-}
diff --git a/Wrappers/V2/BpmChange.cs b/Wrappers/V2/BpmChange.cs
new file mode 100644
index 0000000..2940221
--- /dev/null
+++ b/Wrappers/V2/BpmChange.cs
@@ -0,0 +1,93 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V2
+{
+ class BpmChange : Wrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public float _BPM
+ {
+ get => wrapped.Bpm;
+ set
+ {
+ DeleteObject();
+ wrapped.Bpm = value;
+ }
+ }
+
+ public float _beatsPerBar
+ {
+ get => wrapped.BeatsPerBar;
+ set
+ {
+ DeleteObject();
+ wrapped.BeatsPerBar = value;
+ }
+ }
+
+ public float _metronomeOffset
+ {
+ get => wrapped.MetronomeOffset;
+ set
+ {
+ DeleteObject();
+ wrapped.MetronomeOffset = value;
+ }
+ }
+
+ public BpmChange(Engine engine, BeatmapBPMChange bpmChange) : base(engine, bpmChange)
+ {
+ spawned = true;
+ }
+
+ public BpmChange(Engine engine, ObjectInstance o) : base(engine, new BeatmapBPMChange(
+ (float)GetJsValue(o, "_BPM"),
+ (float)GetJsValue(o, "_time")
+ )
+ {
+ BeatsPerBar = (float)GetJsValue(o, "_beatsPerBar"),
+ MetronomeOffset = (float)GetJsValue(o, "_metronomeOffset")
+ }, false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.BpmChange);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+
+ internal override void Reconcile()
+ {
+ // Nothing :)
+ }
+ }
+}
diff --git a/Wrappers/V2/CustomEvent.cs b/Wrappers/V2/CustomEvent.cs
new file mode 100644
index 0000000..80a5c88
--- /dev/null
+++ b/Wrappers/V2/CustomEvent.cs
@@ -0,0 +1,94 @@
+using System;
+using Jint;
+using Jint.Native.Object;
+
+namespace V2
+{
+ class CustomEvent : Wrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public string _type
+ {
+ get => wrapped.Type;
+ set
+ {
+ DeleteObject();
+ wrapped.Type = value;
+ }
+ }
+
+ private Lazy customData;
+ private Action reconcile;
+ public object _data
+ {
+ get => wrapped.CustomData == null ? null : customData.Value;
+ set
+ {
+ DeleteObject();
+ wrapped.CustomData = JSONWraper.castObjToJSON(value);
+ InitWrapper();
+ }
+ }
+
+ public CustomEvent(Engine engine, BeatmapCustomEvent customEvent) : base(engine, customEvent)
+ {
+ spawned = true;
+ InitWrapper();
+ }
+
+ public CustomEvent(Engine engine, ObjectInstance o) : base(engine, new BeatmapCustomEvent(
+ (float)GetJsValue(o, "_time"),
+ GetJsString(o, "_type"),
+ GetCustomData(o, "_data")
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ InitWrapper();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Event);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+
+ private void InitWrapper()
+ {
+ reconcile = null;
+ customData = new Lazy(() =>
+ new JSONWraper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
+ );
+ }
+
+ internal override void Reconcile()
+ {
+ reconcile?.Invoke();
+ }
+ }
+}
diff --git a/Wrappers/V2/Event.cs b/Wrappers/V2/Event.cs
new file mode 100644
index 0000000..4d6cfc4
--- /dev/null
+++ b/Wrappers/V2/Event.cs
@@ -0,0 +1,92 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V2
+{
+ class Event : VanillaWrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int _type
+ {
+ get => wrapped.Type;
+ set
+ {
+ DeleteObject();
+ wrapped.Type = value;
+ }
+ }
+
+ public int _value
+ {
+ get => wrapped.Value;
+ set
+ {
+ DeleteObject();
+ wrapped.Value = value;
+ }
+ }
+
+ public float _floatValue
+ {
+ get => wrapped.FloatValue;
+ set
+ {
+ DeleteObject();
+ wrapped.FloatValue = value;
+ }
+ }
+
+ public Event(Engine engine, MapEvent mapEvent) : base(engine, mapEvent)
+ {
+ spawned = true;
+ }
+
+ public Event(Engine engine, ObjectInstance o) : base(engine, new MapEvent(
+ (float)GetJsValue(o, "_time"),
+ (int)GetJsValue(o, "_type"),
+ (int)GetJsValue(o, "_value"),
+ GetCustomData(o),
+ (float)GetJsValueOptional(o, "_floatValue")
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ if (wrapped.CustomData != null && wrapped.CustomData["_lightGradient"] != null)
+ {
+ wrapped.LightGradient = new MapEvent.ChromaGradient(wrapped.CustomData["_lightGradient"]);
+ }
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Event);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V2/Note.cs b/Wrappers/V2/Note.cs
new file mode 100644
index 0000000..6baf6c5
--- /dev/null
+++ b/Wrappers/V2/Note.cs
@@ -0,0 +1,98 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V2
+{
+ class Note : VanillaWrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int _lineIndex
+ {
+ get => wrapped.LineIndex;
+ set
+ {
+ DeleteObject();
+ wrapped.LineIndex = value;
+ }
+ }
+
+ public int _lineLayer
+ {
+ get => wrapped.LineLayer;
+ set
+ {
+ DeleteObject();
+ wrapped.LineLayer = value;
+ }
+ }
+
+ public int _cutDirection
+ {
+ get => wrapped.CutDirection;
+ set
+ {
+ DeleteObject();
+ wrapped.CutDirection = value;
+ }
+ }
+
+ public int _type
+ {
+ get => wrapped.Type;
+ set
+ {
+ DeleteObject();
+ wrapped.Type = value;
+ }
+ }
+
+ public Note(Engine engine, BeatmapNote note) : base(engine, note)
+ {
+ spawned = true;
+ }
+
+ public Note(Engine engine, ObjectInstance o) : base(engine, new BeatmapNote(
+ (float)GetJsValue(o, "_time"),
+ (int)GetJsValue(o, "_lineIndex"),
+ (int)GetJsValue(o, "_lineLayer"),
+ (int)GetJsValue(o, "_type"),
+ (int)GetJsValue(o, "_cutDirection"),
+ GetCustomData(o)
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V2/Wall.cs b/Wrappers/V2/Wall.cs
new file mode 100644
index 0000000..51ffac5
--- /dev/null
+++ b/Wrappers/V2/Wall.cs
@@ -0,0 +1,98 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V2
+{
+ class Wall : VanillaWrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int _lineIndex
+ {
+ get => wrapped.LineIndex;
+ set
+ {
+ DeleteObject();
+ wrapped.LineIndex = value;
+ }
+ }
+
+ public int _type
+ {
+ get => wrapped.Type;
+ set
+ {
+ DeleteObject();
+ wrapped.Type = value;
+ }
+ }
+
+ public float _duration
+ {
+ get => wrapped.Duration;
+ set
+ {
+ DeleteObject();
+ wrapped.Duration = value;
+ }
+ }
+
+ public int _width
+ {
+ get => wrapped.Width;
+ set
+ {
+ DeleteObject();
+ wrapped.Width = value;
+ }
+ }
+
+ public Wall(Engine engine, BeatmapObstacle wall) : base(engine, wall)
+ {
+ spawned = true;
+ }
+
+ public Wall(Engine engine, ObjectInstance o) : base(engine, new BeatmapObstacle(
+ (float)GetJsValue(o, "_time"),
+ (int)GetJsValue(o, "_lineIndex"),
+ (int)GetJsValue(o, "_type"),
+ (float)GetJsValue(o, "_duration"),
+ (int)GetJsValue(o, "_width"),
+ GetCustomData(o)
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Obstacle);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V3/Arc.cs b/Wrappers/V3/Arc.cs
new file mode 100644
index 0000000..eda8c20
--- /dev/null
+++ b/Wrappers/V3/Arc.cs
@@ -0,0 +1,176 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class Arc : VanillaWrapper
+ {
+ public float b
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int c
+ {
+ get => wrapped.Color;
+ set
+ {
+ DeleteObject();
+ wrapped.Color = value;
+ }
+ }
+
+ public int x
+ {
+ get => wrapped.X;
+ set
+ {
+ DeleteObject();
+ wrapped.X = value;
+ }
+ }
+
+ public int y
+ {
+ get => wrapped.Y;
+ set
+ {
+ DeleteObject();
+ wrapped.Y = value;
+ }
+ }
+
+ public int d
+ {
+ get => wrapped.Direction;
+ set
+ {
+ DeleteObject();
+ wrapped.Direction = value;
+ }
+ }
+
+ public float mu
+ {
+ get => wrapped.HeadControlPointLengthMultiplier;
+ set
+ {
+ DeleteObject();
+ wrapped.HeadControlPointLengthMultiplier = value;
+ }
+ }
+
+ public float tb
+ {
+ get => wrapped.TailTime;
+ set
+ {
+ DeleteObject();
+ wrapped.TailTime = value;
+ }
+ }
+
+ public int tx
+ {
+ get => wrapped.TailX;
+ set
+ {
+ DeleteObject();
+ wrapped.TailX = value;
+ }
+ }
+
+ public int ty
+ {
+ get => wrapped.TailX;
+ set
+ {
+ DeleteObject();
+ wrapped.TailX = value;
+ }
+ }
+
+ public int tc
+ {
+ get => wrapped.TailCutDirection;
+ set
+ {
+ DeleteObject();
+ wrapped.TailCutDirection = value;
+ }
+ }
+
+ public float tmu
+ {
+ get => wrapped.TailControlPointLengthMultiplier;
+ set
+ {
+ DeleteObject();
+ wrapped.TailControlPointLengthMultiplier = value;
+ }
+ }
+
+ public int m
+ {
+ get => wrapped.ArcMidAnchorMode;
+ set
+ {
+ DeleteObject();
+ wrapped.ArcMidAnchorMode = value;
+ }
+ }
+
+ public Arc(Engine engine, BeatmapArc arc) : base(engine, arc)
+ {
+ spawned = true;
+ }
+
+ public Arc(Engine engine, ObjectInstance o) : base(engine, new BeatmapArc(JSONWraper.castObjToJSON(new
+ {
+ b = (float)GetJsValue(o, "b"),
+ c = (int)GetJsValue(o, "c"),
+ x = (int)GetJsValue(o, "x"),
+ y = (int)GetJsValue(o, "y"),
+ d = (int)GetJsValue(o, "d"),
+ mu = (float)GetJsValue(o, "mu"),
+ tb = (float)GetJsValue(o, "tb"),
+ tx = (int)GetJsValue(o, "tx"),
+ ty = (int)GetJsValue(o, "ty"),
+ tc = (int)GetJsValue(o, "tc"),
+ tmu = (float)GetJsValue(o, "tmu"),
+ m = (int)GetJsValue(o, "m"),
+ customData = GetCustomData(o, "customData")
+ })), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V3/BombNote.cs b/Wrappers/V3/BombNote.cs
new file mode 100644
index 0000000..bdc4418
--- /dev/null
+++ b/Wrappers/V3/BombNote.cs
@@ -0,0 +1,76 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class BombNote : VanillaWrapper
+ {
+ public float b
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int x
+ {
+ get => wrapped.LineIndex;
+ set
+ {
+ DeleteObject();
+ wrapped.LineIndex = value;
+ }
+ }
+
+ public int y
+ {
+ get => wrapped.LineLayer;
+ set
+ {
+ DeleteObject();
+ wrapped.LineLayer = value;
+ }
+ }
+
+ public BombNote(Engine engine, BeatmapBombNote bomb) : base(engine, bomb)
+ {
+ spawned = true;
+ }
+
+ public BombNote(Engine engine, ObjectInstance o) : base(engine, new BeatmapBombNote(
+ (float)GetJsValue(o, "b"),
+ (int)GetJsValue(o, "x"),
+ (int)GetJsValue(o, "y"),
+ GetCustomData(o, "customData")
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V3/BpmChange.cs b/Wrappers/V3/BpmChange.cs
new file mode 100644
index 0000000..cf6b854
--- /dev/null
+++ b/Wrappers/V3/BpmChange.cs
@@ -0,0 +1,93 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class BpmChange : Wrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public float _BPM
+ {
+ get => wrapped.Bpm;
+ set
+ {
+ DeleteObject();
+ wrapped.Bpm = value;
+ }
+ }
+
+ public float _beatsPerBar
+ {
+ get => wrapped.BeatsPerBar;
+ set
+ {
+ DeleteObject();
+ wrapped.BeatsPerBar = value;
+ }
+ }
+
+ public float _metronomeOffset
+ {
+ get => wrapped.MetronomeOffset;
+ set
+ {
+ DeleteObject();
+ wrapped.MetronomeOffset = value;
+ }
+ }
+
+ public BpmChange(Engine engine, BeatmapBPMChange bpmChange) : base(engine, bpmChange)
+ {
+ spawned = true;
+ }
+
+ public BpmChange(Engine engine, ObjectInstance o) : base(engine, new BeatmapBPMChange(
+ (float)GetJsValue(o, "_BPM"),
+ (float)GetJsValue(o, "_time")
+ )
+ {
+ BeatsPerBar = (float)GetJsValue(o, "_beatsPerBar"),
+ MetronomeOffset = (float)GetJsValue(o, "_metronomeOffset")
+ }, false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.BpmChange);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+
+ internal override void Reconcile()
+ {
+ // Nothing :)
+ }
+ }
+}
diff --git a/Wrappers/V3/Chain.cs b/Wrappers/V3/Chain.cs
new file mode 100644
index 0000000..58b397e
--- /dev/null
+++ b/Wrappers/V3/Chain.cs
@@ -0,0 +1,155 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class Chain : VanillaWrapper
+ {
+ public float b
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int c
+ {
+ get => wrapped.Color;
+ set
+ {
+ DeleteObject();
+ wrapped.Color = value;
+ }
+ }
+
+ public int x
+ {
+ get => wrapped.X;
+ set
+ {
+ DeleteObject();
+ wrapped.X = value;
+ }
+ }
+
+ public int y
+ {
+ get => wrapped.Y;
+ set
+ {
+ DeleteObject();
+ wrapped.Y = value;
+ }
+ }
+
+ public int d
+ {
+ get => wrapped.Direction;
+ set
+ {
+ DeleteObject();
+ wrapped.Direction = value;
+ }
+ }
+
+ public float tb
+ {
+ get => wrapped.TailTime;
+ set
+ {
+ DeleteObject();
+ wrapped.TailTime = value;
+ }
+ }
+
+ public int tx
+ {
+ get => wrapped.TailX;
+ set
+ {
+ DeleteObject();
+ wrapped.TailX = value;
+ }
+ }
+
+ public int ty
+ {
+ get => wrapped.TailX;
+ set
+ {
+ DeleteObject();
+ wrapped.TailX = value;
+ }
+ }
+
+ public int sc
+ {
+ get => wrapped.SliceCount;
+ set
+ {
+ DeleteObject();
+ wrapped.SliceCount = value;
+ }
+ }
+
+ public float s
+ {
+ get => wrapped.SquishAmount;
+ set
+ {
+ DeleteObject();
+ wrapped.SquishAmount = value;
+ }
+ }
+
+ public Chain(Engine engine, BeatmapChain chain) : base(engine, chain)
+ {
+ spawned = true;
+ }
+
+ public Chain(Engine engine, ObjectInstance o) : base(engine, new BeatmapChain(JSONWraper.castObjToJSON(new
+ {
+ b = (float)GetJsValue(o, "b"),
+ c = (int)GetJsValue(o, "c"),
+ x = (int)GetJsValue(o, "x"),
+ y = (int)GetJsValue(o, "y"),
+ d = (int)GetJsValue(o, "d"),
+ tb = (float)GetJsValue(o, "tb"),
+ tx = (int)GetJsValue(o, "tx"),
+ ty = (int)GetJsValue(o, "ty"),
+ tc = (int)GetJsValue(o, "tc"),
+ sc = (int)GetJsValue(o, "sc"),
+ s = (float)GetJsValue(o, "s"),
+ customData = GetCustomData(o, "customData")
+ })), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V3/ColorNote.cs b/Wrappers/V3/ColorNote.cs
new file mode 100644
index 0000000..265528a
--- /dev/null
+++ b/Wrappers/V3/ColorNote.cs
@@ -0,0 +1,109 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class ColorNote : VanillaWrapper
+ {
+ public float b
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int x
+ {
+ get => wrapped.LineIndex;
+ set
+ {
+ DeleteObject();
+ wrapped.LineIndex = value;
+ }
+ }
+
+ public int y
+ {
+ get => wrapped.LineLayer;
+ set
+ {
+ DeleteObject();
+ wrapped.LineLayer = value;
+ }
+ }
+
+ public int a
+ {
+ get => wrapped.AngleOffset;
+ set
+ {
+ DeleteObject();
+ wrapped.AngleOffset = value;
+ }
+ }
+
+ public int c
+ {
+ get => wrapped.Color;
+ set
+ {
+ DeleteObject();
+ wrapped.Color = value;
+ }
+ }
+
+ public int d
+ {
+ get => wrapped.CutDirection;
+ set
+ {
+ DeleteObject();
+ wrapped.CutDirection = value;
+ }
+ }
+
+ public ColorNote(Engine engine, BeatmapColorNote note) : base(engine, note)
+ {
+ spawned = true;
+ }
+
+ public ColorNote(Engine engine, ObjectInstance o) : base(engine, new BeatmapColorNote(
+ (float)GetJsValue(o, "b"),
+ (int)GetJsValue(o, "x"),
+ (int)GetJsValue(o, "y"),
+ (int)GetJsValue(o, "c"),
+ (int)GetJsValue(o, "d"),
+ (int)GetJsValue(o, "a"),
+ GetCustomData(o, "customData")
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V3/CustomEvent.cs b/Wrappers/V3/CustomEvent.cs
new file mode 100644
index 0000000..3024282
--- /dev/null
+++ b/Wrappers/V3/CustomEvent.cs
@@ -0,0 +1,94 @@
+using System;
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class CustomEvent : Wrapper
+ {
+ public float _time
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public string _type
+ {
+ get => wrapped.Type;
+ set
+ {
+ DeleteObject();
+ wrapped.Type = value;
+ }
+ }
+
+ private Lazy customData;
+ private Action reconcile;
+ public object _data
+ {
+ get => wrapped.CustomData == null ? null : customData.Value;
+ set
+ {
+ DeleteObject();
+ wrapped.CustomData = JSONWraper.castObjToJSON(value);
+ InitWrapper();
+ }
+ }
+
+ public CustomEvent(Engine engine, BeatmapCustomEvent customEvent) : base(engine, customEvent)
+ {
+ spawned = true;
+ InitWrapper();
+ }
+
+ public CustomEvent(Engine engine, ObjectInstance o) : base(engine, new BeatmapCustomEvent(
+ (float)GetJsValue(o, "_time"),
+ GetJsString(o, "_type"),
+ GetCustomData(o, "_data")
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ InitWrapper();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Event);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+
+ private void InitWrapper()
+ {
+ reconcile = null;
+ customData = new Lazy(() =>
+ new JSONWraper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
+ );
+ }
+
+ internal override void Reconcile()
+ {
+ reconcile?.Invoke();
+ }
+ }
+}
diff --git a/Wrappers/V3/Event.cs b/Wrappers/V3/Event.cs
new file mode 100644
index 0000000..7967c50
--- /dev/null
+++ b/Wrappers/V3/Event.cs
@@ -0,0 +1,89 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class Event : VanillaWrapper
+ {
+ public float b
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int et
+ {
+ get => wrapped.Type;
+ set
+ {
+ DeleteObject();
+ wrapped.Type = value;
+ }
+ }
+
+ public int i
+ {
+ get => wrapped.Value;
+ set
+ {
+ DeleteObject();
+ wrapped.Value = value;
+ }
+ }
+
+ public float f
+ {
+ get => wrapped.FloatValue;
+ set
+ {
+ DeleteObject();
+ wrapped.FloatValue = value;
+ }
+ }
+
+ public Event(Engine engine, MapEventV3 mapEvent) : base(engine, mapEvent)
+ {
+ spawned = true;
+ }
+
+ public Event(Engine engine, ObjectInstance o) : base(engine, new MapEventV3(JSONWraper.castObjToJSON(new
+ {
+ b = (float)GetJsValue(o, "b"),
+ et = (int)GetJsValue(o, "et"),
+ i = (int)GetJsValue(o, "i"),
+ f = (float)GetJsValue(o, "f"),
+ customData = GetCustomData(o, "customData")
+ })
+ ), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Event);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/V3/Wall.cs b/Wrappers/V3/Wall.cs
new file mode 100644
index 0000000..7a2f60d
--- /dev/null
+++ b/Wrappers/V3/Wall.cs
@@ -0,0 +1,109 @@
+using Jint;
+using Jint.Native.Object;
+
+namespace V3
+{
+ class Wall : VanillaWrapper
+ {
+ public float b
+ {
+ get => wrapped.Time;
+ set
+ {
+ DeleteObject();
+ wrapped.Time = value;
+ }
+ }
+
+ public int x
+ {
+ get => wrapped.LineIndex;
+ set
+ {
+ DeleteObject();
+ wrapped.LineIndex = value;
+ }
+ }
+
+ public int y
+ {
+ get => wrapped.LineLayer;
+ set
+ {
+ DeleteObject();
+ wrapped.LineLayer = value;
+ }
+ }
+
+ public float d
+ {
+ get => wrapped.Duration;
+ set
+ {
+ DeleteObject();
+ wrapped.Duration = value;
+ }
+ }
+
+ public int w
+ {
+ get => wrapped.Width;
+ set
+ {
+ DeleteObject();
+ wrapped.Width = value;
+ }
+ }
+
+ public int h
+ {
+ get => wrapped.Height;
+ set
+ {
+ DeleteObject();
+ wrapped.Height = value;
+ }
+ }
+
+ public Wall(Engine engine, BeatmapObstacleV3 wall) : base(engine, wall)
+ {
+ spawned = true;
+ }
+
+ public Wall(Engine engine, ObjectInstance o) : base(engine, new BeatmapObstacleV3(JSONWraper.castObjToJSON(new {
+ b = (float)GetJsValue(o, "b"),
+ x = (int)GetJsValue(o, "x"),
+ y = (int)GetJsValue(o, "y"),
+ d = (float)GetJsValue(o, "d"),
+ w = (int)GetJsValue(o, "w"),
+ h = (int)GetJsValue(o, "h"),
+ customData = GetCustomData(o, "customData")
+ })), false, GetJsBool(o, "selected"))
+ {
+ spawned = false;
+
+ DeleteObject();
+ }
+
+ public override bool SpawnObject(BeatmapObjectContainerCollection collection)
+ {
+ if (spawned) return false;
+
+ collection.SpawnObject(wrapped, false, false);
+
+ spawned = true;
+ return true;
+ }
+
+ internal override bool DeleteObject()
+ {
+ if (!spawned) return false;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Obstacle);
+ collection.DeleteObject(wrapped, false);
+
+ spawned = false;
+ return true;
+ }
+ }
+}
diff --git a/Wrappers/Wall.cs b/Wrappers/Wall.cs
deleted file mode 100644
index 1a0a876..0000000
--- a/Wrappers/Wall.cs
+++ /dev/null
@@ -1,93 +0,0 @@
-using Jint;
-using Jint.Native.Object;
-
-class Wall : VanillaWrapper
-{
- public float _time {
- get => wrapped.Time;
- set {
- DeleteObject();
- wrapped.Time = value;
- }
- }
-
- public int _lineIndex
- {
- get => wrapped.LineIndex;
- set
- {
- DeleteObject();
- wrapped.LineIndex = value;
- }
- }
-
- public int _type
- {
- get => wrapped.Type;
- set
- {
- DeleteObject();
- wrapped.Type = value;
- }
- }
-
- public float _duration
- {
- get => wrapped.Duration;
- set
- {
- DeleteObject();
- wrapped.Duration = value;
- }
- }
-
- public int _width
- {
- get => wrapped.Width;
- set
- {
- DeleteObject();
- wrapped.Width = value;
- }
- }
-
- public Wall(Engine engine, BeatmapObstacle wall) : base(engine, wall)
- {
- spawned = true;
- }
-
- public Wall(Engine engine, ObjectInstance o) : base(engine, new BeatmapObstacle(
- (float)GetJsValue(o, "_time"),
- (int)GetJsValue(o, "_lineIndex"),
- (int)GetJsValue(o, "_type"),
- (float)GetJsValue(o, "_duration"),
- (int)GetJsValue(o, "_width"),
- GetCustomData(o)
- ), false, GetJsBool(o, "selected"))
- {
- spawned = false;
-
- DeleteObject();
- }
-
- public override bool SpawnObject(BeatmapObjectContainerCollection collection)
- {
- if (spawned) return false;
-
- collection.SpawnObject(wrapped, false, false);
-
- spawned = true;
- return true;
- }
-
- internal override bool DeleteObject()
- {
- if (!spawned) return false;
-
- var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Obstacle);
- collection.DeleteObject(wrapped, false);
-
- spawned = false;
- return true;
- }
-}
From 70b81a6c3e09d10feee9e395c06ad90a97d4416e Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 20:26:06 -0700
Subject: [PATCH 05/26] Fix typo.
---
Checks/ExternalJS.cs | 2 +-
JintPatch.cs | 4 ++--
Wrappers/JSONWrapper.cs | 12 ++++++------
Wrappers/V2/CustomEvent.cs | 8 ++++----
Wrappers/V3/Arc.cs | 2 +-
Wrappers/V3/Chain.cs | 2 +-
Wrappers/V3/CustomEvent.cs | 8 ++++----
Wrappers/V3/Event.cs | 2 +-
Wrappers/V3/Wall.cs | 2 +-
Wrappers/VanillaWrapper.cs | 8 ++++----
10 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/Checks/ExternalJS.cs b/Checks/ExternalJS.cs
index b5e255c..028053c 100644
--- a/Checks/ExternalJS.cs
+++ b/Checks/ExternalJS.cs
@@ -60,7 +60,7 @@ private static void LogIt(object o)
{
if (o is ExpandoObject ex)
{
- Debug.Log(JSONWraper.dictToJSON(ex));
+ Debug.Log(JSONWrapper.dictToJSON(ex));
}
else
{
diff --git a/JintPatch.cs b/JintPatch.cs
index 42fc839..fd672c3 100644
--- a/JintPatch.cs
+++ b/JintPatch.cs
@@ -22,7 +22,7 @@ public static bool Prefix(ObjectInstance __instance, JsValue property, ref bool
{
if (__instance is ObjectWrapper wrapper)
{
- if (wrapper.Target is JSONWraper jsonWraper)
+ if (wrapper.Target is JSONWrapper jsonWraper)
{
jsonWraper.DeleteProperty(property);
__result = true;
@@ -42,7 +42,7 @@ public static bool Prefix(ObjectInstance __instance, ref List __result)
{
if (__instance is ObjectWrapper wrapper)
{
- if (wrapper.Target is JSONWraper jsonWraper)
+ if (wrapper.Target is JSONWrapper jsonWraper)
{
__result = new List();
foreach (var wrappedKey in jsonWraper.wrapped.Keys)
diff --git a/Wrappers/JSONWrapper.cs b/Wrappers/JSONWrapper.cs
index e2b3d5b..559ae96 100644
--- a/Wrappers/JSONWrapper.cs
+++ b/Wrappers/JSONWrapper.cs
@@ -8,18 +8,18 @@
using SimpleJSON;
using UnityEngine;
-class JSONWraper
+class JSONWrapper
{
private readonly Engine engine;
internal readonly JSONNode wrapped;
private readonly Func deleteObj;
private readonly Dictionary observe = new Dictionary();
- private readonly Dictionary children = new Dictionary();
+ private readonly Dictionary children = new Dictionary();
private Action checkObserved;
private bool cleanObserved = true;
- public JSONWraper(Engine engine, ref Action parent, JSONNode wrapped, Func deleteObj)
+ public JSONWrapper(Engine engine, ref Action parent, JSONNode wrapped, Func deleteObj)
{
this.engine = engine;
this.wrapped = wrapped;
@@ -103,7 +103,7 @@ public static JSONNode castObjToJSON(object o)
{
switch (o)
{
- case JSONWraper w:
+ case JSONWrapper w:
return w.wrapped;
case JsValue v:
return castJSToJSON(v);
@@ -178,10 +178,10 @@ public void DeleteProperty(JsValue key)
}
}
- private JSONWraper GetChild(string key)
+ private JSONWrapper GetChild(string key)
{
if (!children.ContainsKey(key))
- children.Add(key, new JSONWraper(engine, ref checkObserved, wrapped[key], deleteObj));
+ children.Add(key, new JSONWrapper(engine, ref checkObserved, wrapped[key], deleteObj));
return children[key];
}
diff --git a/Wrappers/V2/CustomEvent.cs b/Wrappers/V2/CustomEvent.cs
index 80a5c88..b2484ce 100644
--- a/Wrappers/V2/CustomEvent.cs
+++ b/Wrappers/V2/CustomEvent.cs
@@ -26,7 +26,7 @@ public string _type
}
}
- private Lazy customData;
+ private Lazy customData;
private Action reconcile;
public object _data
{
@@ -34,7 +34,7 @@ public object _data
set
{
DeleteObject();
- wrapped.CustomData = JSONWraper.castObjToJSON(value);
+ wrapped.CustomData = JSONWrapper.castObjToJSON(value);
InitWrapper();
}
}
@@ -81,8 +81,8 @@ internal override bool DeleteObject()
private void InitWrapper()
{
reconcile = null;
- customData = new Lazy(() =>
- new JSONWraper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
+ customData = new Lazy(() =>
+ new JSONWrapper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
);
}
diff --git a/Wrappers/V3/Arc.cs b/Wrappers/V3/Arc.cs
index eda8c20..7829721 100644
--- a/Wrappers/V3/Arc.cs
+++ b/Wrappers/V3/Arc.cs
@@ -130,7 +130,7 @@ public Arc(Engine engine, BeatmapArc arc) : base(engine, arc)
spawned = true;
}
- public Arc(Engine engine, ObjectInstance o) : base(engine, new BeatmapArc(JSONWraper.castObjToJSON(new
+ public Arc(Engine engine, ObjectInstance o) : base(engine, new BeatmapArc(JSONWrapper.castObjToJSON(new
{
b = (float)GetJsValue(o, "b"),
c = (int)GetJsValue(o, "c"),
diff --git a/Wrappers/V3/Chain.cs b/Wrappers/V3/Chain.cs
index 58b397e..845e419 100644
--- a/Wrappers/V3/Chain.cs
+++ b/Wrappers/V3/Chain.cs
@@ -110,7 +110,7 @@ public Chain(Engine engine, BeatmapChain chain) : base(engine, chain)
spawned = true;
}
- public Chain(Engine engine, ObjectInstance o) : base(engine, new BeatmapChain(JSONWraper.castObjToJSON(new
+ public Chain(Engine engine, ObjectInstance o) : base(engine, new BeatmapChain(JSONWrapper.castObjToJSON(new
{
b = (float)GetJsValue(o, "b"),
c = (int)GetJsValue(o, "c"),
diff --git a/Wrappers/V3/CustomEvent.cs b/Wrappers/V3/CustomEvent.cs
index 3024282..49ff5ab 100644
--- a/Wrappers/V3/CustomEvent.cs
+++ b/Wrappers/V3/CustomEvent.cs
@@ -26,7 +26,7 @@ public string _type
}
}
- private Lazy customData;
+ private Lazy customData;
private Action reconcile;
public object _data
{
@@ -34,7 +34,7 @@ public object _data
set
{
DeleteObject();
- wrapped.CustomData = JSONWraper.castObjToJSON(value);
+ wrapped.CustomData = JSONWrapper.castObjToJSON(value);
InitWrapper();
}
}
@@ -81,8 +81,8 @@ internal override bool DeleteObject()
private void InitWrapper()
{
reconcile = null;
- customData = new Lazy(() =>
- new JSONWraper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
+ customData = new Lazy(() =>
+ new JSONWrapper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
);
}
diff --git a/Wrappers/V3/Event.cs b/Wrappers/V3/Event.cs
index 7967c50..ea0cca0 100644
--- a/Wrappers/V3/Event.cs
+++ b/Wrappers/V3/Event.cs
@@ -50,7 +50,7 @@ public Event(Engine engine, MapEventV3 mapEvent) : base(engine, mapEvent)
spawned = true;
}
- public Event(Engine engine, ObjectInstance o) : base(engine, new MapEventV3(JSONWraper.castObjToJSON(new
+ public Event(Engine engine, ObjectInstance o) : base(engine, new MapEventV3(JSONWrapper.castObjToJSON(new
{
b = (float)GetJsValue(o, "b"),
et = (int)GetJsValue(o, "et"),
diff --git a/Wrappers/V3/Wall.cs b/Wrappers/V3/Wall.cs
index 7a2f60d..795933b 100644
--- a/Wrappers/V3/Wall.cs
+++ b/Wrappers/V3/Wall.cs
@@ -70,7 +70,7 @@ public Wall(Engine engine, BeatmapObstacleV3 wall) : base(engine, wall)
spawned = true;
}
- public Wall(Engine engine, ObjectInstance o) : base(engine, new BeatmapObstacleV3(JSONWraper.castObjToJSON(new {
+ public Wall(Engine engine, ObjectInstance o) : base(engine, new BeatmapObstacleV3(JSONWrapper.castObjToJSON(new {
b = (float)GetJsValue(o, "b"),
x = (int)GetJsValue(o, "x"),
y = (int)GetJsValue(o, "y"),
diff --git a/Wrappers/VanillaWrapper.cs b/Wrappers/VanillaWrapper.cs
index f9c1de5..aa28e65 100644
--- a/Wrappers/VanillaWrapper.cs
+++ b/Wrappers/VanillaWrapper.cs
@@ -3,7 +3,7 @@
abstract class VanillaWrapper : Wrapper where T : BeatmapObject
{
- private Lazy customData;
+ private Lazy customData;
private Action reconcile;
public object _customData
@@ -12,7 +12,7 @@ public object _customData
set
{
DeleteObject();
- wrapped.CustomData = JSONWraper.castObjToJSON(value);
+ wrapped.CustomData = JSONWrapper.castObjToJSON(value);
InitWrapper();
}
}
@@ -25,8 +25,8 @@ protected VanillaWrapper(Engine engine, T wrapped, bool hasOriginal = true, bool
private void InitWrapper()
{
reconcile = null;
- customData = new Lazy(() =>
- new JSONWraper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
+ customData = new Lazy(() =>
+ new JSONWrapper(engine, ref reconcile, wrapped.CustomData, DeleteObject)
);
}
From 521db61501839c3b169e5b38841e8776c34d3420 Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 20:54:18 -0700
Subject: [PATCH 06/26] Add more map data.
---
Checks/ExternalJS.cs | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/Checks/ExternalJS.cs b/Checks/ExternalJS.cs
index 028053c..86142f5 100644
--- a/Checks/ExternalJS.cs
+++ b/Checks/ExternalJS.cs
@@ -228,13 +228,19 @@ class MapData {
public float songBPM { get; private set; }
public float NJS { get; private set; }
public float offset { get; private set; }
+ public string characteristic { get; private set; }
+ public string difficulty { get; private set; }
+ public string environment { get; private set; }
- public MapData(float currentBPM, float songBPM, float NJS, float offset)
+ public MapData(float currentBPM, float songBPM, float NJS, float offset, string characteristic, string difficulty, string environment)
{
this.currentBPM = currentBPM;
this.songBPM = songBPM;
this.NJS = NJS;
this.offset = offset;
+ this.characteristic = characteristic;
+ this.difficulty = difficulty;
+ this.environment = environment;
}
}
@@ -286,7 +292,11 @@ public override CheckResult PerformCheck(List notes, List
currentBPM,
atsc.Song.BeatsPerMinute,
BeatSaberSongContainer.Instance.DifficultyData.NoteJumpMovementSpeed,
- BeatSaberSongContainer.Instance.DifficultyData.NoteJumpStartBeatOffset
+ BeatSaberSongContainer.Instance.DifficultyData.NoteJumpStartBeatOffset,
+ BeatSaberSongContainer.Instance.DifficultyData.ParentBeatmapSet.BeatmapCharacteristicName,
+ BeatSaberSongContainer.Instance.DifficultyData.Difficulty,
+ (BeatSaberSongContainer.Instance.DifficultyData.ParentBeatmapSet.BeatmapCharacteristicName == "360Degree" || BeatSaberSongContainer.Instance.DifficultyData.ParentBeatmapSet.BeatmapCharacteristicName == "90Degree") ? BeatSaberSongContainer.Instance.Song.AllDirectionsEnvironmentName : BeatSaberSongContainer.Instance.Song.EnvironmentName
+
))
.SetValue("cursor", currentBeat)
.SetValue("minTime", 0.24f)
From e25369f36c518e2fc1d2de27cd8e102537bc1cc8 Mon Sep 17 00:00:00 2001
From: KivalEvan <5645391+KivalEvan@users.noreply.github.com>
Date: Fri, 23 Sep 2022 23:39:01 -0700
Subject: [PATCH 07/26] Somewhat working v3 map script.
---
CMJS.cs | 37 +++++++++--
Checks/Check.cs | 14 ++++
Checks/ExternalJS.cs | 142 ++++++++++++++++++++++++++++++++++++++++
Wrappers/JSONWrapper.cs | 12 ++++
Wrappers/V3/Arc.cs | 32 ++++-----
Wrappers/V3/Chain.cs | 27 ++++----
Wrappers/V3/Event.cs | 13 ++--
Wrappers/V3/Wall.cs | 18 ++---
8 files changed, 247 insertions(+), 48 deletions(-)
diff --git a/CMJS.cs b/CMJS.cs
index d0bd93e..eff67f2 100644
--- a/CMJS.cs
+++ b/CMJS.cs
@@ -12,6 +12,9 @@
public class CMJS
{
private NotesContainer notesContainer;
+ private NotesContainer bombsContainer;
+ private ChainsContainer chainsContainer;
+ private ArcsContainer arcsContainer;
private ObstaclesContainer wallsContainer;
private EventsContainer eventsContainer;
private CustomEventsContainer customEventsContainer;
@@ -57,6 +60,9 @@ private void SceneLoaded(Scene arg0, LoadSceneMode arg1)
if (arg0.buildIndex == 3) // Mapper scene
{
notesContainer = UnityEngine.Object.FindObjectOfType();
+ bombsContainer = UnityEngine.Object.FindObjectOfType();
+ arcsContainer = UnityEngine.Object.FindObjectOfType();
+ chainsContainer = UnityEngine.Object.FindObjectOfType();
wallsContainer = UnityEngine.Object.FindObjectOfType();
eventsContainer = UnityEngine.Object.FindObjectOfType();
customEventsContainer = UnityEngine.Object.FindObjectOfType();
@@ -72,11 +78,7 @@ private void SceneLoaded(Scene arg0, LoadSceneMode arg1)
public void CheckErrors(Check check)
{
- var allNotes = notesContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
- var allWalls = wallsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
- var allEvents = eventsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
- var allCustomEvents = customEventsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
- var allBpmChanges = bpmChangesContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ bool isV3 = BeatSaberSongContainer.Instance.Map.Version.StartsWith("3");
if (errors != null)
{
@@ -107,7 +109,30 @@ public void CheckErrors(Check check)
return new ParamValue(null); // IDK
}
}).ToArray();
- errors = check.PerformCheck(allNotes, allEvents, allWalls, allCustomEvents, allBpmChanges, vals).Commit();
+
+ if (isV3)
+ {
+ var allNotes = notesContainer.LoadedObjects.Cast().Where(it => it.Type != 3).OrderBy(it => it.Time).ToList();
+ // var allBombs = notesContainer.LoadedObjects.Cast().Where(it => it.Type == 3).OrderBy(it => it.Time).ToList();
+ var allBombs = new List {};
+ var allArcs = arcsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allChains = chainsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ //var allWalls = wallsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList
+ var allWalls = new List { };
+ // var allEvents = eventsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allEvents = new List { };
+ var allCustomEvents = customEventsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allBpmChanges = bpmChangesContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ errors = check.PerformCheck(allNotes, allBombs, allArcs, allChains, allEvents, allWalls, allCustomEvents, allBpmChanges, vals).Commit();
+ } else
+ {
+ var allNotes = notesContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allWalls = wallsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allEvents = eventsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allCustomEvents = customEventsContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ var allBpmChanges = bpmChangesContainer.LoadedObjects.Cast().OrderBy(it => it.Time).ToList();
+ errors = check.PerformCheck(allNotes, allEvents, allWalls, allCustomEvents, allBpmChanges, vals).Commit();
+ }
// Highlight blocks in loaded containers in case we don't scrub far enough with MoveToTimeInBeats to load them
foreach (var block in errors.errors)
diff --git a/Checks/Check.cs b/Checks/Check.cs
index afb423c..b0a9c9b 100644
--- a/Checks/Check.cs
+++ b/Checks/Check.cs
@@ -32,6 +32,20 @@ public virtual CheckResult PerformCheck(List notes, List
throw new ArgumentException("Wrong number of parameters");
}
+ protected virtual CheckResult PerformCheck(List notes, List bombs, List arcs, List chains, List events, List walls, List customEvents, List bpmChanges)
+ {
+ throw new ArgumentException("Wrong number of parameters");
+ }
+
+ public virtual CheckResult PerformCheck(List notes, List bombs, List arcs, List chains, List events, List walls, List customEvents, List bpmChanges, params IParamValue[] vals)
+ {
+ if (vals.Length == 0 && Params.Count == 0)
+ {
+ return PerformCheck(notes, bombs, arcs, chains, events, walls, customEvents, bpmChanges);
+ }
+ throw new ArgumentException("Wrong number of parameters");
+ }
+
public virtual void OnSelected()
{
diff --git a/Checks/ExternalJS.cs b/Checks/ExternalJS.cs
index 86142f5..77dd862 100644
--- a/Checks/ExternalJS.cs
+++ b/Checks/ExternalJS.cs
@@ -222,6 +222,25 @@ private BeatmapNote FromDynamic(dynamic note, List notes)
_cutDirection == it.CutDirection;
});
}
+ private BeatmapColorNote FromDynamic(dynamic note, List notes)
+ {
+ float b = Convert.ChangeType(note.b, typeof(float));
+ int x = Convert.ChangeType(note.x, typeof(int));
+ int y = Convert.ChangeType(note.y, typeof(int));
+ int c = Convert.ChangeType(note.c, typeof(int));
+ int d = Convert.ChangeType(note.d, typeof(int));
+ int a = Convert.ChangeType(note.a, typeof(int));
+
+ return notes.Find(it =>
+ {
+ return Mathf.Approximately(b, it.Time) &&
+ x == it.LineIndex &&
+ y == it.LineLayer &&
+ c == it.Type &&
+ d == it.CutDirection &&
+ a == it.AngleOffset;
+ });
+ }
class MapData {
public float currentBPM { get; private set; }
@@ -355,6 +374,129 @@ public override CheckResult PerformCheck(List notes, List
return result;
}
+ public override CheckResult PerformCheck(List notes, List bombs, List arcs, List chains, List events, List walls, List customEvents, List bpmChanges, params IParamValue[] vals)
+ {
+ result.Clear();
+
+ var atsc = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.Note).AudioTimeSyncController;
+ var currentBeat = atsc.CurrentBeat;
+
+ var collection = BeatmapObjectContainerCollection.GetCollectionForType(BeatmapObject.ObjectType.BpmChange);
+ var lastBPMChange = collection.FindLastBpm(atsc.CurrentBeat);
+ var currentBPM = lastBPMChange?.Bpm ?? atsc.Song.BeatsPerMinute;
+
+ var originalNotes = notes.Select(it => new V3.ColorNote(engine, it)).ToArray();
+ var originalBombs = bombs.Select(it => new V3.BombNote(engine, it)).ToArray();
+ var originalArcs = arcs.Select(it => new V3.Arc(engine, it)).ToArray();
+ var originalChains = chains.Select(it => new V3.Chain(engine, it)).ToArray();
+ var originalWalls = walls.Select(it => new V3.Wall(engine, it)).ToArray();
+ var originalEvents = events.Select(it => new V3.Event(engine, it)).ToArray();
+ var originalCustomEvents = customEvents.Select(it => new V3.CustomEvent(engine, it)).ToArray();
+ var originalBpmChanges = bpmChanges.Select(it => new V3.BpmChange(engine, it)).ToArray();
+
+ try
+ {
+ var valsToString = vals.Select(paramValue =>
+ {
+ switch (paramValue)
+ {
+ case ParamValue pvf:
+ return pvf.value.ToString();
+ case ParamValue pvs:
+ return $"\"{pvs.value}\"";
+ case ParamValue pvb:
+ return pvb.value ? "true" : "false";
+ default:
+ return "null";
+ }
+ });
+
+ var valsCombined = string.Join(",", valsToString);
+
+ TimeLog("Init");
+
+ var tmp = engine
+ .SetValue("notes", originalNotes)
+ .SetValue("bombs", originalBombs)
+ .SetValue("arcs", originalArcs)
+ .SetValue("chains", originalChains)
+ .SetValue("walls", originalWalls)
+ .SetValue("events", originalEvents)
+ .SetValue("customEvents", originalCustomEvents)
+ .SetValue("bpmChanges", originalBpmChanges)
+ .SetValue("data", new MapData(
+ currentBPM,
+ atsc.Song.BeatsPerMinute,
+ BeatSaberSongContainer.Instance.DifficultyData.NoteJumpMovementSpeed,
+ BeatSaberSongContainer.Instance.DifficultyData.NoteJumpStartBeatOffset,
+ BeatSaberSongContainer.Instance.DifficultyData.ParentBeatmapSet.BeatmapCharacteristicName,
+ BeatSaberSongContainer.Instance.DifficultyData.Difficulty,
+ (BeatSaberSongContainer.Instance.DifficultyData.ParentBeatmapSet.BeatmapCharacteristicName == "360Degree" || BeatSaberSongContainer.Instance.DifficultyData.ParentBeatmapSet.BeatmapCharacteristicName == "90Degree") ? BeatSaberSongContainer.Instance.Song.AllDirectionsEnvironmentName : BeatSaberSongContainer.Instance.Song.EnvironmentName
+
+ ))
+ .SetValue("cursor", currentBeat)
+ .SetValue("minTime", 0.24f)
+ .SetValue("maxTime", 0.75f)
+ .SetValue("addError", new Action