An easy to use Unity 3D library for creating illustrated Interactive Fiction games and more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
4.0 KiB

using UnityEngine;
using UnityEditor;
using System.IO;
using System.Collections;
namespace Fungus
{
public class MenuItems
{
[MenuItem("Tools/Fungus/Create/Lua", false, 2000)]
static void CreateLua()
{
SpawnPrefab("Prefabs/Lua", false);
}
[MenuItem("Tools/Fungus/Create/Lua File", false, 2001)]
static void CreateLuaFile()
{
string path = EditorUtility.SaveFilePanelInProject("Create Lua File", "script.txt", "txt", "Please select a file name for the new Lua script. Note: Lua files in Unity use the .txt extension.");
if(path.Length == 0)
{
return;
}
File.WriteAllText(path, "");
AssetDatabase.Refresh();
#if UNITY_5_3_OR_NEWER
Object asset = AssetDatabase.LoadAssetAtPath<Object>(path);
#else
Object asset = AssetDatabase.LoadAssetAtPath(path, typeof(Object));
#endif
if (asset != null)
{
EditorUtility.FocusProjectWindow();
EditorGUIUtility.PingObject(asset);
}
}
[MenuItem("Tools/Fungus/Create/Lua Environment", false, 2100)]
static void CreateLuaEnvironment()
{
SpawnPrefab("Prefabs/LuaEnvironment", false);
}
[MenuItem("Tools/Fungus/Create/Lua Bindings", false, 2101)]
static void CreateLuaBindings()
{
SpawnPrefab("Prefabs/LuaBindings", false);
}
[MenuItem("Tools/Fungus/Create/Lua Script", false, 2102)]
static void CreateLuaScript()
{
SpawnPrefab("Prefabs/LuaScript", false);
}
[MenuItem("Tools/Fungus/Create/Lua Store", false, 2103)]
static void CreateLuaStore()
{
SpawnPrefab("Prefabs/LuaStore", false);
}
/// <summary>
/// Spawns a prefab in the scene based on it's filename in a Resources folder in the project.
/// If centerInScene is true then the object will be placed centered in the view window with z = 0.
/// If centerInScene is false the the object will be placed at (0,0,0)
/// </summary>
public static GameObject SpawnPrefab(string prefabName, bool centerInScene)
{
GameObject prefab = Resources.Load<GameObject>(prefabName);
if (prefab == null)
{
return null;
}
GameObject go = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
PrefabUtility.DisconnectPrefabInstance(go);
if (centerInScene)
{
SceneView view = SceneView.lastActiveSceneView;
if (view != null)
{
Camera sceneCam = view.camera;
Vector3 pos = sceneCam.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 10f));
pos.z = 0f;
go.transform.position = pos;
}
}
else
{
go.transform.position = Vector3.zero;
}
Selection.activeGameObject = go;
Undo.RegisterCreatedObjectUndo(go, "Create Object");
return go;
}
/// <summary>
/// Create new asset from <see cref="ScriptableObject"/> type with unique name at
/// selected folder in project window. Asset creation can be cancelled by pressing
/// escape key when asset is initially being named.
/// </summary>
/// <typeparam name="T">Type of scriptable object.</typeparam>
public static void CreateAsset<T>() where T : ScriptableObject {
var asset = ScriptableObject.CreateInstance<T>();
ProjectWindowUtil.CreateAsset(asset, typeof(T).Name + ".asset");
}
/// <summary>
/// Create an info text object which displays help info in the top left of the sceen.
/// </summary>
[MenuItem("Tools/Fungus/Utilities/Info Text")]
static void SpawnInfoText()
{
SpawnPrefab("Prefabs/InfoText", false);
}
}
}