* Fixed dependency

* Updates to NeoDictionary

* Changes to NeoDictionary

* Started working on a Git implementation to integrate into Game Engines in the future

* Added commit functionality to the git library

* New changes

* Added select for NeoDictionary.cs

* Fixed issue with previous new method

* Added a Benchmarking Tool to be used mostly in game engines

* Added IndexOf to NeoDictionary.cs

* Added new method for BenchmarkUtility.cs

* added an instacedobject class

* Added a new shuffle method for lists

* fixed return type

* Added new Changelog generator

* Added new Game logic library to assist with game projects

* Added Web Project

* Added Nuget package configs

* Add workflow for publishing game library NuGet package

* Add README for OmegaLeo's Helper Library

* Updated Website to reflect all libraries

* Fixed missing library in Changelog

* Added Contributing and Code of Conduct

* Fixed web project

* new documentation changes

* fix packages

* Fixed DocumentationHelper package dependencies

* Added Serilog

* Added logging

* Fixed documentation

* Added logging for cache

* fixed documentation

* Updated README.md

* Update README.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update OmegaLeo.HelperLib.Web/Controllers/HomeController.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* Update OmegaLeo.HelperLib.Web/Controllers/HomeController.cs

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* fix error

* changes for Github Packages

* Cleanup

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit was merged in pull request #13.
This commit is contained in:
2026-02-13 14:28:46 +00:00
committed by GitHub
parent 8134fb2180
commit 77f301e578
21 changed files with 2253 additions and 223 deletions
+2
View File
@@ -12,3 +12,5 @@ riderModule.iml
/OmegaLeo.HelperLib.Web/publish /OmegaLeo.HelperLib.Web/publish
>>>>>>> Stashed changes >>>>>>> Stashed changes
/OmegaLeo.HelperLib.Web/OmegaLeo.HelperLib.Web.csproj.user /OmegaLeo.HelperLib.Web/OmegaLeo.HelperLib.Web.csproj.user
*.sh
@@ -13,4 +13,8 @@
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="System.Runtime.Loader" Version="4.3.0" />
</ItemGroup>
</Project> </Project>
@@ -9,7 +9,6 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj" />
<ProjectReference Include="..\OmegaLeo.HelperLib.Git\OmegaLeo.HelperLib.Git.csproj" />
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup> </ItemGroup>
-130
View File
@@ -1,130 +0,0 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using OmegaLeo.HelperLib.Extensions;
using LibGit2Sharp;
using OmegaLeo.HelperLib.Git.Models;
namespace OmegaLeo.HelperLib.Git
{
public class GitClient
{
private Repository _repo;
public GitClient(string path)
{
if (path.IsNullOrEmpty())
{
path = AppDomain.CurrentDomain.BaseDirectory;
}
_repo = new Repository(path);
}
public void CheckoutBranch(string branchName)
{
var branch = _repo.Branches[branchName];
if (branch == null)
{
branch = _repo.CreateBranch(branchName);
}
Commands.Checkout(_repo, branch);
}
public bool HasChanges() => _repo.Diff.Compare<TreeChanges>().Count > 0;
public ChangeFolder GetChanges()
{
var folder = new ChangeFolder();
if (HasChanges())
{
var changes = _repo.Diff.Compare<TreeChanges>();
var allChanges = new List<TreeEntryChanges>();
allChanges.AddRange(changes.Added);
allChanges.AddRange(changes.Modified);
allChanges.AddRange(changes.Deleted);
var uniqueFolderPaths = allChanges.Select(x => Path.GetDirectoryName(x.Path)).Distinct();
foreach (var path in uniqueFolderPaths)
{
if (path.IsNullOrEmpty()) continue;
if (path.Contains(Path.DirectorySeparatorChar))
{
var paths = path.Split(Path.DirectorySeparatorChar);
for (var i = 0; i < paths.Length; i++)
{
var p = paths[i];
if (folder.FolderName.Equals(p))
{
if (folder.ChangesInFolder.Any()) continue;
folder.ChangesInFolder =
allChanges.Where(x => Path.GetDirectoryName(x.Path)!.Equals(p, StringComparison.OrdinalIgnoreCase));
}
else
{
var pathList = paths[0..(i+1)].ToList();
var subFolder = folder.RecursiveGet(pathList);
var fullPath = string.Join(Path.DirectorySeparatorChar, pathList);
if (!subFolder.ChangesInFolder.Any())
{
subFolder.ChangesInFolder = allChanges.Where(x =>
Path.GetDirectoryName(x.Path)!.Equals(fullPath, StringComparison.OrdinalIgnoreCase));
}
}
}
}
else
{
folder.FolderName = path;
folder.ChangesInFolder =
allChanges.Where(x => Path.GetDirectoryName(x.Path)!.Equals(path, StringComparison.OrdinalIgnoreCase));
}
}
}
return folder;
}
public void Commit(string message, Signature author)
{
if (HasChanges())
{
var changes = _repo.Diff.Compare<TreeChanges>();
var allChanges = new List<TreeEntryChanges>();
allChanges.AddRange(changes.Added);
allChanges.AddRange(changes.Modified);
allChanges.AddRange(changes.Deleted);
var filePaths = allChanges.Select(x => x.Path).Where(x => x.IsNotNullOrEmpty());
Commands.Stage(_repo, filePaths);
}
_repo.Commit(message, author, author);
}
public void Push()
{
try {
var remote = _repo.Network.Remotes["origin"];
var options = new PushOptions();
var pushRefSpec = @"refs/heads/master";
_repo.Network.Push(remote, new string[] {pushRefSpec}, options);
}
catch (Exception e) {
Console.WriteLine("Exception:RepoActions:PushChanges " + e.Message);
}
}
}
}
@@ -1,56 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using LibGit2Sharp;
namespace OmegaLeo.HelperLib.Git.Models
{
public class ChangeFolder
{
public string FolderName { get; set; }
public List<ChangeFolder> SubFolders { get; set; }
public IEnumerable<TreeEntryChanges> ChangesInFolder { get; set; }
public ChangeFolder()
{
FolderName = "";
SubFolders = new List<ChangeFolder>();
ChangesInFolder = new List<TreeEntryChanges>();
}
public ChangeFolder RecursiveGet(List<string> paths)
{
if (!paths.Any()) return null;
var tempPaths = paths;
var pathToCheck = tempPaths.FirstOrDefault();
ChangeFolder folder = new ChangeFolder();
if (FolderName.Equals(pathToCheck, StringComparison.OrdinalIgnoreCase))
{
folder = this;
}
else if (SubFolders.Any(x => x.FolderName.Equals(pathToCheck)))
{
folder = SubFolders.FirstOrDefault(x => x.FolderName.Equals(pathToCheck))!;
}
else
{
folder.FolderName = pathToCheck;
SubFolders.Add(folder);
}
tempPaths.RemoveAt(0);
if (tempPaths.Any())
{
return folder.RecursiveGet(tempPaths);
}
else
{
return folder;
}
}
}
}
@@ -1,22 +0,0 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>OmegaLeo.HelperLib.Git</RootNamespace>
<Version>0.0.2</Version>
<Title>Omega Leo's Helper Library - LibGit2Sharp Implementation</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="LibGit2Sharp" Version="0.30.0"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup>
</Project>
@@ -9,7 +9,6 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj" />
<ProjectReference Include="..\OmegaLeo.HelperLib.Game\OmegaLeo.HelperLib.Game.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib.Game\OmegaLeo.HelperLib.Game.csproj" />
<ProjectReference Include="..\OmegaLeo.HelperLib.Git\OmegaLeo.HelperLib.Git.csproj" />
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" /> <ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup> </ItemGroup>
+2 -12
View File
@@ -2,10 +2,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib", "OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj", "{A7256931-5D66-46FA-BA50-22B2FA4CD9E9}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib", "OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj", "{A7256931-5D66-46FA-BA50-22B2FA4CD9E9}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.Git", "OmegaLeo.HelperLib.Git\OmegaLeo.HelperLib.Git.csproj", "{A9579FFB-9A05-4EBF-B298-513C48FB0F91}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.ConsoleApp", "OmegaLeo.HelperLib.ConsoleApp\OmegaLeo.HelperLib.ConsoleApp.csproj", "{3B77B177-FD47-470A-B0EF-01EF8B30CE09}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.Changelog", "OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj", "{378D8125-66B5-42B8-9881-33F951E5E04A}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.Changelog", "OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj", "{378D8125-66B5-42B8-9881-33F951E5E04A}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.ChangelogHandler", "OmegaLeo.HelperLib.ChangelogHandler\OmegaLeo.HelperLib.ChangelogHandler.csproj", "{359536F7-02DE-43E9-A383-D83853227B0F}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.ChangelogHandler", "OmegaLeo.HelperLib.ChangelogHandler\OmegaLeo.HelperLib.ChangelogHandler.csproj", "{359536F7-02DE-43E9-A383-D83853227B0F}"
@@ -20,6 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionFiles", "SolutionFi
CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md
CONTRIBUTING.md = CONTRIBUTING.md CONTRIBUTING.md = CONTRIBUTING.md
LICENSE = LICENSE LICENSE = LICENSE
.gitignore = .gitignore
EndProjectSection EndProjectSection
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "actions", "actions", "{750F2E9A-2703-4732-98D7-29C658368E48}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "actions", "actions", "{750F2E9A-2703-4732-98D7-29C658368E48}"
@@ -28,6 +25,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "actions", "actions", "{750F
.github\workflows\dotnet.yml = .github\workflows\dotnet.yml .github\workflows\dotnet.yml = .github\workflows\dotnet.yml
.github\workflows\nuget-publish.yml = .github\workflows\nuget-publish.yml .github\workflows\nuget-publish.yml = .github\workflows\nuget-publish.yml
.github\workflows\github-publish.yml = .github\workflows\github-publish.yml .github\workflows\github-publish.yml = .github\workflows\github-publish.yml
.github\workflows\jetbrains-publish.yml = .github\workflows\jetbrains-publish.yml
EndProjectSection EndProjectSection
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.Documentation", "OmegaLeo.HelperLib.Documentation\OmegaLeo.HelperLib.Documentation.csproj", "{AE69480D-5956-46CB-9028-E4723735E37E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.Documentation", "OmegaLeo.HelperLib.Documentation\OmegaLeo.HelperLib.Documentation.csproj", "{AE69480D-5956-46CB-9028-E4723735E37E}"
@@ -44,14 +42,6 @@ Global
{A7256931-5D66-46FA-BA50-22B2FA4CD9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU {A7256931-5D66-46FA-BA50-22B2FA4CD9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A7256931-5D66-46FA-BA50-22B2FA4CD9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU {A7256931-5D66-46FA-BA50-22B2FA4CD9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A7256931-5D66-46FA-BA50-22B2FA4CD9E9}.Release|Any CPU.Build.0 = Release|Any CPU {A7256931-5D66-46FA-BA50-22B2FA4CD9E9}.Release|Any CPU.Build.0 = Release|Any CPU
{A9579FFB-9A05-4EBF-B298-513C48FB0F91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A9579FFB-9A05-4EBF-B298-513C48FB0F91}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A9579FFB-9A05-4EBF-B298-513C48FB0F91}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A9579FFB-9A05-4EBF-B298-513C48FB0F91}.Release|Any CPU.Build.0 = Release|Any CPU
{3B77B177-FD47-470A-B0EF-01EF8B30CE09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B77B177-FD47-470A-B0EF-01EF8B30CE09}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B77B177-FD47-470A-B0EF-01EF8B30CE09}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B77B177-FD47-470A-B0EF-01EF8B30CE09}.Release|Any CPU.Build.0 = Release|Any CPU
{378D8125-66B5-42B8-9881-33F951E5E04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {378D8125-66B5-42B8-9881-33F951E5E04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{378D8125-66B5-42B8-9881-33F951E5E04A}.Debug|Any CPU.Build.0 = Debug|Any CPU {378D8125-66B5-42B8-9881-33F951E5E04A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{378D8125-66B5-42B8-9881-33F951E5E04A}.Release|Any CPU.ActiveCfg = Release|Any CPU {378D8125-66B5-42B8-9881-33F951E5E04A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+3 -1
View File
@@ -8,4 +8,6 @@
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASafeFileHandle_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc21672d0d37542808f219d7d1f059dc1b2e000_003Faf_003Fbed3a9b4_003FSafeFileHandle_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ASafeFileHandle_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc21672d0d37542808f219d7d1f059dc1b2e000_003Faf_003Fbed3a9b4_003FSafeFileHandle_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc61cc76f205b4535a5b4f40700c07900b2d200_003Fe5_003F6b3ec67e_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AThrowHelper_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fc61cc76f205b4535a5b4f40700c07900b2d200_003Fe5_003F6b3ec67e_003FThrowHelper_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATreeChanges_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F7478b0ce6362feb345e793626f5c504bd9d7ffeb748226521658c85fc4e29_003FTreeChanges_002Ecs/@EntryIndexedValue">ForceIncluded</s:String> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATreeChanges_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F7478b0ce6362feb345e793626f5c504bd9d7ffeb748226521658c85fc4e29_003FTreeChanges_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATreeEntryChanges_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2b7912eaeadb1d9a91a3f891a244b5cd4a856d9dde42694e941ee6a2994_003FTreeEntryChanges_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary> <s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ATreeEntryChanges_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003Fhome_003Fomegaleo_003F_002Econfig_003FJetBrains_003FRider2024_002E2_003Fresharper_002Dhost_003FSourcesCache_003F2b7912eaeadb1d9a91a3f891a244b5cd4a856d9dde42694e941ee6a2994_003FTreeEntryChanges_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolBuilderDuo/RunBuildOnSolutionLoaded/@EntryValue">True</s:Boolean>
<s:Boolean x:Key="/Default/Environment/Hierarchy/Build/SolutionBuilderNext/ShouldRestoreNugetPackages/@EntryValue">True</s:Boolean></wpf:ResourceDictionary>
+18
View File
@@ -1,5 +1,8 @@
# Omega Leo's Helper Library # Omega Leo's Helper Library
[![Publish NuGet](https://github.com/omegaleo/HelperLib/actions/workflows/nuget-publish.yml/badge.svg)](https://github.com/omegaleo/HelperLib/actions/workflows/nuget-publish.yml)
[![Publish JetBrains Plugin](https://github.com/omegaleo/HelperLib/actions/workflows/jetbrains-publish.yml/badge.svg)](https://github.com/omegaleo/HelperLib/actions/workflows/jetbrains-publish.yml)
Lightweight utility library for C\# projects and game development helpers. Lightweight utility library for C\# projects and game development helpers.
## Table of contents ## Table of contents
@@ -22,12 +25,15 @@ Lightweight utility library for C\# projects and game development helpers.
- Helpers that favor clarity and testability - Helpers that favor clarity and testability
- Game development specific helpers in the `OmegaLeo.HelperLib.Game` package - Game development specific helpers in the `OmegaLeo.HelperLib.Game` package
- Changelog generation utilities in the `OmegaLeo.HelperLib.Changelog` package - Changelog generation utilities in the `OmegaLeo.HelperLib.Changelog` package
- **JetBrains Rider plugin** for displaying custom documentation attributes in Quick Documentation (Ctrl+Q)
- Lightweight and easy to integrate into existing projects - Lightweight and easy to integrate into existing projects
- Well-documented and maintained - Well-documented and maintained
- Open source under the AGPL v3 License - Open source under the AGPL v3 License
## Install ## Install
### NuGet Packages
Add the library to your project via NuGet: Add the library to your project via NuGet:
```bash ```bash
@@ -37,6 +43,18 @@ dotnet add package OmegaLeo.HelperLib.Changelog
dotnet add package OmegaLeo.HelperLib.Documentation dotnet add package OmegaLeo.HelperLib.Documentation
``` ```
### JetBrains Rider Plugin
For enhanced IDE support with custom documentation attributes:
1. Open Rider
2. Go to **Settings** → **Plugins**
3. Search for "HelperLib Documentation Provider"
4. Click **Install**
5. Restart Rider
The plugin displays `[Documentation]` attributes in Quick Documentation (Ctrl+Q). [Learn more →](OmegaLeo.HelperLib.Jetbrains/README.md)
## Documentation ## Documentation
The documentation for this project can be found at [https://library.omegaleo.dev](https://library.omegaleo.dev). The documentation for this project can be found at [https://library.omegaleo.dev](https://library.omegaleo.dev).
This documentation is automatically generated from the code using the [OmegaLeo.HelperLib.Documentation package](https://www.nuget.org/packages/OmegaLeo.HelperLib.Documentation). This documentation is automatically generated from the code using the [OmegaLeo.HelperLib.Documentation package](https://www.nuget.org/packages/OmegaLeo.HelperLib.Documentation).
+225
View File
@@ -0,0 +1,225 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Changelog Library - OmegaLeo Helper Libraries</title>
<link rel="stylesheet" href="../../lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="../../css/site.css%3Fv=AK2YraxbvzgrpO6A1NqAHflCP7fbweSjdyWpd3ERsLE.css" />
</head>
<body>
<header b-pqzonzw7gm>
<nav b-pqzonzw7gm class="navbar navbar-expand-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div b-pqzonzw7gm class="container-fluid">
<a class="navbar-brand" href="../../index.html">
OmegaLeo Helper Libraries
</a>
<button b-pqzonzw7gm class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
<span b-pqzonzw7gm class="navbar-toggler-icon"></span>
</button>
<div b-pqzonzw7gm class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul b-pqzonzw7gm class="navbar-nav flex-grow-1">
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="../../index.html">Home</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="core.html">Core</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="changelog.html">Changelog</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="game.html">Game Dev</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="documentation.html">Documentation</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="shared.html">Shared Components</a>
</li>
</ul>
<ul b-pqzonzw7gm class="navbar-nav ms-auto">
<li b-pqzonzw7gm class="nav-item">
<a b-pqzonzw7gm class="nav-link" href="https://github.com/omegaleo/HelperLib" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository">
<i b-pqzonzw7gm class="bi bi-github" style="font-size:1.25rem;"></i> View on Github
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main b-pqzonzw7gm role="main" class="pb-3">
<div class="container-fluid mt-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../../index.html">Home</a></li>
<li class="breadcrumb-item active">Changelog Library</li>
</ol>
</nav>
<div class="row">
<div class="col-md-3">
<div class="sticky-top" style="top: 20px;">
<div class="card">
<div class="card-header">
<h5>Changelog Library</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="changelog.html#overview">
<i class="bi bi-info-circle me-2"></i>Overview
</a>
<a class="list-group-item list-group-item-action" href="changelog.html#namespace-OmegaLeo-HelperLib-Changelog">
<i class="bi bi-folder me-2"></i>OmegaLeo.HelperLib.Changelog
</a>
<a class="list-group-item list-group-item-action" href="changelog.html#changelog">
<i class="bi bi-clock-history me-2"></i>Changelog
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-9">
<div id="overview" class="mb-5">
<h2>Changelog Library</h2>
<p class="lead">Tools for managing and generating changelogs</p>
<hr />
</div>
<div id="namespace-OmegaLeo-HelperLib-Changelog" class="mb-5">
<h3>OmegaLeo.HelperLib.Changelog</h3>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">ChangelogHelper</h4>
<small class="text-muted">OmegaLeo.HelperLib.Changelog</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ChangelogHelper</code></td>
<td><p>Helper class to generate changelog markdown from ChangelogAttributes in the provided Assemblies.</p>
<br/>
</td>
</tr>
<tr>
<td><code>GetChangelogMarkdown</code></td>
<td><p>Generates a markdown formatted changelog from the changelog attributes in the provided assemblies.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">ChangelogTool</h4>
<small class="text-muted">OmegaLeo.HelperLib.Changelog</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ChangelogTool</code></td>
<td><p>Provides methods to extract changelog information from assembly attributes.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ChangelogTool.ExtractChangelog</code></td>
<td><p>Extracts changelog entries from the specified assembly.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ChangelogTool.GetMarkdown</code></td>
<td><p>Generates a markdown formatted changelog from the assembly's changelog attributes.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div id="changelog" class="mb-5">
<h3>Changelog</h3>
<div class="card">
<div class="card-body">
<h2>Version 1.2.0</h2>
<p><strong>OmegaLeo.HelperLib.Changelog.Helpers</strong></p>
<ul>
<li><strong>ChangelogHelper</strong>:
<ul>
<li>Created ChangelogHelper to generate markdown from changelog attributes.</li>
</ul>
</li>
</ul>
<h2>Version 1.0.0</h2>
<p><strong>OmegaLeo.HelperLib.Changelog.Tools</strong></p>
<ul>
<li><strong>ChangelogTool</strong>:
<ul>
<li>Created the class ChangelogTool to extract changelogs via attributes</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.sticky-top {
max-height: calc(100vh - 40px);
overflow-y: auto;
}
code {
background-color: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
font-size: 0.9em;
}
.table th {
background-color: #f8f9fa;
}
</style>
</main>
<script src="../../lib/jquery/dist/jquery.min.js"></script>
<script src="../../lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="../../js/site.js%3Fv=y_Ngd8W21UpuCUhEqGbUKDEqFnNfTjAfb24GhJJGUyM"></script>
</body>
</html>
+924
View File
@@ -0,0 +1,924 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Core Library - OmegaLeo Helper Libraries</title>
<link rel="stylesheet" href="../../lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="../../css/site.css%3Fv=AK2YraxbvzgrpO6A1NqAHflCP7fbweSjdyWpd3ERsLE.css" />
</head>
<body>
<header b-pqzonzw7gm>
<nav b-pqzonzw7gm class="navbar navbar-expand-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div b-pqzonzw7gm class="container-fluid">
<a class="navbar-brand" href="../../index.html">
OmegaLeo Helper Libraries
</a>
<button b-pqzonzw7gm class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
<span b-pqzonzw7gm class="navbar-toggler-icon"></span>
</button>
<div b-pqzonzw7gm class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul b-pqzonzw7gm class="navbar-nav flex-grow-1">
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="../../index.html">Home</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="core.html">Core</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="changelog.html">Changelog</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="game.html">Game Dev</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="documentation.html">Documentation</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="shared.html">Shared Components</a>
</li>
</ul>
<ul b-pqzonzw7gm class="navbar-nav ms-auto">
<li b-pqzonzw7gm class="nav-item">
<a b-pqzonzw7gm class="nav-link" href="https://github.com/omegaleo/HelperLib" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository">
<i b-pqzonzw7gm class="bi bi-github" style="font-size:1.25rem;"></i> View on Github
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main b-pqzonzw7gm role="main" class="pb-3">
<div class="container-fluid mt-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../../index.html">Home</a></li>
<li class="breadcrumb-item active">Core Library</li>
</ol>
</nav>
<div class="row">
<div class="col-md-3">
<div class="sticky-top" style="top: 20px;">
<div class="card">
<div class="card-header">
<h5>Core Library</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="core.html#overview">
<i class="bi bi-info-circle me-2"></i>Overview
</a>
<a class="list-group-item list-group-item-action" href="core.html#namespace-OmegaLeo-HelperLib">
<i class="bi bi-folder me-2"></i>OmegaLeo.HelperLib
</a>
<a class="list-group-item list-group-item-action" href="core.html#changelog">
<i class="bi bi-clock-history me-2"></i>Changelog
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-9">
<div id="overview" class="mb-5">
<h2>Core Library</h2>
<p class="lead">Core utilities and helper functions for general C# development</p>
<hr />
</div>
<div id="namespace-OmegaLeo-HelperLib" class="mb-5">
<h3>OmegaLeo.HelperLib</h3>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">ArrayExtensions</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Array Extensions</code></td>
<td><p>Set of extension methods to help with Arrays.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Next</code></td>
<td><p>Method to obtain the next object in the array by passing the current index.
Note: Idea obtained from TaroDev's video on things to do in Unity - https://youtu.be/Ic5ux-tpkCE?t=302</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">BenchmarkUtility</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>BenchmarkUtility</code></td>
<td><p>Utility class for benchmarking code execution time.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
BenchmarkUtility.Start(<span style="color:#D69D85;">&quot;MyBenchmark&quot;</span>);
<span style="color:#57A64A;">// Code to benchmark</span>
BenchmarkUtility.Stop(<span style="color:#D69D85;">&quot;MyBenchmark&quot;</span>);
<span style="color:#569CD6;">var</span> results = BenchmarkUtility.GetResults(<span style="color:#D69D85;">&quot;MyBenchmark&quot;</span>);
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Record</code></td>
<td><p>Records the execution time of the provided action and returns the elapsed time in milliseconds.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> time = BenchmarkUtility.Record(() =&gt;
{
<span style="color:#57A64A;">// Code to benchmark</span>
});
Console.WriteLine($<span style="color:#D69D85;">&quot;Elapsed time: {time} ms&quot;</span>);
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>RecordAndSaveToResults</code></td>
<td><p>Records the execution time of the provided action, saves it under the given key, and returns the elapsed time in milliseconds.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> time = BenchmarkUtility.RecordAndSaveToResults(<span style="color:#D69D85;">&quot;MyBenchmark&quot;</span>, () =&gt;
{
<span style="color:#57A64A;">// Code to benchmark</span>
});
Console.WriteLine($<span style="color:#D69D85;">&quot;Elapsed time: {time} ms&quot;</span>);
<span style="color:#569CD6;">var</span> results = BenchmarkUtility.GetResults(<span style="color:#D69D85;">&quot;MyBenchmark&quot;</span>);
<span style="color:#569CD6;">var</span> averageTime = results.Average();
Console.WriteLine($<span style="color:#D69D85;">&quot;Average time: {averageTime} ms&quot;</span>);
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Start</code></td>
<td><p>Starts or restarts the stopwatch for the given key.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Stop</code></td>
<td><p>Stops the stopwatch for the given key and records the elapsed time.</p>
<br/>
</td>
</tr>
<tr>
<td><code>GetResults</code></td>
<td><p>Retrieves the list of recorded times for the given key.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ClearResults</code></td>
<td><p>Clears all recorded benchmark results.</p>
<br/>
</td>
</tr>
<tr>
<td><code>GetAllResults</code></td>
<td><p>Retrieves all recorded benchmark results.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">FloatExtensions</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>FloatExtensions</code></td>
<td><p>Provides extension methods for the float data type.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Round</code></td>
<td><p>Rounds a float value to the specified number of decimal places.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> originalValue = <span style="color:#B5CEA8;">3</span>.14159f;
<span style="color:#569CD6;">var</span> roundedValue = originalValue.Round(<span style="color:#B5CEA8;">2</span>); <span style="color:#57A64A;">// roundedValue will be 3.14</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>RoundToInt</code></td>
<td><p>Rounds a float value to the nearest integer and returns it as an int.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> originalValue = <span style="color:#B5CEA8;">3</span>.14159f;
<span style="color:#569CD6;">var</span> roundedValue = originalValue.RoundToInt(); <span style="color:#57A64A;">// roundedValue will be 3</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">IListExtensions</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>IListExtensions</code></td>
<td><p>Extension methods for IList<T> to provide additional functionalities such as swapping, replacing, random selection, and shuffling.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Swap</code></td>
<td><p>Swaps the elements at the specified indices in the list.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
myList.Swap(<span style="color:#B5CEA8;">0</span>, <span style="color:#B5CEA8;">2</span>); <span style="color:#57A64A;">// myList is now { 3, 2, 1, 4 }</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Swap</code></td>
<td><p>Swaps the elements at the specified indices in the list.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
myList.Swap(<span style="color:#B5CEA8;">0</span>, <span style="color:#B5CEA8;">2</span>); <span style="color:#57A64A;">// myList is now { 3, 2, 1, 4 }</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Replace</code></td>
<td><p>Replaces the first occurrence of a specified value in the list with a new value.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
myList.Replace(<span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">5</span>); <span style="color:#57A64A;">// myList is now { 1, 5, 3, 4 }</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Random</code></td>
<td><p>Selects a random element from the list.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
<span style="color:#569CD6;">var</span> randomElement = myList.Random(); <span style="color:#57A64A;">// randomElement could be any of 1, 2, 3, or 4</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Random</code></td>
<td><p>Selects a specified number of unique random elements from the list.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
<span style="color:#569CD6;">var</span> randomElements = myList.Random(<span style="color:#B5CEA8;">2</span>); <span style="color:#57A64A;">// randomElements could be any two of 1, 2, 3, or 4</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Next&lt;T&gt;</code></td>
<td><p>Method to obtain the next object in the list by passing the current index.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>,<span style="color:#B5CEA8;">4</span> };
<span style="color:#569CD6;">var</span> currentIndex = <span style="color:#B5CEA8;">0</span>;
<span style="color:#569CD6;">var</span> nextItem = myList.Next(<span style="color:#569CD6;">ref</span> currentIndex); <span style="color:#57A64A;">// nextItem will be 1, currentIndex will be 1</span>
<span style="color:#569CD6;">var</span> nextItem2 = myList.Next(<span style="color:#569CD6;">ref</span> currentIndex); <span style="color:#57A64A;">// nextItem2 will be 2, currentIndex will be 2</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Shuffle&lt;T&gt;</code></td>
<td><p>Shuffles the elements of the list in place using a cryptographic random number generator.</p>
<p>Code obtained from https://stackoverflow.com/a/1262619</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> myList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
myList.Shuffle(); <span style="color:#57A64A;">// myList could now be { 3, 1, 4, 2 } (example output)</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">InstancedObject`1</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>InstancedObject&lt;T&gt; Class</code></td>
<td><p>A generic base class that ensures only one instance of a derived class exists at any time.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">public</span> <span style="color:#569CD6;">class</span> MySingleton : InstancedObject&lt;MySingleton&gt;
{
<span style="color:#57A64A;">// Your class implementation here</span>
}
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">MathExtensions</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>MathExtensions</code></td>
<td><p>Provides extension methods for mathematical operations.</p>
<br/>
</td>
</tr>
<tr>
<td><code>AverageWithNullValidation</code></td>
<td><p>Calculates the average of a list of integers, returning 0 if the list is empty.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> numbers = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span> };
<span style="color:#569CD6;">int</span> average = numbers.AverageWithNullValidation(); <span style="color:#57A64A;">// average will be 2 (rounded down)</span>
<span style="color:#569CD6;">var</span> emptyList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt;();
<span style="color:#569CD6;">int</span> averageEmpty = emptyList.AverageWithNullValidation(); <span style="color:#57A64A;">// averageEmpty will be 0</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>AverageWithNullValidation</code></td>
<td><p>Calculates the average of a list of doubles, returning 0.0 if the list is empty.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> numbers = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">double</span>&gt; { <span style="color:#B5CEA8;">1</span>.<span style="color:#B5CEA8;">5</span>, <span style="color:#B5CEA8;">2</span>.<span style="color:#B5CEA8;">5</span>, <span style="color:#B5CEA8;">3</span>.<span style="color:#B5CEA8;">5</span> };
<span style="color:#569CD6;">double</span> average = numbers.AverageWithNullValidation(); <span style="color:#57A64A;">// average will be 2.5</span>
<span style="color:#569CD6;">var</span> emptyList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">double</span>&gt;();
<span style="color:#569CD6;">double</span> averageEmpty = emptyList.AverageWithNullValidation(); <span style="color:#57A64A;">// averageEmpty will be 0.0</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>AverageWithNullValidation</code></td>
<td><p>Calculates the average of a list of floats, returning 0.0f if the list is empty.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> numbers = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">float</span>&gt; { <span style="color:#B5CEA8;">1</span>.5f, <span style="color:#B5CEA8;">2</span>.5f, <span style="color:#B5CEA8;">3</span>.5f };
<span style="color:#569CD6;">float</span> average = numbers.AverageWithNullValidation(); <span style="color:#57A64A;">// average will be 2.5f</span>
<span style="color:#569CD6;">var</span> emptyList = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">float</span>&gt;();
<span style="color:#569CD6;">float</span> averageEmpty = emptyList.AverageWithNullValidation(); <span style="color:#57A64A;">// averageEmpty will be 0.0f</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">NeoDictionary`2</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>NeoDictionary</code></td>
<td><p>Dictionary like class created to make it easier to display dictionaries in game engines like Unity</p>
<br/>
</td>
</tr>
<tr>
<td><code>TryGetValue</code></td>
<td><p>Tries to get the value from the NeoDictionary for the given key.</p>
<br/>
</td>
</tr>
<tr>
<td><code>TryGetValueFromIndex</code></td>
<td><p>Tries to get the value from the NeoDictionary at the given index.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Add</code></td>
<td><p>Adds a new NeoDictionaryItem to the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>AddRange</code></td>
<td><p>Adds a range of NeoDictionaryItems from another NeoDictionary to the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>AddRange</code></td>
<td><p>Adds a range of NeoDictionaryItems to the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Any</code></td>
<td><p>Checks if the NeoDictionary has any items.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Any</code></td>
<td><p>Checks if any item in the NeoDictionary satisfies a condition.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Where</code></td>
<td><p>Filters the NeoDictionary items based on a predicate.</p>
<br/>
</td>
</tr>
<tr>
<td><code>FirstOrDefault</code></td>
<td><p>Returns the first item of the NeoDictionary or a default value if the NeoDictionary is empty.</p>
<br/>
</td>
</tr>
<tr>
<td><code>FirstOrDefault</code></td>
<td><p>Returns the first item of the NeoDictionary that satisfies a condition or a default value if no such item is found.</p>
<br/>
</td>
</tr>
<tr>
<td><code>LastOrDefault</code></td>
<td><p>Returns the last item of the NeoDictionary or a default value if the NeoDictionary is empty.</p>
<br/>
</td>
</tr>
<tr>
<td><code>LastOrDefault</code></td>
<td><p>Returns the last item of the NeoDictionary that satisfies a condition or a default value if no such item is found.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Select</code></td>
<td><p>Projects each item of the NeoDictionary into a new form.</p>
<br/>
</td>
</tr>
<tr>
<td><code>IndexOf</code></td>
<td><p>Returns the index of the given NeoDictionaryItem.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Remove</code></td>
<td><p>Removes the item with the given key.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RemoveAt</code></td>
<td><p>Removes the item at the given index.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Replace</code></td>
<td><p>Replaces the value for the given key if it exists.</p>
<br/>
</td>
</tr>
<tr>
<td><code>HasKey</code></td>
<td><p>Checks if the NeoDictionary contains the given key.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Clear</code></td>
<td><p>Clears all items from the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Sort</code></td>
<td><p>Sorts the NeoDictionary items using the given comparison.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Count</code></td>
<td><p>Returns the number of items in the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ForEach</code></td>
<td><p>Performs the given action on each item in the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ToList</code></td>
<td><p>Converts the NeoDictionary items to a List.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Clone</code></td>
<td><p>Creates a shallow copy of the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Reverse</code></td>
<td><p>Reverses the order of the items in the NeoDictionary.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Insert</code></td>
<td><p>Inserts an item at the given index.</p>
<br/>
</td>
</tr>
<tr>
<td><code>InsertRange</code></td>
<td><p>Inserts a range of items starting from the given index.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RemoveRange</code></td>
<td><p>Removes a range of items starting from the given index.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RemoveAll</code></td>
<td><p>Removes all items matching the given predicate.</p>
<br/>
</td>
</tr>
<tr>
<td><code>FindIndex</code></td>
<td><p>Finds the index of the first item matching the given predicate.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Find</code></td>
<td><p>Finds the first item matching the given predicate.</p>
<br/>
</td>
</tr>
<tr>
<td><code>FindAll</code></td>
<td><p>Finds all items matching the given predicate.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Merge</code></td>
<td><p>Merges another NeoDictionary into this one, ignoring duplicate keys.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ToDictionarySafe</code></td>
<td><p>Converts the NeoDictionary to a standard Dictionary while safely handling duplicate keys by ignoring them.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">StringExtensions</h4>
<small class="text-muted">OmegaLeo.HelperLib</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>StringExtensions</code></td>
<td><p>Provides extension methods for the string data type.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Truncate</code></td>
<td><p>Truncates the string to a specified maximum number of characters, appending '...' if truncation occurs.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> longString = <span style="color:#D69D85;">&quot;This is a very long string that needs to be truncated.&quot;</span>;
<span style="color:#569CD6;">var</span> truncatedString = longString.Truncate(<span style="color:#B5CEA8;">20</span>); <span style="color:#57A64A;">// truncatedString will be &quot;This is a very long...&quot;</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>IsNullOrEmpty</code></td>
<td><p>Checks if the string is null or empty.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">string</span> myString = <span style="color:#D69D85;">&quot;&quot;</span>;
<span style="color:#569CD6;">bool</span> isNullOrEmpty = myString.IsNullOrEmpty(); <span style="color:#57A64A;">// isNullOrEmpty will be true</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>IsNotNullOrEmpty</code></td>
<td><p>Checks if the string is not null or empty.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">string</span> myString = <span style="color:#D69D85;">&quot;Hello&quot;</span>;
<span style="color:#569CD6;">bool</span> isNotNullOrEmpty = myString.IsNotNullOrEmpty(); <span style="color:#57A64A;">// isNotNullOrEmpty will be true</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>AnyMatch</code></td>
<td><p>Checks if the string matches any of the provided search strings, ignoring case.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">string</span> myString = <span style="color:#D69D85;">&quot;Hello&quot;</span>;
<span style="color:#569CD6;">bool</span> matches = myString.AnyMatch(<span style="color:#D69D85;">&quot;hi&quot;</span>, <span style="color:#D69D85;">&quot;hello&quot;</span>, <span style="color:#D69D85;">&quot;greetings&quot;</span>); <span style="color:#57A64A;">// matches will be true</span>
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Reverse</code></td>
<td><p>Reverses the characters in the string.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">string</span> myString = <span style="color:#D69D85;">&quot;Hello&quot;</span>;
<span style="color:#569CD6;">string</span> reversedString = myString.Reverse(); <span style="color:#57A64A;">// reversedString will be &quot;olleH&quot;</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div id="changelog" class="mb-5">
<h3>Changelog</h3>
<div class="card">
<div class="card-body">
<h2>Version 1.2.0</h2>
<h3>January 28, 2026</h3>
<p><strong>OmegaLeo.HelperLib.Extensions</strong></p>
<ul>
<li><strong>ArrayExtensions</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Extensions.</li>
</ul>
</li>
<li><strong>FloatExtensions</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Extensions.</li>
</ul>
</li>
<li><strong>IListExtensions</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Extensions.</li>
</ul>
</li>
<li><strong>MathExtensions</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Extensions.</li>
</ul>
</li>
<li><strong>StringExtensions</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Extensions.</li>
</ul>
</li>
</ul>
<p><strong>OmegaLeo.HelperLib.Helpers</strong></p>
<ul>
<li><strong>BenchmarkUtility</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Helpers.</li>
</ul>
</li>
</ul>
<p><strong>OmegaLeo.HelperLib.Models</strong></p>
<ul>
<li><strong>InstancedObject</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Models.</li>
</ul>
</li>
<li><strong>NeoDictionary</strong>:
<ul>
<li>Fixed root namespace to OmegaLeo.HelperLib.Models.</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.sticky-top {
max-height: calc(100vh - 40px);
overflow-y: auto;
}
code {
background-color: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
font-size: 0.9em;
}
.table th {
background-color: #f8f9fa;
}
</style>
</main>
<script src="../../lib/jquery/dist/jquery.min.js"></script>
<script src="../../lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="../../js/site.js%3Fv=y_Ngd8W21UpuCUhEqGbUKDEqFnNfTjAfb24GhJJGUyM"></script>
</body>
</html>
+187
View File
@@ -0,0 +1,187 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Documentation Library - OmegaLeo Helper Libraries</title>
<link rel="stylesheet" href="../../lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="../../css/site.css%3Fv=AK2YraxbvzgrpO6A1NqAHflCP7fbweSjdyWpd3ERsLE.css" />
</head>
<body>
<header b-pqzonzw7gm>
<nav b-pqzonzw7gm class="navbar navbar-expand-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div b-pqzonzw7gm class="container-fluid">
<a class="navbar-brand" href="../../index.html">
OmegaLeo Helper Libraries
</a>
<button b-pqzonzw7gm class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
<span b-pqzonzw7gm class="navbar-toggler-icon"></span>
</button>
<div b-pqzonzw7gm class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul b-pqzonzw7gm class="navbar-nav flex-grow-1">
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="../../index.html">Home</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="core.html">Core</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="changelog.html">Changelog</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="game.html">Game Dev</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="documentation.html">Documentation</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="shared.html">Shared Components</a>
</li>
</ul>
<ul b-pqzonzw7gm class="navbar-nav ms-auto">
<li b-pqzonzw7gm class="nav-item">
<a b-pqzonzw7gm class="nav-link" href="https://github.com/omegaleo/HelperLib" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository">
<i b-pqzonzw7gm class="bi bi-github" style="font-size:1.25rem;"></i> View on Github
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main b-pqzonzw7gm role="main" class="pb-3">
<div class="container-fluid mt-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../../index.html">Home</a></li>
<li class="breadcrumb-item active">Documentation Library</li>
</ol>
</nav>
<div class="row">
<div class="col-md-3">
<div class="sticky-top" style="top: 20px;">
<div class="card">
<div class="card-header">
<h5>Documentation Library</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="documentation.html#overview">
<i class="bi bi-info-circle me-2"></i>Overview
</a>
<a class="list-group-item list-group-item-action" href="documentation.html#namespace-OmegaLeo-HelperLib-Documentation">
<i class="bi bi-folder me-2"></i>OmegaLeo.HelperLib.Documentation
</a>
<a class="list-group-item list-group-item-action" href="documentation.html#changelog">
<i class="bi bi-clock-history me-2"></i>Changelog
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-9">
<div id="overview" class="mb-5">
<h2>Documentation Library</h2>
<p class="lead">Tools for generating documentation from code attributes</p>
<hr />
</div>
<div id="namespace-OmegaLeo-HelperLib-Documentation" class="mb-5">
<h3>OmegaLeo.HelperLib.Documentation</h3>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">DocumentationHelperTool</h4>
<small class="text-muted">OmegaLeo.HelperLib.Documentation</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>GenerateDocumentation (bool generateForPackageAssembly)</code></td>
<td><p>Generates a List of objects of type DocumentationStructure that contain the following fields:<br />
<strong>AssemblyName</strong>: Name of the main Assembly, used to identify the root namespace<br />
<strong>ClassName</strong>: Name of the class, used to identify the upper level object<br />
<strong>Title</strong>: Title what we're generating documentation for<br />
<strong>Description</strong>: Description of what we're generating documentation for, this can contain usage examples and can use the args array to pass names(e.g.: This method uses this methodology)<br />
<strong>Args</strong>: Array of strings that describe the parameters of the method or class<br />
<strong>CodeExample</strong>: A code example of how to use the method or class</p>
<p><em>Note: If generateForPackageAssembly is set to true, this will generate documentation for the library as well.</em></p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
DocumentationHelperTool.GenerateDocumentation(<span style="color:#569CD6;">true</span>); <span style="color:#57A64A;">// Generates documentation for all assemblies including the DocumentationHelper.Library package assembly</span>
DocumentationHelperTool.GenerateDocumentation(<span style="color:#569CD6;">false</span>); <span style="color:#57A64A;">// Generates documentation for all assemblies excluding the DocumentationHelper.Library package assembly</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div id="changelog" class="mb-5">
<h3>Changelog</h3>
<div class="card">
<div class="card-body">
<h2>Version 1.2.0</h2>
<h3>January 26, 2026</h3>
<p><strong>OmegaLeo.HelperLib.Documentation.Helpers</strong></p>
<ul>
<li><strong>DocumentationHelperTool</strong>:
<ul>
<li>Migrated DocumentationHelper library from NetFlow.DocumentationHelper.Library to it's own package in OmegaLeo.HelperLib</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.sticky-top {
max-height: calc(100vh - 40px);
overflow-y: auto;
}
code {
background-color: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
font-size: 0.9em;
}
.table th {
background-color: #f8f9fa;
}
</style>
</main>
<script src="../../lib/jquery/dist/jquery.min.js"></script>
<script src="../../lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="../../js/site.js%3Fv=y_Ngd8W21UpuCUhEqGbUKDEqFnNfTjAfb24GhJJGUyM"></script>
</body>
</html>
+416
View File
@@ -0,0 +1,416 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Game Development Library - OmegaLeo Helper Libraries</title>
<link rel="stylesheet" href="../../lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="../../css/site.css%3Fv=AK2YraxbvzgrpO6A1NqAHflCP7fbweSjdyWpd3ERsLE.css" />
</head>
<body>
<header b-pqzonzw7gm>
<nav b-pqzonzw7gm class="navbar navbar-expand-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div b-pqzonzw7gm class="container-fluid">
<a class="navbar-brand" href="../../index.html">
OmegaLeo Helper Libraries
</a>
<button b-pqzonzw7gm class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
<span b-pqzonzw7gm class="navbar-toggler-icon"></span>
</button>
<div b-pqzonzw7gm class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul b-pqzonzw7gm class="navbar-nav flex-grow-1">
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="../../index.html">Home</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="core.html">Core</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="changelog.html">Changelog</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="game.html">Game Dev</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="documentation.html">Documentation</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="shared.html">Shared Components</a>
</li>
</ul>
<ul b-pqzonzw7gm class="navbar-nav ms-auto">
<li b-pqzonzw7gm class="nav-item">
<a b-pqzonzw7gm class="nav-link" href="https://github.com/omegaleo/HelperLib" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository">
<i b-pqzonzw7gm class="bi bi-github" style="font-size:1.25rem;"></i> View on Github
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main b-pqzonzw7gm role="main" class="pb-3">
<div class="container-fluid mt-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../../index.html">Home</a></li>
<li class="breadcrumb-item active">Game Development Library</li>
</ol>
</nav>
<div class="row">
<div class="col-md-3">
<div class="sticky-top" style="top: 20px;">
<div class="card">
<div class="card-header">
<h5>Game Development Library</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="game.html#overview">
<i class="bi bi-info-circle me-2"></i>Overview
</a>
<a class="list-group-item list-group-item-action" href="game.html#namespace-OmegaLeo-HelperLib-Game">
<i class="bi bi-folder me-2"></i>OmegaLeo.HelperLib.Game
</a>
<a class="list-group-item list-group-item-action" href="game.html#changelog">
<i class="bi bi-clock-history me-2"></i>Changelog
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-9">
<div id="overview" class="mb-5">
<h2>Game Development Library</h2>
<p class="lead">Game development utilities for Unity and Godot</p>
<hr />
</div>
<div id="namespace-OmegaLeo-HelperLib-Game" class="mb-5">
<h3>OmegaLeo.HelperLib.Game</h3>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">CommandConsole</h4>
<small class="text-muted">OmegaLeo.HelperLib.Game</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>RegisterCommand</code></td>
<td><p>Registers a new command with the console.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RegisterCommand</code></td>
<td><p>Registers a new command with the console using a delegate.</p>
<br/>
</td>
</tr>
<tr>
<td><code>UnregisterCommand</code></td>
<td><p>Removes a command from the console.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ExecuteCommand</code></td>
<td><p>Executes a command string.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Output</code></td>
<td><p>Outputs a message to the console.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Error</code></td>
<td><p>Outputs an error message to the console.</p>
<br/>
</td>
</tr>
<tr>
<td><code>ClearHistory</code></td>
<td><p>Clears command history.</p>
<br/>
</td>
</tr>
<tr>
<td><code>GetAutoComplete</code></td>
<td><p>Gets autocomplete suggestions for partial input.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RegisterDefaultCommands</code></td>
<td><p>Registers built-in commands.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">DelayedActionHandler</h4>
<small class="text-muted">OmegaLeo.HelperLib.Game</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>DelayedActionHandler</code></td>
<td><p>Handler for managing delayed actions, allowing cancellation and status checking.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> action = <span style="color:#569CD6;">new</span> DelayedAction(...);
<span style="color:#569CD6;">var</span> handler = <span style="color:#569CD6;">new</span> DelayedActionHandler(action);
</pre></div>
</div>
</td>
</tr>
<tr>
<td><code>Cancel</code></td>
<td><p>Cancels the delayed action if it has not yet executed.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
handler.Cancel();
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">DelayedActionManager</h4>
<small class="text-muted">OmegaLeo.HelperLib.Game</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PendingActionsCount</code></td>
<td><p>Gets the count of pending delayed actions.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RunAfter</code></td>
<td><p>Schedules an action to run after a specified delay.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RunRepeating</code></td>
<td><p>Schedules an action to run repeatedly at specified intervals.</p>
<br/>
</td>
</tr>
<tr>
<td><code>RunAfterCancellable</code></td>
<td><p>Schedules an action to run after a delay and returns a handler to cancel it if needed.</p>
<br/>
</td>
</tr>
<tr>
<td><code>CancelAll</code></td>
<td><p>Cancels all pending delayed actions.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">ListExtensions</h4>
<small class="text-muted">OmegaLeo.HelperLib.Game</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Shuffle</code></td>
<td><p>Shuffles the elements of the list in place using the provided RandomNumberGenerator.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
<span style="color:#569CD6;">var</span> list = <span style="color:#569CD6;">new</span> List&lt;<span style="color:#569CD6;">int</span>&gt; { <span style="color:#B5CEA8;">1</span>, <span style="color:#B5CEA8;">2</span>, <span style="color:#B5CEA8;">3</span>, <span style="color:#B5CEA8;">4</span>};
<span style="color:#569CD6;">var</span> rng = <span style="color:#569CD6;">new</span> RandomNumberGenerator();
<span style="color:#57A64A;">// List before: [1, 2, 3, 4]</span>
list.Shuffle(rng);
<span style="color:#57A64A;">// List after: [3, 1, 4, 2] (example output)</span>
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">SaveManager</h4>
<small class="text-muted">OmegaLeo.HelperLib.Game</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Save</code></td>
<td><p>Saves data to a JSON file.</p>
<br/>
</td>
</tr>
<tr>
<td><code>Load</code></td>
<td><p>Loads data from a JSON file.</p>
<br/>
</td>
</tr>
<tr>
<td><code>TryLoad</code></td>
<td><p>Attempts to load data from a JSON file, returning a success flag.</p>
<br/>
</td>
</tr>
<tr>
<td><code>SaveExists</code></td>
<td><p>Checks if a save file exists.</p>
<br/>
</td>
</tr>
<tr>
<td><code>DeleteSave</code></td>
<td><p>Deletes a save file.</p>
<br/>
</td>
</tr>
<tr>
<td><code>GetAllSaveFiles</code></td>
<td><p>Retrieves all save files in the save directory.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">WeightedPicker</h4>
<small class="text-muted">OmegaLeo.HelperLib.Game</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>WeightedPicker.Pick</code></td>
<td><p>Picks a random item from a dictionary of items with associated weights.</p>
<br/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.sticky-top {
max-height: calc(100vh - 40px);
overflow-y: auto;
}
code {
background-color: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
font-size: 0.9em;
}
.table th {
background-color: #f8f9fa;
}
</style>
</main>
<script src="../../lib/jquery/dist/jquery.min.js"></script>
<script src="../../lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="../../js/site.js%3Fv=y_Ngd8W21UpuCUhEqGbUKDEqFnNfTjAfb24GhJJGUyM"></script>
</body>
</html>
+235
View File
@@ -0,0 +1,235 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Shared Library - OmegaLeo Helper Libraries</title>
<link rel="stylesheet" href="../../lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="../../css/site.css%3Fv=AK2YraxbvzgrpO6A1NqAHflCP7fbweSjdyWpd3ERsLE.css" />
</head>
<body>
<header b-pqzonzw7gm>
<nav b-pqzonzw7gm class="navbar navbar-expand-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div b-pqzonzw7gm class="container-fluid">
<a class="navbar-brand" href="../../index.html">
OmegaLeo Helper Libraries
</a>
<button b-pqzonzw7gm class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
<span b-pqzonzw7gm class="navbar-toggler-icon"></span>
</button>
<div b-pqzonzw7gm class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul b-pqzonzw7gm class="navbar-nav flex-grow-1">
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="../../index.html">Home</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="core.html">Core</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="changelog.html">Changelog</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="game.html">Game Dev</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="documentation.html">Documentation</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="shared.html">Shared Components</a>
</li>
</ul>
<ul b-pqzonzw7gm class="navbar-nav ms-auto">
<li b-pqzonzw7gm class="nav-item">
<a b-pqzonzw7gm class="nav-link" href="https://github.com/omegaleo/HelperLib" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository">
<i b-pqzonzw7gm class="bi bi-github" style="font-size:1.25rem;"></i> View on Github
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main b-pqzonzw7gm role="main" class="pb-3">
<div class="container-fluid mt-4">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="../../index.html">Home</a></li>
<li class="breadcrumb-item active">Shared Library</li>
</ol>
</nav>
<div class="row">
<div class="col-md-3">
<div class="sticky-top" style="top: 20px;">
<div class="card">
<div class="card-header">
<h5>Shared Library</h5>
</div>
<div class="card-body p-0">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" href="shared.html#overview">
<i class="bi bi-info-circle me-2"></i>Overview
</a>
<a class="list-group-item list-group-item-action" href="shared.html#namespace-OmegaLeo-HelperLib-Shared">
<i class="bi bi-folder me-2"></i>OmegaLeo.HelperLib.Shared
</a>
<a class="list-group-item list-group-item-action" href="shared.html#changelog">
<i class="bi bi-clock-history me-2"></i>Changelog
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-9">
<div id="overview" class="mb-5">
<h2>Shared Library</h2>
<p class="lead">Library of shared attributes and utilities used across other OmegaLeo.HelperLib packages</p>
<hr />
</div>
<div id="namespace-OmegaLeo-HelperLib-Shared" class="mb-5">
<h3>OmegaLeo.HelperLib.Shared</h3>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">ChangelogAttribute</h4>
<small class="text-muted">OmegaLeo.HelperLib.Shared</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>ChangelogAttribute</code></td>
<td><p>Attribute to annotate classes, methods, or properties with changelog information.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
[Changelog(<span style="color:#D69D85;">&quot;1.0.0&quot;</span>, <span style="color:#D69D85;">&quot;Created ChangelogAttribute to be used to register changes in the code.&quot;</span>)]
<span style="color:#569CD6;">public</span> <span style="color:#569CD6;">class</span> ChangelogAttribute : Attribute
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="card mb-3">
<div class="card-header">
<h4 class="mb-0">DocumentationAttribute</h4>
<small class="text-muted">OmegaLeo.HelperLib.Shared</small>
</div>
<div class="card-body">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<th>Member</th>
<th>Documentation</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>DocumentationAttribute</code></td>
<td><p>Attribute to annotate classes, methods, or properties with documentation information.</p>
<br/>
<strong>Example:</strong><br/>
<div class="example-code mb-2">
<div style="color:#DADADA;background-color:#1E1E1E;"><pre>
[Documentation(
<span style="color:#D69D85;">&quot;MyMethod&quot;</span>,
<span style="color:#D69D85;">&quot;This method does something important.&quot;</span>,
<span style="color:#569CD6;">new</span> <span style="color:#569CD6;">string</span>[] { <span style="color:#D69D85;">&quot;param1: The first parameter.&quot;</span>, <span style="color:#D69D85;">&quot;param2: The second parameter.&quot;</span> },
<span style="color:#D69D85;">&quot;MyMethod(param1, param2);&quot;</span>
)]
<span style="color:#569CD6;">public</span> <span style="color:#569CD6;">void</span> MyMethod(<span style="color:#569CD6;">string</span> param1, <span style="color:#569CD6;">int</span> param2)
{
<span style="color:#57A64A;">// Method implementation</span>
}
</pre></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
<div id="changelog" class="mb-5">
<h3>Changelog</h3>
<div class="card">
<div class="card-body">
<h2>Version 1.2.1</h2>
<h3>January 28, 2026</h3>
<p><strong>OmegaLeo.HelperLib.Shared.Attributes</strong></p>
<ul>
<li><strong>ChangelogAttribute</strong>:
<ul>
<li>Created documentation for ChangelogAttribute.</li>
</ul>
</li>
<li><strong>DocumentationAttribute</strong>:
<ul>
<li>Created documentation for DocumentationAttribute.</li>
</ul>
</li>
</ul>
<h2>Version 1.0.0</h2>
<p><strong>OmegaLeo.HelperLib.Shared.Attributes</strong></p>
<ul>
<li><strong>ChangelogAttribute</strong>:
<ul>
<li>Created ChangelogAttribute to be used to register changes in the code.</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.sticky-top {
max-height: calc(100vh - 40px);
overflow-y: auto;
}
code {
background-color: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
font-size: 0.9em;
}
.table th {
background-color: #f8f9fa;
}
</style>
</main>
<script src="../../lib/jquery/dist/jquery.min.js"></script>
<script src="../../lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="../../js/site.js%3Fv=y_Ngd8W21UpuCUhEqGbUKDEqFnNfTjAfb24GhJJGUyM"></script>
</body>
</html>
@@ -0,0 +1,40 @@
html {
font-size: 14px;
}
@media (min-width: 768px) {
html {
font-size: 16px;
}
}
.btn:focus, .btn:active:focus, .btn-link.nav-link:focus, .form-control:focus, .form-check-input:focus {
box-shadow: 0 0 0 0.1rem white, 0 0 0 0.25rem #258cfb;
}
html {
position: relative;
min-height: 100%;
}
body {
margin-bottom: 60px;
}
pre {
overflow: auto;
padding: 1rem;
background-color: #495057;
position: relative;
color: #f2f2f2;
}
code {
background-color: transparent !important;
}
.example-code > div {
border-radius: 0.5rem !important;
background-color: #495057 !important;
}
+177
View File
@@ -0,0 +1,177 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>OmegaLeo Helper Libraries - OmegaLeo Helper Libraries</title>
<link rel="stylesheet" href="lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
<link rel="stylesheet" href="css/site.css%3Fv=AK2YraxbvzgrpO6A1NqAHflCP7fbweSjdyWpd3ERsLE.css" />
</head>
<body>
<header b-pqzonzw7gm>
<nav b-pqzonzw7gm class="navbar navbar-expand-sm navbar-dark bg-dark border-bottom box-shadow mb-3">
<div b-pqzonzw7gm class="container-fluid">
<a class="navbar-brand" href="index.html">
OmegaLeo Helper Libraries
</a>
<button b-pqzonzw7gm class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse">
<span b-pqzonzw7gm class="navbar-toggler-icon"></span>
</button>
<div b-pqzonzw7gm class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul b-pqzonzw7gm class="navbar-nav flex-grow-1">
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="index.html">Home</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="Home/Library/core.html">Core</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="Home/Library/changelog.html">Changelog</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="Home/Library/game.html">Game Dev</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="Home/Library/documentation.html">Documentation</a>
</li>
<li b-pqzonzw7gm class="nav-item">
<a class="nav-link" href="Home/Library/shared.html">Shared Components</a>
</li>
</ul>
<ul b-pqzonzw7gm class="navbar-nav ms-auto">
<li b-pqzonzw7gm class="nav-item">
<a b-pqzonzw7gm class="nav-link" href="https://github.com/omegaleo/HelperLib" target="_blank" rel="noopener noreferrer" aria-label="GitHub repository">
<i b-pqzonzw7gm class="bi bi-github" style="font-size:1.25rem;"></i> View on Github
</a>
</li>
</ul>
</div>
</div>
</nav>
</header>
<main b-pqzonzw7gm role="main" class="pb-3">
<div class="container mt-5">
<div class="text-center mb-5">
<h1 class="display-4">OmegaLeo Helper Libraries</h1>
<p class="lead">Comprehensive C# libraries for game development and general utilities</p>
</div>
<div class="row g-4">
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5 class="card-title">Core Library</h5>
<p class="card-text">Core utilities and helper functions for general C# development</p>
<p class="text-muted small">
8 classes documented
</p>
<a href="https://www.nuget.org/packages/OmegaLeo.HelperLib"
target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-box-seam"></i> View on NuGet
</a>
</div>
<div class="card-footer">
<a class="btn btn-primary w-100" href="Home/Library/core.html">
View Documentation
</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5 class="card-title">Changelog Library</h5>
<p class="card-text">Tools for managing and generating changelogs</p>
<p class="text-muted small">
2 classes documented
</p>
<a href="https://www.nuget.org/packages/OmegaLeo.HelperLib.Changelog"
target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-box-seam"></i> View on NuGet
</a>
</div>
<div class="card-footer">
<a class="btn btn-primary w-100" href="Home/Library/changelog.html">
View Documentation
</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5 class="card-title">Game Development Library</h5>
<p class="card-text">Game development utilities for Unity and Godot</p>
<p class="text-muted small">
6 classes documented
</p>
<a href="https://www.nuget.org/packages/OmegaLeo.HelperLib.Game"
target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-box-seam"></i> View on NuGet
</a>
</div>
<div class="card-footer">
<a class="btn btn-primary w-100" href="Home/Library/game.html">
View Documentation
</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5 class="card-title">Documentation Library</h5>
<p class="card-text">Tools for generating documentation from code attributes</p>
<p class="text-muted small">
1 classes documented
</p>
<a href="https://www.nuget.org/packages/OmegaLeo.HelperLib.Documentation"
target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-box-seam"></i> View on NuGet
</a>
</div>
<div class="card-footer">
<a class="btn btn-primary w-100" href="Home/Library/documentation.html">
View Documentation
</a>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card h-100 shadow-sm">
<div class="card-body">
<h5 class="card-title">Shared Library</h5>
<p class="card-text">Library of shared attributes and utilities used across other OmegaLeo.HelperLib packages</p>
<p class="text-muted small">
2 classes documented
</p>
<a href="https://www.nuget.org/packages/OmegaLeo.HelperLib.Shared"
target="_blank"
class="btn btn-sm btn-outline-primary">
<i class="bi bi-box-seam"></i> View on NuGet
</a>
</div>
<div class="card-footer">
<a class="btn btn-primary w-100" href="Home/Library/shared.html">
View Documentation
</a>
</div>
</div>
</div>
</div>
</div>
</main>
<script src="lib/jquery/dist/jquery.min.js"></script>
<script src="lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="js/site.js%3Fv=y_Ngd8W21UpuCUhEqGbUKDEqFnNfTjAfb24GhJJGUyM"></script>
</body>
</html>
@@ -0,0 +1,4 @@
// Please see documentation at https://learn.microsoft.com/aspnet/core/client-side/bundling-and-minification
// for details on configuring this project to bundle and minify static web assets.
// Write your JavaScript code.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long