using System.Collections.Generic; using System.Linq; using Godot; using Godot.Collections; namespace Evolution.scripts; public partial class World : Node3D { public static World Instance { get; private set; } public int BoxCount { get; private set; } public int Collisions { get => collisions; set { collisions = value; collisionsLabel.Text = $"Collisions: {collisions}"; } } [Export] private Array boxScenes = new(); [Export] private double maxTimer = 0.01; private double timer; private double fpsTimer; [Export] private Label fpsLabel; [Export] private Label boxesLabel; [Export] private Label collisionsLabel; private int frameCount; private readonly List frameCounts = new(); private int collisions; public override void _Ready() => Instance = this; public override void _Process(double delta) { frameCount++; fpsTimer += delta; if (fpsTimer >= 1) { frameCounts.Add(frameCount); fpsLabel.Text = $"FPS: {(int)frameCounts.Average()}"; frameCount = 0; fpsTimer = 0; } timer += delta; if (timer >= maxTimer) { CreateNewBox(); timer = 0; } } private void CreateNewBox() { BoxCount++; Node newBox = boxScenes[GD.RandRange(0, boxScenes.Count - 1)].Instantiate(); AddChild(newBox); boxesLabel.Text = $"Boxes: {BoxCount}"; } public void DestroyBox() { BoxCount--; boxesLabel.Text = $"Boxes: {BoxCount}"; } }