private void DoCollisionActivity() { var areAnyShootingLightning = false; foreach (var player in PlayerList) { player.LightningWeaponManager.StartCollisionFrameLogic(); if (player.CurrentSecondaryAction == Animation.SecondaryActions.Shooting && player.EquippedWeapon == Animation.Weapon.ShootingLightning) { areAnyShootingLightning = true; } } if (areAnyShootingLightning) { PlayerLightningVsSolidCollision.DoCollisions(); PlayerLightningVsEnemyRelationship.DoCollisions(); } foreach (var player in PlayerList) { player.LightningWeaponManager.EndCollisionFrameLogic(player); var enemyHit = player.LightningWeaponManager.EnemyHitThisFrame; if (enemyHit != null) { var playerToEnemy = enemyHit.Position - player.Position; enemyHit.TakeLightningDamage(Player.LightningDps, player); if (playerToEnemy.LengthSquared() != 0) { playerToEnemy.Normalize(); enemyHit.Velocity += playerToEnemy * Player.LightningHitAcceleration * TimeManager.SecondDifference; } } } // reset mud before doing collision foreach (var player in PlayerList) { player.IsOnMud = false; player.SetActionIconVisibility(false); } foreach (var enemy in EnemyList) { enemy.IsOnMud = false; } PlayerVsWeaponCollision.DoCollisions(); PlayerVsMudCollision.DoCollisions(); EnemyVsMudCollision.DoCollisions(); }
private void InitializeCollisions() { if (DebuggingVariables.ShowSolidCollision) { SolidCollisions.Visible = true; PitSolidCollisions.Visible = true; MudCollision.Visible = true; FirePitCollision.Visible = true; PitSolidCollisions.SetColor(Color.Gray); MudCollision.SetColor(Color.Orange); FirePitCollision.SetColor(Color.Yellow); } // add border around the tile map AddBorderAroundMap(); PlayerVsSolidCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsPlayerSolidCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsPlayerSolidCollision.SetSecondSubCollision(item => item.CircleInstance); PlayerVsEnemyRelationship.SetFirstSubCollision(item => item.CircleInstance); PlayerLightningVsEnemyRelationship.SetFirstSubCollision(item => item.LightningCollisionLine); PlayerLightningVsEnemyRelationship.CollisionOccurred += HandleLightningVsEnemyCollision; PlayerLightningVsEnemyRelationship.IsActive = false; PlayerLightningVsEnemyRelationship.CollisionLimit = FlatRedBall.Math.Collision.CollisionLimit.Closest; BulletVsPlayerCollision.SetSecondSubCollision(item => item.CircleInstance); BulletVsPlayerCollision.CollisionLimit = FlatRedBall.Math.Collision.CollisionLimit.First; EnemyVsPlayerBaseSolidCollision.SetSecondSubCollision(item => item.SolidRectangle); PlayerVsPlayerBaseSolidCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsPlayerBaseSolidCollision.SetSecondSubCollision(item => item.SolidRectangle); BulletVsEnemyCollision.CollisionLimit = FlatRedBall.Math.Collision.CollisionLimit.First; BulletVsPlayerBaseSolidCollision.SetSecondSubCollision(item => item.SolidRectangle); PlayerVsPlayerBaseHealingCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsPlayerBaseHealingCollision.SetSecondSubCollision(item => item.HealingAura); PlayerVsPlayerBaseHealingCollision.Name = nameof(PlayerVsPlayerBaseHealingCollision); PlayerLightningVsSolidCollision.SetFirstSubCollision(item => item.LightningCollisionLine); PlayerLightningVsSolidCollision.CollisionOccurred += HandleLightningVsSolidCollision; PlayerLightningVsSolidCollision.IsActive = false; PlayerLightningVsSolidCollision.CollisionLimit = FlatRedBall.Math.Collision.CollisionLimit.Closest; PlayerVsPitSolidCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsBulletExplosionCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsWeaponCollision.IsActive = false; PlayerVsWeaponCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsWeaponCollision.CollisionLimit = FlatRedBall.Math.Collision.CollisionLimit.Closest; PlayerVsMudCollision.IsActive = false; PlayerVsMudCollision.SetFirstSubCollision(item => item.CircleInstance); PlayerVsMudCollision.CollisionOccurred += (player, tileShapeCollection) => player.IsOnMud = true; PlayerVsFirePitCollision.SetFirstSubCollision(item => item.CircleInstance); EnemyVsMudCollision.IsActive = false; EnemyVsMudCollision.CollisionOccurred += (enemy, tileShapeCollection) => enemy.IsOnMud = true; EnemyVsSolidCollision.SetFirstSubCollision(item => item.NavigationCollider); EnemyVsPitSolidCollision.SetFirstSubCollision(item => item.NavigationCollider); }