public virtual void Tick() { if (enduTimer.Tick() == true) { ModifyEndurance(Constants.END_REGEN_AMOUNT); } if (hitpointTimer.Tick() == true) { Heal(Constants.HP_REGEN_AMOUNT); } if (updateTimer.Tick() == true) { // Invoke an update event EntityUpdateEvent e = new EntityUpdateEvent { entity = this }; OnEntityUpdateEvent?.Invoke(this, e); if (e.cancel == false) { UpdateEntity(); } // call entity update if this hasn't been cancelled by any subscriber } attackCooldown.Tick(); invulnTimer.Tick(); HandleGrounding(); HandleVelocity(); }
public void ComponentAddedToEntity(Entity.Entity entity, Type component) { if (Entities.Contains(entity)) { return; } if (GroupType == GroupType.Any && Filters.Contains(component)) { Entities.Add(entity); if (EventType == EventType.Added || EventType == EventType.All) { OnEntityUpdateEvent?.Invoke(EventType.Added, entity, component); } return; } int matches = entity.Components.Sum(cmp => Filters.Count(filter => cmp.Key == filter)); if (matches != Filters.Count) { return; } Entities.Add(entity); if (EventType == EventType.Added || EventType == EventType.All) { OnEntityUpdateEvent?.Invoke(EventType.Added, entity, component); } }
public void ComponentRemovedFromEntity(Entity.Entity entity, Type component) { if (GroupType == GroupType.All && Filters.Contains(component)) { Entities.Remove(entity); if (EventType == EventType.Removed || EventType == EventType.All) { OnEntityUpdateEvent?.Invoke(EventType.Removed, entity, component); } return; } if (entity.Components.Any(cmp => Filters.Contains(cmp.Key))) { return; } Entities.Remove(entity); if (EventType == EventType.Removed || EventType == EventType.All) { OnEntityUpdateEvent?.Invoke(EventType.Removed, entity, component); } }
public void EntitySet(Entity.Entity entity, Type component) { if (Entities.Contains(entity) && Filters.Contains(component)) { if (EventType == EventType.Set || EventType == EventType.All) { OnEntityUpdateEvent?.Invoke(EventType.Set, entity, component); } } }