Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
            }
        }
Beispiel #3
0
        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);
                }
            }
        }