private bool ProcessMessage(MessageReceived msg)
        {
            var jObj     = JObject.Parse(msg.Message);
            var property = jObj["label"].Value <string>();

            if (whitelist.TryGetValue(property, out Action <JToken, VehicleStat> mapper)) // case-sensitive
            {
                // Initialize a new vehiclestat
                var vs = new VehicleStat
                {
                    Fleet     = jObj["asset"]["fleet"].Value <string>(),
                    Vehicle   = jObj["asset"]["name"].Value <string>(),
                    Timestamp = jObj["time"].Value <long>(),
                };

                // Set value to the appropriate property
                mapper(jObj["value"], vs);

                _vehicleStatProcessorActor.Tell(new VehicleStatMessage(vs));
            }
            else if (!skippedProperties.Contains(property))
            {
                skippedProperties.Add(property);
                Console.WriteLine("Non-whitelisted property found: " + property);
            }

            return(true);
        }
Пример #2
0
 public void Add(Vector2 spawnIn, int turnPlanIn, int laneIn,
                 int nameIn, float speedIn,
                 float halfLengthIn, float halfWidthIn, Vector2 dirIn, int typeIn, float diagIn)
 {
     activeVehicles [++lastIndex] = new VehicleStat(spawnIn, turnPlanIn, laneIn,
                                                    nameIn, speedIn, halfLengthIn, halfWidthIn,
                                                    lastIndex, dirIn, typeIn, false, diagIn, GameController.centersOfRot[laneIn]);
 }
Пример #3
0
	public void Add(Vector2 spawnIn, int turnPlanIn, int laneIn, 
					int nameIn, float speedIn,  
		float halfLengthIn, float halfWidthIn, Vector2 dirIn, int typeIn, float diagIn)
	{
		activeVehicles [++lastIndex] = new VehicleStat (spawnIn, turnPlanIn, laneIn, 
								nameIn, speedIn,  halfLengthIn, halfWidthIn, 
			lastIndex, dirIn, typeIn, false, diagIn, GameController.centersOfRot[laneIn]);
		
		
	}	
Пример #4
0
        private IActorRef FindOrCreateVehicleActor(VehicleStat vs)
        {
            var key = vs.Key;

            if (_vehicleActorRefs.TryGetValue(key, out IActorRef existingVehicleActor))
            {
                return(existingVehicleActor);
            }

            var props           = Props.Create(() => new VehicleActor(vs.Fleet, vs.Vehicle, _cacheDuration, _vehicleStatStoreActor));
            var newVehicleActor = Context.ActorOf(props, "vehicle-" + key);

            _vehicleActorRefs.Add(key, newVehicleActor);
            return(newVehicleActor);
        }
Пример #5
0
        public VehicleActor(string fleet, string vehicle, TimeSpan cacheDuration, IActorRef vehicleStatStoreActor)
        {
            _vehicleStat = new VehicleStat()
            {
                Fleet     = fleet,
                Vehicle   = vehicle,
                Timestamp = default(long),
            };

            _vehicleStatStoreActor = vehicleStatStoreActor;

            Receive <VehicleStatReceived>((msg) => ProcessVehicleStatReceived(msg));
            Receive <StoreStateRequest>((msg) => StoreStateRequest(msg));

            Context.System.Scheduler.ScheduleTellRepeatedly(TimeSpan.FromSeconds(0), cacheDuration, Self, new StoreStateRequest(), ActorRefs.NoSender);
        }
Пример #6
0
        public int VehicleStat(Vehicle vehicle, VehicleStat stat)
        {
            var parts = new List <VehiclePart>();

            if (vehicle.engine != null)
            {
                parts.Add(vehicle.engine);
            }
            if (vehicle.frame != null)
            {
                parts.Add(vehicle.frame);
            }
            if (vehicle.computer != null)
            {
                parts.Add(vehicle.computer);
            }
            if (vehicle.specialPart1 != null)
            {
                parts.Add(vehicle.specialPart1);
            }
            if (vehicle.specialPart2 != null)
            {
                parts.Add(vehicle.specialPart2);
            }
            if (vehicle.specialPart3 != null)
            {
                parts.Add(vehicle.specialPart3);
            }

            var sum = 0;

            parts.ForEach(part =>
            {
                var propType = (PropertyType)Enum.Parse(typeof(PropertyType), $"{part.type}_PART_{part.quality}");
                Properties(propType, part.level)
                .Where(prop => prop.vehicleStat == stat)
                .ToList()
                .ForEach(prop => sum += prop.value1);
            });
            return(sum);
        }
 public VehicleStatMessage(VehicleStat vehicleStatus)
 {
     VehicleStatus = vehicleStatus;
 }
