示例#1
0
        private void CreatePlane()
        {
            PlaneObject temp = Prefabs.instance.InstantiatePrefab <PlaneObject>(Prefabs.instance.planeObject);

            temp.Initialize(position, width, length);
            planeObject = temp;
        }
示例#2
0
        public IList <SequenceData> OutputSequence(IList <MotionObjectInfo> selected, IList <ProcParam <MotionProcEnv> > args, IEnumerable <ReadOnlyMotionFrame> frames, ProgressInformation progressInfo)
        {
            List <SequenceData> ret = new List <SequenceData>();

            foreach (MotionObjectInfo info in selected)
            {
                TimeSeriesValues values = new TimeSeriesValues("area");
                foreach (var frame in frames)
                {
                    PlaneObject sphere = frame[info] as PlaneObject;
                    if (sphere != null)
                    {
                        try {
                            values[frame.Time] = new decimal?[] { sphere.GetDimensions() };
                        } catch (ArithmeticException) {
                            values[frame.Time] = null;
                        }
                    }
                    else
                    {
                        values[frame.Time] = null;
                    }
                }
                SequenceData data = new SequenceData(values, null, PathEx.GiveName("Area", info.Name));
                ret.Add(data);
            }
            return(ret);
        }
示例#3
0
        private void RotatePlaneObject(double rotateAngle)
        {
            Matrix3D         matrix = PlaneObject.GetTransform();
            Transform3DGroup group  = new Transform3DGroup();

            group.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), rotateAngle)));
            group.Children.Add(new TranslateTransform3D(new Vector3D(matrix.OffsetX, matrix.OffsetY, matrix.OffsetZ)));
            PlaneObject.Transform = group;
        }
示例#4
0
        public IClippingPlane ToItem(AGSSerializationContext context)
        {
            TypedParameter isClipped = new TypedParameter(typeof(bool), IsPlaneObjectClipped);
            TypedParameter obj       = new TypedParameter(typeof(IObject), PlaneObject.ToItem(context));
            TypedParameter list      = new TypedParameter(typeof(List <IRenderLayer>), LayersToClip == null ? null :
                                                          LayersToClip.Select(c => c.ToItem(context)));
            var plane = context.Resolver.Container.Resolve <IClippingPlane>(isClipped, obj, list);

            return(plane);
        }
示例#5
0
    public PlaneObject CreatePlane()
    {
        if (!PlaneCollector.Empty())
        {
            return(PlaneCollector.Reuse());
        }

        PlaneObject t = new PlaneObject();

        t.Entity.transform.localPosition = new Vector3(0, 100);
        return(t);
    }
示例#6
0
    void OnMouseDown()
    {
        if (!selected && renderer.isVisible && !hasTurret) {
            renderer.material.color = Color.blue;
            selected = true;
            selection = this;
        } else {

            renderer.material.color = Color.white;
            selected = false;

        }
    }
示例#7
0
    public ImageGameObjectUtility(Texture aTex, System.Nullable <Vector2> aSize = null)
    {
        ParentObject = new GameObject("genImageObjectParent");
        //PlaneObject = GameObject.CreatePrimitive(PrimitiveType.Plane);
        PlaneObject = (GameObject)GameObject.Instantiate(ManagerManager.Manager.mReferences.mPlanePrefab);
        //GameObject.DestroyImmediate(PlaneObject.GetComponent<BoxCollider>());
        PlaneMaterial = new Material(ManagerManager.Manager.mReferences.mDefaultCharacterShader);
        PlaneObject.GetComponent <Renderer>().material = PlaneMaterial;
        set_new_texture(aTex, aSize);

        PlaneObject.transform.rotation  = Quaternion.AngleAxis(90, Vector3.right) * PlaneObject.transform.rotation;
        PlaneObject.transform.parent    = ParentObject.transform;
        ParentObject.transform.position = new Vector3(12321, 124345, 1234);       //this will solve some one frame appearance glitches
    }
示例#8
0
        protected override void LoadContent()
        {
            boxModel      = content.Load <Model>("content/box");
            sphereModel   = content.Load <Model>("content/sphere");
            capsuleModel  = content.Load <Model>("content/capsule");
            carModel      = content.Load <Model>("content/car");
            wheelModel    = content.Load <Model>("content/wheel");
            staticModel   = content.Load <Model>("content/staticmesh");
            planeModel    = content.Load <Model>("content/plane");
            pinModel      = content.Load <Model>("content/pin");
            compoundModel = content.Load <Model>("content/compound");
            cylinderModel = content.Load <Model>("content/cylinder");

            /*
             * try
             * {
             *  // some video card can't handle the >16 bit index type of the terrain
             *  terrainModel = content.Load<Model>("content/terrain");
             *  HeightmapObject heightmapObj = new HeightmapObject(this, terrainModel, Vector2.Zero);
             *  this.Components.Add(heightmapObj);
             * }
             * catch (Exception)
             * {*/
            // if that happens just createa a ground plane
            PlaneObject planeObj = new PlaneObject(this, planeModel, 15.0f);

            this.Components.Add(planeObj);
            //}

            TriangleMeshObject triObj = new TriangleMeshObject(this, staticModel, Matrix.Identity, Vector3.Zero);

            this.Components.Add(triObj);

            carObject = new CarObject(this, carModel, wheelModel, true, true, 30.0f, 5.0f, 4.7f, 5.0f, 0.20f, 0.4f, 0.05f, 0.45f, 0.3f, 1, 520.0f, physicSystem.Gravity.Length());
            carObject.Car.Chassis.Body.MoveTo(new Vector3(-5, -13, 5), Matrix.Identity);
            carObject.Car.EnableCar();
            carObject.Car.Chassis.Body.AllowFreezing = false;
            this.Components.Add(carObject);

            camera.Position = Vector3.Down * 12 + Vector3.Backward * 30.0f;

            CreateScene6();

            base.LoadContent();
        }
