Skip to content

Commit 54414cd

Browse files
authored
Merge pull request #1 from Thundernerd/develop
Initial version
2 parents 0345188 + e7d31f5 commit 54414cd

24 files changed

+572
-0
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Changelog
2+
3+
## [1.0.0] - 2020-07-11
4+
5+
### Added
6+
- Layers Generator
7+
- Sorting Layers Generator
8+
- Tags Generator

CHANGELOG.md.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/ICodeGenerator.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace TNRD.CodeGeneration
2+
{
3+
public interface ICodeGenerator
4+
{
5+
void Generate();
6+
}
7+
}

Editor/ICodeGenerator.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/LayerGenerator.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using UnityEditor;
2+
using UnityEditorInternal;
3+
using UnityEngine;
4+
5+
namespace TNRD.CodeGeneration.Layers
6+
{
7+
public class LayerGenerator : ICodeGenerator
8+
{
9+
[MenuItem("TNRD/Code Generation/Layers")]
10+
private static void Execute()
11+
{
12+
var generator = new LayerGenerator();
13+
generator.Generate();
14+
}
15+
16+
public void Generate()
17+
{
18+
var layers = InternalEditorUtility.layers;
19+
20+
var generator = new Generator();
21+
var @class = new Class("Layers");
22+
23+
for (int i = 0; i < layers.Length; i++)
24+
{
25+
var layerName = Utilities.GetScreamName(layers[i]);
26+
var maskName = layerName + "_MASK";
27+
28+
@class.AddField(
29+
new Field(layerName, i, typeof(int))
30+
{
31+
IsConst = true,
32+
});
33+
34+
@class.AddField(
35+
new Field(maskName, string.Format("1 << {0}", i), typeof(int))
36+
{
37+
IsConst = true,
38+
});
39+
}
40+
41+
generator.AddClass(@class);
42+
generator.SaveToFile(Application.dataPath + "/Generated/Layers.cs");
43+
44+
AssetDatabase.Refresh();
45+
}
46+
}
47+
}

Editor/LayerGenerator.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/SortingLayerGenerator.cs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
using UnityEditor;
2+
using UnityEngine;
3+
4+
namespace TNRD.CodeGeneration.Layers
5+
{
6+
public class SortingLayerGenerator : ICodeGenerator
7+
{
8+
[MenuItem("TNRD/Code Generation/Sorting Layers")]
9+
private static void Execute()
10+
{
11+
var generator = new SortingLayerGenerator();
12+
generator.Generate();
13+
}
14+
15+
public void Generate()
16+
{
17+
var layers = SortingLayer.layers;
18+
19+
var generator = new Generator();
20+
var @class = new Class("SortingLayers");
21+
22+
for (int i = 0; i < layers.Length; i++)
23+
{
24+
var layer = layers[i];
25+
var layerName = Utilities.GetScreamName(layer.name);
26+
var layerIdName = layerName + "_ID";
27+
28+
@class.AddField(
29+
new Field(layerName, layer.name, typeof(string))
30+
{
31+
IsConst = true,
32+
});
33+
34+
@class.AddField(
35+
new Field(layerIdName, layer.id, typeof(int))
36+
{
37+
IsConst = true,
38+
});
39+
}
40+
41+
generator.AddClass(@class);
42+
generator.SaveToFile(Application.dataPath + "/Generated/SortingLayers.cs");
43+
44+
AssetDatabase.Refresh();
45+
}
46+
}
47+
}

Editor/SortingLayerGenerator.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"name": "TNRD.LayerTagsGenerator.Editor",
3+
"references": [
4+
"TNRD.CodeGenerator.Editor"
5+
],
6+
"includePlatforms": [
7+
"Editor"
8+
],
9+
"excludePlatforms": [],
10+
"allowUnsafeCode": false,
11+
"overrideReferences": false,
12+
"precompiledReferences": [],
13+
"autoReferenced": true,
14+
"defineConstraints": [],
15+
"versionDefines": [],
16+
"noEngineReferences": false
17+
}

Editor/TNRD.LayerTagsGenerator.Editor.asmdef.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/TagCodeGenerator.cs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using UnityEditor;
2+
using UnityEditorInternal;
3+
using UnityEngine;
4+
5+
namespace TNRD.CodeGeneration.Tags
6+
{
7+
public class TagCodeGenerator : ICodeGenerator
8+
{
9+
[MenuItem("TNRD/Code Generation/Tags")]
10+
private static void Execute()
11+
{
12+
var generator = new TagCodeGenerator();
13+
generator.Generate();
14+
}
15+
16+
public void Generate()
17+
{
18+
var tags = InternalEditorUtility.tags;
19+
20+
var generator = new Generator();
21+
var tagsClass = new Class("Tags");
22+
23+
foreach (var tag in tags)
24+
{
25+
tagsClass.AddField(
26+
new Field(Utilities.GetScreamName(tag), tag, typeof(string))
27+
{
28+
IsConst = true,
29+
});
30+
}
31+
32+
generator.AddClass(tagsClass);
33+
generator.SaveToFile(Application.dataPath + "/Generated/Tags.cs");
34+
35+
AssetDatabase.Refresh();
36+
}
37+
}
38+
}

