private void Initialize(ILevelControllerOptions options)
        {
            // Constructs all the in-level components, then stores the ones that'll be needed later in member variables.
            // Done this way rather than directly initializing the member variables because this way if they're reordered,
            // the compiler will complain if something's being constructed before its dependency.
            var surface    = GeodesicSphereFactory.Build(options);
            var simulation = new SimulationController(surface, options);

            var cameraController = new CameraController(options);

            var meshManager      = new MeshManager(surface);
            var cursorTracker    = new CursorTracker(cameraController.Camera, meshManager);
            var fieldManipulator = new FieldManipulator(surface, cursorTracker, options);

            var colorMapView     = new ColorMapView(surface, meshManager.Mesh, options);
            var particleMapView  = new ParticleMapView(surface, options);
            var rawValuesView    = new RawValuesView(cursorTracker);
            var timeDilationView = new TimeView(50, options.Timestep);
            var latLongGridView  = new LatLongGridView(options.Radius);

            _simulationController = simulation;
            _colorMapView         = colorMapView;
            _particleMapView      = particleMapView;
            _rawValuesView        = rawValuesView;
            _timeView             = timeDilationView;
            _latLongGridView      = latLongGridView;
            _cameraController     = cameraController;
            _cursorTracker        = cursorTracker;
            _fieldManipulator     = fieldManipulator;
        }
Exemple #2
0
        public void TwelveFaces_ShouldHaveFiveVertices
            (IPolyhedronOptions options)
        {
            // Fixture setup
            var polyhedron = GeodesicSphereFactory.Build(options);

            // Exercise system
            var numberOfFacesWithFiveVertices = polyhedron.Faces.Count(face => face.Vertices.Count == 5);

            // Verify outcome
            Debug.WriteLine("Number of faces with five vertices is " + numberOfFacesWithFiveVertices);
            Assert.True(numberOfFacesWithFiveVertices == 12);

            // Teardown
        }
Exemple #3
0
        public void NumberOfFaces_If43FacesAreRequested_ShouldBe162()
        {
            // Fixture setup
            var options = new TestPolyhedronOptions { MinimumNumberOfFaces = 43, Radius = 1 };
            var polyhedron = GeodesicSphereFactory.Build(options);

            // Exercise system
            var numberOfFaces = polyhedron.Faces.Count;

            // Verify outcome
            Debug.WriteLine("Number of faces is " + numberOfFaces);
            Assert.True(numberOfFaces == 162);

            // Teardown
        }
Exemple #4
0
        public void Vertices_ShouldHaveTheSameLengthsAsTheRadius
            (IPolyhedronOptions options)
        {
            // Fixture setup
            var polyhedron = GeodesicSphereFactory.Build(options);

            // Exercise system
            var vertices = polyhedron.Vertices;

            // Verify outcome
            var lengths = vertices.Select(vertex => vertex.Position.Norm()).ToList();

            Debug.WriteLine("Lengths were " + TestUtilities.CollectionToString(lengths));
            Assert.True(lengths.All(length => Number.AlmostEqual(length, options.Radius)));

            // Teardown
        }
Exemple #5
0
        public void EveryVertex_ShouldNeighbourThreeFaces
            (IPolyhedronOptions options)
        {
            // Fixture setup
            var polyhedron = GeodesicSphereFactory.Build(options);

            // Exercise system
            var numberOfVerticesWithThreeFaces = polyhedron.Vertices.Count(vertex => polyhedron.FacesOf(vertex).Count == 3);

            // Verify outcome
            var numberOfVertices = polyhedron.Vertices.Count;

            Debug.WriteLine("Number of vertices is " + numberOfVertices);
            Debug.WriteLine("Number of vertices neighbouring three faces is " + numberOfVerticesWithThreeFaces);
            Assert.True(numberOfVerticesWithThreeFaces == numberOfVertices);

            // Teardown
        }
Exemple #6
0
        public void EveryEdge_ShouldNeighbourTwoFaces
            (IPolyhedronOptions options)
        {
            // Fixture setup
            var polyhedron = GeodesicSphereFactory.Build(options);

            // Exercise system
            var numberOfEdgesWithThreeFaces = polyhedron.Edges.Count(edge => polyhedron.FacesOf(edge).Count == 2);

            // Verify outcome
            var numberOfEdges = polyhedron.Edges.Count;

            Debug.WriteLine("Number of edges is " + numberOfEdges);
            Debug.WriteLine("Number of edges neighbouring two faces is " + numberOfEdgesWithThreeFaces);
            Assert.True(numberOfEdgesWithThreeFaces == numberOfEdges);

            // Teardown
        }
Exemple #7
0
        public void NumbersOfVerticesAndEdgesAndFaces_ShouldSatisfyEulersFormula
            (IPolyhedronOptions options)
        {
            // Fixture setup
            var polyhedron = GeodesicSphereFactory.Build(options);

            // Exercise system
            var v = polyhedron.Vertices.Count;
            var e = polyhedron.Edges.Count;
            var f = polyhedron.Faces.Count;

            // Verify outcome
            Debug.WriteLine("Number of vertices: " + v);
            Debug.WriteLine("Number of edges: " + e);
            Debug.WriteLine("Number of faces: " + f);
            Assert.True(v - e + f == 2);

            // Teardown
        }