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; }
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; } } }
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); }
public Calculator(IColorCalculator colorCalculator) { this.colorCalculator = colorCalculator; }