示例#9
0
        public PlaneModel()
        {
            AirplaneModel.Content = GetAirplaneModel();
            AirplaneModel.Children.Add(Label);

            Random rnd = new Random();

            rotateAngle = rnd.Next(0, 360);

            PlaneObject.Children.Add(AirplaneModel);
            PlaneObject.Children[0].Transform = new TranslateTransform3D(new Vector3D(0, rnd.Next(200, 1500), 0));

            Transform3DGroup group = new Transform3DGroup();

            group.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), rotateAngle)));
            group.Children.Add(new TranslateTransform3D(new Vector3D(rnd.Next(1000, 1500), rnd.Next(1000, 1500), rnd.Next(300, 800))));
            PlaneObject.Transform = group;
            PlaneObject.SetName("Aircraft");
        }
示例#10
0
        protected override void LoadContent()
        {
            boxModel      = content.Load <Model>("Content/box");
            sphereModel   = content.Load <Model>("Content/sphere");
            capsuleModel  = content.Load <Model>("Content/capsule");
            carModel      = content.Load <Model>("Content/car");
            wheelModel    = content.Load <Model>("Content/wheel");
            staticModel   = content.Load <Model>("Content/StaticMesh");
            planeModel    = content.Load <Model>("Content/plane");
            pinModel      = content.Load <Model>("Content/pin");
            compoundModel = content.Load <Model>("Content/compound");
            cylinderModel = content.Load <Model>("Content/cylinder");

            try
            {
                terrainModel = content.Load <Model>("content/terrain");
                var heightmapObj = new HeightmapObject(this, terrainModel, Vector2.Zero);
                Components.Add(heightmapObj);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                var planeObj = new PlaneObject(this, planeModel, 15.0f);
                Components.Add(planeObj);
            }

            var triObj = new TriangleMeshObject(this, staticModel, Matrix.Identity, Vector3.Zero);

            Components.Add(triObj);

            carObject = new CarObject(this, carModel, wheelModel, true, true, 30.0f, 5.0f, 4.7f, 5.0f, 0.20f, 0.4f, 0.05f, 0.45f, 0.3f, 1, 520.0f, physicSystem.Gravity.Length());
            carObject.Car.Chassis.Body.MoveTo(new Vector3(-5, -13, 5), Matrix.Identity);
            carObject.Car.EnableCar();
            carObject.Car.Chassis.Body.AllowFreezing = false;
            Components.Add(carObject);

            camera.Position = Vector3.Down * 12 + Vector3.Backward * 30.0f;

            CreateScene6();

            base.LoadContent();
        }
示例#11
0
 public void set_new_texture(Texture aTex, System.Nullable <Vector2> aSize = null)
 {
     aSize *= GameConstants.SCALE;
     if (aSize == null)
     {
         if (aTex != null)
         {
             BaseDimension = new Vector2(aTex.width, aTex.height);
         }
         else
         {
             BaseDimension = new Vector2(1, 1);
         }
     }
     else
     {
         BaseDimension = aSize.Value;
     }
     PlaneObject.GetComponent <Renderer>().material.mainTexture = aTex;
     PixelDimension = BaseDimension;
 }
示例#12
0
        /// <summary>
        /// Should do scene and object initialization common to client and server
        /// </summary>
        public virtual void InitializeEnvironment()
        {

            bool useCustomTerrain = false;

            if (useCustomTerrain)
            {
                try
                {
                    terrain = new Terrain(new Vector3(0, -15, 0), // position
                        //new Vector3(100f, .1f, 100f),  // X with, possible y range, Z depth 
                                            new Vector3(15000f, .55f, 15000f),  // X with, possible y range, Z depth 
                                            100, 100, graphicsDevice, moon);

                    objectsToAdd.Add(terrain.ID, terrain);
                }
                catch (Exception E)
                {
                    System.Diagnostics.Debug.WriteLine(E.StackTrace);
                }
            }
            else
            {
                try
                {
                    // some video cards can't handle the >16 bit index type of the terrain
                    //HeightmapObject heightmapObj = new HeightmapObject(terrainModel, Vector2.Zero, new Vector3(0, 0, 0));
                    //objectsToAdd.Add(heightmapObj.ID, heightmapObj);
                }
                catch (Exception E)
                {
                    // if that happens just create a ground plane 
                    planeObj = new PlaneObject(planeModel, 0.0f, new Vector3(0, -15, 0), 0);
                    objectsToAdd.Add(planeObj.ID, planeObj);
                    System.Diagnostics.Debug.WriteLine(E.StackTrace);
                }
            }
        }
