CorundumGames.Codegen
0.1.3
See the version list below for details.
dotnet add package CorundumGames.Codegen --version 0.1.3
NuGet\Install-Package CorundumGames.Codegen -Version 0.1.3
<PackageReference Include="CorundumGames.Codegen" Version="0.1.3" />
paket add CorundumGames.Codegen --version 0.1.3
#r "nuget: CorundumGames.Codegen, 0.1.3"
// Install CorundumGames.Codegen as a Cake Addin #addin nuget:?package=CorundumGames.Codegen&version=0.1.3 // Install CorundumGames.Codegen as a Cake Tool #tool nuget:?package=CorundumGames.Codegen&version=0.1.3
CorundumGames.CodeGeneration.Plugins
A set of Jenny plugins that I think are useful for a wide variety of projects that use C#, Unity, and Entitas.
How to Use
These plugins are intended to be used directly by the Jenny code generator. They are not intended to be used as a dependency for your own plugins.
Installation
TODO: How to install in your project
Configuration
To use any plugin in this repository, add the following to your Jenny.properties
file:
Jenny.SearchPaths = ... # Wherever you keep your codegen assemblies
Jenny.Plugins = CorundumGames.Codegen
Configuration specific to each plugin can be found in the sections below.
Plugins
At the moment, this repository only includes one plugin. But I intend to add others.
All plugins will be contained in one assembly.
If you don't need a plugin, simply don't include it in your Jenny.properties
file.
CorundumGames.Codegen.DisposableComponent
Generates systems that call Dispose()
on components that implement IDisposable
.
No attributes necessary, simply implement IDisposable
.
This is useful for components that contain data that must be cleaned up, including pooled objects. In my case, I use this plugin to reset DOTween-based tweens. Here's an example of a disposable component that I'm using in Chromavaders:
using System;
using DG.Tweening;
using DG.Tweening.Core;
using DG.Tweening.Plugins.Options;
using Entitas;
using UnityEngine;
// This component is hand-written
[Game]
public sealed class PositionTweenComponent : IComponent, IDisposable
{
public TweenerCore<Vector2, Vector2, VectorOptions> tween;
public void Dispose()
{
if (tween is { active: true })
{ // If this position tween is not null and it's still active...
tween.Kill();
}
tween = null;
}
}
A disposable component processed with this plugin will have its Dispose()
method
called when any of the following occurs:
- When
Systems.TearDown()
) is called, usually when the game ends. - When its owning entity is about to be destroyed, via the
Context.OnEntityWillBeDestroyed
event. - When it's removed, via the
Group.OnEntityRemoved
event. - When its value is changed, via the
Group.OnEntityUpdated
event. This currently occurs even if the component's value is replaced with itself.
Configuration
To include it in your project, modify the following properties within Jenny.properties
file like so:
Jenny.DataProviders = CorundumGames.Codegen.DisposableComponent.DataProvider
Jenny.CodeGenerators = CorundumGames.Codegen.DisposableComponent.Generator
Usage
This plugin generates a DisposeDataFeature
in Generated/Features
.
Add it to your Systems
instance to enable it in your project.
You may also add the generated systems to your Systems
instances directly.
Disposable components may be added to as many Context
s as you'd like.
This plugin will generate systems for each combination of component and context.
Entitas pools components, therefore your Dispose()
method must not make them unusable.
This means your disposable components must not use a disposed
flag,
nor should they ever throw ObjectDisposedException
.
Compatibility
The plugin itself should work on all platforms that Jenny supports (Windows, macOS, Linux).
The generated code requires at least Unity 2021.1,
due to its use of UnityEngine.Pool
.
If you want to use this generator without using UnityEngine.Pool
,
please open a ticket (or even better, a pull request).
Building
This project can be built and used on Windows, macOS, and Linux. Install the latest version of .NET and build it on the command-line.
Run the command dotnet build
, passing in the .sln
file if you're not in that directory.
# Either change directory to the cloned repo...
cd CorundumGames.Codegen
dotnet build
# ...or pass the solution file explicitly
dotnet build ./path/to/CorundumGames.Codegen.sln
License
All files in this repository are released under the MIT license, unless otherwise noted.
You own the output of each plugin, I make no ownership claims to it.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET Framework | net472 is compatible. net48 was computed. net481 was computed. |
-
.NETFramework 4.7.2
- DesperateDevs.CodeGeneration (>= 0.1.0)
- DesperateDevs.CodeGeneration.Plugins (>= 0.1.0)
- DesperateDevs.Roslyn (>= 0.1.0)
- DesperateDevs.Roslyn.CodeGeneration.Plugins (>= 0.1.0)
- DesperateDevs.Serialization (>= 0.1.0)
- DesperateDevs.Utils (>= 0.1.0)
- Entitas (>= 1.13.0)
- Entitas.CodeGeneration.Attributes (>= 1.13.0)
- Entitas.CodeGeneration.Plugins (>= 1.13.0)
- JetBrains.Annotations (>= 2021.3.0)
- Microsoft.CodeAnalysis (>= 3.11.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.