truly, and dearly, finished?

NOPE! UNITY ANIMATION BUG :D
This commit is contained in:
AstrlJelly 2023-12-23 00:27:47 -05:00
parent b3542dfe6b
commit 8e3a1835fc
3 changed files with 42 additions and 173 deletions

View file

@ -1095,7 +1095,6 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 1612270337899650120} - component: {fileID: 1612270337899650120}
- component: {fileID: 1827108650296241172} - component: {fileID: 1827108650296241172}
- component: {fileID: 8880821737167752546}
m_Layer: 0 m_Layer: 0
m_Name: Big m_Name: Big
m_TagString: Untagged m_TagString: Untagged
@ -1170,27 +1169,6 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!95 &8880821737167752546
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2519758725549188593}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: d43b9052abbcc984bafbb1cc011790fa, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
--- !u!1 &2548421022527636111 --- !u!1 &2548421022527636111
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1334,12 +1312,12 @@ MonoBehaviour:
TackAnim: {fileID: 8591333713642157499} TackAnim: {fileID: 8591333713642157499}
CartGuyParentAnim: {fileID: 8490229799144356405} CartGuyParentAnim: {fileID: 8490229799144356405}
CartGuyAnim: {fileID: 2660979752167028621} CartGuyAnim: {fileID: 2660979752167028621}
GearAnims: Gears:
- {fileID: 2010620652897398612} - {fileID: 4255429133276147351}
- {fileID: 8277077324340739918} - {fileID: 6673086640620398125}
- {fileID: 8880821737167752546} - {fileID: 1612270337899650120}
- {fileID: 8634187518571851645} - {fileID: 8638372891015524707}
- {fileID: 1267443179515578174} - {fileID: 8463963395356207829}
bossAnnoyed: 0 bossAnnoyed: 0
--- !u!1 &2707801222513399487 --- !u!1 &2707801222513399487
GameObject: GameObject:
@ -1550,7 +1528,6 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 8463963395356207829} - component: {fileID: 8463963395356207829}
- component: {fileID: 5740312479299997546} - component: {fileID: 5740312479299997546}
- component: {fileID: 1267443179515578174}
m_Layer: 0 m_Layer: 0
m_Name: Big m_Name: Big
m_TagString: Untagged m_TagString: Untagged
@ -1625,27 +1602,6 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!95 &1267443179515578174
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3884870158331433142}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: d43b9052abbcc984bafbb1cc011790fa, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
--- !u!1 &3967206461167035201 --- !u!1 &3967206461167035201
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1942,7 +1898,6 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 6673086640620398125} - component: {fileID: 6673086640620398125}
- component: {fileID: 4781199580935872767} - component: {fileID: 4781199580935872767}
- component: {fileID: 8277077324340739918}
m_Layer: 0 m_Layer: 0
m_Name: Small m_Name: Small
m_TagString: Untagged m_TagString: Untagged
@ -2017,27 +1972,6 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!95 &8277077324340739918
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5027933940018834288}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: d43b9052abbcc984bafbb1cc011790fa, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
--- !u!1 &5095248494043426006 --- !u!1 &5095248494043426006
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -2513,7 +2447,6 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 4255429133276147351} - component: {fileID: 4255429133276147351}
- component: {fileID: 9177278018785002683} - component: {fileID: 9177278018785002683}
- component: {fileID: 2010620652897398612}
m_Layer: 0 m_Layer: 0
m_Name: Big m_Name: Big
m_TagString: Untagged m_TagString: Untagged
@ -2588,27 +2521,6 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!95 &2010620652897398612
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6284485184760809741}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: d43b9052abbcc984bafbb1cc011790fa, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0
--- !u!1 &6575509780232604342 --- !u!1 &6575509780232604342
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -3565,7 +3477,6 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 8638372891015524707} - component: {fileID: 8638372891015524707}
- component: {fileID: 18350484223611572} - component: {fileID: 18350484223611572}
- component: {fileID: 8634187518571851645}
m_Layer: 0 m_Layer: 0
m_Name: Small m_Name: Small
m_TagString: Untagged m_TagString: Untagged
@ -3640,24 +3551,3 @@ SpriteRenderer:
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
m_MaskInteraction: 0 m_MaskInteraction: 0
m_SpriteSortPoint: 0 m_SpriteSortPoint: 0
--- !u!95 &8634187518571851645
Animator:
serializedVersion: 5
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9071785972026254626}
m_Enabled: 1
m_Avatar: {fileID: 0}
m_Controller: {fileID: 9100000, guid: d43b9052abbcc984bafbb1cc011790fa, type: 2}
m_CullingMode: 0
m_UpdateMode: 0
m_ApplyRootMotion: 0
m_LinearVelocityBlending: 0
m_StabilizeFeet: 0
m_WarningMessage:
m_HasTransformHierarchy: 1
m_AllowConstantClipSamplingOptimization: 1
m_KeepAnimatorStateOnDisable: 0
m_WriteDefaultValuesOnDisable: 0

