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); }
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]); }
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]); }
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); }
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); }
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; }
public VehicleStatReceived(VehicleStat vehicleStatus) { VehicleStatus = vehicleStatus; }
public VehicleStatStoreRequest(VehicleStat vehicleStatus) { VehicleStatus = vehicleStatus; }
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); } }
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()); }