Пример #1
0
    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);
    }
Пример #2
0
  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");
      }
  }