Exemplo n.º 1
0
    private void makePath(GameObject PathGameObject, Graph g, List <string> path)
    {
        // Generate Node Elements for path
        GameObject NodeGameObject = PathGameObject.transform.GetChild(0).gameObject;
        bool       isFirst        = true;
        Vector3    nodePos;

        //UnityEngine.Debug.Log("Size: " + path.Count);
        foreach (string nodeID in path)
        {
            Graph.Node node = g.nodeIdNodeDict[nodeID];
            Vector2d   xy   = world.toXY(node.lat, node.lon);
            nodePos = new Vector3((float)xy[0], 0.71f, (float)xy[1]);

            if (isFirst)
            {
                NodeGameObject.transform.position = (nodePos);
                isFirst = false;
            }
            else
            {
                GameObject childObject = Instantiate(NodeGameObject) as GameObject;
                childObject.transform.position = (nodePos);
                childObject.transform.SetParent(PathGameObject.transform);
            }
        }
    }
    void Start()
    {
        Graph upperTerrain      = new Graph(xNumOfNodes, zNumOfNodes);                                              //models the part of terrain where we are going to generate an unicursal path.
        Stack <Graph.Node> path = upperTerrain.makeUnicursal(xNumOfNodes / 2, 0, xNumOfNodes / 2, zNumOfNodes - 1); //make a path that starts and end at middle in x-direction

        numberOfAvailableNodeTiles   = path.Count;
        desiredProjectileSourceProba = (8f / path.Count) * 1.25f; //we want at least 8 projectile sources to appear, so the probability should be a bit over 8/totalTiles.
        Vector3 prevTilePos = new Vector3(0, 0, 0);               //needed to paint the link tile between two nodes
        Boolean firstPass   = true;

        while (path.Count > 0)                           //visit the nodes in the path stack one by one
        {
            Graph.Node cur             = path.Pop();     //pop the top node
            Vector3    currentPosition = paintNode(cur); //paint it in the terrain
            if (firstPass)
            {
                firstPass = false;
            }
            else
            {
                paintEdge(prevTilePos, currentPosition); //paint the link between the previous and current node
            }
            prevTilePos = currentPosition;
        }
        projectileSourceController.GetComponent <ProjectileSourceCtrl>().setTotalNumberOfProjSourceUncollected(numOfProjectileSourceCreated);
        //let the projectile source controller know about the total number of projectile sources that we have created.
    }
Exemplo n.º 3
0
    // Update is called once per frame
    void Update()
    {
        float distToPlayer = Vector3.Distance(transform.position, player.transform.position);

        if (alert || distToPlayer < chaseRadius)
        {
            transform.LookAt(player.transform.position);
            transform.position = Vector3.MoveTowards(transform.position, player.transform.position, chaseSpeed * Time.deltaTime);
            if (distToPlayer < fireRange && loaded)
            {
                StartCoroutine(Fire());
            }
        }
        else
        {
            transform.LookAt(target.m_position);
            transform.position = Vector3.MoveTowards(transform.position, target.m_position, patrolSpeed * Time.deltaTime);
            float distToTarget = Vector3.Distance(transform.position, target.m_position);
            if (distToTarget < 1.0f)
            {
                target = target.m_nextNode;
            }
        }

        //SceneMode allows you to view each patrolbot's route in it's own specific colour
        foreach (Graph.Node node in route.GetRoute())
        {
            Debug.DrawLine(node.m_position, node.m_nextNode.m_position, color);
        }
    }
Exemplo n.º 4
0
        static void TestGraph()
        {
            var graph = new Graph <int>();
            var node0 = new Graph.Node <int>(0);
            var node1 = new Graph.Node <int>(1);
            var node2 = new Graph.Node <int>(2);
            var node3 = new Graph.Node <int>(3);
            var node4 = new Graph.Node <int>(4);
            var node5 = new Graph.Node <int>(5);

            node0.AddEdge(node1);
            node1.AddEdge(node3);
            node1.AddEdge(node2);
            node5.AddEdge(node4);
            node2.AddEdge(node5);

            graph.AddNode(node0);
            graph.AddNode(node1);
            graph.AddNode(node2);
            graph.AddNode(node3);
            graph.AddNode(node4);
            graph.AddNode(node5);

            graph.BFS(node1);
            Console.WriteLine();
            graph.DFS(node1);

            //Console.WriteLine("Before removing node 1: ");
            //Console.WriteLine(graph.ToString());
            //graph.RemoveNode(node1);
            //Console.WriteLine("--------------------");
            //Console.WriteLine("After removing node 1: ");
            //Console.WriteLine(graph.ToString());
        }
Exemplo n.º 5
0
    void Traverse(Graph.Node node)
    {
        // Visit the node
        visitedVertices.Add(node);

        // Fisher-Yates Shuffle to randomize edge indices, this approach allows easy looping recursion with randomization
        // Can handle almost 5 times as many vertices as a non-looped recursion!
        Shuffle(node.Edges);

        foreach (Graph.Edge edge in node.Edges)
        {
            // If either node on the edge is unvisited, then Traverse to it. Otherwise fall through and return to previous recursive layer
            if (!visitedVertices.Contains(edge.Node_f) || !visitedVertices.Contains(edge.Node_s))
            {
                // When generating at runtime, use Destroy(). When generating in EditMode use DestroyImmediate()
                if (Application.isPlaying)
                {
                    Object.Destroy(edge.Wall);
                    edge.Wall = null;
                }
                else
                {
                    Object.DestroyImmediate(edge.Wall);
                    edge.Wall = null;
                }

                // Ternary Conditional operator to pass the unvisited node
                Traverse(visitedVertices.Contains(edge.Node_s) ? edge.Node_f : edge.Node_s);
            }
        }
    }
        public ArrayList[] getGraphPaths(int citiesNumber, int pathsCount, ArrayList[] list)
        {
            string[] lineSplit;
            int      source     = 0;
            int      dest       = 0;
            int      count      = 0;
            int      pathLength = 0;

            for (int i = 0; i < pathsCount; i++)
            {
                lineSplit  = fileStream.ReadLine().Split(' ');
                source     = int.Parse(lineSplit[0]);
                dest       = int.Parse(lineSplit[1]);
                pathLength = int.Parse(lineSplit[2]);
                Node n  = new Node((dest - 1), pathLength);
                Node n1 = new Graph.Node((source - 1), pathLength);
                if (pathLength < 0)
                {
                    throw new Exception("Distance can`t be less than 0");
                }
                else
                {
                    list[source - 1].Add(n);
                    list[dest - 1].Add(n1);
                    count++;
                }
            }
            return(list);
        }
Exemplo n.º 7
0
    /// <summary>
    /// Generates a new path for the player based on the path provided
    /// If it is a new round then all AI car paths will be reset too
    /// </summary>
    /// <param name="path">List of all node IDs for the player to use as a path</param>
    /// <param name="newRound">Boolean indicating whether the path is being made for a new round</param>
    /// <param name="newCurrentNode">Integer indicating which is the next current node (used for changing existing paths)</param>
    public void makePath(List <string> path, bool newRound = true, int newCurrentNode = 0)
    {
        // Generate Node Elements for path
        GameObject NodeGameObject = PathGameObject.transform.GetChild(0).gameObject;
        bool       isFirst        = true;
        Vector3    nodePos;

        foreach (string nodeID in path)
        {
            Graph.Node node = g.nodeIdNodeDict[nodeID];
            Vector2d   xy   = world.toXY(node.lat, node.lon);
            nodePos = new Vector3((float)xy[0], 0.71f, (float)xy[1]);

            if (isFirst)
            {
                NodeGameObject.transform.position = (nodePos);
                isFirst = false;
            }
            else
            {
                GameObject childObject = Instantiate(NodeGameObject) as GameObject;
                childObject.transform.position = (nodePos);
                childObject.transform.SetParent(PathGameObject.transform);
            }
        }

        av = GetComponentInChildren <AVController>();
        av.setPath(path);
        av.currentNode = newCurrentNode;
        av.resetPaths(newRound);
        av.setOneWayRoads(path);
    }