Пример #8
0
 public VehicleStatReceived(VehicleStat vehicleStatus)
 {
     VehicleStatus = vehicleStatus;
 }
 public VehicleStatStoreRequest(VehicleStat vehicleStatus)
 {
     VehicleStatus = vehicleStatus;
 }
Пример #10
0
	IEnumerator SpawnCars ()
	{
		
		int lane; 

		int vehicleIndex = 0;
		bool spawn = false;
		while (true)
		{
			spawn = false;
			if (!pause && !globalPause) 
			{
				vehicleIndex = oneTypeOfVehicle ? 12 : Random.Range (0, 13);
				int backForthDir = Random.Range (0, 2);
				int innerLaneIndex = Random.Range (0, 4);
				lane = laneChooser [backForthDir, innerLaneIndex];


				// changed so that if a lane is not avilable, another lane will be searched only 
				// from within the same back/forth direction, to eliminate false incoming rate for TL
				for (int i = 0; i < 4; i++) {

					if (!laneAvailable[lane]) {
						innerLaneIndex++;
						innerLaneIndex %= 4;
						lane = laneChooser [backForthDir, innerLaneIndex];
					} else {
						spawn = true;
						break;
					}
				}

				//if I couldn't spawn a car is waiting in traffic, log the time it began to wait and add it 
				//when it finally spawns
				if (!spawn)
				{
					if (currentMethod == (int)methods.TL)
						waitingTimes[lane].Enqueue (frameCounter);
				}
				else {
					Vector3 spawnPosition = new Vector3 (laneXZ [lane, 0], YCoor [vehicleIndex], laneXZ [lane, 1]);
					Quaternion spawnRotation = Quaternion.identity * Quaternion.Euler (0f, (lane / 2) * 90f, 0f);

					Vector2 directionGiven = new Vector2 (0, 1);
					switch (lane / 2) {
					
					case 0:
						directionGiven = new Vector2 (1, 0);
						break;
					case 1:
						directionGiven = new Vector2 (0, -1);
						break;
					case 2:
						directionGiven = new Vector2 (-1, 0);
						break;
					case 3:
						directionGiven = new Vector2 (0, 1);
						break;
					}
					GameObject vehicle = (GameObject)Instantiate (vehicles [vehicleIndex], spawnPosition, spawnRotation);
					cars.Add (vehicle);
					Vector3 center = new Vector3 (centersOfRot [lane].x, YCoor [vehicleIndex], centersOfRot [lane].y);
					int type = (vehicleIndex > 4 ? 4 : vehicleIndex);
					vehicle.GetComponent<Vehicle> ().SetType (type);

					vehicle.GetComponent<Vehicle> ().SetDirection (directionGiven);
					vehicle.GetComponent<Vehicle> ().SetCenter (center);

					vehicle.GetComponent<Vehicle> ().SetSize (sizes [vehicleIndex]);
					vehicle.tag = "Vehicle Checked";
					vehicle.name = "" + ++vehicleCounter;
					vehicle.GetComponent<Vehicle> ().SetName(vehicleCounter);
					nameBeingChecked = vehicleCounter;

					int assignedTurn = 0;

					if (lane % 2 == 1)
						assignedTurn = (rightTurningPercent > Random.Range (0f, 50f) ? 1 : 0);
					else
					{
						if (currentMethod == (int)methods.TL)
							assignedTurn = 0;
						else assignedTurn = (leftTurningPercent > Random.Range (0f, 50f) ? -1 : 0);
					}
					
					vehicle.GetComponent<Vehicle> ().SetTurnPlan (assignedTurn); 
					vehicle.GetComponent<Vehicle> ().SetLane (lane); 


					countText.text = "Vehicle Count: " + vehicleCounter;
					countShadow.text = "Vehicle Count: " + vehicleCounter;

					doneWithCheck = false;
					futureCollisionDetected = false;
					laneAvailable [lane] = false;

					currentMaxSpeed = CalcMaxSpeed (lane, sizes [vehicleIndex]);

					suggestedSpeed = System.Math.Min(everyonesSpeed, currentMaxSpeed);
					//Debug.Log ("for car number " + vehicleCounter +" max speed = " + currentMaxSpeed + ", suggested speed = " + suggestedSpeed);
					vehicle.GetComponent<Vehicle> ().SetSpeed (suggestedSpeed);


					if (currentMethod == (int) methods.v1 )
					{
					//Debug.Log ("before last index = " + activeVList.lastIndex);
						activeVList.Add (new Vector2 (laneXZ [lane, 0], laneXZ [lane, 1]), assignedTurn, lane, 
							vehicleCounter, everyonesSpeed, sizes [vehicleIndex], widths [vehicleIndex], directionGiven, 
							type, diagonals [vehicleIndex]); 


							//begin prepping your shadow runners list
							futureVehicles [0] = new VehicleStat (new Vector2 (laneXZ [lane, 0], laneXZ [lane, 1]), assignedTurn, lane, 
								vehicleCounter, everyonesSpeed, sizes [vehicleIndex], 
								widths [vehicleIndex], activeVList.lastIndex, directionGiven, 
								type, true, diagonals [vehicleIndex], centersOfRot [lane]);
						
							CheckFutureCollisionV1 (lane);

					}

					if (currentMethod == (int) methods.TL)
					{
						activeV[lane].Add (new Vector2 (laneXZ [lane, 0], laneXZ [lane, 1]), assignedTurn, lane, 
							vehicleCounter, everyonesSpeed, sizes [vehicleIndex], widths [vehicleIndex], directionGiven, 
							type, diagonals [vehicleIndex]); 
						

					}

					if (currentMethod == (int)methods.v2)
					{
						pause = true;
						StartCoroutine(CheckFutureCollisionV2 (new Vector2 (laneXZ [lane, 0], laneXZ [lane, 1]), 
							assignedTurn, lane, sizes [vehicleIndex], widths [vehicleIndex], directionGiven, 
							diagonals [vehicleIndex]));
					}

				}

			}
			yield return new WaitForSeconds (Random.Range(0.90f, 1.10f)*waitTime);
		}

	}
