Example #1
0
    /*
     * 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
        {
        }
    }
Example #2
0
        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);
        }