using Godot; public partial class Main : Node { #pragma warning disable 649 // We assign this in the editor, so we don't need the warning about not being assigned. [Export] public PackedScene mobScene; #pragma warning restore 649 public int score; public override void _Ready() { GD.Randomize(); } public void GameOver() { GetNode("MobTimer").Stop(); GetNode("ScoreTimer").Stop(); GetNode("HUD").ShowGameOver(); GetNode("Music").Stop(); GetNode("DeathSound").Play(); } public void NewGame() { // Note that for calling Godot-provided methods with strings, // we have to use the original Godot snake_case name. GetTree().CallGroup("mobs", "queue_free"); score = 0; var player = GetNode("Player"); var startPosition = GetNode("StartPosition"); player.Start(startPosition.Position); GetNode("StartTimer").Start(); var hud = GetNode("HUD"); hud.UpdateScore(score); hud.ShowMessage("Get Ready!"); GetNode("Music").Play(); } public void OnStartTimerTimeout() { GetNode("MobTimer").Start(); GetNode("ScoreTimer").Start(); } public void OnScoreTimerTimeout() { score++; GetNode("HUD").UpdateScore(score); } public void OnMobTimerTimeout() { // Note: Normally it is best to use explicit types rather than the `var` // keyword. However, var is acceptable to use here because the types are // obviously PathFollow2D and Mob, since they appear later on the line. // Choose a random location on Path2D. var mobSpawnLocation = GetNode("MobPath/MobSpawnLocation"); mobSpawnLocation.Offset = GD.Randi(); // Create a Mob instance and add it to the scene. var mob = (Mob)mobScene.Instantiate(); AddChild(mob); // Set the mob's direction perpendicular to the path direction. float direction = mobSpawnLocation.Rotation + Mathf.Pi / 2; // Set the mob's position to a random location. mob.Position = mobSpawnLocation.Position; // Add some randomness to the direction. direction += (float)GD.RandRange(-Mathf.Pi / 4, Mathf.Pi / 4); mob.Rotation = direction; // Choose the velocity for the mob. var velocity = new Vector2((float)GD.RandRange(150.0, 250.0), 0); mob.LinearVelocity = velocity.Rotated(direction); } }