Skip to content

Commit

Permalink
Merge pull request #5 from wramp/develop
Browse files Browse the repository at this point in the history
Prepared for release v0.2
  • Loading branch information
jakubgereg committed May 14, 2017
2 parents 8962fea + bf2ad1c commit 08b5724
Show file tree
Hide file tree
Showing 17 changed files with 532 additions and 146 deletions.
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,8 @@
# UnitySkeletonMaker
Console App for making initial setup for Empty Unity project
# **Unity Skeleton Maker v0.2**
Tool for creating empty skeleton Unity project, featuring folder structures, ignored files etc.
[https://github.com/wramp/unityskeletonmaker](https://github.com/wramp/unityskeletonmaker)
![Unity Skeleton Maker v0.2](https://camo.githubusercontent.com/7919f62c6c3ca34bbcd1b436b353fcdb0e69ceb0/68747470733a2f2f6d656469612e67697068792e636f6d2f6d656469612f4d583972346a4f5453745565412f67697068792e676966)

Authors
---
Jakub Gereg ([@wramp](https://github.com/wramp))
6 changes: 6 additions & 0 deletions usm/usm.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "usm", "usm\usm.csproj", "{FEC9E27B-7F9D-41E3-A4C0-1571914427F9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "usmcore", "usmcore\usmcore.csproj", "{86556F7E-C22F-4A76-A16A-B4599F64CB7D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -15,6 +17,10 @@ Global
{FEC9E27B-7F9D-41E3-A4C0-1571914427F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEC9E27B-7F9D-41E3-A4C0-1571914427F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEC9E27B-7F9D-41E3-A4C0-1571914427F9}.Release|Any CPU.Build.0 = Release|Any CPU
{86556F7E-C22F-4A76-A16A-B4599F64CB7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{86556F7E-C22F-4A76-A16A-B4599F64CB7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{86556F7E-C22F-4A76-A16A-B4599F64CB7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{86556F7E-C22F-4A76-A16A-B4599F64CB7D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
240 changes: 172 additions & 68 deletions usm/usm/Program.cs
Original file line number Diff line number Diff line change
@@ -1,122 +1,226 @@
using Newtonsoft.Json;
using System;
using System;
using System.IO;
using System.IO.Compression;
using usmcore;


namespace usm
{
class Program
{
static bool again;
static void Main(string[] args)

static void Main()
{
Console.BackgroundColor = ConsoleColor.DarkCyan;
Console.ForegroundColor = ConsoleColor.White;
CreateHeader();

ColoredConsoleWrite(ConsoleColor.White, "What do you want to do?\n");
ColoredConsoleWrite(ConsoleColor.Black, "-----------------------\n");
Console.Write("1. Create ");
ColoredConsoleWrite(ConsoleColor.Yellow, "Skeleton");
Console.Write(" from existing package [{0}]\n", UsmJsonHelper.UsmPackagefilesuffix);
Console.Write("2. Create ");
ColoredConsoleWrite(ConsoleColor.Green, "Package");
Console.Write(" from existing folder\n");

ConsoleKeyInfo selected = Console.ReadKey();

switch (selected.Key)
{
case ConsoleKey.D1:
CreateSkeletonOption();
break;

case ConsoleKey.D2:
CreatePackageOption();
break;
case ConsoleKey.X:
var ps = UsmJsonHelper.ReadProjectUsm(AppDomain.CurrentDomain.BaseDirectory);
ReadmeCreator.CreateReadme(AppDomain.CurrentDomain.BaseDirectory, ps.ProjectSettings, CallBackError);
break;
}

ColoredConsoleWrite(ConsoleColor.Green, "\nThanks for using Unity Skeleton Maker!\t(press [R] to restart)");
ConsoleKeyInfo exit = Console.ReadKey();
switch (exit.Key)
{
case ConsoleKey.R:
Main();
break;
}
}

static void CreateSkeletonOption()
{
CreateHeader();

Console.WriteLine("Select path to create skeleton [dest]:");
var projectbasedir = Console.ReadLine();

if (!Directory.Exists(Path.Combine(projectbasedir, ".git")))
//check if project is git
if (!UsmJsonHelper.IsProjectGitRepo(projectbasedir))
{
Console.WriteLine("Selected path must be GIT project directory! [Clone empty project]");
ColoredConsoleWrite(ConsoleColor.White,
"Selected path must be GIT project directory!\nPlease create empty git repository and clone it to local folder.", ConsoleColor.Red);
Console.ReadKey();
return;
}

var projectusmpath = GetProjectUsmPathFromBase(projectbasedir);

if (File.Exists(projectusmpath))
{
var projusm = ReadProjectUsm(projectusmpath);
ExtractPackage("skeleton-unityemptygame", projectbasedir, projusm);
var projectusmpath = UsmJsonHelper.GetProjectUsmpath(projectbasedir);

Console.WriteLine("Thanks for using Unity Skeleton Maker!");
}
else
//If usm.json exist try to create it
if (!UsmJsonHelper.IsProjectUsmExists(projectbasedir))
{
Console.WriteLine($"Couldnt locate {projectusmpath} do you want to create {UsmJsonHelper.FileName} in this location? [Y/N]");
ConsoleKeyInfo answer = Console.ReadKey();
switch (answer.Key)
if (CreateNewUsmJsonOption(projectusmpath, projectbasedir))
{
case ConsoleKey.Y:
var defaultusmjsonpath = UsmJsonHelper.GetDefaultUsmpath();
File.Copy(defaultusmjsonpath, projectusmpath);
again = true;
Console.ReadKey();
CallBackMessage("Created usm.json file in project directory!\n");
ColoredConsoleWrite(ConsoleColor.Black, $"Now you can modify settings of your project in {projectusmpath}\n", ConsoleColor.Green);

break;

default:
Environment.Exit(0);
break;
Console.WriteLine("\nPress [enter] to continue!");
Console.ReadKey();
}
}

if (again)
//check if usm.json exist and extract skeleton
if (UsmJsonHelper.IsProjectUsmExists(projectbasedir))
{
Console.Clear();
Console.WriteLine($"Now you can modify settings of your project in {projectusmpath}");
Console.ReadKey();
CreateHeader();

if (File.Exists(projectusmpath))
{
var projusm = ReadProjectUsm(projectusmpath);
ExtractPackage("skeleton-unityemptygame", projectbasedir, projusm);
var skeletons = UsmPackageHelper.GetAllSkeletonsAvailiable();
int i = 0;
Console.WriteLine("Availiable skeleton packages:");
ColoredConsoleWrite(ConsoleColor.Black, "-----------------------------\n");

Console.WriteLine();
Console.WriteLine("Thanks for using Unity Skeleton Maker!");
foreach (var skeleton in skeletons)
{
i++;
ConsoleColor bc = i % 2 == 0 ? ConsoleColor.Gray : ConsoleColor.Cyan;
var str = MakeOneLine($"{i}." + skeleton.Name.Replace(UsmJsonHelper.UsmPackagefilesuffix, ""));
ColoredConsoleWrite(ConsoleColor.Black, str + "\n", bc);
}
else

Console.Write("\nSelect package [number]:");
var num = Console.ReadLine();

if (string.IsNullOrEmpty(num)) return;

int numero = int.Parse(num);
if (numero == 0) return;

if (numero <= skeletons.Count)
{
Environment.Exit(0);
UsmJsonModel projusm = UsmJsonHelper.ReadProjectUsm(projectbasedir);
FileInfo k = skeletons[numero - 1];
ExtractOption(k.Name.Replace(UsmJsonHelper.UsmPackagefilesuffix, ""), projectbasedir, projusm);
}
}
//ReadJSON

Console.ReadKey();
}

static string GetProjectUsmPathFromBase(string projectbasedir)
static bool CreateNewUsmJsonOption(string projectusmpath, string projectbasedir)
{
return Path.Combine(projectbasedir, UsmJsonHelper.FileName);
ColoredConsoleWrite(ConsoleColor.White, $"Couldn`t locate {projectusmpath}\n", ConsoleColor.Red);
Console.Write($"Do you want to create ");
ColoredConsoleWrite(ConsoleColor.Cyan, "(default) ");
Console.Write($"{UsmJsonHelper.FileName} in this location? [Y/N]:");
ConsoleKeyInfo answer = Console.ReadKey();
switch (answer.Key)
{
case ConsoleKey.Y:
UsmJsonHelper.InitializeNewUsmJson(projectbasedir);
return true;
}
return false;
}

static UsmJsonModel ReadProjectUsm(string projectusmpath)
static void CreatePackageOption()
{
var usmjsonraw = File.ReadAllText(projectusmpath);
var projectUsm = JsonConvert.DeserializeObject<UsmJsonModel>(usmjsonraw);
Console.WriteLine($"usm.json v{projectUsm.UsmJsonVersion} found!");


return projectUsm;
CreateHeader();

Console.Write("Select directory you want to convert to ");
ColoredConsoleWrite(ConsoleColor.Yellow, "skeleton");
Console.Write(":\n");
var path = Console.ReadLine();
Console.Write("Name of your skeleton ");
ColoredConsoleWrite(ConsoleColor.Green, "Package");
Console.Write(":");
var name = Console.ReadLine();
Console.WriteLine();
UsmPackageHelper.ConvertToSkeleton(path, name, CallBackMessage);

}

static void ExtractPackage(string packagename, string projectbasedir, UsmJsonModel projectUsm)
static void ExtractOption(string packagename, string projectbasedir, UsmJsonModel projectUsm)
{
CreateHeader();
//DO YOU WANT TO CREATE PROJ ,, AND SELECT PACKAGE
Console.WriteLine("Do you want to create new project base on this settings?");
Console.WriteLine("---------------");
Console.WriteLine($"Game name: {projectUsm.ProjectSettings.GameName}");
Console.WriteLine($"Game name: {projectUsm.ProjectSettings.Description}");
Console.WriteLine("---------------");
Console.WriteLine("[Y/N]?");
Console.Write($"Do you want to extract package ");
ColoredConsoleWrite(ConsoleColor.Green, $"\"{packagename}\"");
Console.WriteLine(" to project based on this settings?");
ColoredConsoleWrite(ConsoleColor.Black, "----------------------------------------------------------------------\n");
ColoredConsoleWrite(ConsoleColor.Yellow, "Game name: ");
Console.WriteLine($"{projectUsm.ProjectSettings.GameName}");
ColoredConsoleWrite(ConsoleColor.Yellow, "Description: ");
Console.WriteLine($"{projectUsm.ProjectSettings.Description}");
ColoredConsoleWrite(ConsoleColor.Yellow, "Url: ");
Console.WriteLine($"{projectUsm.ProjectSettings.Url}");
ColoredConsoleWrite(ConsoleColor.Black, "----------------------------------------------------------------------\n");
Console.Write("[Y/N]:");


ConsoleKeyInfo answer = Console.ReadKey();
switch (answer.Key)
{
case ConsoleKey.Y:
var appPath = AppDomain.CurrentDomain.BaseDirectory;
var cb = Path.Combine(appPath, packagename);
var rb = Path.Combine(cb, "default.zip");
ZipFile.ExtractToDirectory(rb, projectbasedir);
ReadmeCreator.CreateReadme(projectbasedir, projectUsm.ProjectSettings);
UsmJsonHelper.ExtractPackage(packagename, projectbasedir, projectUsm, CallBackError);
break;
}
}

default:
Environment.Exit(0);
break;
static void CallBackError(string str)
{
ColoredConsoleWrite(ConsoleColor.White, $"\n[!] - {str}\n", ConsoleColor.Red);
}

static void CallBackMessage(string str)
{
ColoredConsoleWrite(ConsoleColor.Yellow, $"\n\n[$] - {str}\n");
}

public static string MakeOneLine(string text, bool centered = false)
{
string result = text;
int maxlenght = 80;

var textl = text.Length;

var emptyspaces = maxlenght - textl;

for (int i = 1; i < emptyspaces; i++)
{
result += " ";
}

return result;
}

public static void CreateHeader()
{
Console.Clear();
ColoredConsoleWrite(ConsoleColor.DarkRed,
" Unity Skeleton Maker by Jakub Gereg \n",
ConsoleColor.Yellow);
}

public static void ColoredConsoleWrite(ConsoleColor color, string text, ConsoleColor background = ConsoleColor.DarkCyan)
{
ConsoleColor originalColor = ConsoleColor.White;
ConsoleColor backgroundoriginalColor = ConsoleColor.DarkCyan;

Console.BackgroundColor = background;
Console.ForegroundColor = color;
Console.Write(text);
Console.ForegroundColor = originalColor;
Console.BackgroundColor = backgroundoriginalColor;
}
}
}
5 changes: 2 additions & 3 deletions usm/usm/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("usm")]
[assembly: AssemblyTitle("UnitySkeletonMaker")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyCompany("Jakub Gereg")]
[assembly: AssemblyProduct("usm")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
Expand Down
Loading

0 comments on commit 08b5724

Please sign in to comment.