public void OnSceneExit(object sender, SceneChangeEventArgs e) { if (SceneExit != null) { SceneExit(sender, e); } }
public void OnSceneEntry(object sender, SceneChangeEventArgs e) { if (SceneEntry != null) { SceneEntry(sender, e); } }
protected void ChangeScene(Scene next_scene) { if (_CurrentScene == next_scene || next_scene == null) return; SceneChangeEventArgs scea = new SceneChangeEventArgs (_CurrentScene, next_scene); IEnumerable<RenderSet> next_sets = next_scene.AllRenderSetsInOrder (); IEnumerator<RenderSet> next_set_enum = next_sets.GetEnumerator (); IEnumerable<RenderSet> current_sets = null; IEnumerator<RenderSet> current_set_enum = null; RenderSetChangeEventArgs rscea; if (_CurrentScene != null) { // Get the enumerable for the render sets; these need to be in the same order! current_sets = _CurrentScene.AllRenderSetsInOrder (); current_set_enum = current_sets.GetEnumerator (); // Enumerate from the beginning of the set enumerable foreach (RenderSet render_set in current_sets) { if (!next_set_enum.MoveNext ()) break; rscea = new RenderSetChangeEventArgs (render_set, next_set_enum.Current); // Process this scene for (int i = 0; i < render_set.Count;) { // For each renderable in render set var renderable = render_set [i]; if (renderable is ISceneElement) { // If object also implements scene object ISceneElement scene_object = (ISceneElement)renderable; // Cast to scene object if (scene_object is IWorldObject) { IWorldObject world_object = (IWorldObject)scene_object; // Disable the body object is not preserved world_object.Body.Enabled &= world_object.Preserve; } if (scene_object.Preserve) { // If scene object is preserved next_set_enum.Current.Add (renderable); // Add in this object render_set.RemoveAt (i); // Remove from previous scene_object.OnRenderSetTransfer (this, rscea); continue; } } i++; } } foreach (RenderSet render_set in next_scene.AllRenderSetsInOrder()) { if (!current_set_enum.MoveNext ()) break; // Process next scene, PART 1 foreach (IRenderable renderable in render_set) { if (renderable is ISceneElement) { // If object also implements scene object if (renderable is IWorldObject) { IWorldObject world_object = (IWorldObject)renderable; // HACK: temporarily enable all bodies in this renderset // in order to allow deferred updates to affect bodies if(world_object.Body != null) world_object.Body.Enabled = true; } } } } } if (_CurrentScene != null) _CurrentScene.OnSceneExit (this, scea); // Enumerate from the beginning of the set enumerable if (_CurrentScene != null) current_set_enum = current_sets.GetEnumerator (); // Process next scene, PART 2 foreach (RenderSet render_set in next_scene.AllRenderSetsInOrder()) { if (current_set_enum != null) { if (!current_set_enum.MoveNext ()) break; rscea = new RenderSetChangeEventArgs (current_set_enum.Current, render_set); } else rscea = new RenderSetChangeEventArgs (null, render_set); foreach (IRenderable renderable in render_set) { if (renderable is ISceneElement) { ISceneElement scene_element = (ISceneElement)renderable; // Body.Enabled should be updated with a RenderSetEntry event handler scene_element.OnRenderSetEntry (this, rscea); } } } var last_scene = _CurrentScene; if (last_scene != null) { if(last_scene.FollowTarget == null) next_scene.Follow (null); else if(last_scene.FollowTarget.Preserve) next_scene.Follow (last_scene.FollowTarget, true); } next_scene.OnSceneEntry (next_scene, scea); _CurrentScene = next_scene; // Update the scene reference GC.Collect(); }
protected void ChangeScene(Scene next_scene) { if (_CurrentScene == next_scene || next_scene == null) { return; } SceneChangeEventArgs scea = new SceneChangeEventArgs(_CurrentScene, next_scene); IEnumerable <RenderSet> next_sets = next_scene.AllRenderSetsInOrder(); IEnumerator <RenderSet> next_set_enum = next_sets.GetEnumerator(); IEnumerable <RenderSet> current_sets = null; IEnumerator <RenderSet> current_set_enum = null; RenderSetChangeEventArgs rscea; if (_CurrentScene != null) { // Get the enumerable for the render sets; these need to be in the same order! current_sets = _CurrentScene.AllRenderSetsInOrder(); current_set_enum = current_sets.GetEnumerator(); // Enumerate from the beginning of the set enumerable foreach (RenderSet render_set in current_sets) { if (!next_set_enum.MoveNext()) { break; } rscea = new RenderSetChangeEventArgs(render_set, next_set_enum.Current); // Process this scene for (int i = 0; i < render_set.Count;) // For each renderable in render set { var renderable = render_set [i]; if (renderable is ISceneElement) // If object also implements scene object { ISceneElement scene_object = (ISceneElement)renderable; // Cast to scene object if (scene_object is IWorldObject) { IWorldObject world_object = (IWorldObject)scene_object; // Disable the body object is not preserved world_object.Body.Enabled &= world_object.Preserve; } if (scene_object.Preserve) // If scene object is preserved { next_set_enum.Current.Add(renderable); // Add in this object render_set.RemoveAt(i); // Remove from previous scene_object.OnRenderSetTransfer(this, rscea); continue; } } i++; } } foreach (RenderSet render_set in next_scene.AllRenderSetsInOrder()) { if (!current_set_enum.MoveNext()) { break; } // Process next scene, PART 1 foreach (IRenderable renderable in render_set) { if (renderable is ISceneElement) // If object also implements scene object { if (renderable is IWorldObject) { IWorldObject world_object = (IWorldObject)renderable; // HACK: temporarily enable all bodies in this renderset // in order to allow deferred updates to affect bodies if (world_object.Body != null) { world_object.Body.Enabled = true; } } } } } } if (_CurrentScene != null) { _CurrentScene.OnSceneExit(this, scea); } // Enumerate from the beginning of the set enumerable if (_CurrentScene != null) { current_set_enum = current_sets.GetEnumerator(); } // Process next scene, PART 2 foreach (RenderSet render_set in next_scene.AllRenderSetsInOrder()) { if (current_set_enum != null) { if (!current_set_enum.MoveNext()) { break; } rscea = new RenderSetChangeEventArgs(current_set_enum.Current, render_set); } else { rscea = new RenderSetChangeEventArgs(null, render_set); } foreach (IRenderable renderable in render_set) { if (renderable is ISceneElement) { ISceneElement scene_element = (ISceneElement)renderable; // Body.Enabled should be updated with a RenderSetEntry event handler scene_element.OnRenderSetEntry(this, rscea); } } } var last_scene = _CurrentScene; if (last_scene != null) { if (last_scene.FollowTarget == null) { next_scene.Follow(null); } else if (last_scene.FollowTarget.Preserve) { next_scene.Follow(last_scene.FollowTarget, true); } } next_scene.OnSceneEntry(next_scene, scea); _CurrentScene = next_scene; // Update the scene reference GC.Collect(); }
public void OnSceneExit(object sender, SceneChangeEventArgs e) { if(SceneExit != null) SceneExit(sender, e); }
public void OnSceneEntry(object sender, SceneChangeEventArgs e) { if(SceneEntry != null) SceneEntry(sender, e); }