void OnCollisionEnter2D(Collision2D collision) { Debug.Log("CollisionEnter"); AttackDetails attack = parentStateMachine.GetCurrentAttackDetails(); if (attack == null) { Debug.LogError("Parent CharacterController is not in state attacking!"); return; } float maxHitContactY = GetMaxHitContactY(collision); float hitDirectionX = GetHitDirection(parentCharacterController.transform, collision); if (ListContainsTag(parentCharacterController.opponentTags, collision.gameObject.tag)) { AbstractCharacterController opponentCharacterController = collision.gameObject.GetComponent <AbstractCharacterController>(); if (opponentCharacterController) { opponentCharacterController.ReceiveDamage(hitDirectionX, maxHitContactY, attack); } else { Debug.LogError("No AbstractCharacterController Script for player found. No damage served today!"); } } if (ListContainsTag(parentCharacterController.destructableTags, collision.gameObject.tag)) { AbstractDestructableController destructableController = collision.gameObject.GetComponent <AbstractDestructableController>(); if (destructableController) { destructableController.ReceiveDamage(hitDirectionX, maxHitContactY, attack); } else { Debug.LogError("No AbstractDestructableController Script for player found. No damage served today!"); } } }