/// <summary> /// Add the telemetry measurements to the sensor data. /// </summary> /// <param name="sensor">The telemetry sensor details.</param> /// <param name="sensorData">The target sensor data to write to.</param> /// <param name="offset">The offeset to write to.</param> /// <returns>The number of data points written.</returns> private int AddTelemetry(TelemetrySensor sensor, SensorData sensorData, int offset) { if (sensor.GetTelemetry != null) { double[] telemetry = sensor.GetTelemetry(); telemetry.CopyTo(sensorData.Data, offset); return(telemetry.Length); } else { return(0); } }
void Start() { // Distance Sensors for (int i = 0; i < DistanceSensors.Length; ++i) { DistanceSensor sensor = DistanceSensors[i]; DistanceSensors[i].LayerMask = LayerMask.GetMask(DistanceSensors[i].Layers); Quaternion rot = Quaternion.AngleAxis(DistanceSensors[i].Angle, Vector3.up); DistanceSensors[i].Direction = (rot * Vector3.forward).normalized; } // Telemetry Sensors TelemetrySensor teleSense = new TelemetrySensor() { GetTelemetry = this.getTelemetry, GetTelemetryCount = this.getTelemetryCount }; // Sensor Component Sensors sensors = GetComponent <Sensors>(); sensors.DistanceSensors = DistanceSensors; sensors.TelemetrySensor = teleSense; // Sensor Data Component SensorData sensorData = GetComponent <SensorData>(); sensorData.Data = new double[ sensors.TelemetrySensor.GetTelemetryCount() + (sensors.DistanceSensors.Length * SensorSystem.DATA_POINTS_PER_DISTANCE_SENSOR) ]; for (int i = 0; i < sensorData.Data.Length; ++i) { sensorData.Data[i] = 0; } // Initialize the layers Net net = GetComponent <Net>(); if (InitalNet.LayerSizes != null) { // Debug.Log("INITIALIZING WITH NET"); net.Data = InitalNet; } else { net.Data = new NetData(); net.Data.LayerSizes = new int[HiddenLayerSizes.Length + 2]; net.Data.LayerSizes[0] = sensorData.Data.Length; HiddenLayerSizes.CopyTo(net.Data.LayerSizes, 1); net.Data.LayerSizes[HiddenLayerSizes.Length + 1] = 2; // MotionInputs net.Data.Weights = new double[netSize(net.Data)]; Neural.Mutators.SelfMutate(new NetData[] { net.Data }, new Neural.Options() { { "clone", false }, { "mutationProbability", 1 }, { "mutationFactor", 1 }, { "mutationRange", 10000 }, }); } // Mettabolism Metabolism metabolism = new Metabolism { HealthDecayRate = 1, MealtimeInterval = InitialMealtimeInterval }; gameObjectEntity.EntityManager.AddComponentData <Metabolism>(gameObjectEntity.Entity, metabolism); // Stats Stats stats = new Stats { Tag = gameObject.tag.GetHashCode(), Health = InitialHealth, Age = 0, Generation = 0, Aggression = InitialAggression, Nutrition = InitialNutrition, LastMealTime = DateTime.Now.Ticks, MatingAge = MatingAge, MatingCost = MatingCost, MatingCoolDown = MatingCoolDown }; gameObjectEntity.EntityManager.AddComponentData <Stats>(gameObjectEntity.Entity, stats); }