示例#13
0
    static void RenderLightGizmo(GameObject obj, GizmoType gizmoType)
    {
        PlaneObject planeObject = obj.GetComponent <PlaneObject>();

        if (planeObject != null)
        {
            Gizmos.color = Color.blue;
            Gizmos.DrawRay(obj.transform.position, obj.transform.forward);

            Vector3[] points = new Vector3[4];
            Plane     plane  = planeObject.plane;
            points[0] = drawCubeAndReturnPosition(ref obj, new Vector3(plane.size.x, plane.size.y));
            points[1] = drawCubeAndReturnPosition(ref obj, new Vector3(plane.size.x, -plane.size.y));
            points[2] = drawCubeAndReturnPosition(ref obj, new Vector3(-plane.size.x, -plane.size.y));
            points[3] = drawCubeAndReturnPosition(ref obj, new Vector3(-plane.size.x, plane.size.y));

            Gizmos.DrawLine(points[0], points[1]);
            Gizmos.DrawLine(points[0], points[3]);
            Gizmos.DrawLine(points[1], points[2]);
            Gizmos.DrawLine(points[2], points[3]);
            planeObject.OnValidate();
        }
    }
示例#14
0
    void Start()
    {
        FPS_text = GameObject.Find("Canvas/FPS").GetComponent <TextMeshProUGUI>();

        Stopwatch sw = new Stopwatch();

        sw.Start();

        cursorMaterial = Resources.Load("UnlitColor") as Material;

        float[,] GetBufferData(int port)
        {
            UnityBuffer unityBuffer = new UnityBuffer();

            if (unityBuffer.connect(host: "127.0.0.1", port: port))
            {
                print("connected");
                unityBuffer.header = unityBuffer.getHeader();

                float[,] data = unityBuffer.getFloatData(0, unityBuffer.header.nSamples - 1);

                //print(data.GetLength(0));
                //print(data.GetLength(1));

                return(data);
            }
            else
            {
                print("connection failed...");
                return(new float[0, 0]);
            }
        }

        void printArrayDimensions(float[,] array)
        {
            print(array.GetLength(0));
            print(array.GetLength(1));
        }

        // get trajectories

        List <float[, ]> trajectory = new List <float[, ]>();

        foreach (var port in ports)
        {
            print(port);
            trajectory.Add(GetBufferData(port));
            printArrayDimensions(trajectory[trajectory.Count - 1]);
        }

        // get colors

        float[,] target_positions = GetBufferData(1002);
        printArrayDimensions(target_positions);


        // build cursors

        for (int TRIAL = 0; TRIAL < Number.trials; TRIAL++)
        {
            // reshape

            float[,] trajectory_to_use = new float[Number.frames, Number.axes];

            for (int FRAME = 0; FRAME < Number.frames; FRAME++)
            {
                for (int AXIS = 0; AXIS < Number.axes; AXIS++)
                {
                    //print(TRIAL.ToString() + ":" + FRAME.ToString() + ":" + AXIS.ToString());
                    trajectory_to_use[FRAME, AXIS] = trajectory[AXIS][TRIAL, FRAME];
                }
            }


            Color colorToUse  = colors[(int)target_positions[TRIAL, 0] - 1];
            float randomValue = Random.Range(.25f, 1);
            colorToUse.r = colorToUse.r * randomValue;
            colorToUse.g = colorToUse.g * randomValue;
            colorToUse.b = colorToUse.b * randomValue;


            PlaneObject cursorPlane = PlaneObject.Create(width: Sizes.cursor,
                                                         length: Sizes.cursor,
                                                         widthSegments: 1,
                                                         lengthSegments: 1);

            cursorPlane.gameObject.GetComponent <Renderer>().material       = cursorMaterial;
            cursorPlane.gameObject.GetComponent <Renderer>().material.color = colorToUse;

            cursors.Add(new Cursor(gameObject: cursorPlane.gameObject, trajectory: trajectory_to_use));

            //cursors[cursors.Count - 1].gameObject.transform.localScale = new Vector3(.1f, .1f, .1f) * 15;
            //cursors[cursors.Count - 1].gameObject.GetComponent<Renderer>().material = cursorMaterial;
            //cursors[cursors.Count - 1].gameObject.GetComponent<Renderer>().material.color = colorToUse;
        }



        // add target positions

        for (int TARGET = 0; TARGET < Number.targetPositions; TARGET++)
        {
            GameObject target = Create.Polygon(position: new Vector3(targetPositions[TARGET].x, 0, targetPositions[TARGET].y),
                                               rotation: new Vector3(-90, 0, 0),
                                               radius: Sizes.target,
                                               edgeThickness: .1f,
                                               nSegments: Defaults.nSegementsCircle,
                                               color: Color.white, //colors[TARGET],
                                               sortingOrder: 2);

            //GameObject target = GameObject.CreatePrimitive(PrimitiveType.Plane);
            //target.transform.localScale = new Vector3(.1f, .1f, .1f) * 15;
            //target.transform.position = new Vector3(targetPositions[TARGET].x, 0, targetPositions[TARGET].y);
            //target.GetComponent<Renderer>().material = cursorMaterial;
            //target.GetComponent<Renderer>().material.color = colors[TARGET];

            target.name = TARGET.ToString();
        }

        print(sw.Elapsed.Seconds);
    }
示例#15
0
 public void RecyclePlane(PlaneObject Plane)
 {
     PlaneCollector.Collect(Plane);
 }
