Esempio n. 1
0
    public void _on_Area2D_body_entered(Node body)
    {
        if (bouncer_data.deadly && body is Juni)
        {
            Juni.die();
            return;
        }

        if (!in_air)
        {
            return;
        }
        if (!GDArea.isIn(GlobalPosition))
        {
            return;
        }                                             // ignore all collisions if out of the area
        if (vel < 0f)
        {
            vel = -vel; return;
        }

        in_air = false;

        var p = Position;

        p.y      = start_y;
        Position = p;

        GetNode <AnimatedSprite>("AnimatedSprite").Play(Anim, true);
    }
Esempio n. 2
0
    public override void _PhysicsProcess(float delta)
    {
        base._PhysicsProcess(delta);

        // Check for collisions with ObjectsCollide and area bounds
        var diff     = speed * direction * SPEED_SCALE * delta;
        var diff_vec = vertical ? new Vector2(0, diff) : new Vector2(diff, 0);

        // Sometimes collision can be detected with zero movement! Muff got stuck after this.
        if (diff != 0 && (!GDArea.isIn(Center + diff_vec, x_border: xBorder) || moveAndCollide(diff_vec) != null))
        {
            collide();
        }

        var new_speed = speed - _deceleration * delta;

        if (speed > 0 && new_speed <= 0)
        {
            changeSpeed(0);
        }
        else
        {
            speed = new_speed;
        }
    }
Esempio n. 3
0
    public void _on_Area2D_body_entered(Node body)
    {
        if (body is Juni juni)
        {
            juniDie(juni);
            return;
        }

        if (!in_air)
        {
            return;
        }
        if (!GDArea.isIn(GlobalPosition))
        {
            return;
        }                                             // ignore all collisions if out of the area
        if (vel < 0f)
        {
            vel = -vel; return;
        }

        in_air = false;

        Position = new Vector2(Position.x, start_y);

        GetNodeOrNull <RawAudioPlayer2D>("BouncePlayer")?.Play();
        sprite.Play("stop", true);
    }
Esempio n. 4
0
 public override void _PhysicsProcess(float delta)
 {
     base._PhysicsProcess(delta);
     if (!Juni.dead && Juni.manhattanDistance(Center) < 67 && GDArea.isIn(Juni.GlobalPosition, 18 + 14, 18 + 14))
     {
         sprite.Play("launch");
         GetNode <AudioStreamPlayer2D>("ExplodePlayer").Play();
         juniDie(Juni);
     }
 }
Esempio n. 5
0
 public void _on_Area2D_body_entered(Node body)
 {
     if (!(body is Juni juni))
     {
         return;
     }
     juni.setPower(power, true);
     GDArea.playEffect(Coords);
     juni.playSound("powerup");
     QueueFree();
 }
Esempio n. 6
0
    public override void _PhysicsProcess(float delta)
    {
        base._PhysicsProcess(delta);
        var sprite = GetNode <AnimatedSprite>("AnimatedSprite");
        var jgp    = Juni.ApparentPosition;

        float juni_radar_value = horizontal ? jgp.y : jgp.x;
        float obj_radar_value  = horizontal ? Center.y : Center.x;
        bool  out_of_radar     = (radarTop != 0 && juni_radar_value < obj_radar_value - radarTop) ||
                                 (radarBottom != 0 && juni_radar_value > obj_radar_value + radarBottom);

        float juni_coord_value = horizontal ? jgp.x : jgp.y;
        float obj_coord_value  = horizontal ? Center.x : Center.y;
        bool  too_close        = Mathf.Abs(juni_coord_value - obj_coord_value) < keepDistance;
        bool  stop             = out_of_radar || too_close;

        if (!stop)
        {
            int   direction = juni_coord_value < obj_coord_value ? -1 : 1;
            float diff      = speed * direction * delta;
            var   diff_vec  = horizontal ? new Vector2(diff, 0) : new Vector2(0, diff);
            if (!GDArea.isIn(Center + diff_vec, x_border: 10) || moveAndCollide(diff_vec) != null)
            {
                stop = true;
            }
            else
            {
                if (sprite.Animation != "walk")
                {
                    sprite.Play("walk");
                    if (horizontal)
                    {
                        sprite.FlipH = direction < 0;
                    }
                    else
                    {
                        sprite.FlipV = direction > 0;
                    }
                }
            }
        }

        if (stop)
        {
            if (sprite.Animation == "walk")
            {
                sprite.Play("default");
            }
        }
    }
