public CodeExecutor CreateObject(SelectableObject selectable, bool addStart, IObject obj) { //if (obj == null) // obj = selectable.GetComponent<IObject>(); var t = selectable.transform; var clone = obj.ConvertToObject(); clone.parent = scene; clone.position = t.position; clone.rotation = t.rotation; clone.localScale = t.localScale; clone.name = selectable.name; var exec = clone.gameObject.AddComponent <CodeExecutor>(); exec.original = selectable; //exec.isClone = originalObject != null; exec.isClone = false; if (obj is MeshObject mesh) { exec.color = new Vector3(mesh.color.r, mesh.color.g, mesh.color.b); exec.transparency = 1 - mesh.color.a; // Todo: change in Clone script too } else if (obj is LightObject light) { exec.color = new Vector3(light.color.r, light.color.g, light.color.b); } // If it has code (and not just empty created script) if (selectable.Script != null && selectable.Script.beginEvent.NextConnection != null) { var events = exec.CreateCode(selectable.Script.beginEvent); if (addStart && events.Start) { StartCodeExecutors.Add(exec); } if (events.Update) { UpdateCodeExecutors.Add(exec); } if (events.FixedUpdate) { FixedUpdateCodeExecutors.Add(exec); } } exec.RefreshColor(); return(exec); }
public void PurgeDeleted() { if (DeletedObjects.Count > 0) { UpdateCodeExecutors.RemoveAll(o => DeletedObjects.Contains(o)); FixedUpdateCodeExecutors.RemoveAll(o => DeletedObjects.Contains(o)); foreach (var b in BroadcastEvents) { b.Value.RemoveAll(o => DeletedObjects.Contains(o.codeExec)); } foreach (var obj in DeletedObjects) { if (obj != null) { obj.RunDeleted(); Destroy(obj.gameObject); } } DeletedObjects.Clear(); } }
public void StartRun() { if (!running) { Time.timeScale = 1; Time.fixedDeltaTime = 1f / 60f; saveObject.AutoSave(); PlayOutput.Instance.Reset(); // Disable Editor Movement Axes objEditor.selected = null; objEditor.moveObject.gameObject.SetActive(false); objEditor.rotObject.gameObject.SetActive(false); objEditor.scaleObject.gameObject.SetActive(false); ranStart = false; StartCodeExecutors.Clear(); UpdateCodeExecutors.Clear(); BroadcastEvents.Clear(); FixedUpdateCodeExecutors.Clear(); DeletedObjects.Clear(); //CollisionEnd.Clear(); //CollisionStart.Clear(); running = true; bool createdCamera = false; var sceneiObjects = objects.GetComponentsInChildren <IObject>(); Array.Sort(sceneiObjects, (obj1, obj2) => { return(obj1.Index.CompareTo(obj2.Index)); }); foreach (var sceneObject in sceneiObjects) { var comp = ((MonoBehaviour)sceneObject).transform.GetComponent <SelectableObject>(); if (comp.TryGetComponent <IObject>(out var obj)) { var clone = CreateObject(comp, true, obj); if (!createdCamera) { createdCamera |= clone.GetComponent <Camera>(); } } else { print($"No object found in {comp.transform.name}"); } } editorCamera.SetActive(!createdCamera); foreach (var obj in editorObjects) { obj.SetActive(false); } foreach (var obj in sceneObjects) { obj.SetActive(true); } } }