public void StraightUnbuffered() { var pattern = new StraightPattern(stopSearchLayer: Layers.WALL); var provider = new UnbufferedTargetProvider(pattern, Layers.REAL, Faction.Any); var entity = World.Global.SpawnEntity(entityFactory, new IntVector2(0, 0)); var target = provider.GetTargets(new IntVector2(3, 0), new IntVector2(-1, 0)).Single(); Assert.AreSame(target.transform, entity.GetTransform()); var wall = World.Global.SpawnEntity(wallFactory, new IntVector2(1, 0)); int count = provider.GetTargets(new IntVector2(3, 0), new IntVector2(-1, 0)).Count(); Assert.AreEqual(count, 0); }
public void Shoot(IntVector2 position, IntVector2 direction) { var targets = _provider.GetTargets(position, direction); foreach (var target in targets) { target.transform.entity.TryBeAttacked(null, _attack, direction); target.transform.entity.TryBePushed(_push, direction); } }
public static void Attack(Transform ownerTransform, IntVector2 direction) { // 1. get the attack (for now, get it from the owner ownerTransform.entity.GetStats().GetLazy(Core.Stat.Attack.Index, out var attack); // 2. get the targets foreach (var context in TargetProvider.GetTargets(ownerTransform.position, direction)) { context.transform.entity.TryBeAttacked(null, attack, direction); } if (ownerTransform.entity.TryGetRangedWeapon(out var weapon)) { weapon.GetBowComponent()._isCharged = false; } }