Пример #1
0
    public override void _Ready()
    {
        colorRandom = new Random();
        visibility  = (VisibilityNotifier2D)GetNode("VisibilityNotifier2D");
        visibility.Connect("screen_exited", this, nameof(OnScreenExited));
        sprite = (Sprite)GetNode("Sprite");

        sprite.Modulate = Colors.colors[colorRandom.Next(0, Colors.colors.Length)];
    }
Пример #2
0
    private void InitBall()
    {
        ballSpeed             = ballStartSpeed;
        ball                  = GetNode(new NodePath("./Ball")) as KinematicBody2D;
        ballVisibilityChecker = ball.GetChild(2) as VisibilityNotifier2D;
        ballStartPos          = ball.Position;

        RandomizeBallVelocity();

        shooter = (Math.Sign(ballVel.x) == -1) ? true : false;
    }
Пример #3
0
    public override void _Ready()
    {
        MIN_SPEED  = 150;
        MAX_SPEED  = 250;
        Animations = (AnimatedSprite)GetNode("AnimatedSprite");
        Visibility = (VisibilityNotifier2D)GetNode("Visibility");
        Random r = new Random();

        Animations.Animation = mob_types[r.Next(mob_types.Count)];
        Visibility.Connect("screen_exited", this, "OnVisibilityScreenExited");
    }
Пример #4
0
    private void SpawnRandomScene()
    {
        PackedScene scene    = this.GetRandomScene();
        Node2D      instance = this.InstantiateScene(scene);

        VisibilityNotifier2D vn2d = instance.GetNode <VisibilityNotifier2D>("VisibilityNotifier2D");
        Node2D prevPiece          = this.LevelHolder.GetChild <Node2D>(this.LevelHolder.GetChildCount() - 2);

        if (null == prevPiece)
        {
            this.lastPosition.x = -vn2d.Position.x;
            this.lastPosition.y = instance.Position.y;
            this.previousVisibilityNotifier2D = vn2d;
        }

        this.currentPosition.x       = this.lastPosition.x + this.previousVisibilityNotifier2D.Position.x;
        this.currentPosition.y       = instance.Position.y;
        instance.Position            = this.currentPosition;
        this.lastPosition            = instance.Position;
        previousVisibilityNotifier2D = vn2d;
    }
Пример #5
0
    public Pyroblast(Vector2 _direction, Vector2 _pos, int _targetLayer) : base(_direction, _pos, _targetLayer)
    {
        maxPierces        = 3;
        damage            = 1000f;
        knockbackStrength = 200f;
        maxVelocity       = 100;
        acceleration      = 10;
        effectRadius      = 30f;
        cooldown          = 3f;

        Position = Position + direction * 15f;
        Rotate(GetAngleTo(Position + direction));

        VisibilityNotifier2D onScreenNotifier = new VisibilityNotifier2D();

        onScreenNotifier.Connect("screen_exited", this, "queue_free");
        AddChild(onScreenNotifier);

        // Sprite
        sprite.Texture = spriteImage;
        AddChild(sprite);

        // Collider
        hitArea.SetCollisionMaskBit(targetLayer, true);
        AddChild(hitArea);
        CollisionShape2D shape = new CollisionShape2D();

        shape.Transform = new Godot.Transform2D(0f, new Vector2(-1, 0f));
        CircleShape2D circle = new CircleShape2D();

        circle.Radius = 6;
        shape.Shape   = circle;
        hitArea.AddChild(shape);
        hitArea.Connect("area_entered", this, "_OnHurtAreaEnter");

        // Emitters
        explosionEmitter.Emitting      = false;
        explosionEmitter.Amount        = 300;
        explosionEmitter.Lifetime      = 4;
        explosionEmitter.OneShot       = true;
        explosionEmitter.SpeedScale    = 2;
        explosionEmitter.Explosiveness = 1;
        AddChild(explosionEmitter);

        smokeTrailEmitter.Amount          = 200;
        smokeTrailEmitter.Preprocess      = 0.5f;
        smokeTrailEmitter.ProcessMaterial = smokeTrailMaterial;
        AddChild(smokeTrailEmitter);

        fireTrailEmitter.Amount          = 200;
        fireTrailEmitter.Preprocess      = 0.5f;
        fireTrailEmitter.SpeedScale      = 1.5f;
        fireTrailEmitter.Explosiveness   = .1f;
        fireTrailEmitter.Randomness      = 1;
        fireTrailEmitter.ProcessMaterial = fireTrailMaterial;
        fireTrailEmitter.Transform       = new Godot.Transform2D(0f, new Vector2(-1, 0f));
        AddChild(fireTrailEmitter);

        // Timers
        explosionCompleteTimer.WaitTime = 1f;
        explosionCompleteTimer.OneShot  = true;
        explosionCompleteTimer.Connect("timeout", this, "queue_free");
        AddChild(explosionCompleteTimer);
        initialBoomVelocityTimer.WaitTime = 0.2f;
        initialBoomVelocityTimer.OneShot  = true;
        initialBoomVelocityTimer.Connect("timeout", this, "_RemoveInitialBoomVelocity");
        AddChild(initialBoomVelocityTimer);

        Scale = new Vector2(1.7f, 1.7f);
    }
