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); }
public void UpdateMoveComponentIfApplicable(int entityId, Action <MoveComponent> updateAction) { if (ComponentManager.EntityHasComponent <MoveComponent>(entityId)) { var component = ComponentManager.GetEntityComponentOrDefault <MoveComponent>(entityId); updateAction(component); } }
public bool HasCollided(int entityId) { if (ComponentManager.EntityHasComponent <CollisionComponent>(entityId)) { var collisionComponent = ComponentManager.GetEntityComponentOrDefault <CollisionComponent>(entityId); return(collisionComponent.collisions.Count > 0); } return(false); }
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); } } } } }