Ejemplo n.º 1
0
        public void AddOperandException()
        {
            var rootNode = new ConnectorNode(ConnectorType.IMPLY);

            rootNode.AddOperand(new AtomNode('A'));
            Assert.Throws(typeof(Exception), () => rootNode.AddOperand(new AtomNode('B')));
        }
Ejemplo n.º 2
0
        public Loader(TerminalNode startNode, TerminalNode endNode, string filePath)
        {
            this.startNode = startNode;
            this.endNode   = endNode;
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.Load(filePath);
                ConnectorNode con = startNode.OutConnector;

                addBlockNodes(doc.DocumentElement.ChildNodes, startNode, startNode);
            }
            catch (Exception ex)
            {}
        }
Ejemplo n.º 3
0
    private static void AttachMapPieceToConnectorNode(ConnectorNode connectNode)
    {
        Vector3 nodeVect = connectNode.NodeStaticLocation;
        int     mapSize  = connectNode.NodeSize;
        int     rotation = connectNode.NodeStaticRotation;
        int     mapType  = connectNode.NodeMapType;
        int     mapPiece = connectNode.NodeMapPiece;

        GridBuilder.BuildLocationGrid(connectNode, mapSize);
        List <Vector3> mapPieceNodes = GridBuilder.GetGridNodeStartPositions();

        MapPieceBuilder.AttachMapPieceToMapNode(connectNode, mapPieceNodes, mapSize, mapType, mapPiece, rotation);
        MapPieceBuilder.SetPanelsNeighbours();
        //connectNode.mapFloorData = _mapPieceBuilder.GetMapFloorData();
        //connectNode.mapVentData = _mapPieceBuilder.GetMapVentData();
    }
        private Node.Node SetAtomRelationsFromRPN(string rulesRPN)
        {
            var stack = new Stack <Node.Node>();

            foreach (var ruleRPN in rulesRPN)
            {
                if (!Operators.Contains(ruleRPN))
                {
                    stack.Push(Atoms[ruleRPN]);
                }
                else if (ruleRPN == '!')
                {
                    stack.Push(new NegativeNode(stack.Pop()));
                }
                else
                {
                    ConnectorNode newConnector;
                    var           atom1 = stack.Pop();
                    var           atom2 = stack.Pop();
                    if (atom1.GetType() == typeof(ConnectorNode) &&
                        ((ConnectorNode)atom1).Type == ListOperations[ruleRPN])
                    {
                        ((ConnectorNode)atom1).AddOperand(atom2);
                        newConnector = (ConnectorNode)atom1;
                        Connectors.Pop();
                    }
                    else if (atom2.GetType() == typeof(ConnectorNode) &&
                             ((ConnectorNode)atom2).Type == ListOperations[ruleRPN])
                    {
                        ((ConnectorNode)atom2).AddOperand(atom1);
                        newConnector = (ConnectorNode)atom2;
                        Connectors.Pop();
                    }
                    else
                    {
                        newConnector = new ConnectorNode(ListOperations[ruleRPN]);
                        newConnector.AddOperands(new[] { atom1, atom2 });
                    }

                    Connectors.Push(newConnector);
                    stack.Push(newConnector);
                }
            }

            return(stack.Pop());
        }
Ejemplo n.º 5
0
    //////////////////////////////////////////
    /// THESE NEED TO BE IN A DIFFFERNT SCRIPT
    private void AttachMapPieceToConnectorNode(ConnectorNode connectNode)
    {
        Vector3 nodeVect   = connectNode.nodeLocation;
        int     mapSize    = connectNode.nodeSize;
        int     layerCount = connectNode.nodeLayerCount;
        int     rotation   = connectNode.nodeRotation;
        int     mapType    = connectNode.nodeMapType;
        int     mapPiece   = connectNode.nodeMapPiece;

        _gridBuilder.BuildLocationGrid(connectNode, mapSize);
        List <Vector3> mapPieceNodes = _gridBuilder.GetGridNodePositions();

        _mapPieceBuilder.AttachMapPieceToMapNode(connectNode, mapPieceNodes, layerCount, mapSize, mapType, mapPiece, rotation);
        _locationManager.AddCubeScriptToLocationLookup(_gridBuilder.GetGridLocations()); // needs to be after AttachMapPieceToMapNode
        _mapPieceBuilder.SetPanelsNeighbours();
        //connectNode.mapFloorData = _mapPieceBuilder.GetMapFloorData();
        //connectNode.mapVentData = _mapPieceBuilder.GetMapVentData();
    }
