void Start()
    {
        leftcolorCalculator  = new ColorCalculator(1.0f, 0.0f, 0.0f, true, true, false, gradientresolution);
        rightcolorCalculator = new ColorCalculator(1.0f, 0.0f, 0.0f, true, true, false, gradientresolution);
        lightColorCalculator = new ColorCalculator(1.0f, 0.0f, 0.0f, true, false, true, gradientresolution);
        #region Pre-made WorldChunks
        bool[,] WorldChunk1 = new bool[, ] {
            { true, true, true, true, true }, { false, true, true, true, false }, { false, false, true, false, false }
        };
        WorldChunkList.Add(WorldChunk1);
        bool[,] WorldChunk2 = new bool[, ] {
            { true, true, true, true, true }, { true, false, true, false, true }, { false, false, false, false, false }
        };
        WorldChunkList.Add(WorldChunk2);
        bool[,] WorldChunk3 = new bool[, ] {
            { true, true, true, true, true }, { false, true, true, true, true }, { false, false, true, true, true }, { false, false, false, true, true }, { false, false, false, false, true }
        };
        WorldChunkList.Add(WorldChunk3);

        bool[,] SpawnPlatform = new bool[, ] {
            { true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true }
        };
        SpawnWorldChunk(SpawnPlatform, 16);
        #endregion
    }
        private void Build3DTopology_Triangulation(VisualTopoModel model, IColorCalculator colorFunc)
        {
            // Build color function
            float minElevation = model.Graph.AllNodes.Min(n => n.Model.VectorLocal.Z);


            // Generate triangulation
            //
            TriangulationList <Vector3> markersTriangulation = new TriangulationList <Vector3>();
            TriangulationList <Vector3> triangulation        = GraphTraversal_Triangulation(model, null, ref markersTriangulation, model.Graph.Root, colorFunc);

            model.TriangulationFull3D = triangulation + markersTriangulation;
        }