示例#16
0
    void Start()
    {
        Stopwatch sw = new Stopwatch();

        sw.Start();

        // timeVector setup

        for (int FRAME = 0; FRAME < Number.frames; FRAME++)
        {
            timeVector[FRAME] = (float)FRAME / 144;
        }

        // scene setup

        FPS_text       = GameObject.Find("Canvas/FPS").GetComponent <TextMeshProUGUI>();
        cursorMaterial = Resources.Load("UnlitColor") as Material;
        timeText       = GameObject.Find("Canvas/Time").GetComponent <TextMeshProUGUI>();
        sessionText    = GameObject.Find("Canvas/Session").GetComponent <TextMeshProUGUI>();

        // session setup

        float[,] GetBufferData(int port)
        {
            UnityBuffer unityBuffer = new UnityBuffer();

            if (unityBuffer.connect(host: "127.0.0.1", port: port))
            {
                print("connected: " + port.ToString());
                unityBuffer.header = unityBuffer.getHeader();
                float[,] data      = unityBuffer.getFloatData(0, unityBuffer.header.nSamples - 1);
                return(data);
            }
            else
            {
                print("connection failed...");
                return(new float[0, 0]);
            }
        }

        void printArrayDimensions(float[,] array)
        {
            print(array.GetLength(0));
            print(array.GetLength(1));
        }

        // reshape method
        List <Vector2> reshapeTrajectory(List <float[, ]> trajectoryData, int TRIAL, float xMod, float yMod)
        {
            List <Vector2> trajectoryToUse = new List <Vector2>();

            for (int FRAME = 0; FRAME < Number.frames; FRAME++)
            {
                Vector2 position = new Vector2();

                for (int AXIS = 0; AXIS < Number.axes; AXIS++)
                {
                    //print(TRIAL.ToString() + ":" + FRAME.ToString() + ":" + AXIS.ToString());
                    if (AXIS == 0)
                    {
                        position[AXIS] = trajectoryData[AXIS][TRIAL, FRAME] + xMod;
                    }
                    else
                    {
                        position[AXIS] = trajectoryData[AXIS][TRIAL, FRAME] + yMod;
                    }
                }
                trajectoryToUse.Add(position);
            }

            return(trajectoryToUse);
        }

        void AddCursors(int[] ports, string parentName, CursorType cursorType, float xMod, float yMod, float[,] target_positions, GameObject grandParent)
        {
            GameObject parent = new GameObject(name: parentName);

            parent.transform.parent = grandParent.transform;

            // get trajectories

            List <float[, ]> trajectory = new List <float[, ]>();

            foreach (var port in ports)
            {
                //print(port);
                trajectory.Add(GetBufferData(port));
                //printArrayDimensions(trajectory[trajectory.Count - 1]);
            }

            // build cursors

            for (int TRIAL = 0; TRIAL < Number.trials; TRIAL++)
            {
                List <Vector2> cursorTrajectory = reshapeTrajectory(trajectory, TRIAL, xMod, yMod);

                Color colorToUse = colors[(int)target_positions[TRIAL, 0] - 1];

                float randomValue = UnityEngine.Random.Range(.25f, 1);
                colorToUse.r = colorToUse.r * randomValue;
                colorToUse.g = colorToUse.g * randomValue;
                colorToUse.b = colorToUse.b * randomValue;

                GameObject SpawnCursorObject()
                {
                    switch (cursorType)
                    {
                    case CursorType.cursor:
                        GameObject cursorObject1 = PlaneObject.Create(width: Sizes.cursor,
                                                                      length: Sizes.cursor,
                                                                      widthSegments: 1,
                                                                      lengthSegments: 1).gameObject;

                        cursorObject1.GetComponent <Renderer>().material       = cursorMaterial;
                        cursorObject1.GetComponent <Renderer>().material.color = colorToUse;
                        return(cursorObject1);

                    case CursorType.gaze:
                        GameObject cursorObject2 = Create.Polygon(position: Vector3.zero,
                                                                  rotation: new Vector3(-90, 0, 0),
                                                                  radius: Sizes.gaze,
                                                                  edgeThickness: .1f,
                                                                  nSegments: Defaults.nSegementsCircle,
                                                                  color: colorToUse,
                                                                  sortingOrder: 1);
                        return(cursorObject2);

                    default:
                        return(new GameObject());
                    }
                }

                GameObject cursorObject = SpawnCursorObject();
                cursorObject.name             = "cursor." + TRIAL.ToString();
                cursorObject.transform.parent = parent.transform;

                cursors.Add(new Cursor(gameObject: cursorObject, trajectory: cursorTrajectory));
            }
        }

        // add target positions

        void DrawTargets(float xMod, float yMod, string parentName, GameObject grandParent)
        {
            GameObject targets = new GameObject(name: parentName);

            targets.transform.parent = grandParent.transform;

            for (int TARGET = 0; TARGET < Number.targetPositions; TARGET++)
            {
                GameObject target = Create.Polygon(position: new Vector3(targetPositions[TARGET].x + xMod, 0, targetPositions[TARGET].y + yMod),
                                                   rotation: new Vector3(-90, 0, 0),
                                                   radius: Sizes.target,
                                                   edgeThickness: .1f,
                                                   nSegments: Defaults.nSegementsCircle,
                                                   color: Color.white, //colors[TARGET],
                                                   sortingOrder: 2);

                target.name             = "target." + TARGET.ToString();
                target.transform.parent = targets.transform;
            }
        }

        //int[] sessionsToUse = new int[] { 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 };
        int[] sessionsToUse = new int[] { 12, 13, 14, 15, 16, 17 };
        int   sessionCount  = 0;


        void prepareSession(int SESSION)
        {
            print("***************************************************************");
            print("SESSION: " + SESSION.ToString());

            sessionText.text = "S" + Labels.session[SESSION];

            GameObject grandParentObject = new GameObject(name: Labels.session[SESSION]);

            float yModToUse = 0;

            for (int CONTROL = 0; CONTROL < Number.control; CONTROL++)
            {
                DrawTargets(xMod[CONTROL], yModToUse, "targets." + Labels.control[CONTROL], grandParentObject);
            }

            float[,] target_positions_solo = GetBufferData(Ports.target_positions_solo);

            AddCursors(Ports.P1, "P1", CursorType.cursor, xMod[0], yModToUse, target_positions_solo, grandParentObject);
            AddCursors(Ports.P2, "P2", CursorType.cursor, xMod[0], yModToUse, target_positions_solo, grandParentObject);

            AddCursors(Ports.P1_gaze_solo, "P1_gaze_solo", CursorType.gaze, xMod[0], yModToUse, target_positions_solo, grandParentObject);
            AddCursors(Ports.P2_gaze_solo, "P2_gaze_solo", CursorType.gaze, xMod[0], yModToUse, target_positions_solo, grandParentObject);

            float[,] target_positions_joint = GetBufferData(Ports.target_positions_joint);

            AddCursors(Ports.joint, "joint", CursorType.cursor, xMod[1], yModToUse, target_positions_joint, grandParentObject);

            AddCursors(Ports.P1_gaze_joint, "P1_gaze_joint", CursorType.gaze, xMod[1], yModToUse, target_positions_joint, grandParentObject);
            AddCursors(Ports.P2_gaze_joint, "P2_gaze_joint", CursorType.gaze, xMod[1], yModToUse, target_positions_joint, grandParentObject);
        }

        prepareSession(1);

        void StartOBSrecording()
        {
            var proc = new System.Diagnostics.Process
            {
                StartInfo = new System.Diagnostics.ProcessStartInfo // get process by window name - super dodge - also cannot run Pathly from unity
                {
                    FileName               = @"C:\Program Files (x86)\obs-studio\OBSCommand_v1.5.4\OBSCommand\OBSCommand.exe",
                    Arguments              = "/startrecording",
                    UseShellExecute        = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow         = true
                }
            };

            proc.Start();
        }

        StartOBSrecording();

        print(sw.Elapsed.Seconds);
    }
