Skip to content
Snippets Groups Projects
ExperimentController.cs~ 2.4 KiB
Newer Older
13035516's avatar
13035516 committed
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Reflection;

[StructLayout(LayoutKind.Sequential, Pack = 0)]
public struct TimingSetting {
    public float TrialStart;
    public float TargetOnset;
    public float TargetOnsetDev;
    public float Go;
    public float MoveMax;
    public float HoldTime;
};

public class ExperimentController : MonoBehaviour
{
    public string TimingSettingFile = @"\Tables\Timings.csv";

    private TimingSetting mTimingSetting;
    private string[] TableHeader;
    private float[] TableData;

    // Start is called before the first frame update
    void Start()
    {
		int length = Marshal.SizeOf (typeof(TimingSetting));

        TableHeader = GetTableHeader(TimingSettingFile);
        TableData = GetTableFloat(TimingSettingFile);


        mTimingSetting = FloatArrayToStruct(TableData,mTimingSetting);
        Debug.Log(mTimingSetting.TrialStart);
        Debug.Log(mTimingSetting.TargetOnsetDev);
        Debug.Log(mTimingSetting.HoldTime);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private string[] GetTableHeader(string filename)
    {
        string[] header;
        string table_file = @".\Assets\Scripts";
        table_file = table_file + filename;
        using (var reader = new StreamReader(table_file)) {
            var line = reader.ReadLine();
            header = line.Split(',');
        }
        return header;
    }

    private float[] GetTableFloat(string filename)
    {
        float[] data = new float[6];
        string table_file = @".\Assets\Scripts";
        table_file = table_file + filename;
        using (var reader = new StreamReader(table_file)) {
            reader.ReadLine();
            var line = reader.ReadLine();
            string []values = line.Split(',');
            for (int i = 0; i < values.Length; i++) {
                data[i] = Single.Parse(values[i]);
            }
        }
        return data;
    }


	private TimingSetting FloatArrayToStruct(float[] floatarray, TimingSetting structureObj) {
        int length = floatarray.Length;
		IntPtr ptr = Marshal.AllocHGlobal (length);
		Marshal.Copy (floatarray, 0, ptr, length);

		structureObj = (TimingSetting)Marshal.PtrToStructure (ptr, structureObj.GetType());

		Marshal.FreeHGlobal (ptr);
		return structureObj;
	}
}