Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
### Fixed

- Fixed item stack iotas using an untranslated lang key when referenced in a mishap message.
- Fixed the element-wise matrix operations not coercing numbers or vectors to matrices like the other matrix patterns do.
- Fixed Patternmaster's Purification throwing an exception when used on any non-static pattern, by beholderface in [#59](https://github.com/FallingColors/MoreIotas/pull/59).
- Fixed a crash when trying to invert a non-invertible matrix, by c-Caelum in [#66](https://github.com/FallingColors/MoreIotas/pull/66).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,17 @@ import at.petrak.hexcasting.api.casting.arithmetic.predicates.IotaMultiPredicate
import at.petrak.hexcasting.api.casting.arithmetic.predicates.IotaPredicate
import at.petrak.hexcasting.api.casting.iota.DoubleIota
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.iota.Vec3Iota
import at.petrak.hexcasting.api.casting.math.HexDir
import at.petrak.hexcasting.api.casting.math.HexPattern
import at.petrak.hexcasting.api.casting.mishaps.MishapInvalidIota
import at.petrak.hexcasting.common.lib.hex.HexIotaTypes.DOUBLE
import at.petrak.hexcasting.common.lib.hex.HexIotaTypes.VEC3
import org.ejml.simple.SimpleMatrix
import ram.talia.moreiotas.api.asSimpleMatrix
import ram.talia.moreiotas.api.casting.iota.MatrixIota
import ram.talia.moreiotas.api.matrixWrongSize
import ram.talia.moreiotas.api.util.Anyone
import ram.talia.moreiotas.common.casting.arithmetic.operator.matrix.OperatorMatrixAdd
import ram.talia.moreiotas.common.casting.arithmetic.operator.matrix.OperatorMatrixDiv
import ram.talia.moreiotas.common.casting.arithmetic.operator.matrix.OperatorMatrixMul
Expand Down Expand Up @@ -95,10 +100,25 @@ object MatrixArithmetic : Arithmetic {
op.apply(Operator.downcast(i, MATRIX).simpleMatrix)
) }

private fun make2SameSize(op: BinaryOperator<SimpleMatrix>): OperatorBinary = OperatorBinary(IotaMultiPredicate.all(IotaPredicate.ofType(MATRIX)))
val numVecMatPred = IotaPredicate.any(IotaPredicate.ofType(DOUBLE), IotaPredicate.ofType(VEC3), IotaPredicate.ofType(MATRIX))

fun parseNumVecMat(iota: Iota, argc: Int, idx: Int): SimpleMatrix {
return when (iota) {
is DoubleIota -> SimpleMatrix(1, 1, false, iota.double)
is Vec3Iota -> iota.vec3.asSimpleMatrix
is MatrixIota -> iota.simpleMatrix
else -> throw MishapInvalidIota.of(
iota,
argc - (idx + 1),
"numvecmat"
)
}
}

private fun make2SameSize(op: BinaryOperator<SimpleMatrix>): OperatorBinary = OperatorBinary(IotaMultiPredicate.all(numVecMatPred))
{ i, j ->
val mat0 = Operator.downcast(i, MATRIX).simpleMatrix
val mat1 = Operator.downcast(j, MATRIX).simpleMatrix
val mat0 = parseNumVecMat(i, argc = 2, idx = 0)
val mat1 = parseNumVecMat(j, argc = 2, idx = 1)

if (mat0.numRows != mat1.numRows || mat0.numCols != mat1.numCols)
throw MishapInvalidIota.matrixWrongSize(MatrixIota(mat1), 0, mat0.numRows, mat1.numCols)
Expand Down
Loading