2using MoonSharp.Interpreter;
3using NaughtyAttributes;
5using System.Collections;
6using System.Collections.Generic;
18 public InputField ScriptField;
19 public Text DebugOutputText;
21 private static readonly
object LockObject =
new object();
22 private static readonly Queue<Action> Actions =
new Queue<Action>();
24 string scriptCode =
@"
27 findGlobalGO('kocsi', true)
31 -- speak('szia, mizu?', 'hu-HU')
32 -- cube = findGO('CUBE')
33 -- cube.transform.position = Vector3(0,2,0)
34 -- blokk = findGO(""C197496.fbx"")
35 -- alatetArray = findAllGO(""1x1_trilib.FBX"")
36 -- for _, alatet in ipairs(alatetArray) do
37 -- setParent(alatet, blokk.transform)
39 -- teszt = findGlobalGO(""kocsi"")
40 -- teszt.transform.LookAt(Vector3(0,0,0))
41 -- dkey = findGO(""desoutter_key.FBX"")
42 -- setStatic(dkey, true)
48 if (
File.Exists(Path.Combine(Application.streamingAssetsPath,
"startup.lua")))
50 var startup =
File.ReadAllText(Path.Combine(Application.streamingAssetsPath,
"startup.lua"));
52 Script script = NewScript();
53 script.DoString(startup);
57 public void RunScriptFromFile(
string file)
59 if (
File.Exists(Path.Combine(Application.streamingAssetsPath,
"scripts", file)))
61 var run =
File.ReadAllText(Path.Combine(Application.streamingAssetsPath,
"scripts", file));
63 Script script = NewScript();
68 Debug.LogWarning(
"RunScriptFromFile: '" + file +
"' does not exists!");
72 public void RunScriptFromInput()
76 var script = NewScript();
77 var retval = script.DoString(ScriptField.text);
78 if (retval.IsNilOrNan())
80 DebugOutputText.text =
"";
85 case DataType.Boolean:
86 DebugOutputText.text = retval.Boolean.ToString();
89 DebugOutputText.text = retval.Number.ToString();
92 DebugOutputText.text = retval.String;
95 DebugOutputText.text =
"";
102 if (!DebugOutputText)
105 DebugOutputText.text = e.Message;
112 Script script = NewScript();
113 script.DoString(scriptCode);
127 Script script = NewScript();
128 script.DoString(
"delayAction('debugLog(\"hello, ez egy delay után volt\")', 3)");
131 private void SetPos(GameObject o,
float x,
float y,
float z)
133 SetPos(o,
new Vector3(x, y, z));
136 private void SetPos(GameObject o, Vector3 p)
138 o.transform.position = p;
140 private void SetLocalPos(GameObject o, Vector3 p)
142 o.transform.localPosition = p;
145 private void SetRot(GameObject o, Vector3 p)
147 o.transform.eulerAngles = p;
149 private void SetLocalRot(GameObject o, Vector3 p)
151 o.transform.localEulerAngles = p;
154 private void SetEnabled(GameObject o,
bool v)
159 private Vector3 NewVector3(
float x,
float y,
float z)
161 return new Vector3(x, y, z);
164 public Script NewScript()
166 Script script =
new Script();
168 UserData.RegisterType<GameObject>();
169 UserData.RegisterType<Vector3>();
170 UserData.RegisterType<Transform>();
171 UserData.RegisterType<Text>();
174 script.Globals[
"findGO"] = (Func<string, GameObject>)FindGO;
175 script.Globals[
"findGlobalGO"] = (Func<string, bool, GameObject>)findGlobal;
177 script.Globals[
"findAllGO"] = (Func<string, List<GameObject>>)FindAllGO;
178 script.Globals[
"spawn"] = (Func<GameObject, GameObject>)Instantiate;
179 script.Globals[
"destroy"] = (Action<
UnityEngine.Object>)Destroy;
181 script.Globals[
"Vector3"] = (Func<float, float, float, Vector3>)NewVector3;
182 script.Globals[
"setPos"] = (Action<GameObject, Vector3>)SetPos;
183 script.Globals[
"setLocalPos"] = (Action<GameObject, Vector3>)SetLocalPos;
184 script.Globals[
"setRot"] = (Action<GameObject, Vector3>)SetRot;
185 script.Globals[
"setLocalRot"] = (Action<GameObject, Vector3>)SetLocalRot;
186 script.Globals[
"debugLog"] = (Action<string>)
Debug.Log;
187 script.Globals[
"speak"] = (Action<string, string>)Speak;
188 script.Globals[
"sleep"] = (Action<int>)Thread.Sleep;
189 script.Globals[
"setEnabled"] = (Action<GameObject, bool>)SetEnabled;
190 script.Globals[
"setStatic"] = (Action<GameObject, bool>)SetStatic;
191 script.Globals[
"lerp"] = (Action<GameObject, Vector3, Vector3, float>)LerpPos;
192 script.Globals[
"setParent"] = (Action<GameObject, Transform>)SetParent;
193 script.Globals[
"getInteractive"] = (Func<GameObject, ThrowableCanDisable>)GetTCD;
194 script.Globals[
"selectPlayer"] = (Action)SelectPlayer;
197 script.Globals[
"setComponent"] = (Action<GameObject, string, bool>)ActivateComponent;
198 script.Globals[
"delayAction"] = (Action<string, float>)
DelayAction;
205 private GameObject findGlobal(
string goName,
bool includeInactive =
false)
207 GameObject go =
null;
210 go =
pb_Scene.
instance.transform.GetComponentsInChildren<Transform>(includeInactive).Where(obj => obj.name == goName).Select(x => x.gameObject).ToList()[0].gameObject;
221 go = GameObject.Find(
"Environment").GetComponentsInChildren<Transform>(includeInactive).Where(obj => obj.name == goName).Select(x => x.gameObject).ToList()[0].gameObject;
236 go = tool.GetComponentsInChildren<Transform>(includeInactive).Where(obj => obj.name == goName).Select(x => x.gameObject).ToList()[0].gameObject;
251 go = GameObject.FindObjectsOfType<GameObject>(includeInactive).Where(obj => obj.name == goName).FirstOrDefault();
260 return GameObject.Find(goName);
263 private void Speak(
string text,
string lang =
"hu-HU")
268 private void DelayAction(
string action,
float delay)
270 StartCoroutine(this.delay(action, delay));
273 private IEnumerator delay(
string a,
float t)
275 yield
return new WaitForSeconds(t);
277 Script script = NewScript();
281 private void ActivateComponent(GameObject go,
string s,
bool b)
285 var cmp = go.GetComponent(s) as MonoBehaviour;
297 private void SelectPlayer()
314 private List<GameObject> FindAllGO(
string name)
316 return pb_Scene.
instance.transform.GetComponentsInChildren<Transform>().Where(obj => obj.name == name).Select(x => x.gameObject).ToList();
320 private GameObject FindGO(
string name)
324 return pb_Scene.
instance.transform.GetComponentsInChildren<Transform>().Where(obj => obj.name == name).Select(x => x.gameObject).ToList()[0].gameObject;
332 private void SetStatic(GameObject go,
bool value)
340 private void SetParent(GameObject go, Transform p)
342 go.transform.SetParent(p,
true);
346 private void LerpPos(GameObject o, Vector3 p, Vector3 r,
float t)
348 StartCoroutine(LerpTransform(o, p, r, t));
351 IEnumerator LerpTransform(GameObject o, Vector3 p, Vector3 r,
float t)
354 for (
float i = 0; i <= t; i += 0.01f)
357 o.transform.position = Vector3.Lerp(o.transform.position, p, i / t);
358 o.transform.localRotation = Quaternion.Lerp(o.transform.localRotation, Quaternion.Euler(r), i / t);
359 yield
return new WaitForSeconds(0.01f);
367 public static void InvokeAsync(Action action)
371 Actions.Enqueue(action);
379 while (Actions.Count > 0)
UnityEngine.UI.Button Button
static void SetSelection(IEnumerable< GameObject > selection)
static LevelEditorOnLoaded instance
static void SetStatic(GameObject go)
static void SetInteractable(GameObject go, bool isKinematic=true)
void ResetCleco(bool disable=false)
static ManipulatorArm instance