private void VirtualAgentsIntanciation() { VirtualObject station = house.virtualObjects.Find(obj => obj.tags.Contains(ObjectTag.Station)); if (station != null) { var origin = station.transform.position; foreach (Agent r in m_simulationOptions.agentsToInstantiate) { if (root == null) { root = house.transform.parent; } Transform agent = Instantiate(r.prefab, origin, Quaternion.identity, root).transform; agent.GetComponent <ROS>().robotName = r.name; agent.name = r.name; agent.GetComponent <ROS>().Connect(r.ip); agents.Add(agent.gameObject); } } else { Log("This house don't have robot station", LogLevel.Error, true); } }
private void UserInstanciation() { VirtualObject station = house.virtualObjects.Find(obj => obj.tags.Contains(ObjectTag.Station)); if (m_simulationOptions.userPrefab != null && station != null) { var origin = station.transform.position + new Vector3(0, 1, 0); Transform agent = Instantiate(m_simulationOptions.userPrefab, origin, Quaternion.identity, house.transform.parent).transform; } }
private IEnumerator LoadingEnvironment() { bool isLoading = true; while (isLoading) { isLoading = false; var objs = Resources.FindObjectsOfTypeAll(typeof(VirtualObject)) as VirtualObject[]; foreach (VirtualObject virtualObject in objs) { if (virtualObject.isActiveAndEnabled && virtualObject.m_initialized == false) { isLoading = true; } } if (objs.Length == 0) { isLoading = true; } yield return(new WaitForEndOfFrame()); } yield return(new WaitForEndOfFrame()); transform.GetComponent <NavMeshSurface>().BuildNavMesh(); if (m_simulationOptions.simulationLog != null) { using (StringReader sr = new StringReader(m_simulationOptions.simulationLog.text)) { string line; string[] values; while ((line = sr.ReadLine()) != null) { values = line.Split(','); switch (values[0]) { case "House Selected": if (!values[1].Equals(houseSelected.ToString())) { sr.ReadToEnd(); Log("The selected house does not match the house in the entered log file.", LogLevel.Normal, true); } break; case "Sun Rotation": transform.GetChild(0).rotation = Quaternion.Euler(float.Parse(values[1]), 0, 0); break; case "Room": Room room = GameObject.Find(values[1]).GetComponent <Room>(); if (room != null) { room.PaintWall((Material)Resources.Load("Walls/" + values[2], typeof(Material))); room.PaintFloor((Material)Resources.Load("Floors/" + values[3], typeof(Material))); } else { Log("Room " + values[1] + " not found.", LogLevel.Error, true); } break; case "-": try { VirtualObject vo = house.virtualObjects.Find(obj => obj.m_id.Equals(values[1])); vo.SetSeed(int.Parse(values[2])); if (vo.tags.Contains(ObjectTag.Light) || vo.tags.Contains(ObjectTag.Lamp) || vo.tags.Contains(ObjectTag.Lighter)) { vo.GetComponentInChildren <Light>().enabled = Boolean.Parse(values[3]); } else if (vo.tags.Contains(ObjectTag.Door)) { vo.GetComponent <Door>().SetDoor(Boolean.Parse(values[3])); } } catch { Log("Object " + values[1] + " not found.", LogLevel.Error, true); } break; } } } } if (recordEnvironmentDatas) { writer = new StreamWriter(path + "/EnviromentLog.csv", true); writer.WriteLine("House Selected" + "," + houseSelected.ToString()); writer.WriteLine("Sun Rotation" + "," + m_simulationOptions.SunRotation.ToString()); foreach (Room room in FindObjectsOfType <Room>()) { writer.WriteLine("Room," + room.transform.name + "," + room.wallMaterial.name + "," + room.floorMaterial.name); } writer.WriteLine(" ,Id,Seed,Mode,ColorR,ColorG,ColorB,Room,RoomType,XGlobalPosition,YGlobalPosition,ZGlobalPosition,XRotation,YRotation,ZRotation,Tags"); StringBuilder line = new StringBuilder(); foreach (VirtualObject obj in house.virtualObjects) { if (obj.isActiveAndEnabled) { line = new StringBuilder(); line.Append("-"); line.Append(","); line.Append(obj.m_id.ToString(CultureInfo.InvariantCulture)); line.Append(","); line.Append(obj.m_seed.ToString(CultureInfo.InvariantCulture)); line.Append(","); if (obj.tags.Contains(ObjectTag.Light)) { line.Append(obj.GetComponentInChildren <Light>().enabled.ToString()); } else if (obj.tags.Contains(ObjectTag.Lamp) || obj.tags.Contains(ObjectTag.Lighter)) { line.Append(obj.GetComponentInChildren <Light>().enabled.ToString()); } else if (obj.tags.Contains(ObjectTag.Door)) { line.Append(obj.GetComponent <Door>().m_state.ToString()); } else { line.Append("-"); } line.Append(","); line.Append(house.semanticColors[obj.m_id].r.ToString()); line.Append(","); line.Append(house.semanticColors[obj.m_id].g.ToString()); line.Append(","); line.Append(house.semanticColors[obj.m_id].b.ToString()); line.Append(","); line.Append(obj.room.transform.name.ToString()); line.Append(","); line.Append(obj.room.roomType.ToString()); line.Append(","); line.Append(((double)obj.transform.position.x).ToString("F15", CultureInfo.InvariantCulture)); line.Append(","); line.Append(((double)obj.transform.position.y).ToString("F15", CultureInfo.InvariantCulture)); line.Append(","); line.Append(((double)obj.transform.position.z).ToString("F15", CultureInfo.InvariantCulture)); line.Append(","); line.Append(((double)obj.transform.rotation.eulerAngles.x).ToString("F15", CultureInfo.InvariantCulture)); line.Append(","); line.Append(((double)obj.transform.rotation.eulerAngles.y).ToString("F15", CultureInfo.InvariantCulture)); line.Append(","); line.Append(((double)obj.transform.rotation.eulerAngles.z).ToString("F15", CultureInfo.InvariantCulture)); foreach (ObjectTag ot in obj.tags) { line.Append(","); line.Append(ot.ToString()); } writer.WriteLine(line); } } writer.Close(); } VirtualAgentsIntanciation(); UserInstanciation(); OnEnvironmentLoaded?.Invoke(); }
public string RegisterVirtualObject(VirtualObject virtualObject) { int i = 0; while (virtualObjects.Find(obj => obj.m_id == virtualObject.tags[0].ToString() + "_" + i)) { i++; } var name = virtualObject.tags[0].ToString() + "_" + i; virtualObjects.Add(virtualObject); Color color; do { color = new Color(Random.value, Random.value, Random.value); } while (semanticColors.ContainsValue(color)); semanticColors.Add(name, color); if (virtualObject.tags.Contains(ObjectTag.Lamp) || virtualObject.tags.Contains(ObjectTag.Lighter)) { bool result = false; switch (simulationOptions.StateLights) { case LightStatus.On: result = true; break; case LightStatus.Off: result = false; break; case LightStatus.Radomly: result = Random.value >= 0.5f; break; } foreach (Light l in virtualObject.GetComponentsInChildren(typeof(Light), true)) { l.enabled = result; } } if (virtualObject.tags.Contains(ObjectTag.Light)) { bool result = false; switch (simulationOptions.StateGeneralLight) { case LightStatus.On: result = true; break; case LightStatus.Off: result = false; break; case LightStatus.Radomly: result = Random.value >= 0.5f; break; } foreach (Light l in virtualObject.GetComponentsInChildren(typeof(Light), true)) { l.enabled = result; } } return(name); }