mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-10 03:35:10 +00:00
Fix Anim Block, Fine Semitones in SFX Block (#724)
* Fix Anim Block, Fine Semitones in SFX Block * i was recursively getting the anim object path BACKWARDS. oops * added fine semitones in the sfx block, thanks Vincells * GetPitchFromSemitones uses a float instead of an int now * revert the semitones thing * okay that's better use cents correctly
This commit is contained in:
parent
1a341add6a
commit
b491c9ca08
2 changed files with 13 additions and 16 deletions
|
@ -1171,16 +1171,16 @@ namespace HeavenStudio
|
||||||
var gm = GameManager.instance;
|
var gm = GameManager.instance;
|
||||||
Minigame game = gm.GetGameInfo(gm.currentGame);
|
Minigame game = gm.GetGameInfo(gm.currentGame);
|
||||||
if (game != null) {
|
if (game != null) {
|
||||||
var animators = gm.minigameObj.transform.GetComponentsInChildren<Animator>();
|
Animator[] animators = gm.minigameObj.transform.GetComponentsInChildren<Animator>();
|
||||||
// not in an update loop so it's fine :3
|
// not in an update loop so it's fine :3
|
||||||
((EntityTypes.DropdownObj)e["animator"]).SetValues(animators.Select(anim => {
|
((EntityTypes.DropdownObj)e["animator"]).SetValues(animators.Select(anim => {
|
||||||
var obj = anim.gameObject;
|
Transform obj = anim.transform;
|
||||||
List<string> path = new() { obj.name };
|
List<string> path = new() { obj.name };
|
||||||
for (int i = 0; i < 10; i++)
|
for (int i = 0; i < 10; i++) // not a while loop because i don't trust myself
|
||||||
{
|
{
|
||||||
if (obj.transform.parent == null || obj.transform.parent.name == game.name) break;
|
if (obj.parent.name == game.name || obj.parent == null) break;
|
||||||
obj = obj.transform.parent.gameObject;
|
obj = obj.parent;
|
||||||
path.Add(obj.name);
|
path.Insert(0, obj.name);
|
||||||
}
|
}
|
||||||
return string.Join('/', path);
|
return string.Join('/', path);
|
||||||
}).ToList());
|
}).ToList());
|
||||||
|
@ -1244,10 +1244,11 @@ namespace HeavenStudio
|
||||||
}), "Get SFX", "Get all the sfx in the selected minigame."),
|
}), "Get SFX", "Get all the sfx in the selected minigame."),
|
||||||
new Param("sfxName", new EntityTypes.Dropdown(), "SFX Name", "The name of the sfx to play."),
|
new Param("sfxName", new EntityTypes.Dropdown(), "SFX Name", "The name of the sfx to play."),
|
||||||
new Param("useSemitones", false, "Use Semitones", "Toggle to use semitones instead of straight pitch.", new() {
|
new Param("useSemitones", false, "Use Semitones", "Toggle to use semitones instead of straight pitch.", new() {
|
||||||
new((x, e) => (bool)x, "semitones"),
|
new((x, e) => (bool)x, "semitones", "cents"),
|
||||||
new((x, e) => !(bool)x, "pitch"),
|
new((x, e) => !(bool)x, "pitch"),
|
||||||
}),
|
}),
|
||||||
new Param("semitones", new EntityTypes.Integer(-24, 24, 0), "Semitones", "The semitones of the sfx."),
|
new Param("semitones", new EntityTypes.Integer(-24, 24, 0), "Semitones", "The semitones of the sfx."),
|
||||||
|
new Param("cents", new EntityTypes.Integer(-100, 100, 0), "Cents", "The cents of the sfx."),
|
||||||
new Param("pitch", new EntityTypes.Float(0, 5, 1), "Pitch", "The pitch of the sfx."),
|
new Param("pitch", new EntityTypes.Float(0, 5, 1), "Pitch", "The pitch of the sfx."),
|
||||||
new Param("volume", new EntityTypes.Float(0, 2, 1), "Volume", "The volume of the sfx."),
|
new Param("volume", new EntityTypes.Float(0, 2, 1), "Volume", "The volume of the sfx."),
|
||||||
new Param("offset", new EntityTypes.Integer(-500, 500), "Offset (ms)", "The offset of the sfx in milliseconds."),
|
new Param("offset", new EntityTypes.Integer(-500, 500), "Offset (ms)", "The offset of the sfx in milliseconds."),
|
||||||
|
@ -1255,7 +1256,8 @@ namespace HeavenStudio
|
||||||
},
|
},
|
||||||
preFunction : delegate {
|
preFunction : delegate {
|
||||||
var e = eventCaller.currentEntity;
|
var e = eventCaller.currentEntity;
|
||||||
float pitch = e["useSemitones"] ? SoundByte.GetPitchFromSemiTones(e["semitones"], true) : e["pitch"];
|
float pitch = e["pitch"];
|
||||||
|
if (e["useSemitones"]) pitch = SoundByte.GetPitchFromCents((e["semitones"] * 100) + e["cents"], false);
|
||||||
GameManager.PlaySFXArbitrary(e.beat, e.length, e["game"].CurrentValue, e["sfxName"].CurrentValue, pitch, e["volume"], e["loop"], e["offset"]);
|
GameManager.PlaySFXArbitrary(e.beat, e.length, e["game"].CurrentValue, e["sfxName"].CurrentValue, pitch, e["volume"], e["loop"], e["offset"]);
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
|
|
|
@ -460,14 +460,9 @@ namespace HeavenStudio.Util
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static float GetPitchFromSemiTones(int semiTones, bool pitchToMusic)
|
public static float GetPitchFromSemiTones(int semiTones, bool pitchToMusic)
|
||||||
{
|
{
|
||||||
if (pitchToMusic)
|
var newSemitones = Mathf.Pow(2f, (1f / 12f) * semiTones);
|
||||||
{
|
if (pitchToMusic) newSemitones *= Conductor.instance.musicSource.pitch;
|
||||||
return Mathf.Pow(2f, (1f / 12f) * semiTones) * Conductor.instance.musicSource.pitch;
|
return newSemitones;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Mathf.Pow(2f, (1f / 12f) * semiTones);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the semitones from a pitch.
|
/// Returns the semitones from a pitch.
|
||||||
|
|
Loading…
Reference in a new issue