Пример #11
0
	private void CheckFutureCollisionV1 (int lane)
	{

		pause = true;

		numCloseV = 1; 
		int index = 1;

		//generate a list of vehicles
		for (int i = 0; i < activeVList.lastIndex ; i++)
		{
			int tempLane = activeVList.GetLane (i);
			bool closeLanes = false;

			if ((lane == tempLane + 1 && lane % 2 == 1) || (lane == tempLane - 1 && lane % 2 == 0))
				closeLanes = true;

			if (!closeLanes)
			{
				//check candidates for collision
				Vector2 tempLoc = activeVList.GetCurrentPosition (i);
				bool probableProximity = false;
				//Debug.Log ("x = " + tempLoc.x + ", y = " + tempLoc.y);
				if (Mathf.Abs (tempLoc.x) > 200f || Mathf.Abs (tempLoc.y) > 200f)
					probableProximity = true;
				if (probableProximity)
				{

					//Debug.Log("for future vehicle "+ (index) + " the index given is " + activeVList.GetIndex (i));
					futureVehicles [index++] = new VehicleStat (
						activeVList.GetCurrentPosition (i), activeVList.GetTurnPlan (i), 
						activeVList.GetLane (i), activeVList.GetName (i), activeVList.GetSpeed (i), sizes [activeVList.GetType (i)], 
						widths [activeVList.GetType (i)], activeVList.GetIndex (i),
						activeVList.GetDirection (i), activeVList.GetType (i), true, 
						diagonals [activeVList.GetType (i)], centersOfRot[activeVList.GetLane (i)]);
					numCloseV++;
				}
			}
		}
		if (numCloseV == 1)
		{
			futureCollisionDetected = false;
			doneWithCheck = true;
			pause = false;
			GameObject temp = GameObject.FindGameObjectWithTag ("Vehicle Checked");
			temp.tag = "Untagged";
		}
		else if (!simulationOn) StartCoroutine(algorithmV1());



	}