private Bounds CalculateWorldBounds(List <NavMeshBuildSource> sources) { Matrix4x4 inverse = Matrix4x4.TRS(base.transform.position, base.transform.rotation, Vector3.one).inverse; Bounds result = default(Bounds); foreach (NavMeshBuildSource navMeshBuildSource in sources) { switch (navMeshBuildSource.shape) { case NavMeshBuildSourceShape.Mesh: { Mesh mesh = navMeshBuildSource.sourceObject as Mesh; result.Encapsulate(NavMeshSurface.GetWorldBounds(inverse * navMeshBuildSource.transform, mesh.bounds)); break; } case NavMeshBuildSourceShape.Terrain: { TerrainData terrainData = navMeshBuildSource.sourceObject as TerrainData; result.Encapsulate(NavMeshSurface.GetWorldBounds(inverse * navMeshBuildSource.transform, new Bounds(0.5f * terrainData.size, terrainData.size))); break; } case NavMeshBuildSourceShape.Box: case NavMeshBuildSourceShape.Sphere: case NavMeshBuildSourceShape.Capsule: case NavMeshBuildSourceShape.ModifierBox: result.Encapsulate(NavMeshSurface.GetWorldBounds(inverse * navMeshBuildSource.transform, new Bounds(Vector3.zero, navMeshBuildSource.size))); break; } } result.Expand(0.1f); return(result); }
private List <NavMeshBuildSource> CollectSources() { List <NavMeshBuildSource> list = new List <NavMeshBuildSource>(); List <NavMeshBuildMarkup> list2 = new List <NavMeshBuildMarkup>(); List <NavMeshModifier> list3; if (this.m_CollectObjects == CollectObjects.Children) { list3 = new List <NavMeshModifier>(base.GetComponentsInChildren <NavMeshModifier>()); list3.RemoveAll((NavMeshModifier x) => !x.isActiveAndEnabled); } else { list3 = NavMeshModifier.activeModifiers; } foreach (NavMeshModifier navMeshModifier in list3) { if ((this.m_LayerMask & 1 << navMeshModifier.gameObject.layer) != 0) { if (navMeshModifier.AffectsAgentType(this.m_AgentTypeID)) { list2.Add(new NavMeshBuildMarkup { root = navMeshModifier.transform, overrideArea = navMeshModifier.overrideArea, area = navMeshModifier.area, ignoreFromBuild = navMeshModifier.ignoreFromBuild }); } } } if (this.m_CollectObjects == CollectObjects.All) { NavMeshBuilder.CollectSources(null, this.m_LayerMask, this.m_UseGeometry, this.m_DefaultArea, list2, list); } else if (this.m_CollectObjects == CollectObjects.Children) { NavMeshBuilder.CollectSources(base.transform, this.m_LayerMask, this.m_UseGeometry, this.m_DefaultArea, list2, list); } else if (this.m_CollectObjects == CollectObjects.Volume) { Matrix4x4 mat = Matrix4x4.TRS(base.transform.position, base.transform.rotation, Vector3.one); Bounds worldBounds = NavMeshSurface.GetWorldBounds(mat, new Bounds(this.m_Center, this.m_Size)); NavMeshBuilder.CollectSources(worldBounds, this.m_LayerMask, this.m_UseGeometry, this.m_DefaultArea, list2, list); } if (this.m_IgnoreNavMeshAgent) { list.RemoveAll((NavMeshBuildSource x) => x.component != null && x.component.gameObject.GetComponent <NavMeshAgent>() != null); } if (this.m_IgnoreNavMeshObstacle) { list.RemoveAll((NavMeshBuildSource x) => x.component != null && x.component.gameObject.GetComponent <NavMeshObstacle>() != null); } this.AppendModifierVolumes(ref list); return(list); }