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