Exemplo n.º 8
0
    /// <summary>
    /// Create list of one way roads, with index matching up with currentNode travelling towards
    /// </summary>
    /// <param name="pathNodes">List of all nodes on the car's path</param>
    /// <returns>Whether the next road is oneway</returns>
    public Vector3 setOneWayRoads(List <string> pathNodes)
    {
        oneWays = new List <bool>();
        oneWays.Add(false); // travelling to node 0, shouldnt occur
        for (int i = 1; i < pathNodes.Count; i++)
        {
            String     currNode = pathNodes[i];
            String     prevNode = pathNodes[i - 1];
            Graph.Node n        = g.nodeIdNodeDict[prevNode];
            List <Graph.Node.Neighbour> neighbours = n.neighbours;

            // check if the path from prevNode to currNode is one way
            foreach (Graph.Node.Neighbour neighbour in neighbours)
            {
                if (neighbour.neighbourId == currNode)
                {
                    oneWays.Add(neighbour.isOneWay);
                    break;
                }
            }
        }

        if (oneWays[1])
        {
            return(new Vector3(0, 0, 0));
        }
        else
        {
            drivingOffset = leftSideOffset;
            return(new Vector3(-drivingOffset, 0, 0));
        }
    }
Exemplo n.º 9
0
    void GeneratePillarFill()
    {
        int xJunctions = (int)(l.graphScale.x - l.cellSize * 2) / 2;
        int zJunctions = (int)(l.graphScale.z - l.cellSize * 2) / 2;

        for (int x = -xJunctions; x <= xJunctions; x += (int)l.cellSize)
        {
            for (int z = -zJunctions; z <= zJunctions; z += (int)l.cellSize)
            {
                GameObject pillar = Object.Instantiate(l.wall, labyrinth.transform);

                pillar.transform.localPosition = new Vector3(x, l.cellSize / 2, z);
                pillar.transform.localScale    = new Vector3(wallThickness, l.cellSize * wallYScale, wallThickness);
                pillar.transform.rotation      = Quaternion.identity;

                AddFillerPillar(pillar);
            }
        }

        void AddFillerPillar(GameObject pillarObj)
        {
            Filler_Pillar pillar = new Filler_Pillar(pillarObj);

            Graph.Node root = l.Graph.Nodes.Find(n => n.CellCenter == new Vector3(pillarObj.transform.position.x - l.cellSize / 2,
                                                                                  pillarObj.transform.position.y - l.cellSize / 2,
                                                                                  pillarObj.transform.position.z - l.cellSize / 2));

            pillar.PopulateEdges(l.Graph.GetRectEdges(root, 2, 2, l.cellSize));

            l.fillerPillars.Add(pillar);
        }
    }
Exemplo n.º 10
0
    /// <summary>
    /// Gets the priority of the next segment of road where vehicles on lower priority roads will need to give way to vehicles on higher priority roads
    ///
    /// lowest prioirty
    /// 1 - one way E-W
    /// 2 - one way N-S
    /// 3 - two way E-W
    /// 4 - two way N-S
    /// </summary>
    /// <returns>The priority of the next segment of road to travel</returns>
    private void getBearingAndPriority()
    {
        if (currentNode >= pathList.Count - 2 || currentNode == 0)
        {
            roadPriority = 5;
            return;
        }

        Graph.Node currNode = g.nodeIdNodeDict[pathList[currentNode]];
        Graph.Node prevNode = g.nodeIdNodeDict[pathList[currentNode - 1]];

        double startLat = prevNode.lat;
        double startLon = prevNode.lon;
        double endLat   = currNode.lat;
        double endLon   = currNode.lon;

        startLat = startLat * Math.PI / 180;
        startLon = startLon * Math.PI / 180;
        endLat   = endLat * Math.PI / 180;
        endLon   = endLon * Math.PI / 180;

        double x     = Math.Sin(endLon - startLon) * Math.Cos(endLat);
        double y     = Math.Cos(startLat) * Math.Sin(endLat) - Math.Sin(startLat) * Math.Cos(endLat) * Math.Cos(endLat - startLat);
        double theta = Math.Atan2(y, x);
        double brng  = (theta * 180 / Math.PI + 360) % 360;

        if (brng == 0)
        {
            brng = 360;
        }

        if (brng >= 315 || brng < 45)
        {
            currentBearing = bearing.north;
        }
        else if (brng >= 45 && brng < 135)
        {
            currentBearing = bearing.east;
        }
        else if (brng >= 135 && brng < 225)
        {
            currentBearing = bearing.south;
        }
        else
        {
            currentBearing = bearing.west;
        }

        bool isOneWay = onOneWay();

        if (currentBearing == bearing.east || currentBearing == bearing.west)
        {
            roadPriority = isOneWay ? 1 : 3;
        }
        else
        {
            roadPriority = isOneWay ? 2 : 5;
        }
    }
Exemplo n.º 11
0
 public void Begin(Graph.Node graph)
 {
     if (Ongoing)
     {
         return;
     }
     from = graph;
 }
    public IEnumerator getGraphFromNode(string title)
    {
        Debug.Log("reached getGraphFromNode");
        yield return(StartCoroutine(parseContentFromHTML(title)));

        Graph graph = new Graph();

        Graph.Information info      = new Graph.Information(title);
        Graph.Node        firstNode = new Graph.Node(info);
        firstNode.setPosition(0.0f, 0.0f, 0.0f);
        graph.addNode(firstNode);


        //we assume that we don't go deeper here.
        //another approach would be to go the same route as Coroutine "getGraph"
        //we use this approach here because it's easier to implement and unterstand
        //plus the depth is unlikely to go deeper
        if (activeNode.getSubchapters() != null)
        {
            foreach (Graph.Information.Chapter subChapter in activeNode.getSubchapters())
            {
                Graph.Information neighborInfo = new Graph.Information(subChapter.getTitle());
                Graph.Node        nextNode     = new Graph.Node(neighborInfo);
                nextNode.setPosition(Random.Range(-DEFAULT_WIDTH / 2, DEFAULT_WIDTH / 2), Random.Range(-DEFAULT_HEIGHT / 2, DEFAULT_HEIGHT / 2), Random.Range(-DEFAULT_LENGTH / 2, DEFAULT_LENGTH / 2));
                Graph.Edge nextedge = new Graph.Edge(firstNode, nextNode);
                graph.addNode(nextNode);
                graph.addEdge(nextedge);

                if (subChapter.getSubchapters() != null)
                {
                    foreach (Graph.Information.Chapter subSubChapter in subChapter.getSubchapters())
                    {
                        Graph.Information subNeighborInfo = new Graph.Information(subSubChapter.getTitle());
                        Graph.Node        subNextNode     = new Graph.Node(subNeighborInfo);
                        subNextNode.setPosition(Random.Range(-DEFAULT_WIDTH / 2, DEFAULT_WIDTH / 2), Random.Range(-DEFAULT_HEIGHT / 2, DEFAULT_HEIGHT / 2), Random.Range(-DEFAULT_LENGTH / 2, DEFAULT_LENGTH / 2));
                        Graph.Edge subNextedge = new Graph.Edge(nextNode, subNextNode);
                        graph.addNode(subNextNode);
                        graph.addEdge(subNextedge);
                        if (subSubChapter.getSubchapters() != null)
                        {
                            foreach (Graph.Information.Chapter subSubSubChapter in subChapter.getSubchapters())
                            {
                                Graph.Information subSubNeighborInfo = new Graph.Information(subSubChapter.getTitle());
                                Graph.Node        subSubNextNode     = new Graph.Node(subSubNeighborInfo);
                                subSubNextNode.setPosition(Random.Range(-DEFAULT_WIDTH / 2, DEFAULT_WIDTH / 2), Random.Range(-DEFAULT_HEIGHT / 2, DEFAULT_HEIGHT / 2), Random.Range(-DEFAULT_LENGTH / 2, DEFAULT_LENGTH / 2));
                                Graph.Edge subSubNextedge = new Graph.Edge(subNextNode, subSubNextNode);

                                graph.addNode(subSubNextNode);
                                graph.addEdge(subSubNextedge);
                            }
                        }
                    }
                }
            }
        }
        setGraph(graph, 100.0f, 100.0f, 100.0f);
        drawGraph();
    }