Exemple #3
0
 public Emitter(EmitterConfig config)
 {
     _randomGenerator         = new RandomWrapper();
     _config                  = config;
     _shape                   = config.EmitterShape;
     _intialColorCalculator   = config.InitialColorCalculator;
     _finalColorCalculator    = config.FinalColorCalculator;
     _initialSizeCalculator   = config.InitialSizeCalculator;
     _secondsBetweenEmissions = 1.0f / config.EmissionRatePerSecond;
     Particles                = new Particle[config.MaximumNumberOfParticles];
     ParticleCount            = 0;
     _secondSinceLastEmitted  = 0.0f;
     _numberToEmitFractional  = 0.0f;
 }
        public async void StartAsync()
        {
            /* Values gathered from previous reading cycle. */
            double?prevHumidity        = null;
            double?previousTemperature = null;
            int?   previousSensorId    = null;

            using (ILifetimeScope scope = DI.Container.BeginLifetimeScope())
            {
                ILifxManager           lifx         = scope.Resolve <ILifxManager>();
                IDewPointCalculator    dewPointCalc = scope.Resolve <IDewPointCalculator>();
                IColorCalculator       colorCalc    = scope.Resolve <IColorCalculator>();
                IGatewayManager        gateway      = scope.Resolve <IGatewayManager>();
                IConfigurationProvider config       = scope.Resolve <IConfigurationProvider>();
                IHttpServer            http         = scope.Resolve <IHttpServer>();

                await http.ListenAsync(8800, "api");

                gateway.SetDefaultBoard(config.DefaultSensorBoardId);

                try
                {
                    Dictionary <string, string> parameters = new Dictionary <string, string>
                    {
                        { "OAUTH2_TOKEN", config.LifxHttpApiOAuth2Token },
                        { "SELECTED_DEVICE", config.DefaultLifxDeviceLabel }
                    };

                    await lifx.InitAsync(parameters);

                    await gateway.InitAsync();

                    while (true)
                    {
                        try
                        {
                            IEnumerable <BoardReading> readings = await gateway.GetBoardReadingsAsync();

                            DataTextBlock.Text = readings.Count().ToString();

                            SensorsTextBlock.Text = string.Join(", ", gateway.GetBoards());

                            int?boardId = gateway.GetSelectedBoard();

                            BoardReading reading = readings
                                                   .Where(x => x.Id == boardId)
                                                   .FirstOrDefault();

                            // IF: There is a reading for the selected sensor.
                            if (reading != null)
                            {
                                double dewPoint = dewPointCalc.Calculate(reading.Humidity.Value, reading.Temperature.Value);

                                HumidityTextBlock.Text    = reading.Humidity.ToString();
                                TemperatureTextBlock.Text = reading.Temperature.ToString();
                                DewPointTextBlock.Text    = dewPoint.ToString();
                                SensorIdTextBlock.Text    = boardId.ToString();

                                /* IF: Values have been changed or sensor has been changed. */
                                if (reading.Humidity != prevHumidity || reading.Temperature != previousTemperature || previousSensorId != boardId)
                                {
                                    Color color = colorCalc.CalculateDewPointColor(dewPoint);

                                    await lifx.SetSelectedDeviceRgbColorAsync(color);

                                    IEnumerable <LifxDevice> lifxDevices = await lifx.GetAllDevicesAsync(false);

                                    if (lifxDevices != null)
                                    {
                                        BulbsTextBlock.Text = string.Join(", ", lifxDevices.Select(x => x.Label));
                                    }

                                    LifxDevice selected = await lifx.GetSelectedDeviceAsync();

                                    if (selected != null)
                                    {
                                        SelectedTextBlock.Text = selected.Label;
                                    }

                                    RedTextBlock.Text   = color.R.ToString();
                                    GreenTextBlock.Text = color.G.ToString();
                                    BlueTextBlock.Text  = color.B.ToString();

                                    HumidityRectangle.Fill = new SolidColorBrush(color);

                                    prevHumidity        = reading.Humidity;
                                    previousTemperature = reading.Temperature;
                                    previousSensorId    = boardId;
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            ErrorTextBlock.Text = e.Message;
                        }
                    }
                }
                catch (Exception e)
                {
                    ErrorTextBlock.Text = e.Message;
                }
            }
        }
Exemple #5
0
 public GeometryContext(IColorCalculator colorCalculator)
 {
     _colorCalculator = colorCalculator;
 }
        /// <summary>
        /// // Make a rectangle perpendicual to direction centered on point (should be centered at human eye (y = 2m)
        /// </summary>
        /// <param name="triangulation"></param>
        /// <param name="current"></param>
        /// <param name="next"></param>
        /// <returns></returns>
        private TriangulationList <Vector3> AddCorridorRectangleSection(TriangulationList <Vector3> triangulation, VisualTopoData current, VisualTopoData nextData, int startIndex, IColorCalculator colorFunc)
        {
            Vector3      next      = (nextData == null) ? current.VectorLocal : nextData.VectorLocal;
            GeoPointRays rays      = current.GeoPointLocal;
            Vector3      direction = (nextData == null) ? Vector3.UnitZ * -1 : next - current.VectorLocal;

            direction = (direction == Vector3.Zero) ? Vector3.UnitZ * -1 : direction;
            var position = current.VectorLocal;

            Vector3 side = Vector3.Normalize(Vector3.Cross(direction, Vector3.UnitY));

            if (IsInvalid(side))      // Vector3 is UnitY
            {
                side = Vector3.UnitX; // set it to UnitX
            }
            Vector3 up = Vector3.Normalize(Vector3.Cross(direction, side));

            if (IsInvalid(side) || IsInvalid(up))
            {
                return(triangulation);
            }
            //var m = Matrix4x4.CreateWorld(next, direction, Vector3.UnitZ);

            triangulation.Positions.Add(position - side * rays.Left - up * rays.Down);
            triangulation.Positions.Add(position - side * rays.Left + up * rays.Up);
            triangulation.Positions.Add(position + side * rays.Right + up * rays.Up);
            triangulation.Positions.Add(position + side * rays.Right - up * rays.Down);

            //Vector4 color = (colorIndex++) % 2 == 0 ? VectorsExtensions.CreateColor(0, 255, 0) : VectorsExtensions.CreateColor(0, 0, 255);

            triangulation.Colors.AddRange(Enumerable.Repeat(colorFunc.GetColor(current, position), 4));

            // corridor sides
            if (triangulation.NumPositions > 4)
            {
                int i         = startIndex; // triangulation.NumPositions - 8;
                int lastIndex = triangulation.NumPositions - 4;
                for (int n = 0; n < 4; n++)
                {
                    AddFace(ref triangulation, i + n, i + (n + 1) % 4
                            , lastIndex + n, lastIndex + (n + 1) % 4);
                }
            }
            return(triangulation);
        }
        private TriangulationList <Vector3> GraphTraversal_Triangulation(VisualTopoModel visualTopoModel, TriangulationList <Vector3> triangulation, ref TriangulationList <Vector3> markersTriangulation, Node <VisualTopoData> node, IColorCalculator colorFunc)
        {
            triangulation = triangulation ?? new TriangulationList <Vector3>();

            var model = node.Model;

            if (model.IsSectionStart && triangulation.NumPositions > 0)
            {
                // Cylinder height = point depth + (terrain height above - entry Z)
                float cylinderHeight = -model.VectorLocal.Z + (float)(model.TerrainElevationAbove - visualTopoModel.EntryPoint.Elevation.Value);
                markersTriangulation += _meshService.CreateCylinder(model.VectorLocal, 0.2f, cylinderHeight, model.Set.Color);

                //var surfacePos = new Vector3(model.GlobalVector.X, model.GlobalVector.Y, (float)model.TerrainElevationAbove);
                float coneHeight = 10;
                markersTriangulation += _meshService.CreateCone(model.VectorLocal, 5, coneHeight, model.Set.Color)
                                        //.Translate(Vector3.UnitZ * -coneHeight / 2F)
                                        .Transform(Matrix4x4.CreateRotationY((float)Math.PI, new Vector3(model.VectorLocal.X, model.VectorLocal.Y, model.VectorLocal.Z + coneHeight / 2f)))
                                        //.Translate(Vector3.UnitZ * coneHeight / 2F)
                                        .Translate(Vector3.UnitZ * cylinderHeight);
            }

            if (node.Arcs.Count == 0) // leaf
            {
                Debug.Assert(triangulation.NumPositions > 0, "Triangulation should not be empty");

                // Make a rectangle perpendicual to direction centered on point(should be centered at human eye(y = 2m)
                triangulation = AddCorridorRectangleSection(triangulation, model, null, triangulation.NumPositions - 4, colorFunc);
            }
            else
            {
                int posIndex = triangulation.NumPositions - 4;
                foreach (var arc in node.Arcs)
                {
                    // Make a rectangle perpendicual to direction centered on point(should be centered at human eye(y = 2m)
                    triangulation = AddCorridorRectangleSection(triangulation, model, arc.Child.Model, posIndex, colorFunc);
                    posIndex      = triangulation.NumPositions - 4;

                    triangulation = GraphTraversal_Triangulation(visualTopoModel, triangulation, ref markersTriangulation, arc.Child, colorFunc);
                }
            }

            return(triangulation);
        }
Exemple #8
0
 public Calculator(IColorCalculator colorCalculator)
 {
     this.colorCalculator = colorCalculator;
 }