public void AddObject(SceneObject obj) { if (obj.GetName() == ObjectName) { WaitTillInitialized(); if (PrivateRendererContext.Application.ManagedThreadId == System.Threading.Thread.CurrentThread.ManagedThreadId) { if (!NeedsInit) { if (!obj.IsInitialized) obj.Init(PrivateRendererContext); } else { if(!obj.IsInitialized) PrivateRendererContext.AddRCActionJob(new CoreScene.RCActionInitSceneObject(obj, PrivateRendererContext)); } lock (ListLock) { SceneObjects.Add(obj); ObjectsChanged.Add(SceneObjects.IndexOf(obj)); obj.SceneObjectChanged += SceneObjectChangedHandler; } } else { if(!obj.IsInitialized) PrivateRendererContext.AddRCActionJob(new CoreScene.RCActionInitSceneObject(obj, PrivateRendererContext)); obj.WaitTillInitialized(); lock (ListLock) { SceneObjects.Add(obj); ObjectsChanged.Add(SceneObjects.IndexOf(obj)); obj.SceneObjectChanged += SceneObjectChangedHandler; } } obj.IsAddedToScene = true; obj.Scene = this.Scene; Logger.Log.AddLogEntry (LogLevel.Debug, "SceneObjectArray", "Object Added"); } else FreezingArcher.Output.Logger.Log.AddLogEntry(FreezingArcher.Output.LogLevel.Error, "SceneObjectArray", FreezingArcher.Core.Status.YouShallNotPassNull, "Object name does not match"); }