61 lines
1.6 KiB
C#
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}";
|
|
}
|
|
} |