public void Build(TrackScriptElem el) { if (track.Count == 0) { track.Add(el); } else { TrackScriptElem lastElem = track[track.Count - 1]; if (lastElem.state == el.state && lastElem.value == el.value) { lastElem.numToSet += 1; } else { track.Add(el); } } }
public bool Read(string filename) { track = new List <TrackScriptElem>(); Debug.Log("loading: " + filename); TextAsset bindata = Resources.Load("Track/" + filename) as TextAsset; if (bindata == null) { return(false); } string[] lines = bindata.text.Split('\n'); foreach (string line in lines) { string[] tokens = line.Split(' '); if (tokens.Length < 2) { continue; } string command = tokens[0]; string args = tokens[1]; if (command.StartsWith("//")) { continue; } TrackScriptElem tse = new TrackScriptElem(); if (command == "U") { tse.state = TrackParams.State.CurveZ; tse.value = 1f; tse.numToSet = int.Parse(args); } else if (command == "S") { tse.state = TrackParams.State.Straight; tse.value = 1f; tse.numToSet = int.Parse(args); } else if (command == "D") { tse.state = TrackParams.State.CurveZ; tse.value = -1f; tse.numToSet = int.Parse(args); } else if (command == "L") { tse.state = TrackParams.State.CurveY; tse.value = -1f; tse.numToSet = int.Parse(args); } else if (command == "R") { tse.state = TrackParams.State.CurveY; tse.value = 1f; tse.numToSet = int.Parse(args); } else if (command == "RL") { tse.state = TrackParams.State.CurveX; tse.value = 1f; tse.numToSet = int.Parse(args); } else if (command == "RR") { tse.state = TrackParams.State.CurveX; tse.value = -1f; tse.numToSet = int.Parse(args); } else if (command == "SPEED_LIMIT") { tse.state = TrackParams.State.SpeedLimit; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "DX") { tse.state = TrackParams.State.AngleDX; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "DY") { tse.state = TrackParams.State.AngleDY; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "DZ") { tse.state = TrackParams.State.AngleDZ; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "FORK_A") { tse.state = TrackParams.State.ForkA; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "FORK_B") { tse.state = TrackParams.State.ForkB; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "MERGE_A") { tse.state = TrackParams.State.MergeA; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "MERGE_B") { tse.state = TrackParams.State.MergeB; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else if (command == "END") { tse.state = TrackParams.State.End; tse.value = float.Parse(args, CultureInfo.InvariantCulture.NumberFormat); tse.numToSet = 0; } else { Debug.Log("unknown command: " + command); continue; } track.Add(tse); } return(track.Count > 0); }
public bool Read(string filename) { track = new List <TrackScriptElem>(); Debug.Log("loading: " + filename); /* * TextAsset bindata = Resources.Load(filename) as TextAsset; * * if(bindata == null){ * Debug.LogError("loading fail"); * return false; * } * else{ * Debug.Log("file content: " + bindata.text); * } * string[] lines = bindata.text.Split('\n'); */ string[] lines = File.ReadAllLines(filename); foreach (string line in lines) { Debug.Log("reading the line: " + line); string[] tokens = line.Split(' '); string command = tokens[0]; /*string args = "0"; * if (tokens.Length >= 2){ * args = tokens[1]; * }*/ if (command.StartsWith("//")) { continue; } TrackScriptElem tse = new TrackScriptElem(); /*else if (command == "U") * { * tse.state = TrackParams.State.CurveZ; * tse.value = 1f; * tse.numToSet = int.Parse(args); * } * else if (command == "D") * { * tse.state = TrackParams.State.CurveZ; * tse.value = -1f; * tse.numToSet = int.Parse(args); * } * else if (command == "RL") * { * tse.state = TrackParams.State.CurveX; * tse.value = 1f; * tse.numToSet = int.Parse(args); * } * else if (command == "RR") * { * tse.state = TrackParams.State.CurveX; * tse.value = -1f; * tse.numToSet = int.Parse(args); * } * else if (command == "SPEED_LIMIT") * { * tse.state = TrackParams.State.SpeedLimit; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "DX") * { * tse.state = TrackParams.State.AngleDX; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "DZ") * { * tse.state = TrackParams.State.AngleDZ; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "FORK_A") * { * tse.state = TrackParams.State.ForkA; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "FORK_B") * { * tse.state = TrackParams.State.ForkB; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "MERGE_A") * { * tse.state = TrackParams.State.MergeA; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "MERGE_B") * { * tse.state = TrackParams.State.MergeB; * tse.value = float.Parse(args); * tse.numToSet = 0; * } * else if (command == "END") * { * tse.state = TrackParams.State.End; * tse.value = float.Parse(args); * tse.numToSet = 0; * } */ if (command == "S")// straight line, value is the length { tse.state = TrackParams.State.Straight; tse.value = 1f; tse.numToSet = int.Parse(tokens[1]); } else if (command == "L")// turn left, value is the length { tse.state = TrackParams.State.CurveY; tse.value = -1f; tse.numToSet = int.Parse(tokens[1]); } else if (command == "R")// turn right,value is the length { tse.state = TrackParams.State.CurveY; tse.value = 1f; tse.numToSet = int.Parse(tokens[1]); } else if (command == "DY")// set the turn angle { tse.state = TrackParams.State.AngleDY; tse.value = float.Parse(tokens[1]); tse.numToSet = 0; } else if (command == "CONE")// value is how far from the start middle(road point, not the road middle), every thing will take one road length { tse.state = TrackParams.State.CONE; tse.value = float.Parse(tokens[1]); tse.value2 = float.Parse(tokens[2]); tse.numToSet = 1; } else if (command == "BLOCK") { tse.state = TrackParams.State.BLOCK; tse.value = float.Parse(tokens[1]); tse.value2 = float.Parse(tokens[2]); tse.numToSet = 1; } else { Debug.Log("unknown command: " + command); continue; } track.Add(tse); } return(track.Count > 0); }