예제 #1
0
        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();
        }
예제 #2
0
파일: Group.cs 프로젝트: tatelax/LazyECS
        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);
            }
        }
예제 #3
0
파일: Group.cs 프로젝트: tatelax/LazyECS
        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);
            }
        }
예제 #4
0
파일: Group.cs 프로젝트: tatelax/LazyECS
 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);
         }
     }
 }