示例#1
0
        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();
        }
示例#2
0
        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);
        }