Example #1
0
        /// <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;
        }
Example #2
0
        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;
        }