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)]; }
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; }
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"); }
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; }
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); }
public override void _Ready() { _visibilityNotifier = GetNode <VisibilityNotifier2D>("VisibilityNotifier2D"); _visibilityNotifier.Connect("screen_exited", this, nameof(OnScreenLeave)); }
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)); }