View file

@ -45,7 +45,7 @@ AnimatorState:
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0} m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0 m_IKOnFeet: 0
m_WriteDefaultValues: 1 m_WriteDefaultValues: 0
m_Mirror: 0 m_Mirror: 0
m_SpeedParameterActive: 0 m_SpeedParameterActive: 0
m_MirrorParameterActive: 0 m_MirrorParameterActive: 0

View file

@ -114,23 +114,19 @@ namespace HeavenStudio.Games.Loaders
{ {
function = delegate { function = delegate {
var e = eventCaller.currentEntity; var e = eventCaller.currentEntity;
MeatGrinder.instance.Gears(e.beat, e.length, e["ease"], e["type"], e["speed"]); MeatGrinder.instance.ChangeGears(e.beat, e.length, e["ease"], e["speed"]);
}, },
resizable = true, resizable = true,
defaultLength = 1, defaultLength = 1,
parameters = new List<Param>() { parameters = new List<Param>() {
new Param("type", MeatGrinder.GearMode.Constant, "Ease", "What type of movement will the gears use?", new List<Param.CollapseParam>() {
new((x, y) => (int)x != (int)MeatGrinder.GearMode.None, new string[] { "ease" }),
}),
new Param("speed", new EntityTypes.Float(0, 10, 1), "Speed", "How fast will the gears go?"), new Param("speed", new EntityTypes.Float(0, 10, 1), "Speed", "How fast will the gears go?"),
new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "What ease will the gears speed up with?"), new Param("ease", Util.EasingFunction.Ease.Linear, "Ease", "What ease will the gears speed up/slow down with?"),
} }
}, },
} },
// , new List<string>() { "pco", "normal", "repeat" },
// new List<string>() { "pco", "normal", "repeat" }, "pcomeat", "en",
// "pcomeat", "en", new List<string>() { }
// new List<string>() { }
); );
} }
} }
@ -169,7 +165,7 @@ namespace HeavenStudio.Games
} }
} }
private static List<RiqEntity> queuedMeats = new(); // private static List<RiqEntity> queuedMeats = new();
[Header("Objects")] [Header("Objects")]
public GameObject MeatBase; public GameObject MeatBase;
@ -179,7 +175,7 @@ namespace HeavenStudio.Games
public Animator TackAnim; public Animator TackAnim;
[SerializeField] Animator CartGuyParentAnim; [SerializeField] Animator CartGuyParentAnim;
[SerializeField] Animator CartGuyAnim; [SerializeField] Animator CartGuyAnim;
[SerializeField] Animator[] GearAnims; [SerializeField] Transform[] Gears;
[Header("Variables")] [Header("Variables")]
private bool bossBop = true; private bool bossBop = true;
@ -188,9 +184,7 @@ namespace HeavenStudio.Games
private bool cartPhone = false; private bool cartPhone = false;
private string cartDir = "Left"; private string cartDir = "Left";
private UpdateEasing gearEase; private UpdateEasing gearEase;
private GearMode gearType = GearMode.Constant;
private float oldGearSpeed = 1; private float oldGearSpeed = 1;
private float currentGearSpeed = 1;
private float newGearSpeed = 1; private float newGearSpeed = 1;
private const string sfxName = "meatGrinder/"; private const string sfxName = "meatGrinder/";
@ -217,13 +211,6 @@ namespace HeavenStudio.Games
Left, Left,
} }
public enum GearMode
{
None,
Constant,
Beat,
}
protected static bool IA_PadAny(out double dt) protected static bool IA_PadAny(out double dt)
{ {
return PlayerInput.GetPadDown(InputController.ActionsPad.East, out dt) return PlayerInput.GetPadDown(InputController.ActionsPad.East, out dt)
@ -246,6 +233,7 @@ namespace HeavenStudio.Games
private void Update() private void Update()
{ {
var cond = Conductor.instance;
if (PlayerInput.GetIsAction(InputAction_Press) && !IsExpectingInputNow(InputAction_Press)) if (PlayerInput.GetIsAction(InputAction_Press) && !IsExpectingInputNow(InputAction_Press))
{ {
TackAnim.DoScaledAnimationAsync("TackEmptyHit", 0.5f); TackAnim.DoScaledAnimationAsync("TackEmptyHit", 0.5f);
@ -265,20 +253,24 @@ namespace HeavenStudio.Games
passedTurns.Clear(); passedTurns.Clear();
} }
var currentGearSpeed = newGearSpeed;
if (gearEase.length != 0) if (gearEase.length != 0)
{ {
float normalizedBeat = Conductor.instance.GetPositionFromBeat(gearEase.beat, gearEase.length); float normalizedBeat = cond.GetPositionFromBeat(gearEase.beat, gearEase.length);
Util.EasingFunction.Function func = Util.EasingFunction.GetEasingFunction(gearEase.ease); Util.EasingFunction.Function func = Util.EasingFunction.GetEasingFunction(gearEase.ease);
currentGearSpeed = func(oldGearSpeed, newGearSpeed, normalizedBeat); currentGearSpeed = func(oldGearSpeed, newGearSpeed, normalizedBeat);
Debug.Log(currentGearSpeed);
if (normalizedBeat >= 1) cartEase.length = 0; if (normalizedBeat >= 1) cartEase.length = 0;
} }
foreach (Transform gear in Gears)
{
double newZ = Time.deltaTime * currentGearSpeed * 50 * (gear.name == "Big" ? -1 : 1) / cond.pitchedSecPerBeat;
gear.Rotate(new Vector3(0, 0, (float)newZ));
}
if (cartEase.length != 0) if (cartEase.length != 0)
{ {
// CartGuyParentAnim.gameObject.SetActive(true);
if (cartPhone) CartGuyAnim.Play("Phone", 0, 0); if (cartPhone) CartGuyAnim.Play("Phone", 0, 0);
float normalizedBeat = Conductor.instance.GetPositionFromBeat(cartEase.beat, cartEase.length); float normalizedBeat = cond.GetPositionFromBeat(cartEase.beat, cartEase.length);
Util.EasingFunction.Function func = Util.EasingFunction.GetEasingFunction(cartEase.ease); Util.EasingFunction.Function func = Util.EasingFunction.GetEasingFunction(cartEase.ease);
float newPos = func(0f, 1f, normalizedBeat); float newPos = func(0f, 1f, normalizedBeat);
CartGuyParentAnim.DoNormalizedAnimation($"Move{cartDir}", newPos); CartGuyParentAnim.DoNormalizedAnimation($"Move{cartDir}", newPos);
@ -286,10 +278,6 @@ namespace HeavenStudio.Games
} }
CartGuyParentAnim.gameObject.SetActive(cartEase.length != 0); CartGuyParentAnim.gameObject.SetActive(cartEase.length != 0);
if (gearType != GearMode.Beat) {
UpdateGears();
}
} }
public override void OnLateBeatPulse(double beat) public override void OnLateBeatPulse(double beat)
@ -303,22 +291,6 @@ namespace HeavenStudio.Games
Debug.Log(cartPhone ? "PhoneBop" : "Bop"); Debug.Log(cartPhone ? "PhoneBop" : "Bop");
CartGuyAnim.DoScaledAnimationAsync(cartPhone ? "PhoneBop" : "Bop", 0.5f); CartGuyAnim.DoScaledAnimationAsync(cartPhone ? "PhoneBop" : "Bop", 0.5f);
} }
if (gearType == GearMode.Beat) {
UpdateGears();
}
}
private void UpdateGears()
{
Action<Animator> action = gearType switch {
GearMode.Constant => gear => gear.DoNormalizedAnimation(gear.gameObject.name == "Small" ? "SpinForeverLeft" : "SpinForeverRight", (Conductor.instance.songPositionInBeats / (10 * newGearSpeed)) % 1),
GearMode.Beat => gear => gear.DoScaledAnimationAsync(gear.gameObject.name == "Small" ? "SpinOnceLeft" : "SpinOnceRight", 0.5f),
_ => gear => gear.Play("Nothing", 0, 0), // GearMode.None
};
foreach (Animator gear in GearAnims) {
action.Invoke(gear);
}
} }
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
@ -328,21 +300,29 @@ namespace HeavenStudio.Games
foreach (var interval in queuedIntervals) StartInterval(interval.beat, interval.length, beat, interval.autoPassTurn); foreach (var interval in queuedIntervals) StartInterval(interval.beat, interval.length, beat, interval.autoPassTurn);
queuedIntervals.Clear(); queuedIntervals.Clear();
} }
if (queuedMeats.Count > 0) // if (queuedMeats.Count > 0)
{ // {
foreach (var meat in queuedMeats) MeatToss(meat.beat, meat["bacon"], meat["tackReaction"], meat["tackReactionBeats"], meat["bossReaction"], meat["bossReactionBeats"]); // foreach (var meat in queuedMeats) MeatToss(meat.beat, meat["bacon"], meat["tackReaction"], meat["tackReactionBeats"], meat["bossReaction"], meat["bossReactionBeats"]);
queuedMeats.Clear(); // queuedMeats.Clear();
} // }
OnPlay(beat); OnPlay(beat);
} }
public override void OnPlay(double beat) public override void OnPlay(double beat)
{ {
RiqEntity cg = GameManager.instance.Beatmap.Entities.Find(c => c.datamodel == "meatGrinder/cartGuy"); List<RiqEntity> allEntities = GameManager.instance.Beatmap.Entities.FindAll(c => c.datamodel[.."meatGrinder".Length] == "meatGrinder");
if (cg != null) RiqEntity cg = allEntities.Find(c => c.datamodel == "meatGrinder/cartGuy");
{ if (cg != null) {
CartGuy(cg.beat, cg.length, cg["spider"], cg["direction"], cg["ease"]); CartGuy(cg.beat, cg.length, cg["spider"], cg["direction"], cg["ease"]);
} }
RiqEntity gr = allEntities.Find(c => c.datamodel == "meatGrinder/gears");
if (gr != null) {
ChangeGears(gr.beat, gr.length, gr["ease"], gr["speed"]);
}
List<RiqEntity> meats = allEntities.FindAll(c => c.datamodel == "meatGrinder/MeatToss" && beat > c.beat && beat < c.beat + 1);
foreach (var meat in meats) {
MeatToss(meat.beat, meat["bacon"], meat["tackReaction"], meat["tackReactionBeats"], meat["bossReaction"], meat["bossReactionBeats"]);
}
} }
private List<RiqEntity> GetRelevantMeatCallsBetweenBeat(double beat, double endBeat) private List<RiqEntity> GetRelevantMeatCallsBetweenBeat(double beat, double endBeat)
@ -391,14 +371,13 @@ namespace HeavenStudio.Games
cartDir = direction == 0 ? "Right" : "Left"; cartDir = direction == 0 ? "Right" : "Left";
} }
public void Gears(double beat, float length, int ease, int type, float speed) public void ChangeGears(double beat, float length, int ease, float speed)
{ {
gearEase = new() { gearEase = new() {
beat = beat, beat = beat,
length = length, length = length,
ease = (Util.EasingFunction.Ease)ease, ease = (Util.EasingFunction.Ease)ease,
}; };
gearType = (GearMode)type;
oldGearSpeed = newGearSpeed; oldGearSpeed = newGearSpeed;
newGearSpeed = speed; newGearSpeed = speed;
@ -455,7 +434,7 @@ namespace HeavenStudio.Games
public static void QueueMeatToss(RiqEntity entity) public static void QueueMeatToss(RiqEntity entity)
{ {
queuedMeats.Add(entity); // queuedMeats.Add(entity);
} }
public void MeatToss(double beat, bool bacon, int tackReaction, float tackReactionBeats, int bossReaction, float bossReactionBeats) public void MeatToss(double beat, bool bacon, int tackReaction, float tackReactionBeats, int bossReaction, float bossReactionBeats)