using Godot; using System; public partial class Main : Node { // Don't forget to rebuild the project so the editor knows about the new export variable. [Export] public PackedScene MobScene { get; set; } private int _score; public override void _Ready() { //NewGame(); } public void GameOver() { GetNode("MobTimer").Stop(); GetNode("ScoreTimer").Stop(); GetNode("HUD").ShowGameOver(); } public void NewGame() { _score = 0; var player = GetNode("Marble"); var startPosition = GetNode("StartPosition"); player.Start(startPosition.Position); GetNode("StartTimer").Start(); var hud = GetNode("HUD"); hud.UpdateScore(_score); hud.ShowMessage("Get Ready!"); GetTree().CallGroup("mobs", Node.MethodName.QueueFree); } // We also specified this function name in PascalCase in the editor's connection window. private void OnScoreTimerTimeout() { _score++; GetNode("HUD").UpdateScore(_score); } // We also specified this function name in PascalCase in the editor's connection window. private void OnStartTimerTimeout() { GetNode("MobTimer").Start(); GetNode("ScoreTimer").Start(); } private void OnMobTimerTimeout() { // Create a new instance of the Mob scene. Mob mob = MobScene.Instantiate(); // Choose a random location on Path2D. var mobSpawnLocation = GetNode("MobPath/MobSpawnLocation"); mobSpawnLocation.ProgressRatio = GD.Randf(); // 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. var velocity = new Vector2((float)GD.RandRange(150.0, 250.0), 0); mob.LinearVelocity = velocity.Rotated(direction); // Spawn the mob by adding it to the Main scene. AddChild(mob); } }