Asked — Edited

Need Help With Plugin

I need some help with a plugin I am working on. I am new to C# and OOP. Have went thru the Tutorial and the SDK Tutorials also.

User-inserted image

How do I get the values from the form in to my C# code?

 public enum LocationType
            {
                Wall = 255,
                Empty = 0,
                Destination = 254,
                Source = 1
            }
            public struct Location
            {

instead of Wall = 255, how do I get Wall = textBox1.Text. textBox1 being the Textbox name.

Thanks RichardZ


ARC Pro

Upgrade to ARC Pro

Get access to the latest features and updates before they're released. You'll have everything that's needed to unleash your robot's potential!

PRO
USA
#1  

//Option1:
//  null        => 0 AND returns false
//  empty       => 0 AND returns false
//  non integer => 0 AND returns false
int i1;
if (!int.TryParse(textBox1.Text, out i1))
{
    //it's not an integer 
    //raise an error
}

//Option2: 
//  null        => 0
//  empty       => raises an exception
//  non integer => raises an exception
int i2 = Convert.ToInt32(textBox1.Text);

//Option2: 
//  null        => raises an exception
//  empty       => raises an exception
//  non integer => raises an exception
int i3 = int.Parse(textBox1.Text);

If you're collecting input from a user, I'd go with option #1

PRO
USA
#2  

Thank you ptp, I have decided to leave the values for Robot, Empty, Wall and Goal as set values. Having them as part of an enumeration is my problem there I think.

In the picture I posted, Map Variable is $MyMap. This is a string of 6400 characters. Each character represents a 1'x1' block. How do I get this variable from ARC into my C#? I plan to use 2 for loops to move the data from the $MyMap variable to a 2 dimension array in the plugin.

PRO
USA
#3  

private void DoSomething()
{
	//Get EZScript's map variable
	var mapString = VariableManager.GetVariable("$MyMap");
	//example map 4 x 3 => "X....X....X."

	//Convert string to an array of 4 by 3
	var map4X3 = StringToMap(mapString, 4);

	DoSomethingWithMap(map4X3);

	//Convert array to string
	var newMapString = MapToString(map4X3);

	//Set EZScript's map variable
	VariableManager.SetVariable("$MyMap", newMapString);
}

private void DoSomethingWithMap(char[,] map)
{
	for (var rowIndex = 0; rowIndex < map.GetLength(0); rowIndex++)
	{
		for (var colIndex = 0; colIndex < map.GetLength(1); colIndex++)
		{
			var cellValue = map[rowIndex, colIndex];
			//DoSomething with cellValue
		}
	}
}

private static string MapToString(char[,] map)
{
	return new string(map.Cast<char>().ToArray());
}

private static char[,] StringToMap(string flatString, int width)
{
	var flatArray = flatString.ToCharArray();

	var height = (int)Math.Ceiling(flatArray.Length / (double)width);
	var result = new char[height, width];

	for (var index = 0; index < flatArray.Length; index++)
	{
		var rowIndex = index / width;
		var colIndex = index % width;
		result[rowIndex, colIndex] = flatArray[index];
	}

	return result;
}
PRO
USA
#4  

Quote:

instead of Wall = 255, how do I get Wall = textBox1.Text. textBox1 being the Textbox name.

Quote:

Having them as part of an enumeration is my problem there I think.

If your wall value is an enum you should use a ComboBox to capture the user input.

To load the ComboBox LocationTypeComboBox:


LocationTypeComboBox.DataSource = Enum.GetValues(typeof(LocationType));
LocationTypeComboBox.SelectedIndex = 0;

To get the enum from the ComboBox:


LocationType locationType;
Enum.TryParse<LocationType>(LocationTypeComboBox.SelectedValue.ToString(), out locationType); 

The "Standard" for a Label and Input is: Label TextBox Label ComboBox ...

PRO
USA
#5  

Thank you I believe this is what I was missing. I have picked up a few books on C# and going thru the lessons. catching on to the syntax easy enough but some of the concepts are a bit tough to get my head around. It is a bit different from TRS-80 Basic.

PRO
USA
#6  

When I execute the plugin, I get an error:

An exception of type 'System.Exception' occurred in ARC.exe but was not handled in user code

Additional information: Variable is an array: $MyMap

Makes sense to me. in ARC $MyMap is an array of 6400

the line of code reads:


var mapString = VariableManager.GetVariable("$MyMap");
PRO
USA
#7  

Quote:

In the picture I posted, Map Variable is $MyMap. This is a string of 6400 characters.
You mentioned a string.

if your variable is an Array:


//Get value from position 0 of $MyMap array
VariableManager.GetVariable("$MyMap", 0) 
PRO
USA
#8  

I'm curious, what you plan to do with EZ-Script and an Array of 80x80 i.e. 6400 positions ?