添加对 Core 的直接引用

This commit is contained in:
OLDREDSTONE
2025-03-25 15:49:57 +08:00
parent 24907abedb
commit 06c19bf10a
296 changed files with 24961 additions and 2 deletions
+219
View File
@@ -0,0 +1,219 @@
using System.Reflection;
namespace RhythmBase.Components
{
/// <summary>
/// Variables.
/// </summary>
public sealed class RDVariables
{
/// <summary>
/// Enumeration representing different ranks.
/// </summary>
public enum RDRank
{
/// <summary>
/// S+ rank.
/// </summary>
SPlus,
/// <summary>
/// S rank.
/// </summary>
S,
/// <summary>
/// A rank.
/// </summary>
A,
/// <summary>
/// B rank.
/// </summary>
B,
/// <summary>
/// C rank.
/// </summary>
C,
/// <summary>
/// D rank.
/// </summary>
D,
/// <summary>
/// F rank.
/// </summary>
F,
}
#pragma warning disable CS1591
#pragma warning disable IDE1006
public RDVariables()
{
i = new int[10];
f = new float[10];
b = new bool[10];
}
public static int Rand(int value) =>
(value > 0
? Random.Shared.Next(1, value)
: -Random.Shared.Next(1, -value)
) + 1;
public static bool atLeastRank(string rank) => rank switch
{
"S+" => SimulateCurrentRank <= RDRank.SPlus,
"S" => SimulateCurrentRank <= RDRank.S,
"A" => SimulateCurrentRank <= RDRank.A,
"B" => SimulateCurrentRank <= RDRank.B,
"C" => SimulateCurrentRank <= RDRank.C,
"D" => SimulateCurrentRank <= RDRank.D,
"F" => SimulateCurrentRank <= RDRank.F,
_ => throw new ArgumentException("Invalid rank"),
};
public static bool atLeastNPerfects(int hitsToCheck, int numberOfPerfects) => numberOfPerfects / (float)hitsToCheck > SimulateAtLeastNPerfectsSuccessRate;
public object this[string variableName]
{
get => variableName switch
{
['i', char ii] => i[ii - '0'],
['f', char fi] => f[fi - '0'],
['b', char bi] => b[bi - '0'],
_ => GetType().GetField(variableName)?.GetValue(this)!,
};
set
{
switch (variableName)
{
case ['i', char ii]:
i[ii - '0'] = value is int v1 ? v1 : throw new ArgumentException("Value is not an integer.");
break;
case ['f', char fi]:
f[fi] = value is float v2 ? v2 : throw new ArgumentException("Value is not a float.");
break;
case ['b', char bi]:
b[bi] = value is bool v3 ? v3 : throw new ArgumentException("Value is not a boolean.");
break;
default:
FieldInfo? field = GetType().GetField(variableName);
field?.SetValue(this, value);
break;
}
}
}
/// <summary>
/// Integer variables.
/// </summary>
public readonly int[] i;
/// <summary>
/// Float variables.
/// </summary>
public readonly float[] f;
/// <summary>
/// Boolean variables.
/// </summary>
public readonly bool[] b;
public int barNumber;
public int buttonPressCount;
public int missesToCrackHeart;
public int numEarlyHits;
public int numLateHits;
public int numMisses;
public int numPerfectHits;
public float bpm;
public float deltaTime;
public float levelSpeed;
public float numMistakes;
public float numMistakesP1;
public float numMistakesP2;
public float shockwaveDistortionMultiplier;
public float shockwaveDurationMultiplier;
public float shockwaveSizeMultiplier;
public float statusSignWidth;
public bool activeDialogues;
public bool activeDialoguesImmediately;
public bool alternativeMatrix;
public bool anyPlayerPress;
public bool autoplay;
public bool booleansDefaultToTrue;
public bool charsOnlyOnStart;
public bool cpuIsP2On2P;
public bool disableRowChangeWarningFlashes;
public bool downPress;
public bool hideHandsOnStart;
public bool invisibleChars;
public bool invisibleHeart;
public bool leftPress;
public bool noBananaBeats;
public bool noHands;
public bool noHitFlashBorder;
public bool noHitStrips;
public bool noOneshotShadows;
public bool noRowAnimsOnStart;
public bool noSmartJudgment;
public bool p1IsPressed;
public bool p1Press;
public bool p1Release;
public bool p2IsPressed;
public bool p2Press;
public bool p2Release;
public bool rightPress;
public bool rotateShake;
public bool rowReflectionsJumping;
public bool skippableRankScreen;
public bool skipRankText;
public bool smoothShake;
public bool upPress;
public bool useFlashFontForFloatingText;
public bool wobblyLines;
public static float SimulateAtLeastNPerfectsSuccessRate { get; set; } = 0.9f;
public static RDRank SimulateCurrentRank { get; set; } = RDRank.S;
}
}