Evolution/scripts/World.cs

61 lines
1.6 KiB
C#

using System.Collections.Generic;
using System.Linq;
using Godot;
namespace Evolution.scripts;
public partial class World : Node3D {
public static World Instance { get; private set; }
public int BoxCount { get; private set; }
private readonly List<PackedScene> boxScenes = new();
private double maxTimer = 0.01;
private double timer;
private double fpsTimer;
private Label fpsLabel;
private Label boxesLabel;
private int frameCount;
private readonly List<int> frameCounts = new();
public override void _Ready() {
Instance = this;
boxScenes.Add(GD.Load<PackedScene>("res://scenes/GreenBox.tscn"));
boxScenes.Add(GD.Load<PackedScene>("res://scenes/OrangeBox.tscn"));
boxScenes.Add(GD.Load<PackedScene>("res://scenes/PurpleBox.tscn"));
boxScenes.Add(GD.Load<PackedScene>("res://scenes/RedBox.tscn"));
boxScenes.Add(GD.Load<PackedScene>("res://scenes/Box.tscn"));
fpsLabel = GetNode<Label>("CanvasGroup/FPS");
boxesLabel = GetNode<Label>("CanvasGroup/Boxes");
}
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}";
}
}