Пример #6
0
 public override void _Ready()
 {
     _visibilityNotifier = GetNode <VisibilityNotifier2D>("VisibilityNotifier2D");
     _visibilityNotifier.Connect("screen_exited", this, nameof(OnScreenLeave));
 }
Пример #7
0
    public Fireball(Vector2 direction, Vector2 position, int targetLayer) : base(direction, position, targetLayer)
    {
        damage            = 100f;
        knockbackStrength = 50f;
        Acceleration      = 200;
        effectRadius      = 30f;
        LifetimeTotal     = 1f;

        Texture gradient = ResourceLoader.Load("res://assets/gradients/radial.png") as Texture;

        light.Texture = gradient;
        light.Scale   = new Vector2(.1f, .1f);
        light.Color   = new Color(1f, .7f, .7f, .2f);
        AddChild(light);

        VisibilityNotifier2D onScreenNotifier = new VisibilityNotifier2D();

        onScreenNotifier.Connect("screen_exited", this, "queue_free");
        AddChild(onScreenNotifier);

        Position = Position + Direction * 10f;

        // Sprite
        sprite.Texture = spriteImage;
        AddChild(sprite);

        // Collider
        hitArea.CollisionLayer = 0;
        hitArea.SetCollisionMaskBit(0, false);
        hitArea.SetCollisionMaskBit(targetLayer, true);
        AddChild(hitArea);
        CollisionShape2D shape = new CollisionShape2D();

        shape.Transform = new Godot.Transform2D(0f, new Vector2(-1, 0f));
        CircleShape2D circle = new CircleShape2D();

        circle.Radius = 6;
        shape.Shape   = circle;
        hitArea.AddChild(shape);
        hitArea.Connect("area_entered", this, "_OnHurtAreaEnter");

        // Emitters
        explosionEmitter.ProcessMaterial = explosionMaterial;
        explosionEmitter.Emitting        = false;
        explosionEmitter.Amount          = 150;
        explosionEmitter.Lifetime        = 4;
        explosionEmitter.OneShot         = true;
        explosionEmitter.SpeedScale      = 2;
        explosionEmitter.Explosiveness   = 1;
        explosionEmitter.ZIndex          = -100;
        AddChild(explosionEmitter);

        smokeTrailEmitter.Amount          = 200;
        smokeTrailEmitter.Preprocess      = 0.5f;
        smokeTrailEmitter.ProcessMaterial = smokeTrailMaterial;
        AddChild(smokeTrailEmitter);

        fireTrailEmitter.Amount          = 100;
        fireTrailEmitter.Preprocess      = 0.5f;
        fireTrailEmitter.SpeedScale      = 1.5f;
        fireTrailEmitter.Explosiveness   = .1f;
        fireTrailEmitter.Randomness      = 1;
        fireTrailEmitter.ProcessMaterial = fireTrailMaterial;
        fireTrailEmitter.Transform       = new Godot.Transform2D(0f, new Vector2(-1, 0f));
        AddChild(fireTrailEmitter);

        // Timers
        Color   targetColor     = new Color(light.Color.r, light.Color.g, light.Color.b, light.Color.a * 2);
        Color   targetColorNone = new Color(light.Color.r, light.Color.g, light.Color.b, 0);
        Vector2 targetScale     = light.Scale * 3 * Mathf.Clamp((float)new Random().NextDouble(), .5f, 1f);

        onHitTween.InterpolateProperty(light, "color", light.Color, targetColor, .2f, easeType: Tween.EaseType.Out);
        onHitTween.InterpolateProperty(light, "color", targetColor, targetColorNone, .1f, easeType: Tween.EaseType.Out, delay: .2f);
        onHitTween.InterpolateProperty(light, "scale", light.Scale, targetScale, .1f);
        onHitTween.InterpolateProperty(explosionMaterial, "gravity", explosionMaterial.Gravity, default(Vector3), 0.1f, delay: .2f);
        onHitTween.InterpolateCallback(this, 1f, "queue_free");
        AddChild(onHitTween);

        lifetime.Connect("timeout", this, nameof(Explode));
    }