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);
         }
     }
 }
示例#2
0
文件: PegSmasher.cs 项目: coshm/SPFT
        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();
                }
            }
        }
示例#3
0
文件: PegSmasher.cs 项目: coshm/SPFT
        /*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}");
        }
示例#4
0
 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>();
 }
示例#5
0
    public void HitStorm(Puck puck)
    {
        SphereSurfaceSlider otherSlider = puck.GetComponent <SphereSurfaceSlider>();

        if (otherSlider && puck)
        {
            otherSlider.HitByStormWithSphericalVelocity(0.5f * slider.sphericalVelocity);
            GameObject.Destroy(gameObject);
        }
    }
示例#6
0
 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;
         }
     }
 }
示例#7
0
    //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;
        }
    }