public Quadrant GetPuckQuadrant() { if (GamePuck.GetComponent <Rigidbody2D>().position.x >= transform.position.x) { if (GamePuck.GetComponent <Rigidbody2D>().position.y >= transform.position.y) { return(Quadrant.TOPRIGHT); } else { return(Quadrant.BOTTOMRIGHT); } } else { if (GamePuck.GetComponent <Rigidbody2D>().position.y >= transform.position.y) { return(Quadrant.TOPLEFT); } else { return(Quadrant.BOTTOMLEFT); } } }
public void OnPuckPegCollision(PuckPegCollisionEvent puckPegCollisionEvent) { if (IsActive && pegBreakCount < maxPegBreaks) { Puck puck = puckPegCollisionEvent.puck; Rigidbody2D puckBody = puck.GetComponent <Rigidbody2D>(); Collider2D pegCollider = puckPegCollisionEvent.collision.collider; Peg peg = pegCollider.GetComponent <Peg>(); // Ignore collision with this peg Collider2D puckCollider = puck.GetComponent <Collider2D>(); Physics2D.IgnoreCollision(pegCollider, puckCollider); // Smash Peg SmashPeg(pegCollider, puckBody); pegBreakCount++; // Dampen momentum of Puck after it smashes the Peg DampenPuckMomentum(peg, puck); StartCoroutine(StutterPuckMovement(puckBody)); if (pegBreakCount >= maxPegBreaks) { Deactivate(); } } }
/*private void DampenPuckMomentum(Peg peg, Puck puck) { * Debug.Log($"Attempting to Dampen Puck Momentum after {pegBreakCount} broken Pegs."); * * Rigidbody2D puckBody = puck.GetComponent<Rigidbody2D>(); * * Vector2 collisionNormal = puck.transform.position - peg.transform.position; * collisionNormal.Normalize(); * Debug.Log($"Normal Vector={collisionNormal}"); * * Vector2 puckVelocity = puckBody.velocity; * Debug.Log($"Current Puck Velocity={puckVelocity}"); * * Vector2 projVOnN = puckVelocity * (float) (Math.Abs(Vector2.Dot(puckVelocity, collisionNormal)) / Math.Pow(puckVelocity.magnitude, 2)); * Debug.Log($"Projection of Vel onto Normal={projVOnN}"); * * float pegBreakCountMod = (float) Math.Pow((double) pegBreakCount / maxPegBreaks, 2.0); * Debug.Log($"pegBreakCountMod={pegBreakCountMod}"); * * Vector2 newPuckVelocity = puckVelocity + pegBreakCountMod * projVOnN; * Debug.Log($"New Puck Velocity={newPuckVelocity}"); * * puckBody.velocity = newPuckVelocity; * }*/ private void DampenPuckMomentum(Peg peg, Puck puck) { Debug.Log($"Attempting to Dampen Puck Momentum after {pegBreakCount} broken Pegs."); Rigidbody2D puckBody = puck.GetComponent <Rigidbody2D>(); Vector2 v = puckBody.velocity; Debug.Log($"Current Velocity of the Puck is: {v}"); Vector2 n = puck.transform.position - peg.transform.position; n.Normalize(); Debug.Log($"The normalized collision vector is {n}"); float scalarProjVOnN = Vector2.Dot(n, v) / n.magnitude; Debug.Log($"The scalar projection of V onto N is {scalarProjVOnN}"); Vector2 pegsForceOnPuck = scalarProjVOnN * n; Debug.Log($"The full force on the Puck from the Peg is: {pegsForceOnPuck}"); float pegBreakCountMod = (float)Math.Pow((double)pegBreakCount / maxPegBreaks, 2.0); Debug.Log($"Based on pegBreakCount:{pegBreakCount}, multiplying our force by {pegBreakCountMod}"); Vector2 puckDampeningForce = pegBreakCountMod * pegsForceOnPuck; Debug.Log($"Final force acting on the Puck: {puckDampeningForce}"); puckBody.velocity = v + puckDampeningForce; Debug.Log($"Puck's new velocity is: {puckBody.velocity}"); }
new void Awake() { base.Awake(); hockeyPlayer = GetComponent<HockeyPlayer>(); puck = GameObject.Find("Puck").GetComponent<Puck>(); puckTransform = puck.GetComponent<Transform>(); goalBox = hockeyPlayer.ownGoal.Find("GoalBox"); goalBoxCollider = goalBox.GetComponent<BoxCollider>(); }
public void HitStorm(Puck puck) { SphereSurfaceSlider otherSlider = puck.GetComponent <SphereSurfaceSlider>(); if (otherSlider && puck) { otherSlider.HitByStormWithSphericalVelocity(0.5f * slider.sphericalVelocity); GameObject.Destroy(gameObject); } }
public void ClearAllPuckChordLines() { foreach (var Puck in PianoPucks) { foreach (var Puckline in Puck.GetComponent <PianoRollPuck>().VisualSteps) { //makes all chord indicators, for the lesson, invisable Puckline.GetComponent <SpriteRenderer>().enabled = false; } } }
//allows piano puck to choose key public void chooseKey(int KeyNum) { //if a key can be and is chosen if (CanChooseKey) { //clears all line pointers for chords when a key is chosen in the LESSONS only ClearAllPuckChordLines(); //Hide all the step counts for the Key Steps Only if (VisualSteps.Count != 0) { foreach (var step in VisualSteps) { step.GetComponent <SpriteRenderer>().enabled = false; } } //show that a key has been choosen hasKey = true; NumInKey = new List <int> { KeyNum, (KeyNum + 2) % 12, (KeyNum + 4) % 12, (KeyNum + 5) % 12, (KeyNum + 7) % 12, (KeyNum + 9) % 12, (KeyNum + 11) % 12 }; //reset position of all pucks foreach (var Puck in PianoPucks) { Puck.transform.position = new Vector3(defaultx, Puck.transform.position.y, Puck.transform.position.z); Puck.GetComponent <SpriteRenderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 0.3f); } for (int numIndex = 0; numIndex < NumInKey.Count; numIndex++) { PianoPucks[NumInKey[numIndex]].transform.position = new Vector3(defaultx + 1f, PianoPucks[NumInKey[numIndex]].transform.position.y, PianoPucks[NumInKey[numIndex]].transform.position.z); PianoPucks[NumInKey[numIndex]].GetComponent <SpriteRenderer>().material.color = new Color(1.0f, 1.0f, 1.0f, 1.0f); if (VisualSteps.Count != 0) { if (NumInKey[numIndex] > NumInKey[(numIndex + 1) % NumInKey.Count]) { if (numIndex == 2 || numIndex == 6) { GameObject Step = Instantiate(VisualSteps[2]); VisualSteps.Add(Step); Step.GetComponent <SpriteRenderer>().enabled = true; Vector3 StepPos = Step.transform.position; Step.transform.position = new Vector3(StepPos.x + 1f, StepPos.y - (PianoPucks[PianoPucks.Count - 1].transform.position.y - PianoPucks[NumInKey[numIndex]].transform.position.y), StepPos.z); } else { GameObject Step = Instantiate(VisualSteps[3]); VisualSteps.Add(Step); Step.GetComponent <SpriteRenderer>().enabled = true; Vector3 StepPos = Step.transform.position; Step.transform.position = new Vector3(StepPos.x + 1f, StepPos.y - (PianoPucks[PianoPucks.Count - 1].transform.position.y - PianoPucks[NumInKey[numIndex]].transform.position.y), StepPos.z); } } else if (numIndex == 2 || numIndex == 6) { GameObject Step = Instantiate(VisualSteps[0]); VisualSteps.Add(Step); Step.GetComponent <SpriteRenderer>().enabled = true; Vector3 StepPos = Step.transform.position; Step.transform.position = new Vector3(StepPos.x + 1f, StepPos.y + (PianoPucks[NumInKey[numIndex]].transform.position.y - PianoPucks[0].transform.position.y), StepPos.z); } else { GameObject Step = Instantiate(VisualSteps[1]); VisualSteps.Add(Step); Step.GetComponent <SpriteRenderer>().enabled = true; Vector3 StepPos = Step.transform.position; Step.transform.position = new Vector3(StepPos.x + 1f, StepPos.y + (PianoPucks[NumInKey[numIndex]].transform.position.y - PianoPucks[0].transform.position.y), StepPos.z); } } if (numIndex == 0) { GameObject Step = Instantiate(VisualSteps[4]); VisualSteps.Add(Step); Step.GetComponent <SpriteRenderer>().enabled = true; Vector3 StepPos = Step.transform.position; Step.transform.position = new Vector3(StepPos.x + 1f, StepPos.y + (PianoPucks[NumInKey[numIndex]].transform.position.y - PianoPucks[0].transform.position.y), StepPos.z); } } //shift first puck over CanChooseKey = false; SpriteRenderer spriteRenderer = (SpriteRenderer)GetComponent <Renderer>(); //render keyname spriteRenderer.sprite = KeyIcon[KeyNum + 1]; PianoContact.destroyAll = true; } }