/* * Step 0: * * spawn at startpoint gate * mouse move to car point * * Step 1: * let car move * * Step 2: * hit wall or hit finish line gate * log parameters * end trial * * Step 3: * finished * */ public override void Setup() { maxSteps = 3; ctrler = ExperimentController.Instance(); trailSpace = Instantiate(ctrler.GetPrefab("TrailPrefab")); trailGate1 = GameObject.Find("TrailGate1"); trailGate2 = GameObject.Find("TrailGate2"); startCollider = trailGate1.transform.GetChild(3).GetComponent <BoxCollider>(); midwayCollider = GameObject.Find("MidwayCollider").GetComponent <BoxCollider>(); gatePlacement = GameObject.Find("gatePlacement").GetComponent <GatePlacement>(); roadSegments = GameObject.Find("generated_by_SplineExtrusion"); scoreboard = GameObject.Find("Scoreboard").GetComponent <Scoreboard>(); for (int i = 0; i < roadSegments.transform.childCount; i++) { // add road segments to gatePlacement list of meshes gatePlacement.mesh.Add(roadSegments.transform.GetChild(i).GetComponent <MeshFilter>().mesh); } gatePlacement.Setup(); /* TrailGate children: * 0: pole1 * 2: pole2 * 3: checkered line (line renderer component) * 4: trigger (collider component) */ startPoint = ctrler.Session.CurrentBlock.settings.GetFloat("per_block_startPoint"); gatePlacement.SetGatePosition(trailGate1, trailGate1.transform.GetChild(0).gameObject, trailGate1.transform.GetChild(1).gameObject, trailGate1.transform.GetChild(2).GetComponent <LineRenderer>(), trailGate1.transform.GetChild(3).GetComponent <BoxCollider>(), startPoint); endPoint = ctrler.Session.CurrentBlock.settings.GetFloat("per_block_endPoint"); gatePlacement.SetGatePosition(trailGate2, trailGate2.transform.GetChild(0).gameObject, trailGate2.transform.GetChild(1).gameObject, trailGate2.transform.GetChild(2).GetComponent <LineRenderer>(), trailGate2.transform.GetChild(3).GetComponent <BoxCollider>(), endPoint); // Place midway triggers throughout the track for (int i = 0; i < NUM_MID_TRIGGERS; i++) { midwayTriggers.Add(Instantiate(midwayCollider.gameObject).GetComponent <BaseTarget>()); // Start Mid1 Mid2 End // |--------|--------|--------| if (endPoint < startPoint) { // If the end point comes before the start point float distance = 1 - startPoint + endPoint; midPoint = ((distance) / (NUM_MID_TRIGGERS + 1)) * (i + 1) + startPoint; if (midPoint > 1) { midPoint -= 1; } } else { float distance = endPoint - startPoint; midPoint = ((distance) / (NUM_MID_TRIGGERS + 1)) * (i + 1) + startPoint; } gatePlacement.SetColliderPosition(midwayTriggers[i].GetComponent <BoxCollider>(), midPoint); } railing1 = GameObject.Find("generated_by_SplineMeshTiling"); foreach (MeshCollider railing in railing1.transform.GetComponentsInChildren <MeshCollider>()) { railing.tag = "TrailRailing"; railing.convex = true; railing.isTrigger = true; railing.gameObject.SetActive(false); } railing2 = GameObject.Find("generated_by_SplineMeshTiling_1"); foreach (MeshCollider railing in railing1.transform.GetComponentsInChildren <MeshCollider>()) { railing.tag = "TrailRailing"; railing.convex = true; railing.isTrigger = true; railing.gameObject.SetActive(false); } for (int i = 0; i < railing1.transform.GetChild(0).transform.childCount; i++) { railing1.transform.GetChild(i).gameObject.AddComponent <BaseTarget>(); } for (int i = 0; i < railing2.transform.childCount; i++) { railing2.transform.GetChild(i).gameObject.AddComponent <BaseTarget>(); } car = GameObject.Find("Car"); car.transform.position = trailGate1.transform.position; raycastOrigins.AddRange(car.GetComponentsInChildren <Transform>()); innerTrackColliders.AddRange(GameObject.Find("innertrack").transform.GetComponentsInChildren <BaseTarget>()); if (ctrler.Session.currentTrialNum > 1) { trailGate1.GetComponentInChildren <ParticleSystem>().transform.position = trailGate1.transform.position; trailGate1.GetComponentInChildren <ParticleSystem>().transform.rotation = trailGate1.transform.rotation; trailGate1.GetComponentInChildren <ParticleSystem>().Play(); trailSpace.GetComponent <AudioSource>().clip = ctrler.AudioClips["correct"]; trailSpace.GetComponent <AudioSource>().Play(); } // Use static camera for non-vr version of pinball if (ctrler.Session.settings.GetString("experiment_mode") == "trail") { ctrler.CursorController.SetVRCamera(false); } else { } }
public Gates() { var factory = new ConnectionFactory() { HostName = "206.189.60.128", UserName = "******", Password = "******" }; connection = factory.CreateConnection(); channel = connection.CreateModel(); channel.QueueDeclare(CheckInToGatesQueue, true, false, false, null); channel.QueueDeclare(VihiclesToGatesQueue, true, false, false, null); channel.QueueDeclare(GatesToVihiclesQueue, true, false, false); checkInConsumer = new EventingBasicConsumer(channel); checkInConsumer.Received += (model, ea) => { var body = ea.Body.ToArray(); GatePlacement placement = GatePlacement.Deserialize(body); var info = new PassengersInfo(placement.FlightId, placement.GateNum, placement.IsVip); if (passengers.ContainsKey(info)) { ++passengers[info]; } else { passengers.Add(info, 1); } Console.WriteLine($"[{DateTime.Now}] A new passenger has arrived:" + $"\nPassenger ID:\t{placement.PassengerId}" + $"\nIs VIP:\t{placement.IsVip}" + $"\nFlight ID:\t{placement.FlightId}" + $"\nGate number:\t{placement.GateNum}"); }; channel.BasicConsume(CheckInToGatesQueue, true, checkInConsumer); vihicleConsumer = new EventingBasicConsumer(channel); vihicleConsumer.Received += (model, ea) => { var body = ea.Body.ToArray(); var request = PassengersRequest.Deserialize(body); Console.WriteLine($"[{DateTime.Now}] A new request has come"); var info = new PassengersInfo(request.FlightId, request.GateNum, request.IsVip); int count = passengers[info]; var response = new Passengers(request.VehicleId, request.GateNum, request.IsVip, count); channel.BasicPublish("", GatesToVihiclesQueue, null, response.Serialize()); Console.WriteLine($"{DateTime.Now} The response has been sent"); passengers.Remove(info); }; channel.BasicConsume(VihiclesToGatesQueue, true, vihicleConsumer); }