Skip to content

Commit

Permalink
Renamed HoloPBuild. Try to fix `Wireless Power would cause power gr…
Browse files Browse the repository at this point in the history
…aph non-update issue.`
  • Loading branch information
liplum committed Jul 28, 2022
1 parent b7d7c58 commit d3f156f
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 34 deletions.
9 changes: 8 additions & 1 deletion main/src/net/liplum/blocks/power/WirelessTower.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import arc.graphics.g2d.Draw
import arc.math.Angles
import arc.math.Interp
import arc.math.Mathf
import arc.struct.ObjectSet
import arc.util.Time
import arc.util.io.Reads
import arc.util.io.Writes
Expand All @@ -15,6 +16,7 @@ import mindustry.gen.Building
import mindustry.graphics.Drawf
import mindustry.graphics.Layer
import mindustry.world.blocks.power.PowerBlock
import mindustry.world.blocks.power.PowerGraph
import mindustry.world.meta.Stat
import mindustry.world.meta.StatUnit
import net.liplum.DebugOnly
Expand Down Expand Up @@ -111,9 +113,10 @@ open class WirelessTower(name: String) : PowerBlock(name) {
get() = radiationSpeed * Mathf.log(3f, timeScale + 2f)
@ClientOnly @JvmField
var pingingCount = 0
val powerGraphsTemp = ObjectSet<PowerGraph>()
override fun updateTile() {
// TODO: Bug
lastNeed = 0f
powerGraphsTemp.clear()
if (power.status.isZero || (power.graph.all.size == 1 && power.graph.all.first() == this)) return
forEachBufferedInRange {
val powerCons = it.block.consPower
Expand All @@ -126,8 +129,12 @@ open class WirelessTower(name: String) : PowerBlock(name) {
originalStatus + provided / powerCons.capacity
)
lastNeed += provided * dst2CostRate(it.dst(this))
powerGraphsTemp.add(power.graph)
}
}
for (graph in powerGraphsTemp) {
graph.update()
}
}