Exemplo n.º 13
0
        private Dictionary <string, Graph.Node> CreateGraph()
        {
            Graph.Node nodeA = new Graph.Node();
            Graph.Node nodeB = new Graph.Node();
            Graph.Node nodeC = new Graph.Node();
            Graph.Node nodeD = new Graph.Node();
            Graph.Node nodeE = new Graph.Node();
            Graph.Node nodeF = new Graph.Node();
            Graph.Node nodeG = new Graph.Node();
            Graph.Node nodeH = new Graph.Node();
            Graph.Node nodeI = new Graph.Node();
            Graph.Node nodeJ = new Graph.Node();
            Graph.Node nodeK = new Graph.Node();

            nodeA.AddNeighbor(6, nodeB);
            nodeA.AddNeighbor(2, nodeC);
            nodeA.AddNeighbor(7, nodeJ);

            nodeB.AddNeighbor(6, nodeA);
            nodeB.AddNeighbor(1, nodeD);
            nodeB.AddNeighbor(4, nodeE);

            nodeC.AddNeighbor(2, nodeA);
            nodeC.AddNeighbor(8, nodeE);
            nodeC.AddNeighbor(5, nodeH);

            nodeD.AddNeighbor(1, nodeB);
            nodeD.AddNeighbor(7, nodeE);
            nodeD.AddNeighbor(3, nodeF);

            nodeE.AddNeighbor(4, nodeB);
            nodeE.AddNeighbor(8, nodeC);
            nodeE.AddNeighbor(7, nodeD);
            nodeE.AddNeighbor(5, nodeH);
            nodeE.AddNeighbor(9, nodeG);

            nodeF.AddNeighbor(3, nodeD);

            nodeG.AddNeighbor(9, nodeE);
            nodeG.AddNeighbor(6, nodeH);

            nodeH.AddNeighbor(4, nodeJ);
            nodeH.AddNeighbor(5, nodeC);
            nodeH.AddNeighbor(6, nodeG);
            nodeH.AddNeighbor(5, nodeE);
            nodeH.AddNeighbor(7, nodeI);

            nodeI.AddNeighbor(7, nodeH);

            nodeJ.AddNeighbor(4, nodeH);
            nodeJ.AddNeighbor(7, nodeA);
            return(new Dictionary <string, Graph.Node>()
            {
                { "a", nodeA }, { "b", nodeB }, { "c", nodeC }, { "d", nodeD }, { "e", nodeE },
                { "f", nodeF }, { "g", nodeG }, { "h", nodeH }, { "i", nodeI }, { "j", nodeJ },
                { "k", nodeK }
            });
        }
Exemplo n.º 14
0
 public Vector2 ExitToWorldPos(Graph.Node exit)
 {
     if (exit == null)
     {
         return(Vector2.one * -1);
     }
     Graph.Node parent = Rooms.FindNodeByValue(exit.value);
     return(parent.pos + exit.pos.Clamp01() * parent.size);
 }
Exemplo n.º 15
0
        private void DrawExit(Graph.Node exit, Color color)
        {
            Vector2 p = ExitToScreenPos(exit), s = ScreenSize(exit.size);
            bool    isConnectFrom = exit.Equals(connectExits.from);

            EditorGUI.DrawRect(new Rect(p, s), isConnectFrom ? HighlightColor : color);
            DrawOutline(ExitToScreenPos(exit), s, 2, Color.black, default);

            DrawConnectionPanel(connectExits, exit, ExitToScreenPos, "o", EXIT_MENU_POS);
        }
Exemplo n.º 16
0
    IEnumerator stepMovement(float objectSpeed)
    {
        Graph.Node start = movementPath.Dequeue();
        Graph.Node end   = movementPath.Peek();
        actualNodeNumber = end.number;
        obj.GetComponent <SpriteRenderer>().sortingOrder = start.getZIndex(end);
        int sign = System.Math.Sign(end.coordinates.x - start.coordinates.x) >= 0? 1: -1;

        transform.localScale = new Vector3(System.Math.Abs(transform.localScale.x) * sign, transform.localScale.y, transform.localScale.z);
        yield return(StartCoroutine(MoveObject(transform, start, end, objectSpeed)));
    }
Exemplo n.º 17
0
    IEnumerator MoveObject(Transform thisTransform, Graph.Node start, Graph.Node end, float time)
    {
        var i    = 0.0f;
        var rate = 1.0f / time;

        while (i < 1.0f)
        {
            i += Time.deltaTime * rate;
            transform.position = Vector3.Lerp(start.coordinates, end.coordinates, i);
            yield return(null);
        }
    }
Exemplo n.º 18
0
 public void Toggle(Graph.Node node)
 {
     if (!Ongoing)
     {
         Begin(node);
     }
     else
     {
         graph.ToggleConnection(from, node);
         End();
     }
 }
Exemplo n.º 19
0
    // Start is called before the first frame update


    void Start()
    {
        Graph mazeGraph = new Graph(5, 5); //create a graph that represents the maze we're making

        Graph.Node[,] maze = mazeGraph.makeUST();

        /*//for debug below
        *  Graph.Node[,] maze = new Graph.Node[5,5];
        *  for(int i=0;i<5; i++)
        *  {
        *   for (int j=0;j<5;j++)
        *   {
        *       maze[i, j] = new Graph.Node(i, j);
        *       if(i!=4) maze[i, j].rightEdge = true;
        *       if(j!=4) maze[i, j].upEdge = true;
        *   }
        *  }
        *
        *  //for debug above*/
        GameObject[,] tiles = new GameObject[maze.GetLength(0), maze.GetLength(1)]; //make an array of maze tiles, their indeices correponding to the maze matrix.
        for (int i = 0; i < maze.GetLength(0); i++)                                 //create the maze, initializing only the heart
        {
            float tilePosX = mazeLeftLimit + i * (completeTileSideLength + gapBetweenTile) + (0.5f) * completeTileSideLength;
            for (int j = 0; j < maze.GetLength(1); j++)
            {
                float   tilePosZ = mazeSouthLimit + j * (completeTileSideLength + gapBetweenTile) + (0.5f) * completeTileSideLength;
                Vector3 location = new Vector3(tilePosX, yOffset, tilePosZ);
                tiles[i, j] = Instantiate(completeTile, location, completeTile.transform.rotation);
            }
        }

        for (int i = 0; i < tiles.GetLength(0); i++)
        {
            for (int j = 0; j < tiles.GetLength(1); j++)
            {
                GameObject thisTile = tiles[i, j];                                                          //thisTile and thisNode are corresponding
                Graph.Node thisNode = maze[i, j];
                if (thisNode.rightEdge)                                                                     //if this node has a right edge
                {
                    thisTile.transform.GetChild((int)TileChildren.EAST).gameObject.SetActive(true);         //activate the right extension of this tile
                    tiles[i + 1, j].transform.GetChild((int)TileChildren.WEST).gameObject.SetActive(true);  //activate the left extension of the game object on the right side
                }
                if (thisNode.upEdge)                                                                        //if this node has an up (north) edge
                {
                    thisTile.transform.GetChild((int)TileChildren.NORTH).gameObject.SetActive(true);        //activate the up extension of this tile
                    tiles[i, j + 1].transform.GetChild((int)TileChildren.SOUTH).gameObject.SetActive(true); //activate the south extension of the tile to the north
                    //this would not cause out of bound since there wouldn't be an edge in that direction to start with
                }
            }
        }
        mazeController.GetComponent <MazeControl>().initialize(tiles); //initialize the maze controller who will keep track of whether the maze is still solvable
    }