Ejemplo n.º 6
0
        public Project_Loader(TerminalNode startNode, TerminalNode endNode, string filePath)
        {
            this.startNode = startNode;
            this.endNode   = endNode;
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.Load(filePath);

                //doc.Validate(onValidateEnd);
                ConnectorNode con = startNode.OutConnector;

                addBlockNodes(doc.DocumentElement.ChildNodes, startNode, startNode);
                //   foreach (Pair pair in blockNodes)
                //      setAttributes(pair.XmlNode, pair.BaseNode);
            }
            catch (Exception ex) {
            }
        }
Ejemplo n.º 7
0
    //////////////////////////////////////////
    /// THESE NEED TO BE IN A DIFFFERNT SCRIPT
    public void AttachMapToNode <T>(T node) where T : BaseNode
    {
        if (node.thisNodeType == NodeTypes.WorldNode)
        {
            WorldNode worldNode = node as WorldNode;
            AttachMapPiecesToWorldNode(worldNode);
        }

        if (node.thisNodeType == NodeTypes.MapNode)
        {
            MapNode mapNode = node as MapNode;
            AttachMapPieceToMapNode(mapNode);
        }

        if (node.thisNodeType == NodeTypes.ConnectorNode)
        {
            ConnectorNode connectNode = node as ConnectorNode;
            AttachMapPieceToConnectorNode(connectNode);
        }
    }
        private void SetAtomsRelations(ArrayList rules)
        {
            foreach (ExpertSystemRule rule in rules)
            {
                var left  = SetAtomRelationsFromRPN(rule.NpiLeft);
                var right = SetAtomRelationsFromRPN(rule.NpiRight);

                var connectorImply = new ConnectorNode(ConnectorType.IMPLY);
                right.AddChildren(connectorImply);
                connectorImply.AddOperand(left);
                Implication.Add(new ImplicationData(left, right));
                if (rule.Type != ImplicationType.EQUAL)
                {
                    continue;
                }
                var connectorEqual = new ConnectorNode(ConnectorType.IMPLY);
                left.AddChildren(connectorEqual);
                connectorEqual.AddOperand(right);
                Implication.Add(new ImplicationData(right, left));
            }
        }
Ejemplo n.º 9
0
    ////////////////////////////////////////////////
    ////////////////////////////////////////////////

    public static void AttachMapToNode <T>(T node) where T : BaseNode
    {
        if (node.NodeType == NodeTypes.WorldNode)
        {
            WorldNode worldNode = node as WorldNode;
            AttachMapPiecesToWorldNode(worldNode);
        }

        if (node.NodeType == NodeTypes.MapNode)
        {
            MapNode mapNode = node as MapNode;
            AttachMapPieceToMapNode(mapNode);
        }

        if (node.NodeType == NodeTypes.ConnectorNode)
        {
            ConnectorNode connectNode = node as ConnectorNode;
            AttachMapPieceToConnectorNode(connectNode);
        }
        // Debug.Log("AttachMapToNode FINISHED");
    }
Ejemplo n.º 10
0
    ////////////////////////////////////////////////////////////////////////////

    // Create Connector Nodes ////////////////////////////////////////////////
    private Dictionary <WorldNode, List <ConnectorNode> > CreateConnectorNodes(Dictionary <WorldNode, List <KeyValuePair <Vector3, int> > > connectorVects)
    {
        // Wrap map Nodes around around Initial
        Dictionary <WorldNode, List <ConnectorNode> > worldNodeAndConnectorNodes = new Dictionary <WorldNode, List <ConnectorNode> >();

        foreach (WorldNode worldNode in connectorVects.Keys)
        {
            List <ConnectorNode> connectorNodes             = new List <ConnectorNode>();
            List <KeyValuePair <Vector3, int> > vectsAndRot = connectorVects[worldNode];

            foreach (KeyValuePair <Vector3, int> pair in vectsAndRot)
            {
                Vector3 vector   = pair.Key;
                int     rotation = pair.Value;
                int     mapType  = MAPTYPE_CONNECTOR;
                int     mapPiece = 0; // only 1 connector map piece atm for both vertical and horizontal pieces

                ConnectorNode connectorNode = CreateNode <ConnectorNode>(worldNode.gameObject.transform, vector, rotation, mapType, mapPiece, NodeTypes.ConnectorNode);
                _nodeBuilder.AttachCoverToNode(connectorNode, connectorNode.gameObject, CoverTypes.ConnectorCover);
                connectorNode.nodeSize   = 1;
                connectorNode.neighbours = new int[6];
                for (int i = 0; i < connectorNode.neighbours.Length; i++)
                {
                    connectorNode.neighbours[i] = 1;
                }
                connectorNode.worldNodeParent = worldNode;

                connectorNodes.Add(connectorNode);
                if (rotation == 4)
                {
                    connectorNode.connectorUp = true;
                    connectorNode.nodeMapType = MAPTYPE_CONNECTOR_UP;
                }
            }
            worldNode.connectorNodes = connectorNodes;
            worldNodeAndConnectorNodes.Add(worldNode, connectorNodes);


            ///// Connector Neighbours << This is a bit annoying is only using worldnode neighbours atm, might be cool to just use map neighbours instead... something to do
            int[] worldNodeNeighbours = worldNode.neighbours;

            if (worldNode.nodeSize == 1)
            {
                foreach (ConnectorNode connectorNode in worldNode.connectorNodes)
                {
                    int[] connectorNeighbours = connectorNode.neighbours;

                    for (int i = 0; i < worldNodeNeighbours.Length; i++)
                    {
                        if (worldNodeNeighbours[i] != -1)
                        {
                            connectorNeighbours[i] = 1;
                        }
                        else
                        {
                            connectorNeighbours[i] = -1;
                            connectorNode.entranceSides.Add(i);
                        }
                    }
                }
            }
            ////////
        }
        return(worldNodeAndConnectorNodes);
    }
