Ejemplo n.º 1
0
  public static double[] simulate(IHeatTransfer source) {
    double heatTransferred[] = new double[] {0, 0};

    for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
      IHeatTransfer sink = source.getAdjacent(side);

      if (sink != null) {
        double invConduction =
            sink.getInverseConductionCoefficient() + source.getInverseConductionCoefficient();
        double heatToTransfer = source.getTemp() / invConduction;
        source.transferHeatTo(-heatToTransfer);
        sink.transferHeatTo(heatToTransfer);

        if (!(sink instanceof ITransmitterTile)) {
          heatTransferred[0] += heatToTransfer;
        }

        continue;
      }

      // Transfer to air otherwise
      double invConduction =
          IHeatTransfer.AIR_INVERSE_COEFFICIENT
              + source.getInsulationCoefficient(side)
              + source.getInverseConductionCoefficient();
      double heatToTransfer = source.getTemp() / invConduction;
      source.transferHeatTo(-heatToTransfer);
      heatTransferred[1] += heatToTransfer;
    }

    return heatTransferred;
  }