Exemplo n.º 20
0
        public void TestPath1()
        {
            Dictionary <string, Graph.Node> graphMap = CreateGraph();

            Graph.Node srcNode           = graphMap["a"];
            Graph.Node destNode          = graphMap["g"];
            LinkedList <Graph.Edge> path = Graph.PathFinder.AStarSearch(srcNode, destNode);

            AssertPathResult(
                new Dictionary <double, Graph.Node>()
            {
                { 0, graphMap["a"] }, { 2, graphMap["c"] }, { 5, graphMap["h"] }, { 6, graphMap["g"] }
            }, path);
        }
Exemplo n.º 21
0
        public IActionResult AddNode([FromBody] Graph.Node node)
        {
            try
            {
                Startup.MainGraph.AddNode(node);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                return(StatusCode(500));
            }

            return(NoContent());
        }
Exemplo n.º 22
0
        public void GetNodeTestInvalid()
        {
            // Arrange
            Graph testGraph = new Graph();

            testGraph.AddNode(1, new Graph.Node(1, "spin"));
            Graph.Node expected = null;

            // Act
            var actual = testGraph.GetNode(2);

            // Assert
            Assert.AreEqual(expected, actual);
        }
Exemplo n.º 23
0
        public void TestPath3()
        {
            Dictionary <string, Graph.Node> graphMap = CreateGraph();

            Graph.Node srcNode           = graphMap["i"];
            Graph.Node destNode          = graphMap["f"];
            LinkedList <Graph.Edge> path = Graph.PathFinder.AStarSearch(srcNode, destNode);

            AssertPathResult(
                new Dictionary <double, Graph.Node>()
            {
                { 0, graphMap["i"] }, { 7, graphMap["h"] }, { 5, graphMap["e"] }, { 4, graphMap["b"] }, { 1, graphMap["d"] }, { 3, graphMap["f"] }
            }, path);
        }
Exemplo n.º 24
0
    /// <summary>
    /// Determines if a node is an intersection 
    /// currently defining intersection as node with multiple neighbours 
    /// @TODO merging when turning left onto one way main road or roundabout
    /// </summary>
    /// <param name="nodeID">The Node Id of the node to check</param>
    /// <returns>True if the node is an intersection</returns>
    private bool isIntersection(string nodeID)
    {
        Graph.Node node = g.nodeIdNodeDict[nodeID];
        if (node.neighbours.Count > 2)
        {
            return true;
        }
        else if (node.neighbours.Count == 2 && node.neighbours[0].isOneWay)
        {
            return true;
        }

        return false;
    }
    /// <summary>
    /// Calculates the direction of a novel fromNode toNode pair where:
    ///     0 --> North
    ///     1 --> East
    ///     2 --> South
    ///     3 --> West
    /// </summary>
    /// <param name="fromNode">String representing the first node</param>
    /// <param name="toNode">String representing the second node</param>
    /// <returns>Integer indicating directionality</returns>
    private int calcBearing(string fromNode, string toNode)
    {
        // Load node info
        Graph.Node startNode = g.nodeIdNodeDict[fromNode];
        double[]   start     = new double[2];
        start[0] = startNode.lat * Math.PI / 180;
        start[1] = startNode.lon * Math.PI / 180;

        Graph.Node endNode = g.nodeIdNodeDict[toNode];
        double[]   end     = new double[2];
        end[0] = endNode.lat * Math.PI / 180;
        end[1] = endNode.lon * Math.PI / 180;

        // Calculate the bearing
        double x     = Math.Sin(end[1] - start[1]) * Math.Cos(end[0]);
        double y     = Math.Cos(start[0]) * Math.Sin(end[0]) - Math.Sin(start[0]) * Math.Cos(end[0]) * Math.Cos(end[1] - start[1]);
        double theta = Math.Atan2(y, x);
        double brng  = (theta * 180 / Math.PI + 360) % 360;

        //UnityEngine.Debug.Log("brng: " + brng);

        // Calculate the direction
        int direction = -1;

        if (brng >= 315 || brng < 45)
        {
            // North
            direction = 0;
        }
        else if (brng >= 45 && brng < 135)
        {
            // East
            direction = 1;
        }
        else if (brng >= 135 && brng < 225)
        {
            // South
            direction = 2;
        }
        else
        {
            // West
            direction = 3;
        }

        // Make traffic light object appear
        createTrafficLightObject(fromNode, toNode, direction);

        return(direction);
    }
    // Start is called before the first frame update
    void Start()
    {
        color = new Color(Random.Range(0, 255), Random.Range(0, 255), Random.Range(0, 255), 100);
        body.GetComponent <MeshRenderer>().material.color = color;
        head.GetComponent <MeshRenderer>().material.color = color;

        //Constructs it's patrol route randomly between all existing waypoints
        List <GameObject> waypointList = new List <GameObject>();

        waypointList.AddRange(GameObject.FindGameObjectsWithTag("Waypoint"));
        route = new Graph(waypointList);

        //Starts with a randomly selected node in the patrol route
        target = route.RandomTarget();
    }
Exemplo n.º 27
0
        private void AssertPathResult(Dictionary <double, Graph.Node> expectedPath, LinkedList <Graph.Edge> path)
        {
            Assert.AreEqual(expectedPath.Count, path.Count);
            LinkedListNode <Graph.Edge> edge = path.First;

            foreach (KeyValuePair <double, Graph.Node> entry in expectedPath)
            {
                double     expectedWeight = entry.Key;
                Graph.Node expectedNode   = entry.Value;

                Assert.AreEqual(expectedWeight, edge.Value.Weight);
                Assert.AreEqual(expectedNode, edge.Value.Node);

                edge = edge.Next;
            }
        }
Exemplo n.º 28
0
 private void graphNodes_SelectedIndexChanged(object sender, EventArgs e)
 {
     graphEdges.Items.Clear();
     Graph.Node current = null;
     foreach (Graph.Node N in demoGraph.nodes)
     {
         if (N.name == graphNodes.SelectedItem.ToString())
         {
             current = N;
         }
     }
     foreach (Graph.Arrow N in current.edges)
     {
         graphEdges.Items.Add(N.target.name + " (" + N.weight + ")");
     }
 }
