public override void _PhysicsProcess(float delta) { if (KnockBackTimer.TimeLeft == 0) { var g = GetTree().GetNodesInGroup("Player"); Node2D[] p = new Node2D[g.Count]; g.CopyTo(p, 0); p = p.Where(n => PatrolArea.GetOverlappingBodies().Contains(n) && (n as Knight).Health > 0).ToArray(); if (p.Any()) { if (p.FirstOrDefault().GlobalPosition.DistanceTo(GlobalPosition) > 10 && (p.FirstOrDefault() as Knight).Health != 0) { Move(p.FirstOrDefault().GlobalPosition < GlobalPosition ? -1 : 1); } else { Move(0); } } else { if (GlobalPosition.DistanceTo(SpawnPos) > 2) { Move(SpawnPos.x > GlobalPosition.x ? 1 : -1); } else { Move(0); } } p = p.Where(n => n.GlobalPosition.DistanceTo(GlobalPosition) < 10).ToArray(); if (p.Any() && IsOnFloor() && CanAttack && !Attacking && Health > 0) { Attack(); } } else { Move(FlyR ? 1 : -1); } ProcessGravity(delta); }
public override void _Process(float delta) { var g = GetTree().GetNodesInGroup("Player"); Node2D[] p = new Node2D[g.Count]; g.CopyTo(p, 0); p = p.Where(n => (n as Knight).Health > 0).ToArray(); p = p.Where(n => n.GlobalPosition.DistanceTo(GlobalPosition) < 40).ToArray(); if (p.Any() && AttackCooldown.TimeLeft == 0 && Health > 0) { var k = p.FirstOrDefault(); Sprite.FlipH = k.GlobalPosition < GlobalPosition; AttackCooldown.Start(3f); ShootTimer.Start(1.5f); Animation.Play("A"); } }