Editor/TagCodeGenerator.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Editor/Utilities.cs

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
using System;
2+
using System.Linq;
3+
using System.Reflection;
4+
using UnityEditor;
5+
6+
namespace TNRD.CodeGeneration
7+
{
8+
public static class Utilities
9+
{
10+
[MenuItem("TNRD/Code Generation/Generate All", false, Int32.MaxValue)]
11+
private static void GenerateAll()
12+
{
13+
var typeDefinition = typeof(ICodeGenerator);
14+
15+
var assembly = Assembly.GetExecutingAssembly();
16+
var types = assembly.GetTypes()
17+
.Where(x => x.GetInterfaces().Contains(typeDefinition))
18+
.ToList();
19+
20+
for (int i = 0; i < types.Count; i++)
21+
{
22+
var type = types[i];
23+
if (type.IsAbstract)
24+
continue;
25+
26+
var instance = (ICodeGenerator) Activator.CreateInstance(type);
27+
instance.Generate();
28+
}
29+
}
30+
31+
public static string GetScreamName(string name)
32+
{
33+
var formattedName = "";
34+
35+
name = FilterSpaces(name);
36+
37+
for (int i = 0; i < name.Length; i++)
38+
{
39+
if (i == 0)
40+
{
41+
formattedName += name[i].ToString();
42+
continue;
43+
}
44+
45+
var c = name[i];
46+
var pc = name[i - 1];
47+
if (char.IsUpper(c) && char.IsLower(pc))
48+
formattedName += "_";
49+
50+
formattedName += c.ToString();
51+
}
52+
53+
return formattedName.ToUpper();
54+
}
55+
56+
private static string FilterSpaces(string name)
57+
{
58+
var index = -1;
59+
60+
while ((index = name.IndexOf(' ')) != -1)
61+
{
62+
if (index == name.Length - 1)
63+
{
64+
name = name.Remove(index, 1);
65+
return name;
66+
}
67+
68+
var upperChar = char.ToUpper(name[index + 1]).ToString();
69+
name = name.Remove(index, 2);
70+
name = name.Insert(index, upperChar);
71+
}
72+
73+
return name;
74+
}
75+
}
76+
}

Editor/Utilities.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# Layers & Tags Generator
2+
3+
<p align="center">
4+
<img alt="GitHub package.json version" src ="https://img.shields.io/github/package-json/v/Thundernerd/Unity3D-LayersTagsGenerator" />
5+
<a href="https://github.com/Thundernerd/Unity3D-LayersTagsGenerator/issues">
6+
<img alt="GitHub issues" src ="https://img.shields.io/github/issues/Thundernerd/Unity3D-LayersTagsGenerator" />
7+
</a>
8+
<a href="https://github.com/Thundernerd/Unity3D-LayersTagsGenerator/pulls">
9+
<img alt="GitHub pull requests" src ="https://img.shields.io/github/issues-pr/Thundernerd/Unity3D-LayersTagsGenerator" />
10+
</a>
11+
<a href="https://github.com/Thundernerd/Unity3D-LayersTagsGenerator/blob/master/LICENSE.md">
12+
<img alt="GitHub license" src ="https://img.shields.io/github/license/Thundernerd/Unity3D-LayersTagsGenerator" />
13+
</a>
14+
<img alt="GitHub last commit" src ="https://img.shields.io/github/last-commit/Thundernerd/Unity3D-LayersTagsGenerator" />
15+
</p>
16+
17+
A package that contains generators that will generate classes containing the project's Layers and Tags for easy access.
18+
19+
## Installation
20+
1. The package is available on the [openupm registry](https://openupm.com). You can install it via [openupm-cli](https://github.com/openupm/openupm-cli).
21+
```
22+
openupm add net.tnrd.layerstagsgenerator
23+
```
24+
2. You can also install via git url by adding these entries in your **manifest.json**
25+
```json
26+
"net.tnrd.layerstagsgenerator": "https://github.com/Thundernerd/Unity3D-LayersTagsGenerator.git",
27+
"net.tnrd.codegenerator": "https://github.com/Thundernerd/Unity3D-CodeGenerator.git"
28+
```
29+
30+
## Usage
31+
32+
Once you have installed the package into your project you can access the generators through the menu as shown below.
33+
34+
You can generate the Tags, Layers, and Sorting Layers all separately by using their respective menu items, or generate them all by using the Generate All menu item.
35+
36+
37+
![alt](./~Documentation/menu_items.png)
38+
39+
40+
Once you have generated one or more through the menu, you will see the files appear in your project located int he Generated folder, which resides at top level in your Assets folder.
41+
42+
![alt](./~Documentation/generated_files.png)
43+
44+
To use the generated files you simply access them through their classes which are: Tags, Layers, and SortingLayers.
45+
Below is an example of a use case for the Tags.
46+
47+
```c#
48+
public class Foo : MonoBehaviour
49+
{
50+
private void OnCollisionEnter(Collision other)
51+
{
52+
if (other.transform.CompareTag(Tags.PLAYER))
53+
{
54+
...
55+
}
56+
}
57+
}
58+
```
59+
60+
## Support
61+
Layers & Tags Generator is an open-source project that I hope helps other people. It is by no means necessary but if you feel generous you can support me by donating.
62+
63+
[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/J3J11GEYY)
64+
65+
## Contributions
66+
Pull requests are welcomed. Please feel free to fix any issues you find, or add new features.
67+

README.md.meta

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "net.tnrd.layertagsgenerator",
3+
"displayName": "Layer Tags Generator",
4+
"version": "1.0.0",
5+
"unity": "2019.1",
6+
"description": "A simple tool to generate files that contain the project's Layers, Sorting Layers, and Tags.",
7+
"keywords": [
8+
"layer",
9+
"layers",
10+
"tag",
11+
"tags",
12+
"generator"
13+
],
14+
"author": {
15+
"name": "Christiaan Bloemendaal",
16+
"email": "[email protected]",
17+
"url": "https://www.tnrd.net"
18+
},
19+
"dependencies": {
20+
"net.tnrd.codegenerator": "1.0.0"
21+
}
22+
}

0 commit comments

Comments
 (0)