private bool MatchesCollisionEvent(CollisionRequirement collisionRequirements, int movingEntityId,
                                    int targetId)
 {
     return(collisionRequirements.MovingEntityRequirements
            .Count(componentType => ComponentManager.EntityHasComponent(componentType, movingEntityId))
            == collisionRequirements.MovingEntityRequirements.Count &&
            collisionRequirements.TargetEntityRequirements
            .Count(componentType => ComponentManager.EntityHasComponent(componentType, targetId))
            == collisionRequirements.TargetEntityRequirements.Count);
 }
 /*
  * Target is the pickup, entity is the player
  * This function determines what kind of pickup type it is, and calls the appropriate method.
  * First it checks if it has already been used(has the delete tag), in case 2 players touched it in the same frame.
  */
 public void Handle(SpecificCollisionEvent collisionEvent)
 {
     if (ComponentManager.GetEntityComponentOrDefault <TagComponent>(collisionEvent.Target).Tags.Contains(Tag.Delete))
     {
         return;
     }
     if (ComponentManager.EntityHasComponent(typeof(HealthPickupComponent), collisionEvent.Target))
     {
         HandleHealthPickup(collisionEvent.Entity, collisionEvent.Target);
     }
     else if (ComponentManager.EntityHasComponent(typeof(AmmoPickupComponent), collisionEvent.Target))
     {
         HandleAmmoPickup(collisionEvent.Entity, collisionEvent.Target);
     }
 }
        public void Handle(SpecificCollisionEvent collisionEvent)
        {
            if (TargetIsShooter(collisionEvent))
            {
                return;
            }

            if (ComponentManager.EntityHasComponent <HealthComponent>(collisionEvent.Target))
            {
                Debug.WriteLine("Added damage");
                var healthComponent =
                    ComponentManager.GetEntityComponentOrDefault <HealthComponent>(collisionEvent.Target);
                if (healthComponent != null)
                {
                    var bulletComponent =
                        ComponentManager.GetEntityComponentOrDefault <BulletComponent>(collisionEvent.Entity);
                    if (bulletComponent != null)
                    {
                        var damage = bulletComponent.Damage;
                        healthComponent.Damage.Add(damage);
                    }
                }
            }
            StopBulletAnimation(collisionEvent.EventTime, collisionEvent.Entity);
        }
Ejemplo n.º 4
0
 public void UpdateMoveComponentIfApplicable(int entityId, Action <MoveComponent> updateAction)
 {
     if (ComponentManager.EntityHasComponent <MoveComponent>(entityId))
     {
         var component = ComponentManager.GetEntityComponentOrDefault <MoveComponent>(entityId);
         updateAction(component);
     }
 }
Ejemplo n.º 5
0
 public bool HasCollided(int entityId)
 {
     if (ComponentManager.EntityHasComponent <CollisionComponent>(entityId))
     {
         var collisionComponent = ComponentManager.GetEntityComponentOrDefault <CollisionComponent>(entityId);
         return(collisionComponent.collisions.Count > 0);
     }
     return(false);
 }
Ejemplo n.º 6
0
        public void DetectCollisions()
        {
            var collisionEntities = ComponentManager.GetEntitiesWithComponent(typeof(CollisionComponent));

            var movingEntities = collisionEntities.Where(entity => ComponentManager.EntityHasComponent <MoveComponent>(entity.Key));

            foreach (var movingEntity in movingEntities)
            {
                var movingEntityId = movingEntity.Key;
                var movingEntityCollisionComponent = movingEntity.Value as CollisionComponent;

                foreach (var stillEntity in collisionEntities)
                {
                    var stillEntityId = stillEntity.Key;
                    if (movingEntityId == stillEntityId)
                    {
                        continue;
                    }

                    var stillEntityCollisionComponent = stillEntity.Value as CollisionComponent;

                    if (stillEntityCollisionComponent.IsCage)
                    {
                        if (IsCagedBy(movingEntityId, stillEntityId))
                        {
                            var contains = EntityContains(stillEntityId, movingEntityId);
                            if (!contains)
                            {
                                if (!movingEntityCollisionComponent.collisions.Contains(stillEntityId))
                                {
                                    movingEntityCollisionComponent.collisions.Add(stillEntityId);
                                }
                                if (!stillEntityCollisionComponent.collisions.Contains(movingEntityId))
                                {
                                    stillEntityCollisionComponent.collisions.Add(movingEntityId);
                                }
                            }
                        }
                    }
                    else if (EntitiesIntersects(movingEntityId, stillEntityId))
                    {
                        if (!movingEntityCollisionComponent.collisions.Contains(stillEntityId))
                        {
                            movingEntityCollisionComponent.collisions.Add(stillEntityId);
                        }
                        if (!stillEntityCollisionComponent.collisions.Contains(movingEntityId))
                        {
                            stillEntityCollisionComponent.collisions.Add(movingEntityId);
                        }
                    }
                }
            }
        }