electrodynamics/src/main/scala/edx/core/resource/alloy/AlloyUtility.scala
2015-01-26 19:40:54 +08:00

45 lines
1.6 KiB
Scala

package edx.core.resource.alloy
import java.awt.Color
import net.minecraft.item.ItemStack
import resonantengine.lib.factory.resources.ResourceFactory
import resonantengine.lib.utility.nbt.NBTUtility
/**
* Manages alloys and metal mixtures
* @author Calclavia
*/
object AlloyUtility
{
/**
* Weighted material mixture color
* @param materials - Gets the color of the mixture with weighted percentages
* @return
*/
def mixedColor(materials: Map[String, Float]): Int =
{
val colorMap = materials.map(keyVal => (keyVal._1, new Color(ResourceFactory.getColor(keyVal._1))))
val averageRGB = colorMap
.map(keyVal => (keyVal._2.getRed * materials(keyVal._1), keyVal._2.getGreen * materials(keyVal._1), keyVal._2.getBlue * materials(keyVal._1)))
.foldLeft((0f, 0f, 0f))((b, a) => (a._1 + b._1, a._2 + b._2, a._3 + b._3))
return new Color(averageRGB._1.toInt, averageRGB._2.toInt, averageRGB._3.toInt).getRGB()
}
def mixedColor(materials: Seq[String]): Int =
{
val colors = materials.map(ResourceFactory.getColor).map(new Color(_))
val totalRGB = colors.map(c => (c.getRed, c.getGreen, c.getBlue)).foldLeft((0f, 0f, 0f))((b, a) => (a._1 + b._1, a._2 + b._2, a._3 + b._3))
val averageRGB = (totalRGB._1 / materials.size, totalRGB._2 / materials.size, totalRGB._3 / materials.size)
return new Color(averageRGB._1.toInt, averageRGB._2.toInt, averageRGB._3.toInt).getRGB()
}
def setAlloy(itemStack: ItemStack, alloy: Alloy): ItemStack =
{
alloy.save(NBTUtility.getNBTTagCompound(itemStack))
itemStack
}
def getAlloy(itemStack: ItemStack) = new Alloy(NBTUtility.getNBTTagCompound(itemStack))
}