Ejemplo n.º 11
0
    ////////////////////////////////////////////////////////////////////////////



    // Create Connector Nodes ////////////////////////////////////////////////
    public static Dictionary <WorldNode, List <ConnectorNode> > CreateConnectorNodes(Dictionary <WorldNode, List <KeyValuePair <Vector3, int> > > connectorVects)
    {
        // Wrap map Nodes around around Initial
        Dictionary <WorldNode, List <ConnectorNode> > worldNodeAndConnectorNodes = new Dictionary <WorldNode, List <ConnectorNode> >();

        foreach (WorldNode worldNode in connectorVects.Keys)
        {
            List <ConnectorNode> connectorNodes             = new List <ConnectorNode>();
            List <KeyValuePair <Vector3, int> > vectsAndRot = connectorVects[worldNode];

            foreach (KeyValuePair <Vector3, int> pair in vectsAndRot)
            {
                Vector3 vector         = pair.Key;
                int     rotation       = pair.Value;
                int     mapType        = MapSettings.MAPTYPE_CONNECT_FLOOR;
                int     mapPiece       = 0; // only 1 connector map piece atm for both vertical and horizontal pieces
                int     nodeLayerCount = -1;

                ConnectorNode connectorNode = WorldBuilder._nodeBuilder.CreateNode <ConnectorNode>(worldNode.gameObject.transform, vector, rotation, mapType, mapPiece, NodeTypes.ConnectorNode);
                WorldBuilder._nodeBuilder.AttachCoverToNode(connectorNode, connectorNode.gameObject, CoverTypes.ConnectorCover, new Vector3(0, rotation * 90, 0));
                connectorNode.NodeSize   = 1;
                connectorNode.neighbours = new int[6];
                for (int i = 0; i < connectorNode.neighbours.Length; i++)
                {
                    connectorNode.neighbours[i] = 1;
                }
                connectorNode.worldNodeParent = worldNode;

                connectorNodes.Add(connectorNode);

                // Up connector
                if (rotation == 4)
                {
                    connectorNode.connectorUp = true;
                    connectorNode.NodeMapType = MapSettings.MAPTYPE_CONNECT_UP_FLOOR;
                    connectorNode.transform.localEulerAngles = new Vector3(0, rotation * 90, 0);

                    Transform nodeCover = connectorNode.transform.Find("ConnectorCoverPrefab(Clone)");

                    nodeCover.localPosition = new Vector3(0, 0, 0); // to fix annoying vertical connector
                    nodeCover.localScale    = new Vector3(8, 8, 8);
                    nodeCover.Find("Select").transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
                }


                if (worldNode.NodeSize == 1)
                {
                    nodeLayerCount = worldNode.NodeLayerCount + 4;  // 4 total layers in 1 map and vent piece
                }
                else
                {
                    Debug.LogError("something weird here");
                }
                connectorNode.NodeLayerCount = nodeLayerCount;

                LayerManager.AddNodeToLayer(connectorNode); // for camera layers
            }
            worldNode.connectorNodes = connectorNodes;
            worldNodeAndConnectorNodes.Add(worldNode, connectorNodes);


            ///// Connector Neighbours << This is a bit annoying is only using worldnode neighbours atm, might be cool to just use map neighbours instead... something to do
            int[] worldNodeNeighbours = worldNode.neighbours;

            if (worldNode.NodeSize == 1)
            {
                foreach (ConnectorNode connectorNode in worldNode.connectorNodes)
                {
                    int[] connectorNeighbours = connectorNode.neighbours;

                    for (int i = 0; i < worldNodeNeighbours.Length; i++)
                    {
                        if (worldNodeNeighbours[i] != -1)
                        {
                            connectorNeighbours[i] = 1;
                        }
                        else
                        {
                            connectorNeighbours[i] = -1;
                            //connectorNode.entranceSides.Add(i);
                        }
                    }
                }
            }
            ////////
        }
        return(worldNodeAndConnectorNodes);
    }