Пример #1
0
        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);
        }
Пример #2
0
    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);
    }