feat: aetherbind, first source generator

This commit is contained in:
redglow
2026-07-18 17:05:03 +02:00
parent 4ce99d9486
commit aae9c083d9
69 changed files with 210 additions and 156 deletions
+13
View File
@@ -0,0 +1,13 @@
using GodotHostTest.Interfaces;
namespace GodotHostTest.Game.Level;
public class CurrentLevel : ICurrentLevel
{
public int LevelNumber { get; private set; } = 1;
public void NextLevel()
{
LevelNumber++;
}
}
+1
View File
@@ -0,0 +1 @@
uid://2eir1lf6v7kw
+13
View File
@@ -0,0 +1,13 @@
using System;
using Godot;
using GodotHostTest.Interfaces;
namespace GodotHostTest.Game.Level;
[GlobalClass]
public partial class LevelData : Resource, ILevel
{
[Export] public double TimeBetweenSpawns;
TimeSpan ILevel.TimeBetweenSpawns => TimeSpan.FromSeconds(TimeBetweenSpawns);
}
+1
View File
@@ -0,0 +1 @@
uid://ywe7vkywrdvk
+5
View File
@@ -0,0 +1,5 @@
using OwofGames.GodotLume;
namespace GodotHostTest.Game.Level;
public class LevelScope : RootScope;
+1
View File
@@ -0,0 +1 @@
uid://c1n5uoehtoe84
+19
View File
@@ -0,0 +1,19 @@
using Godot;
using GodotHostTest.AetherBind;
using GodotHostTest.Game.Target;
using GodotHostTest.Interfaces;
using OwofGames.GodotLume;
using ServiceSource = GodotHostTest.AetherBind.ServiceSource;
namespace GodotHostTest.Game.Level;
public partial class LevelServiceSource : ServiceSource
{
[Export] private TargetSpawner _targetSpawner = null!;
protected override void OnScopeCreated(IProvider serviceProvider)
{
serviceProvider.Get<IValueSetter<ITargetCollector>>().Set(_targetSpawner);
serviceProvider.Get<IValueSetter<ITargetSpawner>>().Set(_targetSpawner);
}
}
+1
View File
@@ -0,0 +1 @@
uid://dk578xnlxjwrr
+21
View File
@@ -0,0 +1,21 @@
using GodotHostTest.AetherBind;
using GodotHostTest.Interfaces;
using OwofGames.GodotLume;
namespace GodotHostTest.Game.Level;
public static class LevelServices
{
public static void AddLevelServices(this Builder builder, LevelsData levelsData)
{
builder
// current level / level data management
.AddSingleton<ICurrentLevel, CurrentLevel>()
.AddInstance<ILevelDataProvider, LevelsData>(levelsData)
// value providers to send data into level scope
.AddValueProvider<ILevel, RootScope, LevelScope>()
// value provider for level scope setup
.AddValueProvider<ITargetCollector, LevelScope>()
.AddValueProvider<ITargetSpawner, LevelScope>();
}
}
+16
View File
@@ -0,0 +1,16 @@
using Godot;
using GodotHostTest.Interfaces;
namespace GodotHostTest.Game.Level;
[GlobalClass]
public partial class LevelsData : Resource, ILevelDataProvider
{
[Export] private LevelData[] _levelDataEntries = [];
public ILevel GetLevelData(int levelNumber)
{
var entry = _levelDataEntries[levelNumber - 1];
return entry;
}
}
+1
View File
@@ -0,0 +1 @@
uid://cl200m5rnkboq