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
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ class RenderCircuitGate extends GateRenderer[CircuitGatePart] {
var name = "untitled"

override val coreModels = Seq(
new integration.BaseComponentModel,
integration.BaseComponentModel.model,
simp,
analog,
bundled,
Expand Down
81 changes: 49 additions & 32 deletions src/main/scala/mrtjp/projectred/integration/components.scala
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ object ComponentStore {
t
})
.toArray
val redundantUVTransformation = new UVTransformationList()

def registerIcons(reg: IIconRegister) {
val baseTex = "projectred:integration/"
Expand Down Expand Up @@ -266,12 +267,15 @@ abstract class SingleComponentModel(m: CCModel, pos: Vector3 = Vector3.zero)
orient
)

def extraTransformModelUV(orient: Int): UVTransformation =
redundantUVTransformation

def getUVT: UVTransformation

override def renderModel(t: Transformation, orient: Int) {
modelPair(if (orient < 24) 0 else 1).render(
new TransformationList(extraTransformModel(orient), t),
getUVT,
new UVTransformationList(extraTransformModelUV(orient), getUVT),
LightModel.standardLightModel
)
}
Expand All @@ -280,11 +284,10 @@ abstract class SingleComponentModel(m: CCModel, pos: Vector3 = Vector3.zero)
abstract class MultiComponentModel(m: Seq[CCModel], pos: Vector3 = Vector3.zero)
extends ComponentModel {
val models = {
val xs = Array.ofDim[CCModel](m.length, 48)
val xs = Array.ofDim[CCModel](m.length, 2)
val t = pos.copy.multiply(1 / 16d).translation
for (i <- m.indices)
for (j <- 0 until 48)
xs(i)(j) = bakeCopy(m.apply(i).copy.apply(t), j)
xs(i) = bakeDynamic(m.apply(i).copy.apply(t))
xs
}

Expand All @@ -293,7 +296,8 @@ abstract class MultiComponentModel(m: Seq[CCModel], pos: Vector3 = Vector3.zero)
def getUVT: UVTransformation

override def renderModel(t: Transformation, orient: Int) {
models(state)(orient).render(t, getUVT)
models(state)(if (orient < 24) 0 else 1)
.render(new TransformationList(orientPrecomputed(orient), t), getUVT)
}
}

Expand All @@ -319,6 +323,10 @@ class BaseComponentModel extends SingleComponentModel(base) {
override def getUVT = new IconTransformation(baseIcon)
}

object BaseComponentModel {
val model = new BaseComponentModel
}

trait TWireModel extends ComponentModel {
var on = false
var disabled = false
Expand Down Expand Up @@ -632,14 +640,12 @@ abstract class BundledCableModel(
) extends SingleComponentModel(model, pos) {
private val newTransforms = (0 until 48).map((orient: Int) => {
val t = bundledCablePrecomputed(orient)
new TransformationList(
super.extraTransformModel(orient),
t.at(new Vector3(uCenter, 0, vCenter))
)
new UVT(t.at(new Vector3(uCenter, 0, vCenter)))
})
override def extraTransformModel(orient: Int): Transformation = newTransforms(
orient
)
override def extraTransformModelUV(orient: Int): UVTransformation =
newTransforms(
orient
)
}

class BusXcvrCableModel
Expand Down Expand Up @@ -687,8 +693,8 @@ class SigLightPanelModel(pos: Vector3, rotY: Boolean) extends ComponentModel {
this(new Vector3(x, 0, z), rotY)

val displayModels = new Array[CCModel](16)
val models = new Array[CCModel](48)
val modelsSI = new Array[CCModel](48)
val modelsPair = new Array[CCModel](2)
val modelsSIPair = new Array[CCModel](2)

var sideInd = true

Expand Down Expand Up @@ -733,15 +739,23 @@ class SigLightPanelModel(pos: Vector3, rotY: Boolean) extends ComponentModel {
base.apply(pos.translation())
baseSI.apply(pos.translation())

for (i <- 0 until 48) {
models(i) = bakeCopy(base, i)
modelsSI(i) = bakeCopy(baseSI, i)
val model = bakeDynamic(base)
val modelSI = bakeDynamic(baseSI)

for (i <- 0 until 2) {
modelsPair(i) = model(i)
modelsSIPair(i) = modelSI(i)
}
}

override def renderModel(t: Transformation, orient: Int) {
val icont = new IconTransformation(busXcvrIcon)
(if (sideInd) modelsSI else models) (orient).render(t, icont)
(if (sideInd) modelsSIPair else modelsPair) (if (orient < 24) 0 else 1)
.render(
new TransformationList(orientPrecomputed(orient), t),
icont,
LightModel.standardLightModel
)

val dPos = pos.copy
if (orient >= 24) dPos.x = 1 - dPos.x
Expand All @@ -767,7 +781,6 @@ class SigLightPanelModel(pos: Vector3, rotY: Boolean) extends ComponentModel {
}

class SignalBarModel(x: Double, z: Double) extends ComponentModel {
val models = new Array[CCModel](48)
val bars = new Array[CCModel](16)
val barsInv = new Array[CCModel](16)
var barsBg: CCModel = null
Expand All @@ -778,7 +791,7 @@ class SignalBarModel(x: Double, z: Double) extends ComponentModel {
var signal = 0
var inverted = false

{
val model = {
for (i <- 1 to 16) {
val bar = CCModel.quadModel(4)
val y = 12 / 32d + 0.0001d
Expand Down Expand Up @@ -807,15 +820,17 @@ class SignalBarModel(x: Double, z: Double) extends ComponentModel {
barsBg = bars(15).copy.apply(t)
barsBgInv = barsInv(15).copy.apply(t)

val base = signalPanel.copy.apply(pos.translation())
for (i <- 0 until 48) models(i) = bakeCopy(base, i)
signalPanel.copy.apply(pos.translation())
}

def renderModel(t: Transformation, orient: Int) {
val iconT = new IconTransformation(busConvIcon)
models(orient % 24).render(t, iconT)
model.render(
new TransformationList(orientPrecomputed(orient % 24), t),
iconT
)
val position = new TransformationList(pos.translation)
.`with`(orientT(orient % 24))
.`with`(orientPrecomputed(orient % 24))
.`with`(t)
(if (inverted) barsBgInv else barsBg).render(
position,
Expand Down Expand Up @@ -913,27 +928,29 @@ object CellTopWireModel {
}

class CellTopWireModel(wireTop: CCModel) extends CellWireModel {
val top = new Array[CCModel](24)
var conn = 0

for (i <- 0 until 24) top(i) = bakeCopy(wireTop, i)

override def renderModel(t: Transformation, orient: Int) {
val icont = new IconTransformation(cellIcon)
top(orient).render(t, icont, colourMult)
wireTop.render(
new TransformationList(orientPrecomputed(orient), t),
icont,
colourMult
)
import mrtjp.projectred.integration.CellTopWireModel._
if ((conn & 2) == 0) right(orient).render(t, icont, colourMult)
if ((conn & 8) == 0) left(orient).render(t, icont, colourMult)
}
}

class CellBottomWireModel(wireBottom: CCModel) extends CellWireModel {
val bottom = new Array[CCModel](24)

for (i <- 0 until 24) bottom(i) = bakeCopy(wireBottom, i)

override def renderModel(t: Transformation, orient: Int) {
bottom(orient).render(t, new IconTransformation(cellIcon), colourMult)
wireBottom.render(
new TransformationList(orientPrecomputed(orient), t),
new IconTransformation(cellIcon),
colourMult
)
}
}

Expand Down
Loading
Loading