11 Commits

Author SHA1 Message Date
omegaleo dec8fc7674 Automatically generated changelog for v1.1.1 2025-02-18 21:51:46 +00:00
omegaleo 4540db3a5e added LICENSE.md 2025-02-18 21:50:57 +00:00
omegaleo fd2600863e Added READMEs 2025-02-18 21:48:14 +00:00
omegaleo c0bc8ff760 fixed changelog lib workflow 2025-02-18 21:24:02 +00:00
omegaleo 699bb1d5f5 removed create release from workflow 2025-02-18 21:23:12 +00:00
omegaleo 21e55614ec fixed global usings 2025-02-18 21:20:18 +00:00
omegaleo bcb2d95ed4 fix for tag version 2025-02-18 21:17:57 +00:00
omegaleo 560567dc96 updated workflows 2025-02-18 21:14:55 +00:00
omegaleo 906bfc7781 fixed dotnet versions 2025-02-18 21:12:42 +00:00
omegaleo 7b6115da21 Dev changes (#3)
* 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
2025-02-18 21:09:25 +00:00
omegaleo 8f249d2567 NeoDictionary changes (#2)
* Fixed dependency

* Updates to NeoDictionary

* Changes to NeoDictionary
2024-07-27 10:52:55 +01:00
24 changed files with 420 additions and 3 deletions
+40
View File
@@ -0,0 +1,40 @@
name: Create Tag
on:
workflow_dispatch:
inputs:
tagName:
description: 'Tag name:'
type: string
required: true
run-name: "Generating changelog for Release v${{github.event.inputs.tagName}}"
jobs:
generate_changelog:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
token: ${{ secrets.TOKEN }}
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Update Project Versions
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.csproj"
- name: Update Project Versions
run: sed -i "s/\(<Version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1${{github.event.inputs.tagName}}/" "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj"
- name: Build and Run Changelog Generator
run: dotnet run --project "./OmegaLeo.HelperLib.ChangelogHandler/OmegaLeo.HelperLib.ChangelogHandler.csproj"
env:
UNITYFLOW_SECRET: ${{ secrets.TOKEN }}
- name: Create Tag
run: |
git config --local user.email "nunodiogo@omegaleo.pt"
git config --local user.name "Nuno Diogo"
git add .
git commit -m "Automatically generated changelog for v${{github.event.inputs.tagName}}"
git tag -a "${{ github.event.inputs.tagName }}" -m "Release ${{ github.event.inputs.tagName }}"
git push origin "${{ github.event.inputs.tagName }}"
+27 -2
View File
@@ -2,6 +2,7 @@ name: Publish Nuget Packages
on:
release:
types: [created]
run-name: "Publish version v${{github.event.release.tag_name}} to nuget"
jobs:
get-release:
name: Get Release
@@ -16,7 +17,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
outputs:
upload_url: ${{ steps.get_release.outputs.upload_url }}
publish_doc_helper:
publish-helper-lib:
runs-on: ubuntu-latest
needs: [get-release]
steps:
@@ -24,7 +25,7 @@ jobs:
- name: Setup .Net Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: '7.0.x'
dotnet-version: '8.0.x'
- name: Update Project Version
run: sed -i "s/\(<Version>\([0-9]\+\.\)\{2\}\)\([0-9]\+\)/\1${{ github.event.release.tag_name }}/" "./OmegaLeo.HelperLib/OmegaLeo.HelperLib.csproj"
- name: Create Nuget Package
@@ -40,3 +41,27 @@ jobs:
asset_path: ./OmegaLeo.HelperLib/bin/Release/OmegaLeo.HelperLib.${{ github.event.release.tag_name }}.nupkg
asset_name: OmegaLeo.HelperLib.${{ github.event.release.tag_name }}.nupkg
asset_content_type: application/zip
publish-changelog-lib:
runs-on: ubuntu-latest
needs: [ get-release ]
steps:
- uses: actions/checkout@v2
- name: Setup .Net Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: '8.0.x'
- name: Update Project Version
run: sed -i "s/\(<Version>\([0-9]\+\.\)\{2\}\)\([0-9]\+\)/\1${{ github.event.release.tag_name }}/" "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj"
- name: Create Nuget Package
run: dotnet pack "./OmegaLeo.HelperLib.Changelog/OmegaLeo.HelperLib.Changelog.csproj" -c Release /p:Version=${{ github.event.release.tag_name }} /p:PackageReleaseNotes="See https://github.com/omegaleo/OmegaLeo.HelperLib/releases/tag/${{ github.event.release.tag_name }}"
- name: Publish Nuget Package
run: dotnet nuget push ./OmegaLeo.HelperLib.Changelog/bin/Release/OmegaLeo.HelperLib.Changelog.${{ github.event.release.tag_name }}.nupkg --api-key ${{ secrets.nuget_api_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate
- name: Upload assets to release
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
upload_url: ${{ needs.get-release.outputs.upload_url }}
asset_path: ./OmegaLeo.HelperLib/bin/Release/OmegaLeo.HelperLib.Changelog.${{ github.event.release.tag_name }}.nupkg
asset_name: OmegaLeo.HelperLib.Changelog.${{ github.event.release.tag_name }}.nupkg
asset_content_type: application/zip
@@ -0,0 +1,18 @@
using System;
namespace OmegaLeo.HelperLib.Changelog.Attributes
{
[Changelog("v1.0.0", "Created ChangelogAttribute to be used to register changes in the code.")]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)]
public class ChangelogAttribute : Attribute
{
public string Version { get; }
public string Description { get; }
public ChangelogAttribute(string version, string description)
{
Version = version;
Description = description;
}
}
}
@@ -0,0 +1,7 @@
# Changelog
## Version v1.0.0
- **Class: ChangelogTool**: Created the class ChangelogTool to extract changelogs via attributes
- **Class: ChangelogAttribute**: Created ChangelogAttribute to be used to register changes in the code.
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Nuno "Omega Leo" Diogo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,14 @@
namespace OmegaLeo.HelperLib.Changelog.Models
{
public class Changelog
{
public string Target;
public string Description;
public Changelog(string target, string description)
{
Target = target;
Description = description;
}
}
}
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.1</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
<Title>Omega Leo's Helper Library - Changelog</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors>
<Description>Package to help with Changelog generation</Description>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
</PropertyGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="\"/>
<None Include="CHANGELOG.md" Pack="true" PackagePath="\"/>
<None Include="LICENSE.md" Pack="true" PackagePath="\"/>
</ItemGroup>
</Project>
+12
View File
@@ -0,0 +1,12 @@
# Omega Leo's Helper Library - Changelog
Package to help with Changelog generation by providing a new Changelog attribute and a tool to extract a dictionary of the changelogs or the markdown for CHANGELOG.md
Example attribute usage:
```cs
[Changelog("v1.0.0", "This is a test")]
[Changelog("v1.0.1", "This is another test")]
public class Test
{
}
```
@@ -0,0 +1,63 @@
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using OmegaLeo.HelperLib.Changelog.Attributes;
namespace OmegaLeo.HelperLib.Changelog.Tools
{
[Changelog("v1.0.0", "Created the class ChangelogTool to extract changelogs via attributes")]
public class ChangelogTool
{
public static Dictionary<string, List<Models.Changelog>> ExtractChangelog(Assembly assembly)
{
var changelogByVersion = new Dictionary<string, List<Models.Changelog>>();
foreach (var type in assembly.GetTypes())
{
foreach (var attr in type.GetCustomAttributes<ChangelogAttribute>())
{
AddChangelogEntry(changelogByVersion, attr.Version, $"Class: {type.Name}", attr.Description);
}
foreach (var method in type.GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static))
{
foreach (var attr in method.GetCustomAttributes<ChangelogAttribute>())
AddChangelogEntry(changelogByVersion, attr.Version, $"Method: {type.Name}.{method.Name}()", attr.Description);
}
}
changelogByVersion = new Dictionary<string, List<Models.Changelog>>(changelogByVersion.OrderByDescending(x => x.Key));
return changelogByVersion;
}
public static string GetMarkdown(Assembly assembly)
{
var changelog = ExtractChangelog(assembly);
var sb = new StringBuilder();
sb.AppendLine("# Changelog\n");
foreach (var version in changelog)
{
sb.AppendLine($"## Version {version.Key}\n");
foreach (var entry in version.Value)
{
sb.AppendLine($"- **{entry.Target}**: {entry.Description}");
}
sb.AppendLine();
}
return sb.ToString();
}
private static void AddChangelogEntry(Dictionary<string, List<Models.Changelog>> changelog, string version, string target, string description)
{
if (!changelog.ContainsKey(version))
changelog[version] = new List<Models.Changelog>();
changelog[version].Add(new Models.Changelog(target, description));
}
}
}
@@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>disable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\OmegaLeo.HelperLib.Changelog\OmegaLeo.HelperLib.Changelog.csproj" />
<ProjectReference Include="..\OmegaLeo.HelperLib\OmegaLeo.HelperLib.csproj" />
</ItemGroup>
</Project>
@@ -0,0 +1,45 @@
// See https://aka.ms/new-console-template for more information
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using GameDevLibrary.Helpers;
using OmegaLeo.HelperLib.Changelog.Models;
using OmegaLeo.HelperLib.Changelog.Tools;
var root = GetSolutionRoot();
var changelogs = new Dictionary<string, Assembly>()
{
{Path.Join(root, "OmegaLeo.HelperLib.Changelog", "CHANGELOG.md"), typeof(Changelog).Assembly},
{Path.Join(root, "OmegaLeo.HelperLib", "CHANGELOG.md"), typeof(BenchmarkUtility).Assembly},
};
foreach (var changelog in changelogs)
{
GenerateChangelog(changelog.Key, changelog.Value);
}
void GenerateChangelog(string path, Assembly libraryAssembly)
{
var changelogMarkdown = ChangelogTool.GetMarkdown(libraryAssembly);
File.WriteAllText(path,changelogMarkdown);
}
static string GetSolutionRoot()
{
string dir = AppContext.BaseDirectory;
while (!string.IsNullOrEmpty(dir))
{
if (Directory.GetFiles(dir, "*.sln").Length > 0)
return dir; // Found the solution root
dir = Directory.GetParent(dir)?.FullName; // Move up a directory
}
throw new Exception("Solution root not found.");
}
@@ -8,6 +8,7 @@
</PropertyGroup>
<ItemGroup>
<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" />
</ItemGroup>
+2
View File
@@ -2,9 +2,11 @@
// /media/omegaleo/Development/Library Dev/HelperLib
using System.Reflection;
using GameDevLibrary.Extensions;
using GameDevLibrary.Helpers;
using LibGit2Sharp;
using OmegaLeo.HelperLib.Changelog.Tools;
using OmegaLeo.HelperLib.Git;
using OmegaLeo.HelperLib.Git.Models;
@@ -0,0 +1,10 @@
using OmegaLeo.HelperLib.Changelog.Attributes;
namespace OmegaLeo.HelperLib.ConsoleApp;
[Changelog("v1.0.0", "Test")]
[Changelog("v1.0.1", "Test 1")]
public class TestClass
{
}
+12
View File
@@ -6,6 +6,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.Git", "O
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}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OmegaLeo.HelperLib.ChangelogHandler", "OmegaLeo.HelperLib.ChangelogHandler\OmegaLeo.HelperLib.ChangelogHandler.csproj", "{359536F7-02DE-43E9-A383-D83853227B0F}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -24,5 +28,13 @@ Global
{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.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.Build.0 = Release|Any CPU
{359536F7-02DE-43E9-A383-D83853227B0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{359536F7-02DE-43E9-A383-D83853227B0F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{359536F7-02DE-43E9-A383-D83853227B0F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{359536F7-02DE-43E9-A383-D83853227B0F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
+1
View File
@@ -1,4 +1,5 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<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_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>
+2
View File
@@ -0,0 +1,2 @@
# Changelog
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
namespace GameDevLibrary.Extensions
{
@@ -117,5 +118,30 @@ namespace GameDevLibrary.Extensions
{
return array[currentIndex++ % array.Count];
}
/// <summary>
/// Shuffle around items in a list.
/// Code obtained from https://stackoverflow.com/a/1262619
/// </summary>
/// <param name="list"></param>
/// <typeparam name="T"></typeparam>
public static IList<T> Shuffle<T>(this IList<T> list)
{
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
int n = list.Count;
while (n > 1)
{
byte[] box = new byte[1];
do provider.GetBytes(box);
while (!(box[0] < n * (Byte.MaxValue / n)));
int k = (box[0] % n);
n--;
(list[k], list[n]) = (list[n], list[k]);
}
return list;
}
}
}
@@ -36,6 +36,25 @@ namespace GameDevLibrary.Helpers
return stopwatch.ElapsedMilliseconds;
}
public static long RecordAndSaveToResults(string key, Action actionToRecord)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
actionToRecord.Invoke();
stopwatch.Stop();
if (!_benchmarks.ContainsKey(key))
{
_benchmarks[key] = new List<long>();
}
_benchmarks[key].Add(stopwatch.ElapsedMilliseconds);
return stopwatch.ElapsedMilliseconds;
}
public static void Start(string key)
{
GetStopwatch(key).Restart();
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Nuno "Omega Leo" Diogo
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
@@ -0,0 +1,31 @@
using System;
namespace GameDevLibrary.Models
{
public abstract class InstancedObject<T> where T : class
{
public static T Instance { get; private set; }
protected InstancedObject()
{
if (Instance != null)
{
throw new InvalidOperationException($"An instance of {typeof(T).Name} already exists.");
}
Instance = this as T;
if (Instance == null)
{
throw new InvalidOperationException($"Failed to cast {GetType().Name} to {typeof(T).Name}.");
}
}
~InstancedObject()
{
if (Instance == this)
{
Instance = null;
}
}
}
}
@@ -84,6 +84,9 @@ namespace GameDevLibrary.Models
public IEnumerable<NeoDictionaryItem<TKey, TValue>> Select(Func<NeoDictionaryItem<TKey, TValue>, NeoDictionaryItem<TKey, TValue>> selector) =>
Items.Select(selector);
public int IndexOf(NeoDictionaryItem<TKey, TValue> selector) =>
Items.IndexOf(selector);
public void Remove(TKey key)
{
+8 -1
View File
@@ -4,9 +4,10 @@
<TargetFramework>netstandard2.1</TargetFramework>
<Nullable>enable</Nullable>
<RootNamespace>GameDevLibrary</RootNamespace>
<Version>0.0.2</Version>
<Version>1.1.1</Version>
<Title>Omega Leo's Helper Library</Title>
<Authors>Nuno "Omega Leo" Diogo</Authors>
<PackageReadmeFile>README.md</PackageReadmeFile>
<PackageProjectUrl>https://github.com/omegaleo/HelperLib</PackageProjectUrl>
<RepositoryUrl>https://github.com/omegaleo/HelperLib</RepositoryUrl>
</PropertyGroup>
@@ -15,4 +16,10 @@
<PackageReference Include="NetFlow.DocumentationHelper.Library" Version="1.1.2" />
</ItemGroup>
<ItemGroup>
<None Include="README.md" Pack="true" PackagePath="\"/>
<None Include="CHANGELOG.md" Pack="true" PackagePath="\"/>
<None Include="LICENSE.md" Pack="true" PackagePath="\"/>
</ItemGroup>
</Project>
+1
View File
@@ -0,0 +1 @@
# Omega Leo's Helper Lib