- Home /
Question by
Virtual_TUe · Oct 28, 2020 at 11:12 AM ·
listrandomrandom.rangecountif else
Randomising list of integers and removing them from list once the task assigned to the integer in the project is completed
I have a list of integers (1,2,3,4). Each number corresponds to a switch input in MAX MSP which means if 4 is sent from Unity it is read by MAX MSP and switch input 4 works. (This functions fine as intended). What I want is that the integers in the list are randomised, once an integer is sent by Unity and read by MAX, it is removed from the list in Unity and never read again. Once, the integer count is 0, the statements in the else loop are executed. I dont want 0 to be sent from Unity to Max as the switch will be closed if it encounters value 0. At the moment, 0 is sent and it causes problems. How do I avoid 0 being sent to MAX?
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System.Threading;
using UnityEditor;
using System.Text;
using System.Net;
using System.Net.Sockets;
public class SignalToMax : MonoBehaviour
{
public List<int> signals = new List<int> {1, 2, 3, 4};
public static int stimIndex;
public void Start()
{
Debug.Log("<color=red>Signal Count is:</color>" + signals.Count);
}
public void Advance_Trial()
{
int randomSignalIndex = Random.Range(0, signals.Count);
Debug.Log("Signal Count is" + (signals.Count-1));
Debug.Log("<color=magenta>Current source signal is:</color>" + randomSignalIndex);
//Sends to MAX
string text = randomSignalIndex.ToString();
byte[] data5 = Encoding.ASCII.GetBytes(text);
client.Send(data5, data5.Length, remoteEndPoint);
Debug.Log("<color=yellow>Number sent to MAX:</color>" + text);
stimIndex = randomSignalIndex;
signals.RemoveAt(randomSignalIndex);
if (signals.Count > 0)
{
Debug.Log("<color=orange>Signal count is not zero</color>");
}
else
{
Debug.Log("<color=green>All Trials finished</color>");
panel.gameObject.SetActive(false);
EndSessionPanel.gameObject.SetActive(true);
}
}
Comment