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; } } } }