curves for meat trajectory
This commit is contained in:
parent
376bbcdc9e
commit
52d3ca57bd
|
|
@ -31,7 +31,7 @@ Transform:
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 6108272155782336078}
|
- {fileID: 6108272155782336078}
|
||||||
m_Father: {fileID: 544937591884515791}
|
m_Father: {fileID: 544937591884515791}
|
||||||
m_RootOrder: 4
|
m_RootOrder: 7
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!95 &8490229799144356405
|
--- !u!95 &8490229799144356405
|
||||||
Animator:
|
Animator:
|
||||||
|
|
@ -207,8 +207,13 @@ MonoBehaviour:
|
||||||
m_Script: {fileID: 11500000, guid: f5e4b8f117d68e142ae364804ec945d3, type: 3}
|
m_Script: {fileID: 11500000, guid: f5e4b8f117d68e142ae364804ec945d3, type: 3}
|
||||||
m_Name:
|
m_Name:
|
||||||
m_EditorClassIdentifier:
|
m_EditorClassIdentifier:
|
||||||
startBeat: 0
|
startPosition: {fileID: 7449121522870419912}
|
||||||
meatType: 0
|
startPositionALt: {fileID: 4782971190098862075}
|
||||||
|
hitPosition: {fileID: 2492873460742809070}
|
||||||
|
missPosition: {fileID: 7533979600266239065}
|
||||||
|
meatFlyHeight: 4.4
|
||||||
|
meatFlyHeightAlt: 3.64
|
||||||
|
showAltCurve: 0
|
||||||
meats:
|
meats:
|
||||||
- {fileID: -9124615959790710355, guid: adbc5b443bdc23e469209cc4f602d17d, type: 3}
|
- {fileID: -9124615959790710355, guid: adbc5b443bdc23e469209cc4f602d17d, type: 3}
|
||||||
- {fileID: -4224877059003839859, guid: adbc5b443bdc23e469209cc4f602d17d, type: 3}
|
- {fileID: -4224877059003839859, guid: adbc5b443bdc23e469209cc4f602d17d, type: 3}
|
||||||
|
|
@ -234,6 +239,37 @@ Animator:
|
||||||
m_AllowConstantClipSamplingOptimization: 1
|
m_AllowConstantClipSamplingOptimization: 1
|
||||||
m_KeepAnimatorStateOnDisable: 0
|
m_KeepAnimatorStateOnDisable: 0
|
||||||
m_WriteDefaultValuesOnDisable: 0
|
m_WriteDefaultValuesOnDisable: 0
|
||||||
|
--- !u!1 &344575782839395223
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 4782971190098862075}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: MeatStartPosAlt
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &4782971190098862075
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 344575782839395223}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: -25, y: 4, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 544937591884515791}
|
||||||
|
m_RootOrder: 1
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &471691632641964123
|
--- !u!1 &471691632641964123
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -354,7 +390,7 @@ Transform:
|
||||||
- {fileID: 8401927975952338944}
|
- {fileID: 8401927975952338944}
|
||||||
- {fileID: 4149366084315632544}
|
- {fileID: 4149366084315632544}
|
||||||
m_Father: {fileID: 544937591884515791}
|
m_Father: {fileID: 544937591884515791}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 5
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!95 &8591333713642157499
|
--- !u!95 &8591333713642157499
|
||||||
Animator:
|
Animator:
|
||||||
|
|
@ -491,7 +527,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1113279616887289042}
|
m_Father: {fileID: 1113279616887289042}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 2
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!212 &1495044360246153142
|
--- !u!212 &1495044360246153142
|
||||||
SpriteRenderer:
|
SpriteRenderer:
|
||||||
|
|
@ -1268,6 +1304,9 @@ Transform:
|
||||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
|
- {fileID: 7449121522870419912}
|
||||||
|
- {fileID: 4782971190098862075}
|
||||||
|
- {fileID: 2492873460742809070}
|
||||||
- {fileID: 2932735252070355021}
|
- {fileID: 2932735252070355021}
|
||||||
- {fileID: 4773680412020886884}
|
- {fileID: 4773680412020886884}
|
||||||
- {fileID: 7318783844351071632}
|
- {fileID: 7318783844351071632}
|
||||||
|
|
@ -1299,6 +1338,37 @@ MonoBehaviour:
|
||||||
cartBeat: 1.7976931348623157e+308
|
cartBeat: 1.7976931348623157e+308
|
||||||
cartLength: 0
|
cartLength: 0
|
||||||
cartSpider: 0
|
cartSpider: 0
|
||||||
|
--- !u!1 &2707801222513399487
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 2492873460742809070}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: MeatHitPos
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &2492873460742809070
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 2707801222513399487}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: 2.67, y: -0.29, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 544937591884515791}
|
||||||
|
m_RootOrder: 2
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &3432557403964010436
|
--- !u!1 &3432557403964010436
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -1413,7 +1483,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1113279616887289042}
|
m_Father: {fileID: 1113279616887289042}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 4
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!212 &5553728808981219509
|
--- !u!212 &5553728808981219509
|
||||||
SpriteRenderer:
|
SpriteRenderer:
|
||||||
|
|
@ -1805,7 +1875,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1113279616887289042}
|
m_Father: {fileID: 1113279616887289042}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 1
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!212 &2744829955141411905
|
--- !u!212 &2744829955141411905
|
||||||
SpriteRenderer:
|
SpriteRenderer:
|
||||||
|
|
@ -2003,7 +2073,7 @@ Transform:
|
||||||
- {fileID: 6181761682720629539}
|
- {fileID: 6181761682720629539}
|
||||||
- {fileID: 267186869494077813}
|
- {fileID: 267186869494077813}
|
||||||
m_Father: {fileID: 544937591884515791}
|
m_Father: {fileID: 544937591884515791}
|
||||||
m_RootOrder: 3
|
m_RootOrder: 6
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!95 &8611037719571569512
|
--- !u!95 &8611037719571569512
|
||||||
Animator:
|
Animator:
|
||||||
|
|
@ -2055,6 +2125,7 @@ Transform:
|
||||||
m_LocalScale: {x: 0.71, y: 0.71, z: 0.71}
|
m_LocalScale: {x: 0.71, y: 0.71, z: 0.71}
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children:
|
m_Children:
|
||||||
|
- {fileID: 7533979600266239065}
|
||||||
- {fileID: 612581083556194476}
|
- {fileID: 612581083556194476}
|
||||||
- {fileID: 5343923506035710304}
|
- {fileID: 5343923506035710304}
|
||||||
- {fileID: 789457928850181753}
|
- {fileID: 789457928850181753}
|
||||||
|
|
@ -2213,7 +2284,7 @@ GameObject:
|
||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 0
|
m_IsActive: 1
|
||||||
--- !u!4 &2932735252070355021
|
--- !u!4 &2932735252070355021
|
||||||
Transform:
|
Transform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
@ -2228,6 +2299,37 @@ Transform:
|
||||||
m_Children:
|
m_Children:
|
||||||
- {fileID: 4035877382569997717}
|
- {fileID: 4035877382569997717}
|
||||||
m_Father: {fileID: 544937591884515791}
|
m_Father: {fileID: 544937591884515791}
|
||||||
|
m_RootOrder: 3
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
|
--- !u!1 &5713667132269415626
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7533979600266239065}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: MeatMissPos
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &7533979600266239065
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 5713667132269415626}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: -1.7, y: -0.11, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 1113279616887289042}
|
||||||
m_RootOrder: 0
|
m_RootOrder: 0
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &5905250936621372194
|
--- !u!1 &5905250936621372194
|
||||||
|
|
@ -2260,7 +2362,7 @@ Transform:
|
||||||
m_ConstrainProportionsScale: 0
|
m_ConstrainProportionsScale: 0
|
||||||
m_Children: []
|
m_Children: []
|
||||||
m_Father: {fileID: 1113279616887289042}
|
m_Father: {fileID: 1113279616887289042}
|
||||||
m_RootOrder: 2
|
m_RootOrder: 3
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!212 &8851705103136115615
|
--- !u!212 &8851705103136115615
|
||||||
SpriteRenderer:
|
SpriteRenderer:
|
||||||
|
|
@ -2541,7 +2643,7 @@ Transform:
|
||||||
- {fileID: 3600842165078314753}
|
- {fileID: 3600842165078314753}
|
||||||
- {fileID: 4316543350587402345}
|
- {fileID: 4316543350587402345}
|
||||||
m_Father: {fileID: 544937591884515791}
|
m_Father: {fileID: 544937591884515791}
|
||||||
m_RootOrder: 1
|
m_RootOrder: 4
|
||||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &6809729426963480446
|
--- !u!1 &6809729426963480446
|
||||||
GameObject:
|
GameObject:
|
||||||
|
|
@ -3083,6 +3185,37 @@ SpriteRenderer:
|
||||||
m_WasSpriteAssigned: 1
|
m_WasSpriteAssigned: 1
|
||||||
m_MaskInteraction: 0
|
m_MaskInteraction: 0
|
||||||
m_SpriteSortPoint: 0
|
m_SpriteSortPoint: 0
|
||||||
|
--- !u!1 &8541881261740536524
|
||||||
|
GameObject:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
serializedVersion: 6
|
||||||
|
m_Component:
|
||||||
|
- component: {fileID: 7449121522870419912}
|
||||||
|
m_Layer: 0
|
||||||
|
m_Name: MeatStartPos
|
||||||
|
m_TagString: Untagged
|
||||||
|
m_Icon: {fileID: 0}
|
||||||
|
m_NavMeshLayer: 0
|
||||||
|
m_StaticEditorFlags: 0
|
||||||
|
m_IsActive: 1
|
||||||
|
--- !u!4 &7449121522870419912
|
||||||
|
Transform:
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_GameObject: {fileID: 8541881261740536524}
|
||||||
|
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
|
||||||
|
m_LocalPosition: {x: -16, y: -4, z: 0}
|
||||||
|
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||||
|
m_ConstrainProportionsScale: 0
|
||||||
|
m_Children: []
|
||||||
|
m_Father: {fileID: 544937591884515791}
|
||||||
|
m_RootOrder: 0
|
||||||
|
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||||
--- !u!1 &8600032524474789486
|
--- !u!1 &8600032524474789486
|
||||||
GameObject:
|
GameObject:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,16 @@ namespace HeavenStudio.Games.Scripts_MeatGrinder
|
||||||
{
|
{
|
||||||
public class Meat : MonoBehaviour
|
public class Meat : MonoBehaviour
|
||||||
{
|
{
|
||||||
public double startBeat;
|
[SerializeField] Transform startPosition;
|
||||||
public MeatType meatType;
|
[SerializeField] Transform startPositionALt;
|
||||||
|
[SerializeField] Transform hitPosition;
|
||||||
|
[SerializeField] Transform missPosition;
|
||||||
|
[SerializeField] float meatFlyHeight = 1f;
|
||||||
|
[SerializeField] float meatFlyHeightAlt = 1f;
|
||||||
|
[SerializeField] bool showAltCurve;
|
||||||
|
|
||||||
|
[NonSerialized] public double startBeat;
|
||||||
|
[NonSerialized] public MeatType meatType;
|
||||||
|
|
||||||
private string meatTypeStr;
|
private string meatTypeStr;
|
||||||
private bool isHit = false;
|
private bool isHit = false;
|
||||||
|
|
@ -52,15 +60,41 @@ namespace HeavenStudio.Games.Scripts_MeatGrinder
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
|
Conductor cond = Conductor.instance;
|
||||||
// if (Input.GetKey(KeyCode.G)) { // Insane.
|
// if (Input.GetKey(KeyCode.G)) { // Insane.
|
||||||
// anim.enabled = true;
|
// anim.enabled = true;
|
||||||
// }
|
// }
|
||||||
Debug.Log(sr.sprite.name);
|
Debug.Log(sr.sprite.name);
|
||||||
if (!isHit) {
|
if (!isHit)
|
||||||
float normalizedBeat = Conductor.instance.GetPositionFromBeat(startBeat, 1);
|
{
|
||||||
float newX = Mathf.LerpUnclamped(-14f, 1.7f, normalizedBeat);
|
double startTime = cond.GetSongPosFromBeat(startBeat);
|
||||||
Debug.Log(newX);
|
double hitTime = cond.GetSongPosFromBeat(startBeat + 1);
|
||||||
transform.position = new Vector3(newX, -1.2f);
|
double missTime = cond.GetSongPosFromBeat(startBeat + 1) + MeatGrinder.ngLateTime;
|
||||||
|
double currentTime = cond.songPositionAsDouble;
|
||||||
|
Vector3 lastPos = transform.position;
|
||||||
|
Vector3 startPos = meatType == MeatType.LightMeat ? startPositionALt.position : startPosition.position;
|
||||||
|
|
||||||
|
float hitAlongMissRatio = Vector3.Dot((startPos - missPosition.position), (startPos - hitPosition.position));
|
||||||
|
hitAlongMissRatio /= Vector3.Dot((startPos - missPosition.position), (startPos - missPosition.position));
|
||||||
|
Vector3 hitOnMissPos = startPos + (missPosition.position - startPos) * hitAlongMissRatio;
|
||||||
|
|
||||||
|
float totalProg = (float)((currentTime - startTime) / (missTime - startTime));
|
||||||
|
|
||||||
|
if (currentTime >= hitTime)
|
||||||
|
{
|
||||||
|
float prog = (float)((currentTime - hitTime) / (missTime - hitTime));
|
||||||
|
transform.position = Vector3.Lerp(hitOnMissPos, missPosition.position, prog);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
float prog = (float)((currentTime - startTime) / (hitTime - startTime));
|
||||||
|
transform.position = Vector3.Lerp(startPos, hitOnMissPos, prog);
|
||||||
|
}
|
||||||
|
float yMul = totalProg * 2f - 1f;
|
||||||
|
float yWeight = -(yMul * yMul) + 1f;
|
||||||
|
transform.position += Vector3.up * (meatType == MeatType.LightMeat ? meatFlyHeightAlt : meatFlyHeight) * yWeight;
|
||||||
|
// point towards the next position
|
||||||
|
transform.right = transform.position - lastPos;
|
||||||
|
|
||||||
// anim.DoNormalizedAnimation("MeatThrown", normalizedBeat);
|
// anim.DoNormalizedAnimation("MeatThrown", normalizedBeat);
|
||||||
}
|
}
|
||||||
|
|
@ -95,12 +129,72 @@ namespace HeavenStudio.Games.Scripts_MeatGrinder
|
||||||
|
|
||||||
private void Nothing(PlayerActionEvent caller) { }
|
private void Nothing(PlayerActionEvent caller) { }
|
||||||
|
|
||||||
public void SetSprite() {
|
public void SetSprite()
|
||||||
|
{
|
||||||
sr.sprite = meats[(int)meatType];
|
sr.sprite = meats[(int)meatType];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void DestroySelf() {
|
public void DestroySelf()
|
||||||
|
{
|
||||||
Destroy(gameObject);
|
Destroy(gameObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Callback to draw gizmos that are pickable and always drawn.
|
||||||
|
/// </summary>
|
||||||
|
private void OnDrawGizmos()
|
||||||
|
{
|
||||||
|
// draw a line showing the direction from the miss position to the hit position
|
||||||
|
if (startPosition == null) return;
|
||||||
|
if (startPositionALt == null) return;
|
||||||
|
|
||||||
|
Vector3 startPos = showAltCurve ? startPositionALt.position : startPosition.position;
|
||||||
|
if (hitPosition != null && missPosition != null && startPos != null)
|
||||||
|
{
|
||||||
|
Gizmos.color = Color.red;
|
||||||
|
Gizmos.DrawLine(startPos, hitPosition.position);
|
||||||
|
Gizmos.color = Color.blue;
|
||||||
|
Gizmos.DrawLine(startPos, missPosition.position);
|
||||||
|
Gizmos.color = Color.green;
|
||||||
|
Vector3 direction = (hitPosition.position - missPosition.position).normalized;
|
||||||
|
Gizmos.DrawRay(missPosition.position, direction * 10);
|
||||||
|
|
||||||
|
// project start position -> hit position onto start position -> miss position
|
||||||
|
float hitAlongMissRatio = Vector3.Dot((startPos - missPosition.position), (startPos - hitPosition.position));
|
||||||
|
hitAlongMissRatio /= Vector3.Dot((startPos - missPosition.position), (startPos - missPosition.position));
|
||||||
|
Gizmos.color = Color.yellow;
|
||||||
|
Gizmos.DrawRay(startPos, (missPosition.position - startPos) * hitAlongMissRatio);
|
||||||
|
|
||||||
|
DrawCurveGizmo(startPos, missPosition.position, Vector3.up * (showAltCurve ? meatFlyHeightAlt : meatFlyHeight), Color.yellow, 0.1f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DrawCurveGizmo(Vector3 start, Vector3 end, Vector3 height, Color colour, float interval)
|
||||||
|
{
|
||||||
|
Gizmos.color = colour;
|
||||||
|
Vector3 lastPos = start;
|
||||||
|
Vector3 pos;
|
||||||
|
float t, yMul, yWeight;
|
||||||
|
for (float i = 0; i < 1; i += interval)
|
||||||
|
{
|
||||||
|
t = i;
|
||||||
|
pos = Vector3.Lerp(start, end, t);
|
||||||
|
|
||||||
|
yMul = t * 2f - 1f;
|
||||||
|
yWeight = -(yMul * yMul) + 1f;
|
||||||
|
|
||||||
|
pos += height * yWeight;
|
||||||
|
Gizmos.DrawLine(lastPos, pos);
|
||||||
|
lastPos = pos;
|
||||||
|
}
|
||||||
|
t = 1f;
|
||||||
|
pos = end;
|
||||||
|
|
||||||
|
yMul = t * 2f - 1f;
|
||||||
|
yWeight = -(yMul * yMul) + 1f;
|
||||||
|
|
||||||
|
pos += height * yWeight;
|
||||||
|
Gizmos.DrawLine(lastPos, pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -83,9 +83,9 @@ namespace HeavenStudio.Games.Loaders
|
||||||
MeatGrinder.instance.CartGuy(e.beat, e.length, e["spider"]);
|
MeatGrinder.instance.CartGuy(e.beat, e.length, e["spider"]);
|
||||||
},
|
},
|
||||||
resizable = true,
|
resizable = true,
|
||||||
defaultLength = 8,
|
defaultLength = 16,
|
||||||
parameters = new List<Param>() {
|
parameters = new List<Param>() {
|
||||||
new Param("spider", false, "Spider", "Put a spider in the box?"),
|
new Param("spider", false, "On Phone", "Put a spider in the box?"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -151,13 +151,14 @@ namespace HeavenStudio.Games
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerInput.InputAction InputAction_Press =
|
public static PlayerInput.InputAction InputAction_Press =
|
||||||
new("PcoMeatPress", new int[] { IAPressCat, IAFlickCat, IAPressCat },
|
new("PcoMeatPress", new int[] { IAPressCat, IAPressCat, IAPressCat },
|
||||||
IA_PadAny, IA_TouchBasicPress, IA_BatonBasicPress);
|
IA_PadAny, IA_TouchBasicPress, IA_BatonBasicPress);
|
||||||
|
|
||||||
private void Awake()
|
private void Awake()
|
||||||
{
|
{
|
||||||
instance = this;
|
instance = this;
|
||||||
SetupBopRegion("meatGrinder", "bop", "bossBop");
|
SetupBopRegion("meatGrinder", "bop", "bossBop");
|
||||||
|
MeatBase.SetActive(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
|
|
@ -174,13 +175,15 @@ namespace HeavenStudio.Games
|
||||||
|
|
||||||
if (passedTurns.Count > 0)
|
if (passedTurns.Count > 0)
|
||||||
{
|
{
|
||||||
foreach (var pass in passedTurns) {
|
foreach (var pass in passedTurns)
|
||||||
|
{
|
||||||
PassTurnStandalone(pass);
|
PassTurnStandalone(pass);
|
||||||
}
|
}
|
||||||
passedTurns.Clear();
|
passedTurns.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cartLength != 0) {
|
if (cartLength != 0)
|
||||||
|
{
|
||||||
// CartGuyParentAnim.gameObject.SetActive(true);
|
// CartGuyParentAnim.gameObject.SetActive(true);
|
||||||
if (cartSpider) CartGuyAnim.Play("Phone", 0, 0);
|
if (cartSpider) CartGuyAnim.Play("Phone", 0, 0);
|
||||||
float beatPos = Conductor.instance.GetPositionFromBeat(cartBeat, cartLength);
|
float beatPos = Conductor.instance.GetPositionFromBeat(cartBeat, cartLength);
|
||||||
|
|
@ -194,7 +197,8 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
BossAnim.DoScaledAnimationAsync(bossAnnoyed ? "BossMiss" : "Bop", 0.5f);
|
BossAnim.DoScaledAnimationAsync(bossAnnoyed ? "BossMiss" : "Bop", 0.5f);
|
||||||
}
|
}
|
||||||
if (!cartSpider && CartGuyParentAnim.gameObject.activeSelf) {
|
if (!cartSpider && CartGuyParentAnim.gameObject.activeSelf)
|
||||||
|
{
|
||||||
CartGuyAnim.DoScaledAnimationAsync("Bop", 0.5f);
|
CartGuyAnim.DoScaledAnimationAsync("Bop", 0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -217,7 +221,8 @@ namespace HeavenStudio.Games
|
||||||
public override void OnPlay(double beat)
|
public override void OnPlay(double beat)
|
||||||
{
|
{
|
||||||
RiqEntity cg = GameManager.instance.Beatmap.Entities.Find(c => c.datamodel == "meatGrinder/cartGuy");
|
RiqEntity cg = GameManager.instance.Beatmap.Entities.Find(c => c.datamodel == "meatGrinder/cartGuy");
|
||||||
if (cg != null) {
|
if (cg != null)
|
||||||
|
{
|
||||||
CartGuy(cg.beat, cg.length, cg["spider"]);
|
CartGuy(cg.beat, cg.length, cg["spider"]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -263,10 +268,14 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
SoundByte.PlayOneShotGame(sfxName + "startSignal", beat - 1, forcePlay: true);
|
SoundByte.PlayOneShotGame(sfxName + "startSignal", beat - 1, forcePlay: true);
|
||||||
|
|
||||||
if (GameManager.instance.currentGame == "meatGrinder") {
|
if (GameManager.instance.currentGame == "meatGrinder")
|
||||||
|
{
|
||||||
instance.StartInterval(beat, length, beat, autoPassTurn);
|
instance.StartInterval(beat, length, beat, autoPassTurn);
|
||||||
} else {
|
}
|
||||||
queuedIntervals.Add(new QueuedInterval() {
|
else
|
||||||
|
{
|
||||||
|
queuedIntervals.Add(new QueuedInterval()
|
||||||
|
{
|
||||||
beat = beat,
|
beat = beat,
|
||||||
length = length,
|
length = length,
|
||||||
autoPassTurn = autoPassTurn
|
autoPassTurn = autoPassTurn
|
||||||
|
|
@ -286,8 +295,10 @@ namespace HeavenStudio.Games
|
||||||
{
|
{
|
||||||
double eventBeat = allCallEvents[i].beat;
|
double eventBeat = allCallEvents[i].beat;
|
||||||
|
|
||||||
if (eventBeat >= gameSwitchBeat) {
|
if (eventBeat >= gameSwitchBeat)
|
||||||
actions.Add(new BeatAction.Action(eventBeat, delegate {
|
{
|
||||||
|
actions.Add(new BeatAction.Action(eventBeat, delegate
|
||||||
|
{
|
||||||
BossAnim.DoScaledAnimationAsync("BossCall", 0.5f);
|
BossAnim.DoScaledAnimationAsync("BossCall", 0.5f);
|
||||||
SoundByte.PlayOneShotGame(sfxName + "signal");
|
SoundByte.PlayOneShotGame(sfxName + "signal");
|
||||||
}));
|
}));
|
||||||
|
|
@ -312,15 +323,19 @@ namespace HeavenStudio.Games
|
||||||
SoundByte.PlayOneShotGame(sfxName + "toss");
|
SoundByte.PlayOneShotGame(sfxName + "toss");
|
||||||
|
|
||||||
Meat meat = Instantiate(MeatBase, transform).GetComponent<Meat>();
|
Meat meat = Instantiate(MeatBase, transform).GetComponent<Meat>();
|
||||||
|
meat.gameObject.SetActive(true);
|
||||||
meat.startBeat = beat;
|
meat.startBeat = beat;
|
||||||
meat.meatType = bacon ? Meat.MeatType.BaconBall : Meat.MeatType.DarkMeat;
|
meat.meatType = bacon ? Meat.MeatType.BaconBall : Meat.MeatType.DarkMeat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void PrePassTurn(double beat)
|
public static void PrePassTurn(double beat)
|
||||||
{
|
{
|
||||||
if (GameManager.instance.currentGame == "meatGrinder") {
|
if (GameManager.instance.currentGame == "meatGrinder")
|
||||||
|
{
|
||||||
instance.PassTurnStandalone(beat);
|
instance.PassTurnStandalone(beat);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
passedTurns.Add(beat);
|
passedTurns.Add(beat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -341,8 +356,10 @@ namespace HeavenStudio.Games
|
||||||
for (int i = 0; i < allCallEvents.Count; i++)
|
for (int i = 0; i < allCallEvents.Count; i++)
|
||||||
{
|
{
|
||||||
double relativeBeat = allCallEvents[i].beat - intervalBeat;
|
double relativeBeat = allCallEvents[i].beat - intervalBeat;
|
||||||
meatCalls.Add(new BeatAction.Action(beat + relativeBeat - 1, delegate {
|
meatCalls.Add(new BeatAction.Action(beat + relativeBeat - 1, delegate
|
||||||
|
{
|
||||||
Meat Meat = Instantiate(MeatBase, transform).GetComponent<Meat>();
|
Meat Meat = Instantiate(MeatBase, transform).GetComponent<Meat>();
|
||||||
|
Meat.gameObject.SetActive(true);
|
||||||
Meat.startBeat = beat + relativeBeat - 1;
|
Meat.startBeat = beat + relativeBeat - 1;
|
||||||
Meat.meatType = Meat.MeatType.LightMeat;
|
Meat.meatType = Meat.MeatType.LightMeat;
|
||||||
}));
|
}));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue