public override void Update(PlayState State, Worldspawn Worldspawn, GameObject Owner, int GOID) { var hitbox = Owner.QueryComponent<Hitbox>(); var gobs = Worldspawn.SpacePartitionning ? Worldspawn.GetNearObjects<Lifespan>(Owner) : Worldspawn.GameObjects.Where(Gob => Gob.Value.HasComponent<Lifespan>()); foreach (var gob in gobs) { var lifeSpan = gob.Value.QueryComponent<Lifespan>(); if (lifeSpan.Group != Group) continue; var boundingBox = gob.Value.QueryComponent<Hitbox>(); if (hitbox.Intersects(boundingBox)) { lifeSpan.Kill(); if (lifeSpan.IsDead) if (InstantlyKill != null) InstantlyKill(this, new InstantlyKilledEventArgs { State = State, GOID = GOID, Owner = Owner, Worldspawn = Worldspawn, DealtTo = gob }); } } }
public override void Update(PlayState State, Worldspawn Worldspawn, GameObject Owner, int GOID) { var hitbox = Owner.QueryComponent<Hitbox>(); var gobs = Worldspawn.SpacePartitionning ? Worldspawn.GetNearObjects<Lifespan>(Owner) : Worldspawn.GameObjects.Where(Gob => Gob.Value.HasComponent<Lifespan>() ); foreach (var gob in gobs) { var lifeSpan = gob.Value.QueryComponent<Lifespan>(); if(lifeSpan.Group != Group) continue; var boundingBox = gob.Value.QueryComponent<Hitbox>(); if (!hitbox.Intersects(boundingBox)) continue; var args = new DamageDealtEventArgs { State = State, Worldspawn = Worldspawn, DealtTo = gob, Owner = Owner, GOID = GOID, Amount = Damages }; var oldLife = lifeSpan.Current; lifeSpan.Hurt(Damages); args.EffectiveAmount = lifeSpan.Current - oldLife; if (DamageDealt != null) DamageDealt(this, args); } }