示例#1
0
    void EjectChildren(Transform parent)
    {
        List <Transform> toEject = new List <Transform>();

        foreach (Transform child in parent)
        {
            if (child.GetComponent <AttachedBall>())
            {
                toEject.Add(child);
            }
        }
        //have to do two passes because we need to set parent to null
        //and this modifies what we're enumerating through
        foreach (Transform child in toEject)
        {
            GameObject ejected = PoolManager.Instance.GetPoolByRepresentative(ejectedBallPrefab).GetPooled();
            Vector3    pos     = child.position;
            Quaternion rot     = child.rotation;
            ejected.transform.position = pos;
            ejected.transform.rotation = rot;
            ejected.GetComponent <SpriteRenderer>().sprite = child.GetComponent <SpriteRenderer>().sprite;
            foreach (Transform c in child)
            {
                c.parent = ejected.transform;
            }
            child.SendMessage("Destroy");

            AttachedBall.AddStatusAllAttachedBalls(ejected.transform, BallStatus.EJECTED, ejected.GetComponent <SpriteRenderer>().sharedMaterial);
            ejected.SetActive(true);
            ejected.GetComponent <Rigidbody2D>().velocity = (pos - parent.position).normalized * ejectionForce;
        }
    }
示例#2
0
 public override void ApplyEffect(Transform target)
 {
     if (!(target.gameObject.layer == LayerMask.NameToLayer("Player")))
     {
         //Debug.Log ("Delinker Ball Applying Effect - Target: " + target.GetInstanceID());
         target.parent = transform;
         AttachedBall.AddStatusAllAttachedBalls(target, BallStatus.EJECTED, ejectedMat);
     }
 }
示例#3
0
 public void GetShocked(float duration, Material shockedMat)
 {
     if (!FlagsHelper.IsSet <BallStatus>(status, BallStatus.SHOCKED))
     {
         GetComponent <Renderer>().sharedMaterial = shockedMat;
         AddStatus(BallStatus.SHOCKED, shockedMat);
         AttachedBall.AddStatusAllAttachedBalls(transform, BallStatus.SHOCKED, shockedMat);
         StartCoroutine(Timers.Countdown(duration, () => RemoveStatus(BallStatus.SHOCKED, shockedMat)));
     }
 }
示例#4
0
 public void GetFrozen(float duration, Material frozenMat)
 {
     if (!FlagsHelper.IsSet <BallStatus>(status, BallStatus.FROZEN))
     {
         GetComponent <Renderer>().sharedMaterial = frozenMat;
         AddStatus(BallStatus.FROZEN, frozenMat);
         GetComponent <Rigidbody2D>().velocity    = Vector2.zero;
         GetComponent <Rigidbody2D>().isKinematic = true;
         AttachedBall.AddStatusAllAttachedBalls(transform, BallStatus.FROZEN, frozenMat);
         StartCoroutine(Timers.Countdown(duration, () => {
             RemoveStatus(BallStatus.FROZEN, frozenMat);
             GetComponent <Rigidbody2D>().isKinematic = false;
         }));
     }
 }
示例#5
0
    public void GetGlooped(float duration, Material gloopMat)
    {
        if (!FlagsHelper.IsSet <BallStatus>(status, BallStatus.GLOOPED))
        {
            GetComponent <Renderer>().sharedMaterial = gloopMat;
            AddStatus(BallStatus.GLOOPED, gloopMat);
            //we make copies so the delegate we create keeps its own state

            /*
             * Material oldMat = GetComponent<SpriteRenderer>().sharedMaterial;
             * Transform trans = transform;
             * GetComponent<SpriteRenderer>().sharedMaterial = gloopMaterial;
             * StartCoroutine(Timers.Countdown(duration,() => {
             *      Debug.Log ("Resetting mat to " + oldMat.name + " " + oldMat.GetInstanceID());
             *      trans.GetComponent<SpriteRenderer>().sharedMaterial = oldMat;
             * }));
             */
            AttachedBall.AddStatusAllAttachedBalls(transform, BallStatus.GLOOPED, gloopMat);
            StartCoroutine(Timers.Countdown(duration, () => RemoveStatus(BallStatus.GLOOPED, gloopMat)));
        }
    }