private static void CreateShadowCasters(Level level, LevelBuildData buildData) { EnvironmentObject environment = CreateEnvironment("Shadow Caster", EnvironmentObjectComponent.MeshFilter | EnvironmentObjectComponent.MeshRenderer); LevelEnvironmentData data = new LevelEnvironmentData(); data.Triangles.Add(0, new List <int>()); foreach (var pair in buildData.Tiles) { if (!pair.Value.CastsShadows) { continue; } Vector2 worldPosition = Utility.AxialToWorldPosition(pair.Key); byte bitmask = Utility.GetBitmask(pair.Key, level.TilePositions); List <Line> lines = pair.Value.Brush.GetCollisionCoordinates(bitmask); foreach (Line line in lines) { AddLineToMeshData(data, line, worldPosition); } } Mesh mesh = data.BuildMesh("Shadow Caster Mesh"); environment.Filter.mesh = mesh; environment.Renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly; environment.Renderer.material = new Material(Shader.Find("Standard")); level.AddEnvironment(environment.GameObject); }
private static void CreateEnvironment(Level level, LevelBuildData buildData) { EnvironmentObject environment = CreateEnvironment("Environment", EnvironmentObjectComponent.MeshFilter | EnvironmentObjectComponent.MeshRenderer); LevelEnvironmentData data = new LevelEnvironmentData(); foreach (var pair in buildData.Tiles) { Vector2 worldPosition = Utility.AxialToWorldPosition(pair.Key); byte bitmask = Utility.GetBitmask(pair.Key, level.TilePositions); AddTileToLevel(data, pair.Value, worldPosition, bitmask); } Mesh mesh = data.BuildMesh("Environment Mesh"); environment.Filter.mesh = mesh; environment.Renderer.materials = data.Materials.ToArray(); level.AddEnvironment(environment.GameObject); }