/// <summary> /// Internal method for parsing chosen entities. /// </summary> protected void LoadEntities(Quake3Level q3lvl) { Vector3 origin = new Vector3(); float angle = 0; bool isPlayerStart = false; string[] entities = q3lvl.Entities.Split('\n'); for(int i = 0; i < entities.Length; i++) { // Remove whitespace and quotes. entities[i] = entities[i].Trim().Replace("\"", ""); if(entities[i].Length == 0) continue; string[] paramList = entities[i].Split(' '); if(paramList[0] == "origin") { float[] vector = new float[3]; for (int v = 0; v < 3; v++) vector[v] = StringConverter.ParseFloat(paramList[v + 1]); q3lvl.TransformVector(vector); origin = new Vector3(vector[0], vector[1], vector[2]); } if(paramList[0] == "angle") angle = StringConverter.ParseFloat(paramList[1]); if((paramList[0] == "classname") && (paramList[1] == "info_player_deathmatch")) isPlayerStart = true; if(paramList[0] == "}") { if(isPlayerStart) { ViewPoint vp = new ViewPoint(); vp.position = origin; if (q3lvl.Options.setYAxisUp) vp.orientation = Quaternion.FromAngleAxis(MathUtil.DegreesToRadians(angle), Vector3.UnitY); else vp.orientation = Quaternion.FromAngleAxis(MathUtil.DegreesToRadians(angle), Vector3.UnitZ); playerStarts.Add(vp); } isPlayerStart = false; } } }
/// <summary> /// Internal method for parsing chosen entities. /// </summary> protected void LoadEntities(Quake3Level q3lvl) { Vector3 origin = new Vector3(); float angle = 0; bool isPlayerStart = false; string[] entities = q3lvl.Entities.Split('\n'); for (int i = 0; i < entities.Length; i++) { // Remove whitespace and quotes. entities[i] = entities[i].Trim().Replace("\"", ""); if (entities[i].Length == 0) { continue; } string[] paramList = entities[i].Split(' '); if (paramList[0] == "origin") { float[] vector = new float[3]; for (int v = 0; v < 3; v++) { vector[v] = StringConverter.ParseFloat(paramList[v + 1]); } q3lvl.TransformVector(vector); origin = new Vector3(vector[0], vector[1], vector[2]); } if (paramList[0] == "angle") { angle = StringConverter.ParseFloat(paramList[1]); } if ((paramList[0] == "classname") && (paramList[1] == "info_player_deathmatch")) { isPlayerStart = true; } if (paramList[0] == "}") { if (isPlayerStart) { ViewPoint vp = new ViewPoint(); vp.position = origin; if (q3lvl.Options.setYAxisUp) { vp.orientation = Quaternion.FromAngleAxis(MathUtil.DegreesToRadians(angle), Vector3.UnitY); } else { vp.orientation = Quaternion.FromAngleAxis(MathUtil.DegreesToRadians(angle), Vector3.UnitZ); } playerStarts.Add(vp); } isPlayerStart = false; } } }