示例#17
0
    void Start()
    {
        Stopwatch sw = new Stopwatch();

        sw.Start();

        // timeVector setup

        for (int FRAME = 0; FRAME < Number.frames; FRAME++)
        {
            timeVector[FRAME] = (float)FRAME / 144;
        }

        // scene setup

        FPS_text       = GameObject.Find("Canvas/FPS_text").GetComponent <TextMeshProUGUI>();
        cursorMaterial = Resources.Load("UnlitColor") as Material;

        // add target positions

        void DrawTargets(float xMod, string parentName)
        {
            GameObject targets = new GameObject(name: parentName);

            for (int TARGET = 0; TARGET < Number.targetPositions; TARGET++)
            {
                GameObject target = Create.Polygon(position: new Vector3(targetPositions[TARGET].x + xMod, 0, targetPositions[TARGET].y),
                                                   rotation: new Vector3(-90, 0, 0),
                                                   radius: Sizes.target,
                                                   edgeThickness: .1f,
                                                   nSegments: Defaults.nSegementsCircle,
                                                   color: Color.white, //colors[TARGET],
                                                   sortingOrder: 2);

                target.name             = "target." + TARGET.ToString();
                target.transform.parent = targets.transform;
            }
        }

        for (int CONTROL = 0; CONTROL < Number.control; CONTROL++)
        {
            DrawTargets(xMod[CONTROL], "targets." + Labels.control[CONTROL]);
        }

        // session setup

        float[,] GetBufferData(int port)
        {
            UnityBuffer unityBuffer = new UnityBuffer();

            if (unityBuffer.connect(host: "127.0.0.1", port: port))
            {
                print("connected");
                unityBuffer.header = unityBuffer.getHeader();
                float[,] data      = unityBuffer.getFloatData(0, unityBuffer.header.nSamples - 1);
                return(data);
            }
            else
            {
                print("connection failed...");
                return(new float[0, 0]);
            }
        }

        void printArrayDimensions(float[,] array)
        {
            print(array.GetLength(0));
            print(array.GetLength(1));
        }

        // reshape method
        List <Vector2> reshapeTrajectory(List <float[, ]> trajectoryData, int TRIAL, float xMod)
        {
            List <Vector2> trajectoryToUse = new List <Vector2>();

            for (int FRAME = 0; FRAME < Number.frames; FRAME++)
            {
                Vector2 position = new Vector2();

                for (int AXIS = 0; AXIS < Number.axes; AXIS++)
                {
                    //print(TRIAL.ToString() + ":" + FRAME.ToString() + ":" + AXIS.ToString());
                    if (AXIS == 0)
                    {
                        position[AXIS] = trajectoryData[AXIS][TRIAL, FRAME] + xMod;
                    }
                    else
                    {
                        position[AXIS] = trajectoryData[AXIS][TRIAL, FRAME];
                    }
                }
                trajectoryToUse.Add(position);
            }

            return(trajectoryToUse);
        }

        void AddCursors(int[] ports, string parentName, CursorType cursorType, float xMod, float[,] target_positions)
        {
            GameObject parent = new GameObject(name: parentName);

            // get trajectories

            List <float[, ]> trajectory = new List <float[, ]>();

            foreach (var port in ports)
            {
                print(port);
                trajectory.Add(GetBufferData(port));
                printArrayDimensions(trajectory[trajectory.Count - 1]);
            }

            // build cursors

            for (int TRIAL = 0; TRIAL < Number.trials; TRIAL++)
            {
                List <Vector2> cursorTrajectory = reshapeTrajectory(trajectory, TRIAL, xMod);

                Color colorToUse = colors[(int)target_positions[TRIAL, 0] - 1];

                float randomValue = UnityEngine.Random.Range(.25f, 1);
                colorToUse.r = colorToUse.r * randomValue;
                colorToUse.g = colorToUse.g * randomValue;
                colorToUse.b = colorToUse.b * randomValue;

                GameObject SpawnCursorObject()
                {
                    switch (cursorType)
                    {
                    case CursorType.cursor:
                        GameObject cursorObject1 = PlaneObject.Create(width: Sizes.cursor,
                                                                      length: Sizes.cursor,
                                                                      widthSegments: 1,
                                                                      lengthSegments: 1).gameObject;

                        cursorObject1.GetComponent <Renderer>().material       = cursorMaterial;
                        cursorObject1.GetComponent <Renderer>().material.color = colorToUse;
                        return(cursorObject1);

                    case CursorType.gaze:
                        GameObject cursorObject2 = Create.Polygon(position: Vector3.zero,
                                                                  rotation: new Vector3(-90, 0, 0),
                                                                  radius: Sizes.gaze,
                                                                  edgeThickness: .1f,
                                                                  nSegments: Defaults.nSegementsCircle,
                                                                  color: colorToUse,
                                                                  sortingOrder: 1);
                        return(cursorObject2);

                    default:
                        return(new GameObject());
                    }
                }

                GameObject cursorObject = SpawnCursorObject();
                cursorObject.name             = "cursor." + TRIAL.ToString();
                cursorObject.transform.parent = parent.transform;

                cursors.Add(new Cursor(gameObject: cursorObject, trajectory: cursorTrajectory));
            }
        }

        float[,] target_positions_solo = GetBufferData(Ports.target_positions_solo);

        AddCursors(Ports.P1, "P1", CursorType.cursor, xMod[0], target_positions_solo);
        AddCursors(Ports.P2, "P2", CursorType.cursor, xMod[0], target_positions_solo);

        AddCursors(Ports.P1_gaze_solo, "P1_gaze_solo", CursorType.gaze, xMod[0], target_positions_solo);
        AddCursors(Ports.P2_gaze_solo, "P2_gaze_solo", CursorType.gaze, xMod[0], target_positions_solo);

        float[,] target_positions_joint = GetBufferData(Ports.target_positions_joint);

        AddCursors(Ports.joint, "joint", CursorType.cursor, xMod[1], target_positions_joint);

        AddCursors(Ports.P1_gaze_joint, "P1_gaze_joint", CursorType.gaze, xMod[1], target_positions_joint);
        AddCursors(Ports.P2_gaze_joint, "P2_gaze_joint", CursorType.gaze, xMod[1], target_positions_joint);

        print(sw.Elapsed.Seconds);
    }
