private void OnHitEnemy(Projectile proj, SpeculativeRigidbody hitRigidBody, bool fatal)
        {
            if (proj)
            {
                proj.baseData.force = 0f;
            }
            AIActor       aiActor       = hitRigidBody.aiActor;
            KnockbackDoer knockbackDoer = hitRigidBody.knockbackDoer;

            if (aiActor)
            {
                if (aiActor.GetComponent <ExplodeOnDeath>())
                {
                    UnityEngine.Object.Destroy(aiActor.GetComponent <ExplodeOnDeath>());
                }
                hitRigidBody.AddCollisionLayerOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyHitBox));
                hitRigidBody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)Delegate.Combine(hitRigidBody.OnPreRigidbodyCollision, new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(this.HandleHitEnemyHitEnemy));
            }
            if (knockbackDoer && proj)
            {
                float   num = -1f;
                AIActor nearestEnemyInDirection = aiActor.ParentRoom.GetNearestEnemyInDirection(aiActor.CenterPosition, proj.Direction, this.AngleTolerance, out num, true);
                Vector2 direction = proj.Direction;
                if (nearestEnemyInDirection)
                {
                    direction = nearestEnemyInDirection.CenterPosition - aiActor.CenterPosition;
                }
                knockbackDoer.ApplyKnockback(direction, this.KnockbackForce, true);
            }
        }
        private void HandleHitEnemy(Projectile sourceProjectile, SpeculativeRigidbody hitRigidbody, bool fatal)
        {
            if (fatal && hitRigidbody)
            {
                if (sourceProjectile)
                {
                    sourceProjectile.baseData.force = 0f;
                }
                AIActor       aiActor       = hitRigidbody.aiActor;
                KnockbackDoer knockbackDoer = hitRigidbody.knockbackDoer;
                aiActor.CompanionOwner = null;
                hitRigidbody.AddCollisionLayerOverride(CollisionMask.LayerToMask(CollisionLayer.EnemyHitBox));
                hitRigidbody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)Delegate.Combine(hitRigidbody.OnPreRigidbodyCollision, new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(this.HandleHitEnemyHitEnemy));

                float   num = -1f;
                AIActor nearestEnemyInDirection = aiActor.ParentRoom.GetNearestEnemyInDirection(aiActor.CenterPosition, sourceProjectile.Direction, 50, out num, true);
                Vector2 direction = sourceProjectile.Direction;
                if (nearestEnemyInDirection)
                {
                    direction = nearestEnemyInDirection.CenterPosition - aiActor.CenterPosition;
                }
                PlayerController player = (PlayerController)this.gun.CurrentOwner;
                Vector2          vector = player.unadjustedAimPoint.XY() - player.CenterPosition;
                hitRigidbody.aiActor.knockbackDoer.ApplyKnockback(vector, 800, true);
            }
        }