Example #1
0
        public override void Awake()
        {
            base.Awake();
            layerCollisionsDict.Clear();
            List <string> layerNamesList = new List <string>();

            for (int i = 0; i < layerCollisions.Length; i++)
            {
                LayerCollision layerCollision = layerCollisions[i];
                layerCollisionsDict.Add(layerCollision.layerName, layerCollision.collidingLayers);
                layerNamesList.Add(layerCollision.layerName);
            }
            int realLayerCount = Mathf.Min(32, layerNamesList.Count);

            realLayerNames = layerNamesList.ToArray().GetCopy(realLayerCount);
            for (int i = 0; i < realLayerCount; i++)
            {
                string   realLayerName       = realLayerNames[i];
                string[] collidingRealLayers = layerCollisionsDict[realLayerName];
                for (int i2 = 0; i2 < realLayerCount; i2++)
                {
                    string realLayerName2 = realLayerNames[i2];
                    Physics2D.IgnoreLayerCollision(i, i2, !collidingRealLayers.Contains(realLayerName2));
                }
            }
        }
    private void OnTriggerEnter2D(Collider2D otherCollider2d)
    {
        if (!collisionDetectionEnabled)
        {
            Debug.LogWarning(this.ToString() + " Collision Detection disabled!");
        }

//		if (CheckIfCollisionShouldBeIgnored (otherCollider2d))
        if (CheckIfCollisionShouldBeIgnoredWithLayerMaskCompare(otherCollider2d))
        {
            // generic, alle Collisionen werden gleich behandelt/verarbeitet
                        #if UNITY_EDITOR
//								Debug.LogError (this.ToString () + " ignore Collision with " + otherCollider2d.gameObject.name + " in Layer "  + LayerMask.LayerToName(otherCollider2d.gameObject.layer));
                        #endif
        }
        else
        {
            // Collision is not Ignored -> Start Triggering
            CollisionDamageTrigger otherCollisionTrigger = otherCollider2d.GetComponent <CollisionDamageTrigger>();
            if (otherCollisionTrigger != null)
            {
                float otherSendDamageValue = otherCollisionTrigger.GetDamageValue();
                float myDamageValue        = sendDamageValue * sendDamageMulti;
                float receiveDamageValue   = receiveDamageMulti * otherSendDamageValue;
                                #if UNITY_EDITOR
//								Debug.Log (this.ToString() + " Collision is not Ignored -> Start Triggering ");
//								Debug.Log (this.ToString() + " otherSendDamageValue " + otherSendDamageValue);
//								Debug.Log (this.ToString() + " myDamageValue " + myDamageValue);
//								Debug.Log (this.ToString() + " receiveDamageValue " + receiveDamageValue);
                                #endif


                // de-coupling

                LayerCollision currentLayerCollision = GetLayerCollision(otherCollider2d);
                if (currentLayerCollision != null)
                {
                    // Kollisionpartner-Ebene ist in layerCollision aufgelistet
                    if (!currentLayerCollision.IgnoreCollision)
                    {
                        // Trigger Layer specific Collision Event
                        currentLayerCollision.TriggerCollisionEvent();

                        if (receiveDamageEnabled)
                        {
                            // Trigger Layer spzefic Collision Damage Event
                            currentLayerCollision.TriggerCollisionEvent(receiveDamageValue);
                        }
                    }
                }
                else
                {
                    // Kollisionpartner-Ebene ist NICHT in layerCollision aufgelistet
                }

                // Trigger global Collision Event
                NotifyCollision();

                // Trigger global CollisionDamage Event
                if (receiveDamageEnabled)
                {
                    NotifyCollisionDamage(receiveDamageValue);
                }
                //				else
                //					NotifyCollisionDamage (0f);

                //				// coupling
                //				healthManager.ReceiveHealthDamage (otherSendDamageValue);
            }
            else
            {
                                #if UNITY_EDITOR
//								Debug.LogError (this.ToString () + " can't find  CollisionTriggerScript @ " + otherCollider2d.gameObject.name + " in Layer " + LayerMask.LayerToName(otherCollider2d.gameObject.layer));
                                #endif
            }
        }

//			// additional collisionbehaviour
//			if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Enemy"))
//			{
//				// to this...
//
//			}
//			else if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Player"))
//			{
//				// do that..
//			}
//
//			// problem htis is a generic model, can
//			// additional collisionbehaviour with seperation if this object is player or enemy or... (better with Polymorphism
//			// CollisionDamageTrigger <|- EnemyCollisionDamageTrigger
//			// CollisionDamageTrigger <|- PlayerCollisionDmageTrigger
//			if (this.gameObject.layer == "Player")
//			{
//				if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Enemy"))
//				{
//					// to this...
//
//			    }
//				else if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Player"))
//				{
//					// do that..
//				}
//			}
//			else if ("Enemy")
//			{
//				if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Enemy"))
//				{
//					// to this...
//
//				}
//				else if (otherCollider2d.gameObject.layer == LayerMask.NameToLayer ("Player"))
//				{
//					// do that..
//				}
//			}
    }