示例#18
0
    // Token: 0x060041AA RID: 16810 RVA: 0x0014CDD4 File Offset: 0x0014B1D4
    private void CreateButton(int id, Vector3 position)
    {
        PlaneObject planeObject = PlaneObject.Create(0.67f, 0.67f, 2, 2);

        planeObject.gameObject.GetComponent <MeshRenderer>().sharedMaterial.color = new Color(1f, 1f, 1f, 1f);
        BoxCollider boxCollider = planeObject.gameObject.AddComponent <BoxCollider>();

        boxCollider.isTrigger = true;
        planeObject.gameObject.transform.position = position;
        ButtonTrigger buttonTrigger = planeObject.gameObject.AddComponent <ButtonTrigger>();

        buttonTrigger.ID = id;
        this.buttons.Add(planeObject.gameObject);
        switch (id)
        {
        case 0:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/triangle") as Texture2D);
            break;

        case 1:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/plane") as Texture2D);
            break;

        case 2:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/circle") as Texture2D);
            break;

        case 3:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/ellipse") as Texture2D);
            break;

        case 4:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/ring") as Texture2D);
            break;

        case 5:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/box") as Texture2D);
            break;

        case 6:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/cylinder") as Texture2D);
            break;

        case 7:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/cone") as Texture2D);
            break;

        case 8:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/sphere") as Texture2D);
            break;

        case 9:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/ellipsoid") as Texture2D);
            break;

        case 10:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/pyramid") as Texture2D);
            break;

        case 11:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/geosphere") as Texture2D);
            break;

        case 12:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/tube") as Texture2D);
            break;

        case 13:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/capsule") as Texture2D);
            break;

        case 14:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/roundedBox") as Texture2D);
            break;

        case 15:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/torus") as Texture2D);
            break;

        case 16:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/torusKnot") as Texture2D);
            break;

        case 17:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/arc") as Texture2D);
            break;

        case 18:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/sphericalcone") as Texture2D);
            break;

        case 19:
            planeObject.gameObject.GetComponent <Renderer>().material             = new Material(Shader.Find("Unlit/Transparent"));
            planeObject.gameObject.GetComponent <Renderer>().material.mainTexture = this.GetTexture(Resources.Load("icons/superellipsoid") as Texture2D);
            break;
        }
        if (planeObject)
        {
            planeObject.gameObject.transform.position = position + new Vector3(0f, 0.1f, 0f);
        }
    }
