public override BlockPlacementData GetPlacementValue(SubsystemTerrain subsystemTerrain, ComponentMiner componentMiner, int value, TerrainRaycastResult raycastResult) { int num = Terrain.ExtractContents(value); int data = Terrain.ExtractData(value); int num2 = Terrain.ExtractContents(raycastResult.Value); int data2 = Terrain.ExtractData(raycastResult.Value); BlockPlacementData result; if (num2 == num && ((GetIsTop(data2) && raycastResult.CellFace.Face == 5) || (!GetIsTop(data2) && raycastResult.CellFace.Face == 4))) { int value2 = Terrain.MakeBlockValue(m_fullBlockIndex, 0, 0); IPaintableBlock paintableBlock = BlocksManager.Blocks[m_fullBlockIndex] as IPaintableBlock; if (paintableBlock != null) { int?color = GetColor(data); value2 = paintableBlock.Paint(subsystemTerrain, value2, color); } CellFace cellFace = raycastResult.CellFace; cellFace.Point -= CellFace.FaceToPoint3(cellFace.Face); result = default(BlockPlacementData); result.Value = value2; result.CellFace = cellFace; return(result); } bool isTop = (raycastResult.CellFace.Face >= 4) ? (raycastResult.CellFace.Face == 5) : (raycastResult.HitPoint().Y - (float)raycastResult.CellFace.Y > 0.5f); result = default(BlockPlacementData); result.Value = Terrain.MakeBlockValue(BlockIndex, 0, SetIsTop(data, isTop)); result.CellFace = raycastResult.CellFace; return(result); }
public static int GetBlockColorInt(Block block, int value) { IPaintableBlock paintable = block as IPaintableBlock; if (paintable == null) { return(0); } return(paintable.GetColor(BlockTerrain.GetData(value)) ?? 0); }