Esempio n. 1
0
        private static void AddVehicles(ref int currentEntityId, Dictionary <EntityId, Entity> snapshotEntities, ISnapshot snapshot)
        {
            var index = 0;

            for (var i = 0; i < snapshot.VehicleCount; i++)
            {
                var angle = 2 * Mathf.PI * i / snapshot.VehicleCount;

                var x        = SimulationSettings.TrackRadius * Mathf.Cos(angle);
                var y        = SimulationSettings.TrackRadius * Mathf.Sin(angle);
                var position = new Vector3(x, 0f, y);

                var quaternion = Quaternion.AngleAxis(-angle * 180 / Mathf.PI, Vector3.up);

                var data = new VehicleControlData();
                data.maxSpeed        = RandomRange(snapshot.MaxSpeed);
                data.maxAcceleration = RandomRange(snapshot.MaxAcceleration);
                data.responseScaling = RandomRange(snapshot.ResponseScaling);
                data.panicDistance   = RandomRange(snapshot.PanicDistance);
                data.reactionTime    = RandomRange(snapshot.ReactionTime);

                var sensorData = new SensorData();
                sensorData.sensorRange = RandomRange(snapshot.SensorRange);

                data.colourRed   = 1f;
                data.colourGreen = 1f;
                data.colourBlue  = 1f;

                data.speed          = 0f;
                data.desiredSpeed   = data.maxSpeed;
                data.reactionBuffer = Bytes.FromBackingArray(new byte[data.reactionTime * sizeof(float)]);

                var id = currentEntityId;

                if (snapshot.SpecialVehicles.Any(v => v.Id == id))
                {
                    PopulateSpecial(ref data, ref sensorData, snapshot.SpecialVehicles.Single(v => v.Id == id));
                    index += 1;
                }
                else if (index < snapshot.SpecialVehicles.Count)
                {
                    if (snapshot.SpecialVehicles[index].Id == null)
                    {
                        PopulateSpecial(ref data, ref sensorData, snapshot.SpecialVehicles[index]);
                    }
                    index += 1;
                }

                snapshotEntities.Add(
                    new EntityId(currentEntityId++),
                    EntityTemplateFactory.CreateVehicleTemplate(position, quaternion, data, sensorData));
            }
        }