/// <summary> /// Switch to the given game state. /// </summary> /// <returns><c>true</c>, if successfully switched game state, <c>false</c> otherwise.</returns> /// <param name="name">Game state name.</param> public bool SwitchToGameState(string name) { if (currentNode == null) { currentNode = GameStateGraph.Nodes.FirstOrDefault(n => n.Data.Name == name); if (currentNode == null) { Logger.Log.AddLogEntry(LogLevel.Error, "Game", "Cannot switch game state as '{0}' does not exist!", name); return false; } if (currentNode.Data.Scene != null && currentNode.Data.Scene.CameraManager.ActiveCamera == null) { currentNode.Data.Scene.CameraManager.ToggleCamera(); } SceneNode.Scene = currentNode.Data.Scene; currentNode.Data.MessageProxy.StartProcessing(); return true; } if (currentNode.Data.Name == name) return true; var newstateEdge = currentNode.OutgoingEdges.FirstOrDefault(e => e.DestinationNode.Data.Name == name); if (newstateEdge == null) { Logger.Log.AddLogEntry(LogLevel.Error, "Game", "Cannot change game state to '{0}'!", name); return false; } var newstate = newstateEdge.DestinationNode; if (newstate == null) { if (!GameStateGraph.Nodes.Any(n => n.Data.Name == name)) { Logger.Log.AddLogEntry(LogLevel.Error, ClassName, "There is no game state '{0}' registered in this game!", name); return false; } Logger.Log.AddLogEntry(LogLevel.Warning, ClassName, "The game state '{0}' is not reachable from the current game state!", name); return false; } currentNode.Data.MessageProxy.StopProcessing(); currentNode = newstate; if (currentNode.Data.Scene != null && currentNode.Data.Scene.CameraManager.ActiveCamera == null) { currentNode.Data.Scene.CameraManager.ToggleCamera(); } SceneNode.Scene = currentNode.Data.Scene;; currentNode.Data.MessageProxy.StartProcessing(); return true; }
public BasicCompositor(ObjectManager objm, RendererContext rc) { graphLock = new object(); _CompositorGraph = objm.CreateOrRecycle<DirectedWeightedGraph<CompositorNode, CompositorEdgeDescriptionListWrapper>>(); _CompositorGraph.Init(); _Nodes = new List<DirectedWeightedNode<CompositorNode, CompositorEdgeDescriptionListWrapper>>(); _Edges = new List<DirectedWeightedEdge<CompositorNode, CompositorEdgeDescriptionListWrapper>>(); DummyNode = _CompositorGraph.AddNode(null); RendererContext = rc; }