Esempio n. 7
0
    public override void _PhysicsProcess(float delta)
    {
        base._PhysicsProcess(delta);

        var movement  = (CurrentDirection * _params.speed * delta) + Buzz * delta;
        var col       = Call("move_and_collide", movement, true, true, true) as KinematicCollision2D;
        var offscreen = !GDArea.isIn(Center + (movement * 6f));

        if (col == null && !offscreen)
        {
            Translate(movement);
        }
        else
        {
            startMove();
        }
    }
Esempio n. 8
0
    public override void _PhysicsProcess(float delta)
    {
        base._PhysicsProcess(delta);
        var buzz = new Vector2(random.NextFloat(-buzzStrength, buzzStrength),
                               random.NextFloat(-buzzStrength, buzzStrength));
        var movement  = currentDirection * speed * delta + buzz * delta;
        var collision = moveAndCollide(movement, testOnly: true);
        var offscreen = !GDArea.isIn(Center + movement, x_border: border, y_border: border);

        if (collision == null && !offscreen)
        {
            Translate(movement);
        }
        else
        {
            changeDirection(); GetNode <Timer>("FlyTimer").Start();
        }
    }
Esempio n. 9
0
    protected override void _InvProcess(float delta)
    {
        time += delta;

        var gp = GlobalPosition;

        gp.x          += Speed * delta;
        gp.y           = height + (Mathf.Sin(time * HOVER_SPEED) * HOVER_HEIGHT);
        GlobalPosition = gp;

        // Collide with area edge
        var dp = GlobalPosition + new Vector2(12f + (12f * Mathf.Sign(Speed)), 0f);

        if (!GDArea.isIn(dp))
        {
            Speed *= -1f;
        }
    }
Esempio n. 10
0
    public override void _PhysicsProcess(float delta)
    {
        base._PhysicsProcess(delta);
        if (!isRunning)
        {
            return;
        }
        float diff     = speed * direction * delta;
        var   diff_vec = new Vector2(diff, 0);
        var   center   = GlobalPosition + new Vector2(centerOffset, 0);

        if (!GDArea.isIn(center + diff_vec, x_border: border) || moveAndCollide(diff_vec) != null)
        {
            isRunning    = false;
            direction    = -direction;
            sprite.FlipH = !sprite.FlipH;
            sprite.Play("default");
        }
    }
Esempio n. 11
0
    public override void _PhysicsProcess(float delta)
    {
        // TODO: not very accurate (no reappear, different speed, etc). Rewrite if required.
        speed += random.NextFloat(-speedBuzz + speedOffset, speedBuzz + speedOffset) * delta;
        if (speed > limitSpeed)
        {
            speed = resetSpeed;
        }

        direction += random.NextFloat(-directionBuzz, directionBuzz) * delta;

        opacity += random.NextFloat(-opacityBuzz, opacityBuzz) * delta;
        opacity  = Mathf.Max(0, Mathf.Min(1, opacity));

        var diff      = new Vector2(speed, 0).Rotated(direction);
        var collision = moveAndCollide(diff * delta * SPEED_SCALE);

        if (collision != null)
        {
            direction = diff.Bounce(collision.Normal).Angle();
        }
        if (!GDArea.isIn(Center))
        {
            direction = (GDArea.GlobalPosition + new Vector2(300, 120)).AngleToPoint(Center);
        }

        sprite.Rotation = direction;
        Modulate        = new Color(1, 1, 1, opacity);

        string anim = speed <= idleSpeed ? "idle" :
                      speed > runSpeed ? "run" : "fly";

        if (sprite.Animation != anim)
        {
            sprite.Play(anim);
        }
    }
Esempio n. 12
0
    protected override void _execute(Juni juni)
    {
        if (sound != null)
        {
            juni.playSound(sound);
        }

        if (!trigger.ObjectID.Equals(new KnyttPoint(0, 0)))
        {
            var spawn_points = GDArea.Objects.findObjects(new KnyttPoint(0, ObjectID.y + 10));
            if (spawn_points.Count > 0)
            {
                foreach (var spawn_point in spawn_points)
                {
                    addObject(spawn_point.Coords);
                }
            }
            else
            {
                addObject(trigger.AbsolutePosition);

                if (trigger.Effect)
                {
                    var offset = new Vector2(trigger.EffectOffset.x, trigger.EffectOffset.y);
                    GDArea.playEffect(trigger.AbsolutePosition, offset);
                }
            }
        }

        var delete_points = GDArea.Objects.findObjects(new KnyttPoint(0, ObjectID.y + 13));

        foreach (var delete_point in delete_points)
        {
            (delete_point as DeletePoint).activate();
        }
    }