Skip to content

Commit e65ed7c

Browse files
committed
✨ Reworked Antennas
1 parent 9c79010 commit e65ed7c

24 files changed

Lines changed: 252 additions & 181 deletions

common/src/main/java/org/modogthedev/superposition/blockentity/AmplifierBlockEntity.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,8 @@ protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries)
7272
@Override
7373
public Signal modulateSignal(Signal signal, boolean updateTooltip) {
7474
if (signal != null) {
75-
signal.modulate(Math.max(0, amplification - throttle + (getRedstoneOffset(level, this.getBlockPos()) * (this.redstoneAmplification / 15))));
76-
if (lastAmplitude != signal.getAmplitude()) {
77-
level.updateNeighbourForOutputSignal(this.getBlockPos(), this.getBlockState().getBlock());
78-
}
79-
if (updateTooltip) {
80-
amplitude = signal.getAmplitude();
81-
}
75+
signal.addAmplitude(Math.max(0, amplification - throttle + (getRedstoneOffset(level, this.getBlockPos()) * (this.redstoneAmplification / 15))));
76+
amplitude += signal.getAmplitude();
8277
}
8378
return signal;
8479
}
@@ -105,6 +100,9 @@ public void tick() {
105100
if (level.isClientSide) {
106101
List<Component> tooltip = new ArrayList<>();
107102
this.setTooltip(tooltip);
103+
for (Signal signal : putSignals) {
104+
amplitude += signal.getAmplitude();
105+
}
108106
if (amplitude > 0) {
109107
ticks++;
110108
if (ticks > ticksToChange - 1) {
@@ -141,7 +139,7 @@ public void tick() {
141139
}
142140
throttle = (temp - 26f) * 10f;
143141
amplitude -= throttle;
144-
amplitude = Math.max(amplitude,0);
142+
amplitude = Math.max(amplitude, 0);
145143

146144
if (updateNext) {
147145
level.updateNeighborsAt(worldPosition, this.getBlockState().getBlock());
@@ -150,8 +148,6 @@ public void tick() {
150148
if (lastAmplitude != amplitude) {
151149
updateNext = true;
152150
}
153-
154-
155151
lastAmplitude = amplitude;
156152
amplitude = 0;
157153
super.tick();
@@ -173,7 +169,7 @@ public void configurePointLight(PointLightData light) {
173169
center = center.add(new Vec3(facing.getNormal().getX(), facing.getNormal().getY(), facing.getNormal().getZ()).scale(0.4f));
174170
light.setPosition(center.x, center.y, center.z);
175171
light.setColor(0xc76528);
176-
light.setBrightness((float) Math.clamp((temp-26.1f)/4f,0,3));
172+
light.setBrightness((float) Math.clamp((temp - 26.1f) / 4f, 0, 3));
177173
light.setRadius(2f);
178174
}
179175

common/src/main/java/org/modogthedev/superposition/blockentity/AntennaActorBlockEntity.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import net.minecraft.world.level.block.state.BlockState;
77
import org.modogthedev.superposition.system.antenna.Antenna;
88
import org.modogthedev.superposition.system.antenna.AntennaManager;
9+
import org.modogthedev.superposition.system.antenna.type.PhysicalAntenna;
910
import org.modogthedev.superposition.util.TickableBlockEntity;
1011

1112
public class AntennaActorBlockEntity extends SignalActorBlockEntity implements TickableBlockEntity {
@@ -17,16 +18,18 @@ public AntennaActorBlockEntity(BlockEntityType<?> pType, BlockPos pPos, BlockSta
1718
}
1819

1920
public String classifyAntenna() {
20-
if (antenna.relativeCenter.x == 0 && antenna.relativeCenter.z == 0) {
21-
if (antenna.size.x == 0 && antenna.size.z == 0)
22-
return "Monopole";
23-
else if (antenna.size.x != 0 && antenna.size.z != 0)
24-
return "Yagi";
21+
if (antenna instanceof PhysicalAntenna physicalAntenna) {
22+
if (physicalAntenna.relativeCenter.x == 0 && physicalAntenna.relativeCenter.z == 0) {
23+
if (physicalAntenna.size.x == 0 && physicalAntenna.size.z == 0)
24+
return "Monopole";
25+
else if (physicalAntenna.size.x != 0 && physicalAntenna.size.z != 0)
26+
return "Yagi";
27+
}
28+
if (physicalAntenna.size.x != 0 && physicalAntenna.size.z != 0)
29+
return "Log Periodic";
30+
if ((physicalAntenna.avg.x != 0 && physicalAntenna.avg.z == 0) || (physicalAntenna.avg.z != 0 && physicalAntenna.avg.x == 0))
31+
return "Dipole";
2532
}
26-
if (antenna.size.x != 0 && antenna.size.z != 0)
27-
return "Log Periodic";
28-
if ((antenna.avg.x != 0 && antenna.avg.z == 0) || (antenna.avg.z != 0 && antenna.avg.x == 0))
29-
return "Dipole";
3033
return "Unknown";
3134
}
3235

common/src/main/java/org/modogthedev/superposition/blockentity/ConstantCombinatorBlockEntity.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public ConstantCombinatorBlockEntity(BlockPos pos, BlockState state) {
2626
@Override
2727
public void tick() {
2828
if (outputSignal == null) {
29-
outputSignal = SignalHelper.getEmptySignal(getLevel(),getBlockPos());
29+
outputSignal = SignalHelper.getEmptySignal(getLevel(), getBlockPos());
3030
}
3131
if (outputString != null)
3232
outputSignal.encode(outputString);
@@ -65,6 +65,11 @@ public void loadSyncedData(CompoundTag tag) {
6565
if (tag.contains("output")) {
6666
outputString = tag.getString("output");
6767
}
68+
if (tag.contains("modifiedPosition")) {
69+
int position = tag.getInt("modifiedPosition");
70+
String word = tag.getString("changedChar");
71+
outputString = (outputString.substring(0, position) + (word) + outputString.substring(Math.min(position, outputString.length())));
72+
}
6873
}
6974

7075
@Override

common/src/main/java/org/modogthedev/superposition/blockentity/ReceiverBlockEntity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,10 @@ public void tick() {
5757
List<Signal> signals = getSignals();
5858
if (level.isClientSide) {
5959
tooltip.add(Component.literal("Antenna Classification - " + classifyAntenna()));
60-
tooltip.add(Component.literal("Antenna Frequency - " + SuperpositionMth.frequencyToHzReadable(SuperpositionMth.antennaSizeToHz(antenna.antennaParts.size()))));
60+
tooltip.add(Component.literal("Antenna Frequency - " + SuperpositionMth.formatHz(antenna.getFrequency())));
6161
float bonusFrequency = getBounusFrequency();
6262
if (bonusFrequency != 0) {
63-
tooltip.add(Component.literal("Actual Frequency - " + SuperpositionMth.frequencyToHzReadable(SuperpositionMth.antennaSizeToHz(antenna.antennaParts.size()) + bonusFrequency)));
63+
tooltip.add(Component.literal("Actual Frequency - " + SuperpositionMth.formatHz(antenna.getFrequency() + bonusFrequency)));
6464
}
6565
} else {
6666
updatePutSignals(signals);

common/src/main/java/org/modogthedev/superposition/blockentity/SignalActorBlockEntity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,7 @@ public Signal getSideSignal(Direction face) {
222222

223223
/**
224224
* Returns the list of signals inside the block. It should be deep cloned if you are going to modify it elsewhere.
225+
* You should always use {@link SignalActorBlockEntity#getSideSignals(Direction)} if your operation exists in the world.
225226
*
226227
* @return the putSignals field
227228
*/
@@ -306,7 +307,7 @@ public void updatePutSignals(List<Signal> signals) {
306307
}
307308

308309
/**
309-
* If you need to put signals into a block entity, call this method.
310+
* Puts signals into a block entity.
310311
*
311312
* @param nextCall
312313
* @param signals
@@ -320,7 +321,7 @@ public void putSignalsFace(Object nextCall, List<Signal> signals, Direction face
320321
}
321322

322323
/**
323-
* This method should not be called on another blockEntity, this method exists as an easy way for block entitys to start signal propagation
324+
* This method should not be called on another blockEntity, this method exists as an easy way for block entities to start signal propagation
324325
*
325326
* @param nextCall
326327
* @param list

common/src/main/java/org/modogthedev/superposition/blockentity/SignalGeneratorBlockEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void tick() {
6565
if (this.level.isClientSide()) {
6666
List<Component> tooltip = new ArrayList<>();
6767
tooltip.add(Component.literal("Signal Generator Status:"));
68-
tooltip.add(Component.literal("Frequency - " + SuperpositionMth.frequencyToHzReadable(frequency * 100000)));
68+
tooltip.add(Component.literal("Frequency - " + SuperpositionMth.formatHz(frequency * 100000)));
6969

7070
float speed = SuperpositionMth.getFromRange(150, 0, 3, .1f, frequency);
7171
if (frequency <= 0 || frequency > 150) {

common/src/main/java/org/modogthedev/superposition/blockentity/TransmitterBlockEntity.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public void tick() {
2727
tooltip.add(Component.literal("Transmitter Status:"));
2828
float frequency = 0;
2929
if (antenna != null) {
30-
frequency = SuperpositionMth.antennaSizeToHz(antenna.antennaParts.size());
30+
frequency = antenna.getFrequency();
3131
}
3232
if (antenna != null && level.isClientSide) {
3333
tooltip.add(Component.literal("Antenna Classification - " + this.classifyAntenna()));
34-
tooltip.add(Component.literal("Antenna Frequency - " + SuperpositionMth.frequencyToHzReadable(frequency)));
34+
tooltip.add(Component.literal("Antenna Frequency - " + SuperpositionMth.formatHz(frequency)));
3535
}
3636
boolean noSignal = false;
3737
if (antenna != null) {
@@ -41,13 +41,13 @@ public void tick() {
4141
signalForBroadcast.getPos().set(worldPosition.getX() + 0.5, worldPosition.getY() + 0.5, worldPosition.getZ() + 0.5);
4242
signalForBroadcast.setEmitting(true);
4343
signalForBroadcast.level = level;
44-
signalForBroadcast.setSourceAntenna(this.getBlockPos(), antenna.antennaParts.size());
44+
signalForBroadcast.setSourceAntenna(this.getBlockPos());
4545
signalForBroadcast.mulAmplitude(1 / Math.max(1, Math.abs((signalForBroadcast.getFrequency() - frequency) / 100000)));
4646
if (signalForBroadcast.getAmplitude() > 0.05f) {
4747
SignalManager.updateSignal(signalForBroadcast);
4848
signal = signalForBroadcast;
4949
if (level.isClientSide) {
50-
tooltip.add(Component.literal("Broadcast Frequency - " + SuperpositionMth.frequencyToHzReadable(signalForBroadcast.getFrequency())));
50+
tooltip.add(Component.literal("Broadcast Frequency - " + SuperpositionMth.formatHz(signalForBroadcast.getFrequency())));
5151
}
5252
} else {
5353
this.stopTransmission();
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.modogthedev.superposition.blockentity.util;
2+
3+
import net.minecraft.core.BlockPos;
4+
import net.minecraft.core.Direction;
5+
import net.minecraft.world.level.block.entity.BlockEntityType;
6+
import net.minecraft.world.level.block.state.BlockState;
7+
import org.modogthedev.superposition.blockentity.SignalActorBlockEntity;
8+
import org.modogthedev.superposition.system.signal.Signal;
9+
import org.modogthedev.superposition.util.SignalHelper;
10+
11+
import java.util.List;
12+
13+
public abstract class SimpleSignalProviderBlockEntity extends SignalActorBlockEntity {
14+
private Signal output = null;
15+
public SimpleSignalProviderBlockEntity(BlockEntityType<?> pType, BlockPos pPos, BlockState pBlockState) {
16+
super(pType, pPos, pBlockState);
17+
}
18+
19+
/**
20+
* @param signal The signal whose data should be modified
21+
* @param face The side of the block that the signal is being taken from
22+
*/
23+
public abstract void encodeInformation(Signal signal, Direction face);
24+
25+
@Override
26+
public List<Signal> getSideSignals(Direction face) {
27+
if (output == null) {
28+
output = SignalHelper.getEmptySignal(getLevel(),getBlockPos());
29+
}
30+
encodeInformation(output, face);
31+
return super.getSideSignals(face);
32+
}
33+
}

common/src/main/java/org/modogthedev/superposition/client/renderer/CableRenderer.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.modogthedev.superposition.blockentity.AntennaActorBlockEntity;
3030
import org.modogthedev.superposition.core.SuperpositionConstants;
3131
import org.modogthedev.superposition.core.SuperpositionRenderTypes;
32+
import org.modogthedev.superposition.system.antenna.type.PhysicalAntenna;
3233
import org.modogthedev.superposition.system.cable.Cable;
3334
import org.modogthedev.superposition.system.cable.CableClientState;
3435
import org.modogthedev.superposition.system.cable.CableClipResult;
@@ -414,8 +415,8 @@ public static void renderOverlays(LevelRenderer levelRenderer, MultiBufferSource
414415
Vec3 pos1 = Vec3.atCenterOf(blockHitResult.getBlockPos());
415416
if (level.getBlockEntity(BlockPos.containing(pos1)) instanceof AntennaActorBlockEntity antennaActorBlockEntity) {
416417
matrixStack.matrixPush();
417-
if (antennaActorBlockEntity.antenna != null) {
418-
for (BlockPos pos : antennaActorBlockEntity.antenna.antennaParts) {
418+
if (antennaActorBlockEntity.antenna instanceof PhysicalAntenna physicalAntenna) {
419+
for (BlockPos pos : physicalAntenna.antennaParts) {
419420
DebugRenderer.renderFilledBox(matrixStack.toPoseStack(), bufferSource, pos, -0.2f, 0.5f, 0.9f, 0.5f, 0.5f);
420421
}
421422
}

common/src/main/java/org/modogthedev/superposition/client/renderer/DebugRenderer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import org.modogthedev.superposition.core.SuperpositionConstants;
1919
import org.modogthedev.superposition.system.antenna.Antenna;
2020
import org.modogthedev.superposition.system.antenna.AntennaManager;
21+
import org.modogthedev.superposition.system.antenna.type.PhysicalAntenna;
2122
import org.modogthedev.superposition.system.cable.Cable;
2223
import org.modogthedev.superposition.system.cable.CableClipResult;
2324
import org.modogthedev.superposition.system.cable.CableManager;
@@ -49,7 +50,7 @@ public static void renderDebug(LevelRenderer levelRenderer, MultiBufferSource.Bu
4950
drawPosBox((PoseStack) matrixStack, vertexConsumer, signal.getPos().add(0, 1, 0, POS), 0.3f, 0.5f, 0.5f, 0.9f);
5051
}
5152
for (Antenna antenna : AntennaManager.getAntennaList(level)) {
52-
drawPosBox((PoseStack) matrixStack, vertexConsumer, antenna.getRelativeCenter(POS), 0.5f, 0.5f, 0.9f, 0.5f);
53+
drawPosBox((PoseStack) matrixStack, vertexConsumer, antenna.getPosition(), 0.5f, 0.5f, 0.9f, 0.5f);
5354
}
5455
for (Cable cable : CableManager.getLevelCables(level)) {
5556
boolean isSleeping = cable.isSleeping();

0 commit comments

Comments
 (0)