Example #1
0
        static public Node AddNode(Simulator sim, NatTypes type0, NatTypes type1, bool relay)
        {
            Node node = sim.AddNode();

            NatFactory.AddNat(node.EdgeListenerList, type0);

            if (relay)
            {
                Relay.IRelayOverlap ito = new Relay.SimpleRelayOverlap();
                EdgeListener        el  = new Relay.RelayEdgeListener(node, ito);
                node.AddEdgeListener(el);
                el.Start();
            }

            if (type1 != NatTypes.Disabled)
            {
                NodeMapping            nm  = sim.Nodes[node.Address];
                int                    id  = nm.ID;
                string                 tas = SimulationTransportAddress.GetString(TransportAddress.TAType.SO, id);
                INat                   nat = GetNat(TransportAddressFactory.CreateInstance(tas), type1);
                SimulationEdgeListener el  = new SimulationEdgeListener(id, 0, null,
                                                                        true, TransportAddress.TAType.SO, nat);
                node.AddEdgeListener(el);
                el.Start();
            }
            return(node);
        }
        public TestScene(RenderWindow window)
        {
            mWindow                   = window;
            mSimulator                = new Simulator(mWindow, SOLVER_ITERATIONS);
            mCircleZones              = new List <CircleZone>(100);
            mSpringConstraints        = new List <AConstraint>(300);
            mTriangleMidPoints        = new List <TriangleMidpoint>(24);
            mNodes                    = new List <Node>(100);
            mCentroids                = new List <Vector2f>(100);
            mCurrentConnections       = new List <CurrentConnection>(200);
            mNetwork                  = new LinkedList <CurrentConnection>();
            mCentroidMarker           = new CircleShape(2);
            mCentroidMarker.FillColor = Color.Black;
            mCentroidMarker.Origin    = new Vector2f(1, 1);
            //Temp
            rnd = new Random();

            #region initZones

            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(400, 200)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(450, 200)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(500, 200)));

            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(375, 240)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(425, 240)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(475, 240)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(525, 240)));

            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(350, 280)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(400, 280)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(450, 280)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(500, 280)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(550, 280)));

            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(375, 320)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(425, 320)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(475, 320)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(525, 320)));

            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(400, 360)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(450, 360)));
            mCircleZones.Add(new CircleZone(mWindow, ZONE_INITIAL_RADIUS, new Vector2f(500, 360)));

            for (int i = 0; i < mCircleZones.Count; i++)
            {
                mCircleZones[i].SetNodeIndex(i);
                mSimulator.AddNode(i, mCircleZones[i].GetPosition(), 1);
                mNodes.Add(mSimulator.GetNode(i));
            }

            mSpringConstraints.Add(new SpringConstraint(mNodes[0], mNodes[1]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[1], mNodes[2]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[0], mNodes[3]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[0], mNodes[4]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[1], mNodes[4]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[5], mNodes[1]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[5], mNodes[2]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[6], mNodes[2]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[3], mNodes[4]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[4], mNodes[5]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[6], mNodes[5]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[7], mNodes[3]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[3], mNodes[8]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[7], mNodes[8]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[8], mNodes[4]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[9], mNodes[4]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[9], mNodes[5]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[8], mNodes[9]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[10], mNodes[5]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[9], mNodes[10]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[6], mNodes[10]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[6], mNodes[11]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[10], mNodes[11]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[7], mNodes[12]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[8], mNodes[12]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[8], mNodes[13]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[12], mNodes[13]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[9], mNodes[13]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[9], mNodes[14]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[13], mNodes[14]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[14], mNodes[10]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[15], mNodes[10]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[14], mNodes[15]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[15], mNodes[11]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[16], mNodes[12]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[16], mNodes[13]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[16], mNodes[17]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[14], mNodes[17]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[17], mNodes[18]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[15], mNodes[18]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[14], mNodes[18]));
            mSpringConstraints.Add(new SpringConstraint(mNodes[13], mNodes[17]));

            for (int i = 0; i < mSpringConstraints.Count; i++)
            {
                SpringConstraint spring = (SpringConstraint)mSpringConstraints[i];
                spring.mStiffness = (float)(1d - Math.Pow(1f - SPRING_STIFFNESS, 1f / 10f));
            }
            mSimulator.AddConstraints(mSpringConstraints);

            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[0], mCircleZones[4], mCircleZones[3]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[0], mCircleZones[1], mCircleZones[4]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[1], mCircleZones[4], mCircleZones[5]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[1], mCircleZones[5], mCircleZones[2]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[2], mCircleZones[5], mCircleZones[6]));

            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[3], mCircleZones[7], mCircleZones[8]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[3], mCircleZones[4], mCircleZones[8]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[4], mCircleZones[8], mCircleZones[9]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[4], mCircleZones[5], mCircleZones[9]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[5], mCircleZones[9], mCircleZones[10]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[5], mCircleZones[6], mCircleZones[10]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[6], mCircleZones[10], mCircleZones[11]));

            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[7], mCircleZones[8], mCircleZones[12]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[12], mCircleZones[8], mCircleZones[13]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[8], mCircleZones[13], mCircleZones[9]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[13], mCircleZones[9], mCircleZones[14]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[9], mCircleZones[10], mCircleZones[14]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[14], mCircleZones[10], mCircleZones[15]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[10], mCircleZones[11], mCircleZones[15]));

            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[12], mCircleZones[13], mCircleZones[16]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[16], mCircleZones[13], mCircleZones[17]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[13], mCircleZones[17], mCircleZones[14]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[17], mCircleZones[14], mCircleZones[18]));
            mTriangleMidPoints.Add(new TriangleMidpoint(mCircleZones[14], mCircleZones[15], mCircleZones[18]));

            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[0], mTriangleMidPoints[1]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[1], mTriangleMidPoints[2]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[2], mTriangleMidPoints[3]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[3], mTriangleMidPoints[4]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[0], mTriangleMidPoints[6]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[2], mTriangleMidPoints[8]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[10], mTriangleMidPoints[4]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[5], mTriangleMidPoints[6]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[6], mTriangleMidPoints[7]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[7], mTriangleMidPoints[8]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[9], mTriangleMidPoints[8]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[9], mTriangleMidPoints[10]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[10], mTriangleMidPoints[11]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[5], mTriangleMidPoints[12]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[14], mTriangleMidPoints[7]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[16], mTriangleMidPoints[9]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[18], mTriangleMidPoints[11]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[12], mTriangleMidPoints[13]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[13], mTriangleMidPoints[14]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[14], mTriangleMidPoints[15]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[15], mTriangleMidPoints[16]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[17], mTriangleMidPoints[16]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[17], mTriangleMidPoints[18]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[13], mTriangleMidPoints[19]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[15], mTriangleMidPoints[21]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[23], mTriangleMidPoints[17]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[19], mTriangleMidPoints[20]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[20], mTriangleMidPoints[21]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[21], mTriangleMidPoints[22]));
            mCurrentConnections.Add(new CurrentConnection(mTriangleMidPoints[22], mTriangleMidPoints[23]));


            #endregion
        }