Exemplo n.º 29
0
        private void DrawConnectionPanel(ConnectionManager connect, Graph.Node node, Func <Graph.Node, Vector2> toScreenPosFunc, string symbol, Vector2 posOffset)
        {
            if (ConnectedWithOngoing(connect, node))
            {
                symbol = "x";
            }

            Vector2 p = toScreenPosFunc == null ? node.pos : toScreenPosFunc(node);

            if (!connect.Ongoing ? Rooms.AnySelected(node.value) : (connect.from.value != node.value))
            {
                if (GUI.Button(new Rect(p + posOffset, Vector2.one * 20), symbol))
                {
                    CommitConnection(connect, node);
                }
            }
        }
Exemplo n.º 30
0
    /// <summary>
    /// Gets the priority of the next segment of road where vehicles on lower priority roads will need to give way to vehicles on higher priority roads
    /// 
    /// lowest prioirty 
    /// 1 - one way E-W
    /// 2 - one way N-S
    /// 3 - two way E-W
    /// 4 - two way N-S
    /// </summary>
    /// <returns>The priority of the next segment of road to travel</returns>
    private int getPriority()
    {
        if (currentNode >= pathList.Count - 2 || currentNode == 0)
        {
            return 5;
        }

        Graph.Node currNode = g.nodeIdNodeDict[pathList[currentNode]];
        Graph.Node prevNode = g.nodeIdNodeDict[pathList[currentNode -1]];

        double startLat = prevNode.lat;
        double startLon = prevNode.lon;
        double endLat = currNode.lat;
        double endLon = currNode.lon;
        startLat = startLat * Math.PI/180;
        startLon = startLon * Math.PI/180;
        endLat = endLat * Math.PI/180;
        endLon = endLon * Math.PI/180;
        double x = Math.Sin(endLon-startLon) * Math.Cos(endLat);
        double y = Math.Cos(startLat)*Math.Sin(endLat) - Math.Sin(startLat)*Math.Cos(endLat)*Math.Cos(endLat-startLat);
        double theta = Math.Atan2(y,x);
        double brng = (theta*180/Math.PI + 360) % 360;
        if (brng == 0) 
        {
            brng = 360;
        }

        if (onOneWay())
        {
            // if E-W
            if (brng > 45 && brng < 135 || brng > 225 && brng < 315)
            {
                return 1;
            }
            return 2;
        }
        else 
        {
            // if E-W
            if (brng > 45 && brng < 135 || brng > 225 && brng < 315)
            {
                return 3;
            }
            return 4;
        }
    }
