commit 13ae356dce1788c69c3d8a29c193d4d9ff7f8426
Author: leszek <leszek@koltunski.pl>
Date:   Fri May 2 14:41:25 2025 +0200

    transition the 'mesh' package.

diff --git a/src/main/java/org/distorted/library/mesh/DeferredJobs.kt b/src/main/java/org/distorted/library/mesh/DeferredJobs.kt
index 6a5e03e..5adc08a 100644
--- a/src/main/java/org/distorted/library/mesh/DeferredJobs.kt
+++ b/src/main/java/org/distorted/library/mesh/DeferredJobs.kt
@@ -74,7 +74,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun vertex(target: MeshBase, effect: VertexEffect?): JobNode
+    fun <T:MeshBase> vertex(target: T, effect: VertexEffect?): JobNode
     {
         val jn = target.mJobNode[0]
 
@@ -105,7 +105,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun matrix(target: MeshBase, effect: MatrixEffect?, andAssoc: Int, ecuAssoc: Int): JobNode
+    fun <T:MeshBase> matrix(target: T, effect: MatrixEffect?, andAssoc: Int, ecuAssoc: Int): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_MATRIX, target, null, null, effect, null, 0, andAssoc, ecuAssoc, 0f, 0f, 0f, null)
@@ -117,7 +117,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun mergeTex(target: MeshBase): JobNode
+    fun <T:MeshBase> mergeTex(target: T): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_MERGE_TEX, target, null, null, null, null, 0, 0, 0, 0f, 0f, 0f, null)
@@ -129,7 +129,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun addEmptyTex(target: MeshBase): JobNode
+    fun <T:MeshBase> addEmptyTex(target: T): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_ADD_EMPTY_TEX, target, null, null, null, null, 0, 0, 0, 0f, 0f, 0f, null)
@@ -141,7 +141,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun mergeEff(target: MeshBase): JobNode
+    fun <T:MeshBase> mergeEff(target: T): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_MERGE_EFF, target, null, null, null, null, 0, 0, 0, 0f, 0f, 0f, null)
@@ -153,7 +153,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun join(target: MeshBase, meshes: Array<MeshBase>): JobNode
+    fun <T:MeshBase> join(target: T, meshes: Array<T>): JobNode
     {
         var jn: JobNode?
 
@@ -176,7 +176,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun copy(target: MeshBase, mesh: MeshBase): JobNode
+    fun <T:MeshBase> copy(target: T, mesh: T): JobNode
     {
         val jn = mesh.mJobNode[0]
         val meshes = arrayOf(mesh)
@@ -189,7 +189,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun textureMap(target: MeshBase, maps: Array<Static4D?>?, comp: Int): JobNode
+    fun <T:MeshBase> textureMap(target: T, maps: Array<Static4D?>?, comp: Int): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_TEXTURE, target, null, null, null, maps, comp, 0, 0, 0f, 0f, 0f, null)
@@ -201,7 +201,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun effectAssoc(target: MeshBase, comp: Int, andAssoc: Int, equAssoc: Int): JobNode
+    fun <T:MeshBase> effectAssoc(target: T, comp: Int, andAssoc: Int, equAssoc: Int): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_ASSOC, target, null, null, null, null, comp, andAssoc, equAssoc, 0f, 0f, 0f, null)
@@ -213,7 +213,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun componentCenter(target: MeshBase, comp: Int, x: Float, y: Float, z: Float): JobNode
+    fun <T:MeshBase> componentCenter(target: T, comp: Int, x: Float, y: Float, z: Float): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_CENTER, target, null, null, null, null, comp, 0, 0, x, y, z, null)
@@ -225,7 +225,7 @@ object DeferredJobs
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun setNotAffected(target: MeshBase, comps: IntArray?): JobNode
+    fun <T:MeshBase> setNotAffected(target: T, comps: IntArray?): JobNode
     {
         val jn = target.mJobNode[0]
         val job = Job(JOB_TYPE_NOT_AFFECTED, target, null, null, null, null, 0, 0, 0, 0f, 0f, 0f, comps)
diff --git a/src/main/java/org/distorted/library/mesh/MeshBase.kt b/src/main/java/org/distorted/library/mesh/MeshBase.kt
index 4305286..cb73728 100644
--- a/src/main/java/org/distorted/library/mesh/MeshBase.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshBase.kt
@@ -317,7 +317,7 @@ abstract class MeshBase
     }
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
-    fun joinAttribs(meshes: Array<MeshBase>)
+    fun <T:MeshBase> joinAttribs(meshes: Array<T>)
     {
         var mesh: MeshBase
         var comp: TexComponent
@@ -493,7 +493,7 @@ abstract class MeshBase
 
     ///////////////////////////////////////////////////////////////////////////////////////////////////
     // called from MeshJoined
-    fun join(meshes: Array<MeshBase>)
+    fun <T:MeshBase> join(meshes: Array<T>)
     {
         var immediateJoin = true
 
diff --git a/src/main/java/org/distorted/library/mesh/MeshMultigon.kt b/src/main/java/org/distorted/library/mesh/MeshMultigon.kt
index e3c3725..c8a78f9 100644
--- a/src/main/java/org/distorted/library/mesh/MeshMultigon.kt
+++ b/src/main/java/org/distorted/library/mesh/MeshMultigon.kt
@@ -397,7 +397,10 @@ class MeshMultigon : MeshBase
             }
         }
 
-        join(triangles)
+        @Suppress("UNCHECKED_CAST")
+        val trianglesNonNullable: Array<MeshBandedTriangle> = triangles as Array<MeshBandedTriangle>
+
+        join(trianglesNonNullable)
         mergeEffComponents()
         mergeTexComponents()
     }
@@ -732,7 +735,7 @@ class MeshMultigon : MeshBase
             var holeVertices: Array<Array<FloatArray?>>? = null
             if (numHoleVerts>0) holeVertices = computeHoles(vertices, edgesUp, outerVertices, numHoleVerts)
             val numHoles = holeVertices?.size ?: 0
-            val ret: Array<Array<FloatArray>> = arrayOfNulls(1+numHoles)
+            val ret: Array<Array<FloatArray>?> = arrayOfNulls(1+numHoles)
             ret[0] = outerVertices
             for (i in 0 until numHoles) ret[i+1] = holeVertices!![i]
 