示例#19
0
    // Token: 0x060041A6 RID: 16806 RVA: 0x0014C3B4 File Offset: 0x0014A7B4
    public void OnButtonHit(int id)
    {
        this.animTimeout = this.animTimeMax;
        BaseObject baseObject = null;

        switch (id)
        {
        case 0:
        {
            baseObject = Triangle.Create(1f, 0);
            float[] array = new float[6];
            array[0]            = 4f;
            array[1]            = 4f;
            this.shapeParamsMax = array;
            float[] array2 = new float[6];
            array2[0]             = 1f;
            array2[1]             = 1f;
            this.shapeParamsStart = array2;
            break;
        }

        case 1:
            baseObject          = PlaneObject.Create(1f, 1f, 1, 1);
            this.shapeParamsMax = new float[]
            {
                4f,
                4f,
                1f,
                1f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                1f,
                1f,
                0f,
                0f
            };
            break;

        case 2:
        {
            baseObject = Circle.Create(1f, 3);
            float[] array3 = new float[6];
            array3[0]           = 2.5f;
            array3[1]           = 40f;
            this.shapeParamsMax = array3;
            float[] array4 = new float[6];
            array4[0]             = 1f;
            array4[1]             = 3f;
            this.shapeParamsStart = array4;
            break;
        }

        case 3:
            baseObject          = Ellipse.Create(1f, 0.5f, 3);
            this.shapeParamsMax = new float[]
            {
                2.5f,
                1.2f,
                40f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                0.5f,
                3f,
                0f,
                0f,
                0f
            };
            break;

        case 4:
            baseObject          = Ring.Create(0.5f, 1f, 3);
            this.shapeParamsMax = new float[]
            {
                1f,
                2.5f,
                40f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                0.5f,
                1f,
                3f,
                0f,
                0f,
                0f
            };
            break;

        case 5:
            baseObject          = Box.Create(1f, 1f, 1f, 1, 1, 1, false, null, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                2.5f,
                2.5f,
                2.5f,
                1f,
                1f,
                1f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                1f,
                1f,
                1f,
                1f
            };
            break;

        case 6:
            baseObject          = Cylinder.Create(1f, 3f, 3, 1, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1.25f,
                4f,
                40f,
                1f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                3f,
                3f,
                1f,
                0f,
                0f,
                0f
            };
            break;

        case 7:
            baseObject          = Cone.Create(1f, 0f, 0f, 2f, 3, 10, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1.25f,
                0f,
                4f,
                40f,
                10f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                2f,
                3f,
                10f,
                0f,
                0f
            };
            break;

        case 8:
        {
            baseObject = Sphere.Create(1f, 4, 0f, 0f, 0f, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            float[] array5 = new float[6];
            array5[0]           = 2.25f;
            array5[1]           = 40f;
            this.shapeParamsMax = array5;
            float[] array6 = new float[6];
            array6[0]             = 1f;
            array6[1]             = 4f;
            this.shapeParamsStart = array6;
            break;
        }

        case 9:
            baseObject          = Ellipsoid.Create(1f, 1f, 1f, 4, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1.25f,
                2.45f,
                2.5f,
                40f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                1f,
                4f,
                0f,
                0f,
                0f
            };
            break;

        case 10:
            baseObject          = Pyramid.Create(1f, 1f, 1f, 1, 1, 1, false, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                2.7f,
                2.7f,
                1.7f,
                1f,
                1f,
                1f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                1f,
                1f,
                1f,
                1f,
                0f,
                0f,
                0f
            };
            break;

        case 11:
        {
            baseObject = GeoSphere.Create(1f, 0, GeoSpherePrimitive.BaseType.Icosahedron, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            float[] array7 = new float[6];
            array7[0]           = 2.45f;
            array7[1]           = 4f;
            this.shapeParamsMax = array7;
            float[] array8 = new float[6];
            array8[0]             = 1f;
            this.shapeParamsStart = array8;
            break;
        }

        case 12:
            baseObject          = Tube.Create(0.8f, 1f, 1f, 3, 1, 0f, false, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                0.8f,
                1.5f,
                4f,
                40f,
                0f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                0.8f,
                1f,
                1f,
                3f,
                0f,
                0f,
                0f,
                0f
            };
            break;

        case 13:
            baseObject          = Capsule.Create(1f, 1f, 4, 1, false, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1.2f,
                4f,
                40f,
                1f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                4f,
                1f,
                0f,
                0f,
                0f
            };
            break;

        case 14:
            baseObject          = RoundedCube.Create(1f, 1f, 1f, 1, 0.2f, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1.6f,
                1.6f,
                1.6f,
                20f,
                0.6f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                1f,
                1f,
                1f,
                0.2f,
                0f,
                0f,
                0f
            };
            break;

        case 15:
            baseObject          = Torus.Create(1f, 0.5f, 4, 4, 0f, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1.6f,
                0.8f,
                40f,
                40f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                0.5f,
                4f,
                4f,
                0f,
                0f,
                0f
            };
            break;

        case 16:
            baseObject          = TorusKnot.Create(0.5f, 0.3f, 10, 4, 2, 3, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                1f,
                0.5f,
                120f,
                40f,
                2f,
                3f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                0.5f,
                0.3f,
                10f,
                4f,
                2f,
                3f,
                0f,
                0f,
                0f
            };
            break;

        case 17:
            baseObject = Arc.Create(1f, 1f, 1f, 1f, 10, PivotPosition.Botttom);
            ((Arc)baseObject).gizmo.gameObject.transform.localPosition = new Vector3(-1f, -1f, 0f);
            this.shapeParamsMax = new float[]
            {
                4f,
                3f,
                2f,
                1f,
                20f,
                -1f
            };
            this.shapeParamsStart = new float[]
            {
                0.5f,
                0.5f,
                0.1f,
                0.5f,
                0f,
                0f
            };
            break;

        case 18:
            baseObject          = SphericalCone.Create(1f, 20, 180f, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                2f,
                40f,
                20f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                1f,
                20f,
                360f,
                0f,
                0f,
                0f
            };
            break;

        case 19:
            baseObject          = SuperEllipsoid.Create(1f, 1f, 1f, 20, 0.5f, 1f, (!this.flatNormals) ? NormalsType.Vertex : NormalsType.Face, PivotPosition.Botttom);
            this.shapeParamsMax = new float[]
            {
                2f,
                2f,
                2f,
                20f,
                0.5f,
                1f,
                0f,
                0f,
                0f
            };
            this.shapeParamsStart = new float[]
            {
                0.5f,
                0.5f,
                0.5f,
                1f,
                0f,
                0f,
                0f,
                0f,
                0f
            };
            break;

        case 20:
            this.textureToggle = !this.textureToggle;
            break;

        case 21:
            this.flatNormals = !this.flatNormals;
            break;
        }
        if (baseObject)
        {
            if (this.shapeOld)
            {
                UnityEngine.Object.Destroy(this.shapeOld.gameObject);
            }
            this.shapeOld  = this.shapeMain;
            this.shapeMain = baseObject;
            this.shapeMain.gameObject.GetComponent <Renderer>().material = new Material(this.GetSpecularShader());
            this.shapeMain.gameObject.GetComponent <Renderer>().material.SetColor("_Color", new Color(1f, 0.7058824f, 0.7058824f));
            this.shapeMain.gameObject.GetComponent <Renderer>().material.SetColor("_SpecColor", Color.white);
            this.shapeMain.gameObject.transform.position = this.prevPosition.position;
            this.nextShowTimeout = this.nextShowTimeoutMax;
            this.shapeID         = id;
        }
        if (this.textureToggle)
        {
            this.shapeMain.GetComponent <MeshRenderer>().sharedMaterial = (Resources.Load("Checker") as Material);
        }
        else
        {
            this.shapeMain.GetComponent <MeshRenderer>().sharedMaterial = new Material(this.GetSpecularShader());
            this.shapeMain.gameObject.GetComponent <Renderer>().material.SetColor("_Color", new Color(1f, 0.7058824f, 0.7058824f));
            this.shapeMain.gameObject.GetComponent <Renderer>().material.SetColor("_SpecColor", Color.white);
        }
    }
示例#20
0
    void AddCursors(int[] ports, string parentName, CursorType cursorType, float xMod, float yMod, float[,] target_positions, GameObject grandParent)
    {
        GameObject parent = new GameObject(name: parentName);

        parent.transform.parent = grandParent.transform;

        // get trajectories

        List <float[, ]> trajectory = new List <float[, ]>();

        foreach (var port in ports)
        {
            //print(port);
            trajectory.Add(GetBufferData(port));
            //printArrayDimensions(trajectory[trajectory.Count - 1]);
        }

        // build cursors

        for (int TRIAL = 0; TRIAL < Number.trials; TRIAL++)
        {
            List <Vector2> cursorTrajectory = reshapeTrajectory(trajectory, TRIAL, xMod, yMod);

            Color colorToUse = colors[(int)target_positions[TRIAL, 0] - 1];

            float randomValue = UnityEngine.Random.Range(.25f, 1);
            colorToUse.r = colorToUse.r * randomValue;
            colorToUse.g = colorToUse.g * randomValue;
            colorToUse.b = colorToUse.b * randomValue;

            GameObject SpawnCursorObject()
            {
                switch (cursorType)
                {
                case CursorType.cursor:
                    GameObject cursorObject1 = PlaneObject.Create(width: Sizes.cursor,
                                                                  length: Sizes.cursor,
                                                                  widthSegments: 1,
                                                                  lengthSegments: 1).gameObject;

                    cursorObject1.GetComponent <Renderer>().material       = cursorMaterial;
                    cursorObject1.GetComponent <Renderer>().material.color = colorToUse;
                    return(cursorObject1);

                case CursorType.gaze:
                    GameObject cursorObject2 = Create.Polygon(position: Vector3.zero,
                                                              rotation: new Vector3(-90, 0, 0),
                                                              radius: Sizes.gaze,
                                                              edgeThickness: .1f,
                                                              nSegments: Defaults.nSegementsCircle,
                                                              color: colorToUse,
                                                              sortingOrder: 1);
                    return(cursorObject2);

                default:
                    return(new GameObject());
                }
            }

            GameObject cursorObject = SpawnCursorObject();
            cursorObject.name             = "cursor." + TRIAL.ToString();
            cursorObject.transform.parent = parent.transform;

            cursors.Add(new Cursor(gameObject: cursorObject, trajectory: cursorTrajectory));
        }
    }