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); }
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); }