public override VoxelMaterial GetMaterialForInput(Vector3Int fromCoord, VoxelCell fromCell, Vector3Int toCoord, VoxelCell toCell)
        {
            VoxelFace face = VoxelFaceHelpers.NormalToFace(toCoord - fromCoord);

            var surface = m_Table.CellToResource(fromCell);

            if (surface != null)
            {
                return(surface.GetMaterialForFace(face));
            }

            return(null);
        }
Example #2
0
        public static VoxelMaterial Lerp(VoxelMaterial a, VoxelMaterial b, float t)
        {
            VoxelMaterial output = new VoxelMaterial();

            output.Properties = VoxelMaterialBasic.Lerp(a.Properties, b.Properties, t);

            if (t <= 0.0f)
            {
                output.DressingLookup   = new SerializableDictionary <VoxelFace, int>(a.DressingLookup);
                output.DressingSettings = new List <WeightedCollection <GameObject> >(a.DressingSettings);
            }
            else if (t >= 1.0f)
            {
                output.DressingLookup   = new SerializableDictionary <VoxelFace, int>(b.DressingLookup);
                output.DressingSettings = new List <WeightedCollection <GameObject> >(b.DressingSettings);
            }
            else
            {
                output.DressingLookup   = new SerializableDictionary <VoxelFace, int>();
                output.DressingSettings = new List <WeightedCollection <GameObject> >();


                foreach (VoxelFace face in VoxelFaceHelpers.ToFaceCollection(VoxelFaces.All))
                {
                    if (!a.DressingLookup.TryGetValue(face, out int aIdx))
                    {
                        aIdx = -1;
                    }
                    if (!b.DressingLookup.TryGetValue(face, out int bIdx))
                    {
                        bIdx = -1;
                    }

                    WeightedCollection <GameObject> settings = null;

                    if (aIdx != -1 && bIdx != -1)
                    {
                        // Mix settings
                        settings = new WeightedCollection <GameObject>();
                        settings.Insert(t, a.DressingSettings[aIdx]);
                        settings.Insert(1.0f - t, b.DressingSettings[aIdx]);
                    }
                    else if (aIdx != -1)
                    {
                        settings = a.DressingSettings[aIdx];
                    }
                    else if (bIdx != -1)
                    {
                        settings = b.DressingSettings[bIdx];
                    }

                    if (settings != null)
                    {
                        int index = output.DressingSettings.Count;
                        output.DressingSettings.Add(settings);
                        output.DressingLookup.Add(face, index);
                    }
                }
            }

            return(output);
        }