예제 #1
0
    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);
    }
예제 #2
0
    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);
    }