示例#1
0
    protected override void onProcess(int familiesUpdateCount)
    {
        foreach (GameObject go in _incollision)
        {
            InCollision2D    col = go.GetComponent <InCollision2D> ();
            CircleCollider2D cc  = go.GetComponent <CircleCollider2D> ();

            foreach (GameObject target in col.Targets)
            {
                if (target != null && target.tag.Equals("seesaw"))
                {
                    BoxCollider2D boxc = target.GetComponent <BoxCollider2D> ();

                    // si le projectile principale tombe sur le bon cote de la balancoire a bascule
                    if (boxc.IsTouching(cc))
                    {
                        // le deuxieme projectile est envoye vers le haut
                        foreach (GameObject proj in _projectiles)
                        {
                            if (proj.tag.Equals("projectile"))
                            {
                                Rigidbody2D rb = proj.GetComponent <Rigidbody2D> ();
                                rb.AddForce(new Vector2(0, 70));
                            }
                        }
                    }
                }
            }
        }

        foreach (GameObject proj in _projectiles)
        {
            CircleCollider2D cc = proj.GetComponent <CircleCollider2D> ();

            foreach (GameObject reward in _rewards)
            {
                PolygonCollider2D polyc = reward.GetComponent <PolygonCollider2D> ();
                if (polyc.IsTouching(cc))
                {
                    Collect co = reward.GetComponent <Collect> ();
                    total.score_total += co.reward;
                    GameObjectManager.unbind(reward);
                    GameObject.Destroy(reward);
                }
            }
        }
        GameObject        pro        = GameObject.FindGameObjectWithTag("projectile");
        GameObject        obs        = GameObject.FindGameObjectWithTag("obstacle");
        GameObject        ground     = GameObject.FindGameObjectWithTag("Ground");
        GameObject        seesaw     = GameObject.FindGameObjectWithTag("seesaw");
        PolygonCollider2D pc         = obs.GetComponent <PolygonCollider2D>();
        BoxCollider2D     ground_bc  = ground.GetComponent <BoxCollider2D>();
        Rigidbody2D       rigid_b    = pro.GetComponent <Rigidbody2D>();
        CircleCollider2D  circle_col = pro.GetComponent <CircleCollider2D> ();

        if (pc.IsTouching(circle_col))
        {
            rigid_b.velocity = new Vector2(0, 0);
        }

        if (circle_col.IsTouching(ground_bc))
        {
            seesaw.transform.eulerAngles = new Vector3(0f, 0f, -17.5f);
            pro.transform.position       = new Vector2(9.29f, -2.23f);
        }
    }
    // Use to process your families.
    protected override void onProcess(int familiesUpdateCount)
    {
        // gestion des collisions avec le sol et les structures
        foreach (GameObject go in _incollision)
        {
            InCollision2D col = go.GetComponent <InCollision2D> ();

            Move mo = go.GetComponent <Move> ();

            foreach (GameObject target in col.Targets)
            {
                // ground collision
                // quand le projectile ne bouge plus -> nouveau projectile créé donc ne plus toucher à la vitesse
                if (target != null && target.tag.Equals("Ground") && mo.inMovement == true)
                {
                    mo.groundContact = true;
                    mo.vitesse.y     = 0f;
                }

                //mo.inMovement == true pour éviter modification de vitesse quand on remet un nouveau projectile
                if (target.tag.Equals("wood_struct") && mo.inMovement == true && !mo.idStructure.Contains(target.GetInstanceID()))
                {
                    DataProjectile dP = go.GetComponent <DataProjectile> ();
                    Rigidbody2D    rB = target.GetComponent <Rigidbody2D> ();
                    mo.vitesse.x = (mo.vitesse.x * (dP.masse - rB.mass)) / (dP.masse + rB.mass);
                    mo.vitesse.y = (mo.vitesse.y * (dP.masse - rB.mass)) / (dP.masse + rB.mass);
                    mo.idStructure.Add(target.GetInstanceID());
                }

                if (target != null && target.tag.Equals("reward"))
                {
                    Collect co = target.GetComponent <Collect> ();
                    total.score_total += co.reward;
                    GameObjectManager.unbind(target);
                    GameObject.Destroy(target);
                }
            }
        }

        // détection des récompenses et des obstacles
        foreach (GameObject go in _triggered2D)
        {
            Triggered2D tr = go.GetComponent <Triggered2D> ();
            Move        mo = go.GetComponent <Move> ();
            foreach (GameObject target in tr.Targets)
            {
                if (target.tag.Equals("reward"))
                {
                    Collect co = target.GetComponent <Collect> ();
                    total.score_total += co.reward;
                    GameObjectManager.unbind(target);
                    GameObject.Destroy(target);
                }

                if (target.tag.Equals("broken_stone") && mo.inMovement == true && mo.stone_touched == false)
                {
                    mo.vitesse.x = 0;
                    GameObjectManager.unbind(target);
                    GameObject.Destroy(target);
                    mo.stone_touched = true;
                }

                if (target.tag.Equals("stone_struct") && mo.inMovement == true && mo.stone_touched == false)
                {
                    mo.vitesse.x = 0;
                    target.GetComponent <SpriteRenderer> ().sprite = Resources.Load("brokenS", typeof(Sprite)) as Sprite;
                    target.tag       = "broken_stone";
                    mo.stone_touched = true;
                }

                if (target.tag.Equals("obstacle"))
                {
                    mo.vitesse.x = 0;
                }
            }
        }
    }