Exemplo n.º 31
0
    public override void initialize()
    {
        _liveObjectsNodes = new List<Graph.Node>();
        //PIANO 0 - STANZA 0
        _liveObjectsNodes.Add(new Graph.Node(  0,  0, new Vector2(-12.50f, -4.10f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node(  1,  0, new Vector2(-12.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  2,  0, new Vector2(-11.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  3,  0, new Vector2(-11.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  4,  0, new Vector2(-10.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  5,  0, new Vector2(-10.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  6,  0, new Vector2(-09.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  7,  0, new Vector2(-09.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  8,  0, new Vector2(-08.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(  9,  0, new Vector2(-08.00f, -4.10f), Graph.Node.Type.Main));

        //PIANO 0 - STANZA 1
        _liveObjectsNodes.Add(new Graph.Node( 10,  1, new Vector2(-07.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 11,  1, new Vector2(-07.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 12,  1, new Vector2(-06.30f, -4.10f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node( 13,  1, new Vector2(-06.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 14,  1, new Vector2(-05.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 15,  1, new Vector2(-05.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 16,  1, new Vector2(-04.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 17,  1, new Vector2(-04.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 18,  1, new Vector2(-03.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 19,  1, new Vector2(-03.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 20,  1, new Vector2(-02.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 21,  1, new Vector2(-02.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 22,  1, new Vector2(-01.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 23,  1, new Vector2(-01.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 24,  1, new Vector2(-00.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 25,  1, new Vector2( 00.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 26,  1, new Vector2( 00.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 27,  1, new Vector2( 01.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 28,  1, new Vector2( 01.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 29,  1, new Vector2( 02.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 30,  1, new Vector2( 02.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 31,  1, new Vector2( 03.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 32,  1, new Vector2( 03.50f, -4.10f), Graph.Node.Type.Main));

        //PIANO 0 - STANZA 2
        _liveObjectsNodes.Add(new Graph.Node( 33,  2, new Vector2( 04.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 34,  2, new Vector2( 04.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 35,  2, new Vector2( 05.00f, -4.10f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node( 36,  2, new Vector2( 05.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 37,  2, new Vector2( 06.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 38,  2, new Vector2( 06.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 39,  2, new Vector2( 07.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 40,  2, new Vector2( 07.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 41,  2, new Vector2( 08.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 42,  2, new Vector2( 08.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 43,  2, new Vector2( 09.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 44,  2, new Vector2( 09.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 45,  2, new Vector2( 10.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 46,  2, new Vector2( 10.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 47,  2, new Vector2( 11.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 48,  2, new Vector2( 11.50f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 49,  2, new Vector2( 12.00f, -4.10f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 50,  2, new Vector2( 12.50f, -4.10f), Graph.Node.Type.Main));

        //PIANO 1 - STANZA 3
        _liveObjectsNodes.Add(new Graph.Node( 51,  3, new Vector2(-12.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 52,  3, new Vector2(-12.00f, -0.05f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node( 53,  3, new Vector2(-11.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 54,  3, new Vector2(-11.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 55,  3, new Vector2(-10.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 56,  3, new Vector2(-10.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 57,  3, new Vector2(-09.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 58,  3, new Vector2(-09.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 59,  3, new Vector2(-08.50f, -0.05f), Graph.Node.Type.Main));

        //PIANO 1 - STANZA 4
        _liveObjectsNodes.Add(new Graph.Node( 60,  4, new Vector2(-08.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 61,  4, new Vector2(-07.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 62,  4, new Vector2(-07.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 63,  4, new Vector2(-06.50f, -0.05f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node( 64,  4, new Vector2(-06.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 65,  4, new Vector2(-05.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 66,  4, new Vector2(-05.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 67,  4, new Vector2(-04.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 68,  4, new Vector2(-04.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 69,  4, new Vector2(-03.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 70,  4, new Vector2(-03.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 71,  4, new Vector2(-02.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 72,  4, new Vector2(-02.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 73,  4, new Vector2(-01.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 74,  4, new Vector2(-01.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 75,  4, new Vector2(-00.50f, -0.05f), Graph.Node.Type.Main));

        //PIANO 1 - STANZA 5
        _liveObjectsNodes.Add(new Graph.Node( 76,  5, new Vector2( 00.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 77,  5, new Vector2( 00.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 78,  5, new Vector2( 01.00f, -0.05f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node( 79,  5, new Vector2( 01.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 80,  5, new Vector2( 02.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 81,  5, new Vector2( 02.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 82,  5, new Vector2( 03.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 83,  5, new Vector2( 03.50f, -0.05f), Graph.Node.Type.Main));

        //PIANO 1 - STANZA  6
        _liveObjectsNodes.Add(new Graph.Node( 84,  6, new Vector2( 04.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 85,  6, new Vector2( 04.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 86,  6, new Vector2( 05.00f, -0.05f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node( 87,  6, new Vector2( 05.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 88,  6, new Vector2( 06.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 89,  6, new Vector2( 06.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 90,  6, new Vector2( 07.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 91,  6, new Vector2( 07.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 92,  6, new Vector2( 08.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 93,  6, new Vector2( 08.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 94,  6, new Vector2( 09.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 95,  6, new Vector2( 09.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 96,  6, new Vector2( 10.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 97,  6, new Vector2( 10.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 98,  6, new Vector2( 11.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node( 99,  6, new Vector2( 11.50f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(100,  6, new Vector2( 12.00f, -0.05f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(101,  6, new Vector2( 12.50f, -0.05f), Graph.Node.Type.Main));

        //PIANO 2 - STANZA 7
        _liveObjectsNodes.Add(new Graph.Node(102,  7, new Vector2(-12.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(103,  7, new Vector2(-12.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(104,  7, new Vector2(-11.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(105,  7, new Vector2(-11.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(106,  7, new Vector2(-10.50f,  4.11f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node(107,  7, new Vector2(-10.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(108,  7, new Vector2(-09.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(109,  7, new Vector2(-09.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(110,  7, new Vector2(-08.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(111,  7, new Vector2(-08.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(112,  7, new Vector2(-07.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(113,  7, new Vector2(-07.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(114,  7, new Vector2(-06.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(115,  7, new Vector2(-06.00f,  4.11f), Graph.Node.Type.Main));

        //PIANO 2 - STANZA 8
        _liveObjectsNodes.Add(new Graph.Node(116,  8, new Vector2(-05.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(117,  8, new Vector2(-05.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(118,  8, new Vector2(-04.50f,  4.11f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node(119,  8, new Vector2(-04.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(120,  8, new Vector2(-03.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(121,  8, new Vector2(-03.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(122,  8, new Vector2(-02.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(123,  8, new Vector2(-02.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(124,  8, new Vector2(-01.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(125,  8, new Vector2(-01.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(126,  8, new Vector2(-00.50f,  4.11f), Graph.Node.Type.Main));

        //PIANO 2 - STANZA 9
        _liveObjectsNodes.Add(new Graph.Node(127,  9, new Vector2(00.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(128,  9, new Vector2(00.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(129,  9, new Vector2(01.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(130,  9, new Vector2(01.50f,  4.11f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node(131,  9, new Vector2(02.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(132,  9, new Vector2(02.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(133,  9, new Vector2(03.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(134,  9, new Vector2(03.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(135,  9, new Vector2(04.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(136,  9, new Vector2(04.50f,  4.11f), Graph.Node.Type.Main));

        //PIANO 2 - STANZA  10
        _liveObjectsNodes.Add(new Graph.Node(137, 10, new Vector2(05.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(138, 10, new Vector2(05.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(139, 10, new Vector2(06.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(140, 10, new Vector2(06.50f,  4.11f), Graph.Node.Type.Main));
        _liveObjectsNodes.Add(new Graph.Node(141, 10, new Vector2(07.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(142, 10, new Vector2(07.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(143, 10, new Vector2(08.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(144, 10, new Vector2(08.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(145, 10, new Vector2(09.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(146, 10, new Vector2(09.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(147, 10, new Vector2(10.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(148, 10, new Vector2(10.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(149, 10, new Vector2(11.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(150, 10, new Vector2(11.50f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(151, 10, new Vector2(12.00f,  4.11f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(152, 10, new Vector2(12.50f,  4.11f), Graph.Node.Type.Main));

        //SCALA 0 - 1
        _liveObjectsNodes.Add(new Graph.Node(153, 1, new Vector2(-06.00f, -3.80f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(154, 1, new Vector2(-05.50f, -3.40f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(155, 1, new Vector2(-05.00f, -3.00f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(156, 1, new Vector2(-04.50f, -2.60f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(157, 1, new Vector2(-04.00f, -2.20f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(158, 1, new Vector2(-03.50f, -1.80f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(159, 1, new Vector2(-03.00f, -1.40f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(160, 1, new Vector2(-02.50f, -1.00f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(161, 1, new Vector2(-02.00f, -0.60f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(162, 1, new Vector2(-01.50f, -0.20f), Graph.Node.Type.Generic));

        //SCALA 1 - 2
        _liveObjectsNodes.Add(new Graph.Node(163, 1, new Vector2(-06.00f,  0.40f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(164, 1, new Vector2(-05.50f,  0.80f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(165, 1, new Vector2(-05.00f,  1.20f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(166, 1, new Vector2(-04.50f,  1.60f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(167, 1, new Vector2(-04.00f,  2.00f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(168, 1, new Vector2(-03.50f,  2.40f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(169, 1, new Vector2(-03.00f,  2.80f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(170, 1, new Vector2(-02.50f,  3.20f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(171, 1, new Vector2(-02.00f,  3.60f), Graph.Node.Type.Generic));
        _liveObjectsNodes.Add(new Graph.Node(172, 1, new Vector2(-01.50f,  4.00f), Graph.Node.Type.Generic));

        _liveObjectsLinks = new List<Graph.Connection>();

        //SCALA 0 - 1
        _liveObjectsLinks.Add(new Graph.Connection(12, 153, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(162, 75, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        _liveObjectsLinks.Add(new Graph.Connection(153, 154, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(154, 155, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(155, 156, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(156, 157, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(157, 158, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(158, 159, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(159, 160, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(160, 161, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(161, 162, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        //SCALA 1 - 2
        _liveObjectsLinks.Add(new Graph.Connection(63, 163, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(172, 126, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        _liveObjectsLinks.Add(new Graph.Connection(163, 164, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(164, 165, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(165, 166, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(166, 167, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(167, 168, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(168, 169, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(169, 170, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(170, 171, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(171, 172, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        //PIANO 0
        _liveObjectsLinks.Add(new Graph.Connection(  0,   1, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  1,   2, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  2,   3, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  3,   4, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  4,   5, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  5,   6, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  6,   7, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  7,   8, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  8,   9, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(  9,  10, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 10,  11, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 11,  12, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 12,  13, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 13,  14, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 14,  15, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 15,  16, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 16,  17, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 17,  18, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 18,  19, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 19,  20, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 20,  21, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 21,  22, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 22,  23, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 23,  24, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 24,  25, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 25,  26, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 26,  27, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 27,  28, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 28,  29, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 29,  30, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 30,  31, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 31,  32, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 32,  33, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 33,  34, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 34,  35, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 35,  36, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 36,  37, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 37,  38, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 38,  39, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 39,  40, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 40,  41, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 41,  42, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 42,  43, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 43,  44, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 44,  45, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 45,  46, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 46,  47, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 47,  48, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 48,  49, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 49,  50, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        //PIANO 1
        _liveObjectsLinks.Add(new Graph.Connection( 51,  52, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 52,  53, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 53,  54, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 54,  55, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 55,  56, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 56,  57, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 57,  58, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 58,  59, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 59,  60, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 60,  61, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 61,  62, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 62,  63, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 63,  64, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 64,  65, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 65,  66, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 66,  67, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 67,  68, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 68,  69, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 69,  70, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 70,  71, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 71,  72, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 72,  73, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 73,  74, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 74,  75, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 75,  76, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 76,  77, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 77,  78, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 78,  79, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 79,  80, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 80,  81, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 81,  82, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 82,  83, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 83,  84, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 84,  85, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 85,  86, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 86,  87, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 87,  88, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 88,  89, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 89,  90, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 90,  91, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 91,  92, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 92,  93, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 93,  94, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 94,  95, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 95,  96, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 96,  97, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 97,  98, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 98,  99, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection( 99, 100, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(100, 101, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        //PIANO 2
        _liveObjectsLinks.Add(new Graph.Connection(102, 103, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(103, 104, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(104, 105, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(105, 106, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(106, 107, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(107, 108, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(108, 109, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(109, 110, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(110, 111, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(111, 112, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(112, 113, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(113, 114, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(114, 115, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(115, 116, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        liveObjectsLinks.Add(new Graph.Connection(116, 117, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(117, 118, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(118, 119, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(119, 120, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(120, 121, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(121, 122, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(122, 123, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(123, 124, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(124, 125, 1, Costants.Z_INDEX_LIVE_OVER_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(125, 126, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(126, 127, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(127, 128, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(128, 129, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(129, 130, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(130, 131, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(131, 132, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(132, 133, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(133, 134, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(134, 135, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(135, 136, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(136, 137, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(137, 138, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(138, 139, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(139, 140, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(140, 141, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(141, 142, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(142, 143, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(143, 144, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(144, 145, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(145, 146, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(146, 147, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(147, 148, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(148, 149, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(149, 150, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(150, 151, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));
        _liveObjectsLinks.Add(new Graph.Connection(151, 152, 1, Costants.Z_INDEX_LIVE_BEHIND_FOREGROUND));

        _rooms = new List<Rect>();
        //MiniMap
        _rooms.Add(new Rect(-118.80f,  -32.10f,  53.70f, 27.80f));
        //Map
        _rooms.Add(new Rect(-318.40f, -142.70f, 170.90f, 12.00f));

        _rooms.Add(new Rect( -33.68f, -32.10f, 109.25f, 27.80f));
        _rooms.Add(new Rect( -44.8f,  -142.7f, 351.60f, 12f));

        _rooms.Add(new Rect(65.20f, -32.10f, 81.70f, 27.80f));
        _rooms.Add(new Rect( 274.8f, -142.7f, 260.60f, 12f));

        _rooms.Add(new Rect(-118.80f, 0.05f, 53.70f, 27.80f));
        _rooms.Add(new Rect(-319.4f,  -39.7f, 172.30f, 12f));

        _rooms.Add(new Rect( -56.80f, 0.05f, 63.00f, 27.80f));
        _rooms.Add(new Rect(-118.7f,  -39.7f, 201.70f, 12f));

        _rooms.Add(new Rect(10.75f, 0.05f, 63.80f, 27.80f));
        _rooms.Add(new Rect(  99.7f,  -39.7f, 206.50f, 12f));

        _rooms.Add(new Rect(76.20f, 0.05f, 59.70f, 27.80f));
        _rooms.Add(new Rect( 310.7f,  -39.7f, 188.85f, 12f));

        _rooms.Add(new Rect(-110.60f, 31.95f, 70.10f, 27.80f));
        _rooms.Add(new Rect(-292.9f,   63.8f, 224.20f, 12f));

        _rooms.Add(new Rect(-46.70f, 31.95f, 51.10f, 27.80f));
        _rooms.Add(new Rect( -84.5f,   63.8f, 160.50f, 12f));

        _rooms.Add(new Rect(7.60f, 31.95f, 50.70f, 27.80f));
        _rooms.Add(new Rect(  90.6f,   63.8f, 162.10f, 12f));

        _rooms.Add(new Rect(71.30f, 31.95f, 69.40f, 27.80f));
        _rooms.Add(new Rect(   295f,   63.8f, 220.20f, 12f));

        _termitesNodes = new Graph.Node[0];

        _termitesLinks = new Graph.Connection[0];

        _cameraCenter = new Vector3( 7.31f, -2.93f, -50);

        _humans = new HumanPlaceholder[0];

        _availableTermites = 1000;

        _floorColliders = new Vector2[6][];

        Vector2[] points = new Vector2[2];
        points[0] = new Vector2(-10.3f,  3.02f);
        points[1] = new Vector2( 14.1f,  3.02f);
        _floorColliders[0] = points;

        points = new Vector2[2];
        points[0] = new Vector2(-13.54f, 2.57f);
        points[1] = new Vector2(14.1f, 2.57f);
        _floorColliders[1] = points;

        points = new Vector2[2];
        points[0] = new Vector2(-14.3f, -6.73f);
        points[1] = new Vector2( 14.1f, -6.73f);
        _floorColliders[2] = points;

        points = new Vector2[2];
        points[0] = new Vector2(-10.3f, -1.06f);
        points[1] = new Vector2(14.1f, -1.06f);
        _floorColliders[3] = points;

        points = new Vector2[2];
        points[0] = new Vector2(-13.54f, -2.09f);
        points[1] = new Vector2(14.1f, -2.09f);
        _floorColliders[4] = points;

        points = new Vector2[2];
        points[0] = new Vector2(-10.3f, -5.01f);
        points[1] = new Vector2(14.1f, -5.01f);
        _floorColliders[5] = points;

        _objects = new List<ObjectPlaceholder>();
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_1, new Vector3(-10.44f, -2.98f, 0), "L1_F1_KITCHEN_RACK2",     "RACK",     GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_1, new Vector3(-10.49f, -4.44f, 0), "L1_F1_KITCHEN_RACK1",     "RACK",     GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_2, new Vector3(-08.27f, -3.85f, 0), "L1_F1_KITCHEN_FRIDGE",    "FRIDGE",   GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_2, new Vector3(-12.08f, -4.43f, 0), "L1_F1_KITCHEN_LAMPx3",    "LAMP",     GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_2, new Vector3(-11.28f, -4.43f, 0), "L1_F1_KITCHEN_LAMPx3",    "LAMP",     GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_4, new Vector3(-12.00f, -5.19f, 0), "L1_F1_KITCHEN_CHAIR2",    "CHAIR",    GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_4, new Vector3(-11.24f, -5.19f, 0), "L1_F1_KITCHEN_CHAIR2",    "CHAIR",    GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_5, new Vector3(-11.94f, -5.71f, 0), "L1_F1_KITCHEN_TABLE",     "TABLE",    GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_6, new Vector3(-11.96f, -5.17f, 0), "L1_F1_KITCHEN_VASE",      "VASE",     GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_7, new Vector3(-12.78f, -6.16f, 0), "L1_F1_KITCHEN_CHAIR1",    "CHAIR",    GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 00, Costants.Z_INDEX_OBJ_7, new Vector3(-11.74f, -6.16f, 0), "L1_F1_KITCHEN_CHAIR1",    "CHAIR",    GenericObject.Model.Hard));

        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_1, new Vector3(-00.21f, -2.92f, 0), "L1_F1_LIVING_POSTER5",    "POSTER",   GenericObject.Model.Soft,       isHanging: true));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_2, new Vector3(-00.25f, -4.32f, 0), "L1_F1_LIVING_COACH1",     "COACH",    GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_1, new Vector3( 02.68f, -4.42f, 0), "L1_F1_LIVING_SHELF",      "SHELF",    GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_2, new Vector3( 03.01f, -3.73f, 0), "L1_F1_LIVING_TV",         "TV",       GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_4, new Vector3(-03.39f, -5.83f, 0), "L1_F1_LIVING_COACH2",     "COACH",    GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_4, new Vector3( 02.00f, -6.09f, 0), "L1_F1_LIVING_COACH3",     "COACH",    GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_4, new Vector3(-02.00f, -5.60f, 0), "L1_F1_LIVING_LAMP",       "LAMP",     GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 01, Costants.Z_INDEX_OBJ_4, new Vector3(-00.38f, -5.80f, 0), "L1_F1_LIVING_TABLE2",     "TABLE",    GenericObject.Model.Hard));

        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_1, new Vector3( 06.81f, -3.65f, 0), "L1_F1_GARAGE_SHELF",      "SHELF",    GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_2, new Vector3( 05.84f, -3.12f, 0), "L1_F1_GARAGE_BOX1",       "BOX",      GenericObject.Model.Soft,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_2, new Vector3( 08.64f, -3.12f, 1), "L1_F1_GARAGE_BOX2",       "BOX",      GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_3, new Vector3( 05.20f, -3.94f, 0), "L1_F1_GARAGE_BOX3",       "BOX",      GenericObject.Model.Soft,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_2, new Vector3( 05.68f, -3.94f, 0), "L1_F1_GARAGE_BOX3",       "BOX",      GenericObject.Model.Soft,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_2, new Vector3( 07.28f, -3.94f, 0), "L1_F1_GARAGE_BOX3",       "BOX",      GenericObject.Model.Soft,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 02, Costants.Z_INDEX_OBJ_4, new Vector3( 08.58f, -5.50f, 0), "L1_F1_GARAGE_CAR",        "CAR",      GenericObject.Model.Hard));

        _objects.Add(new ObjectPlaceholder( 03, Costants.Z_INDEX_OBJ_1, new Vector3(-12.49f, -0.10f, 0), "L1_F2_ROOM3_CLOSET-B",    "CLOSET",   GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 03, Costants.Z_INDEX_OBJ_2, new Vector3(-09.05f, -0.60f, 0), "L1_F2_ROOM3_BEED2",       "BED",      GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 03, Costants.Z_INDEX_OBJ_1, new Vector3(-09.20f, -0.27f, 0), "L1_F2_ROOM3_POSTER3",     "POSTER",   GenericObject.Model.Soft));

        _objects.Add(new ObjectPlaceholder( 04, Costants.Z_INDEX_OBJ_1, new Vector3(-01.68f, -0.57f, 0), "L1_F2_HALL2_RACK",        "RACK",     GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 04, Costants.Z_INDEX_OBJ_2, new Vector3(-00.95f,  0.32f, 0), "L1_F2_HALL2_PLANT_",      "PLANT",    GenericObject.Model.Soft,       isOnSomething: true));

        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_1, new Vector3( 01.30f,  0.26f, 0), "L1_F2_ROOM4_BOOKSHELF",   "BOOKSHELF",GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_1, new Vector3( 03.54f, -0.40f, 0), "L1_F2_ROOM4_BED",         "BED",      GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_2, new Vector3( 00.95f,  0.88f, 0), "L1_F2_ROOM4_TOY1_",       "TOY",      GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_2, new Vector3( 01.30f,  0.88f, 0), "L1_F2_ROOM4_TOY2_",       "TOY",      GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_2, new Vector3( 01.62f,  0.88f, 0), "L1_F2_ROOM4_TOY3_",       "TOY",      GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_2, new Vector3( 01.26f,  0.00f, 0), "L1_F2_ROOM4_TOY4_",       "TOY",      GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 05, Costants.Z_INDEX_OBJ_4, new Vector3( 00.94f, -1.19f, 0), "L1_F2_ROOM4_ARMCHAIR",    "ARMCHAIR", GenericObject.Model.Soft));

        _objects.Add(new ObjectPlaceholder( 06, Costants.Z_INDEX_OBJ_1, new Vector3( 06.89f, -0.47f, 0), "L1_F2_ROOM5_DESK2",       "DESK",     GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 06, Costants.Z_INDEX_OBJ_1, new Vector3( 07.01f,  0.28f, 0), "L1_F2_ROOM5_POSTER4",     "POSTER",   GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 06, Costants.Z_INDEX_OBJ_1, new Vector3( 08.78f,  0.28f, 0), "L1_F2_ROOM5_POSTER5",     "POSTER",   GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 06, Costants.Z_INDEX_OBJ_2, new Vector3( 06.63f,  0.42f, 0), "L1_F2_ROOM5_PC",          "MAC",      GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 06, Costants.Z_INDEX_OBJ_2, new Vector3( 07.76f,  0.19f, 1), "L1_F2_ROOM5_PRINTER",     "PRINTER",  GenericObject.Model.Hard,       isOnSomething: true));
        _objects.Add(new ObjectPlaceholder( 06, Costants.Z_INDEX_OBJ_3, new Vector3( 06.87f, -0.53f, 0), "L1_F2_ROOM5_CHAIR-BLACK", "CHAIR",    GenericObject.Model.Hard,       isHFlipped:true));

        _objects.Add(new ObjectPlaceholder( 07, Costants.Z_INDEX_OBJ_1, new Vector3(-11.36f,  3.47f, 0), "L1_F3_ROOM1_BED",         "BED",      GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 07, Costants.Z_INDEX_OBJ_1, new Vector3(-08.89f,  3.47f, 0), "L1_F3_ROOM1_DESK",        "DESK",     GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 07, Costants.Z_INDEX_OBJ_1, new Vector3(-06.50f,  4.42f, 0), "L1_F3_ROOM1_CLOSET-S",    "CLOSET",   GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 07, Costants.Z_INDEX_OBJ_1, new Vector3(-08.76f,  5.16f, 0), "L1_F3_ROOM1_POSTER1",     "POSTER",   GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 07, Costants.Z_INDEX_OBJ_2, new Vector3(-08.99f,  3.52f, 0), "L1_F2_ROOM5_CHAIR-BLACK", "CHAIR",    GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 07, Costants.Z_INDEX_OBJ_2, new Vector3(-08.77f,  4.23f, 0), "L1_F2_ROOM5_PC",          "MAC",      GenericObject.Model.Hard,       isOnSomething: true, isHFlipped: true));

        _objects.Add(new ObjectPlaceholder( 08, Costants.Z_INDEX_OBJ_1, new Vector3(-02.58f,  4.24f, 0), "L1_F3_HALL1_POSTER2",     "POSTER",   GenericObject.Model.Soft));

        _objects.Add(new ObjectPlaceholder( 09, Costants.Z_INDEX_OBJ_1, new Vector3( 01.46f,  4.65f, 0), "L1_F3_BATHROOM_SHOWER",   "SHOWER",   GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 09, Costants.Z_INDEX_OBJ_1, new Vector3( 03.08f,  3.62f, 0), "L1_F3_BATHROOM_SINK",     "SINK",     GenericObject.Model.Soft));
        //    _objects.Add(new ObjectPlaceholder( 09, Costants.Z_INDEX_OBJ_1, new Vector3( 03.10f,  3.97f, 0), "L1_F3_BATHROOM_MIRROR_B", "MIRROR",   GenericObject.Model.Soft));
        //    _objects.Add(new ObjectPlaceholder( 09, Costants.Z_INDEX_OBJ_2, new Vector3( 03.10f,  4.75f, 0), "L1_F3_BATHROOM_MIRROR",   "MIRROR",   GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 09, Costants.Z_INDEX_OBJ_1, new Vector3( 04.00f,  4.20f, 0), "L1_F3_BATHROOM_CLOSET-S", "CLOSET",   GenericObject.Model.Soft));
        _objects.Add(new ObjectPlaceholder( 09, Costants.Z_INDEX_OBJ_4, new Vector3( 01.02f,  3.16f, 0), "L1_F3_BATHROOM_TOILET",   "TOILET",   GenericObject.Model.Hard));

        _objects.Add(new ObjectPlaceholder( 10, Costants.Z_INDEX_OBJ_1, new Vector3( 06.90f,  4.62f, 0), "L1_F3_ROOM2_LAMPx3",      "LAMP",     GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 10, Costants.Z_INDEX_OBJ_1, new Vector3( 08.15f,  4.62f, 0), "L1_F3_ROOM2_LAMPx3",      "LAMP",     GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 10, Costants.Z_INDEX_OBJ_1, new Vector3( 09.40f,  4.62f, 0), "L1_F3_ROOM2_LAMPx3",      "LAMP",     GenericObject.Model.Hard));
        _objects.Add(new ObjectPlaceholder( 10, Costants.Z_INDEX_OBJ_4, new Vector3( 08.28f,  3.27f, 0), "L1_F3_ROOM2_BILLARD",     "BILLARD",  GenericObject.Model.Soft));
    }