override fun drawSelect() {
Expand Down
42 changes: 21 additions & 21 deletions main/src/net/liplum/holo/HoloProjector.kt
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ open class HoloProjector(name: String) : Block(name) {
val vecs = arrayOf(Vec2(), Vec2(), Vec2(), Vec2())

init {
buildType = Prov { HoloPBuild() }
buildType = Prov { HoloProjectorBuild() }
solid = true
update = true
hasPower = true
Expand All @@ -81,24 +81,24 @@ open class HoloProjector(name: String) : Block(name) {
configurable = true
sync = true
commandable = true
config(Integer::class.java) { obj: HoloPBuild, plan ->
config(Integer::class.java) { obj: HoloProjectorBuild, plan ->
obj.setPlan(plan.toInt())
}
configClear { obj: HoloPBuild ->
configClear { obj: HoloProjectorBuild ->
obj.setPlan(-1)
}
}

override fun init() {
consume(ConsumeItemDynamic<HoloPBuild> {
consume(ConsumeItemDynamic<HoloProjectorBuild> {
it.curPlan.itemReqs
})

consume(object : DynamicContinuousLiquidCons({
(it as HoloPBuild).curPlan.cyberionReq
(it as HoloProjectorBuild).curPlan.cyberionReq
}) {
override fun update(b: Building) {
b as HoloPBuild
b as HoloProjectorBuild
val plan = b.curPlan
if (plan != null) {
val liquid = plan.req.liquid
Expand All @@ -108,7 +108,7 @@ open class HoloProjector(name: String) : Block(name) {
}
}
})
consumePowerCond<HoloPBuild>(powerUse) {
consumePowerCond<HoloProjectorBuild>(powerUse) {
it.curPlan != null
}
itemCapabilities = IntArray(ItemTypeAmount())
Expand All @@ -135,19 +135,19 @@ open class HoloProjector(name: String) : Block(name) {
removeItemsInBar()
}
DebugOnly {
AddBar<HoloPBuild>("progress",
AddBar<HoloProjectorBuild>("progress",
{ "${"bar.progress".bundle}: ${progress.percentI}" },
{ S.Hologram },
{ progress }
)
}.Else {
AddBar<HoloPBuild>("progress",
AddBar<HoloProjectorBuild>("progress",
{ "bar.progress".bundle },
{ S.Hologram },
{ progress }
)
}
AddBar<HoloPBuild>(R.Bar.Vanilla.UnitsN,
AddBar<HoloProjectorBuild>(R.Bar.Vanilla.UnitsN,
{
val curPlan = curPlan
if (curPlan == null)
Expand Down Expand Up @@ -175,11 +175,11 @@ open class HoloProjector(name: String) : Block(name) {
else
plans[this]

open inner class HoloPBuild : Building() {
open inner class HoloProjectorBuild : Building() {
@Serialized
var planOrder: Int = -1
var planIndex: Int = -1
val curPlan: HoloPlan?
get() = planOrder.plan
get() = planIndex.plan
@Serialized
var progressTime = 0f
var commandPos: Vec2? = null
Expand Down Expand Up @@ -212,8 +212,8 @@ open class HoloProjector(name: String) : Block(name) {
if (order < 0 || order >= plans.size) {
order = -1
}
if (order == planOrder) return
planOrder = order
if (order == planIndex) return
planIndex = order
val p = curPlan
progressTime = if (p != null)
progressTime.coerceAtMost(p.time)
Expand Down Expand Up @@ -253,10 +253,10 @@ open class HoloProjector(name: String) : Block(name) {
}

@JvmField var lastUnitInPayload: MdtUnit? = null
fun findTrueHoloProjectorSource(): HoloPBuild {
fun findTrueHoloProjectorSource(): HoloProjectorBuild {
val unit = lastUnitInPayload
if (unit is HoloUnit) {
val trueProjector = unit.projectorPos.TE<HoloPBuild>()
val trueProjector = unit.projectorPos.TE<HoloProjectorBuild>()
if (trueProjector != null)
return trueProjector
}
Expand All @@ -268,7 +268,7 @@ open class HoloProjector(name: String) : Block(name) {
super.updatePayload(unitHolder, buildingHolder)
}

override fun config(): Any? = planOrder
override fun config(): Any? = planIndex
open fun projectUnit(unitType: HoloUnitType): Boolean {
if (unitType.canCreateHoloUnitIn(team)) {
val unit = unitType.create(team)
Expand Down Expand Up @@ -403,19 +403,19 @@ open class HoloProjector(name: String) : Block(name) {

override fun read(read: Reads, revision: Byte) {
super.read(read, revision)
planOrder = read.b().toInt()
planIndex = read.b().toInt()
progressTime = read.f()
}

override fun write(write: Writes) {
super.write(write)
write.b(planOrder)
write.b(planIndex)
write.f(progressTime)
}

override fun senseObject(sensor: LAccess): Any? {
return when (sensor) {
LAccess.config -> planOrder
LAccess.config -> planIndex
else -> super.sense(sensor)
}
}
Expand Down
11 changes: 6 additions & 5 deletions main/src/net/liplum/holo/HoloUnit.kt
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,9 @@ import mindustry.world.blocks.payloads.Payload
import mindustry.world.blocks.power.PowerGraph
import net.liplum.S
import net.liplum.common.persistence.*
import net.liplum.holo.HoloProjector.HoloPBuild
import net.liplum.holo.HoloProjector.HoloProjectorBuild
import net.liplum.lib.Serialized
import net.liplum.mdt.ClientOnly
import net.liplum.mdt.OverwriteVanilla
import net.liplum.mdt.mixin.PayloadMixin
import net.liplum.mdt.render.G
import net.liplum.mdt.utils.TE
Expand Down Expand Up @@ -64,7 +63,7 @@ open class HoloUnit : UnitEntity(), PayloadMixin, IRevisionable {
val isProjectorMissing: Boolean
get() = !projectorPos.build.exists

open fun setProjector(projector: HoloPBuild) {
open fun setProjector(projector: HoloProjectorBuild) {
projectorPos = projector.pos()
}

Expand Down Expand Up @@ -236,7 +235,7 @@ open class HoloUnit : UnitEntity(), PayloadMixin, IRevisionable {
}

override fun updatePayload() {
val projector = projectorPos.TE<HoloPBuild>()
val projector = projectorPos.TE<HoloProjectorBuild>()
if (projector?.power != null)
payloadPower = projector.power?.graph

Expand All @@ -257,7 +256,7 @@ open class HoloUnit : UnitEntity(), PayloadMixin, IRevisionable {
}

fun tryTransferCyberionInto(payload: Payload) {
val projector = projectorPos.TE<HoloPBuild>() ?: return
val projector = projectorPos.TE<HoloProjectorBuild>() ?: return
val type = type as? HoloUnitType ?: return
if (payload is BuildPayload) {
val build = payload.build
Expand All @@ -272,6 +271,7 @@ open class HoloUnit : UnitEntity(), PayloadMixin, IRevisionable {
override fun classId(): Int {
return EntityRegistry[javaClass]
}

override fun read(_read_: Reads) {
super.read(_read_)
// Since 8, use cache reader instead of vanilla
Expand All @@ -283,6 +283,7 @@ open class HoloUnit : UnitEntity(), PayloadMixin, IRevisionable {
}
}
}

override fun write(_write_: Writes) {
super.write(_write_)
// Since 8, use cache writer instead of vanilla
Expand Down
6 changes: 3 additions & 3 deletions main/src/net/liplum/holo/HoloUnitH.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ fun Team.updateHoloCapacity(): Int {
val buildings = data().buildings
if (buildings.isEmpty) return 0
buildings.each {
if (it is HoloProjector.HoloPBuild) {
if (it is HoloProjector.HoloProjectorBuild) {
val block = it.block
if (block is HoloProjector) {
count += block.holoUnitCapacity
Expand All @@ -28,12 +28,12 @@ fun Team.updateHoloCapacity(): Int {
return count
}

fun Team.updateHoloCapacity(thisProjector: HoloProjector.HoloPBuild): Int {
fun Team.updateHoloCapacity(thisProjector: HoloProjector.HoloProjectorBuild): Int {
var count = thisProjector.block().holoUnitCapacity
val buildings = data().buildings
if (buildings.isEmpty) return 0
buildings.each {
if (it is HoloProjector.HoloPBuild) {
if (it is HoloProjector.HoloProjectorBuild) {
val block = it.block
if (block is HoloProjector && it != thisProjector) {
count += block.holoUnitCapacity
Expand Down
8 changes: 4 additions & 4 deletions main/src/net/liplum/holo/HoloUnitType.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import mindustry.world.meta.Stat
import net.liplum.DebugOnly
import net.liplum.R
import net.liplum.S
import net.liplum.holo.HoloProjector.HoloPBuild
import net.liplum.holo.HoloProjector.HoloProjectorBuild
import net.liplum.common.shader.use
import net.liplum.common.util.bundle
import net.liplum.common.util.toFloat
Expand Down Expand Up @@ -284,15 +284,15 @@ open class HoloUnitType(name: String) : UnitType(name) {
if (unit is HoloUnit) {
bars.add(
Bar({
val p = unit.projectorPos.TE<HoloPBuild>()
val p = unit.projectorPos.TE<HoloProjectorBuild>()
if (p != null) "${p.tileX()},${p.tileY()}"
else "${Iconc.cancel}"
}, {
val p = unit.projectorPos.TE<HoloPBuild>()
val p = unit.projectorPos.TE<HoloProjectorBuild>()
if (p != null) S.Hologram
else Color.gray
}, {
(unit.projectorPos.TE<HoloPBuild>() != null).toFloat()
(unit.projectorPos.TE<HoloProjectorBuild>() != null).toFloat()
})
)
bars.row()
Expand Down

0 comments on commit d3f156f

Please sign in to comment.