Skip to content

Commit

Permalink
Revert "Listless no longer"
Browse files Browse the repository at this point in the history
This reverts commit 22383fd
  • Loading branch information
Jozufozu committed Jul 5, 2024
1 parent 06a2788 commit b2483de
Show file tree
Hide file tree
Showing 11 changed files with 68 additions and 99 deletions.
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.engine_room.flywheel.api.visual;

import java.util.List;

import dev.engine_room.flywheel.api.visualization.VisualizationContext;

/**
Expand All @@ -16,5 +14,5 @@ public interface Effect {
* @param ctx The visualization context.
* @return An arbitrary EffectVisual.
*/
List<EffectVisual<?>> visualize(VisualizationContext ctx, float partialTick);
EffectVisual<?> visualize(VisualizationContext ctx, float partialTick);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.engine_room.flywheel.api.visualization;

import java.util.List;

import dev.engine_room.flywheel.api.visual.BlockEntityVisual;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.world.level.block.entity.BlockEntity;
Expand All @@ -18,7 +16,7 @@ public interface BlockEntityVisualizer<T extends BlockEntity> {
* @param blockEntity The block entity to construct a visual for.
* @return The visual.
*/
List<BlockEntityVisual<? super T>> createVisual(VisualizationContext ctx, T blockEntity, float partialTick);
BlockEntityVisual<? super T> createVisual(VisualizationContext ctx, T blockEntity, float partialTick);

/**
* Checks if the given block entity should not be rendered with the vanilla {@link BlockEntityRenderer}.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package dev.engine_room.flywheel.api.visualization;

import java.util.List;

import dev.engine_room.flywheel.api.visual.EntityVisual;
import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.world.entity.Entity;
Expand All @@ -18,7 +16,7 @@ public interface EntityVisualizer<T extends Entity> {
* @param entity The entity to construct a visual for.
* @return The visual.
*/
List<EntityVisual<? super T>> createVisual(VisualizationContext ctx, T entity, float partialTick);
EntityVisual<? super T> createVisual(VisualizationContext ctx, T entity, float partialTick);

/**
* Checks if the given entity should not render with the vanilla {@link EntityRenderer}.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.engine_room.flywheel.lib.visual;

import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;

Expand All @@ -24,8 +23,8 @@ public SimpleBlockEntityVisualizer(Factory<T> visualFactory, Predicate<T> skipVa
}

@Override
public List<BlockEntityVisual<? super T>> createVisual(VisualizationContext ctx, T blockEntity, float partialTick) {
return List.of(visualFactory.create(ctx, blockEntity, partialTick));
public BlockEntityVisual<? super T> createVisual(VisualizationContext ctx, T blockEntity, float partialTick) {
return visualFactory.create(ctx, blockEntity, partialTick);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.engine_room.flywheel.lib.visual;

import java.util.List;
import java.util.Objects;
import java.util.function.Predicate;

Expand All @@ -24,8 +23,8 @@ public SimpleEntityVisualizer(Factory<T> visualFactory, Predicate<T> skipVanilla
}

@Override
public List<EntityVisual<? super T>> createVisual(VisualizationContext ctx, T entity, float partialTick) {
return List.of(visualFactory.create(ctx, entity, partialTick));
public EntityVisual<? super T> createVisual(VisualizationContext ctx, T entity, float partialTick) {
return visualFactory.create(ctx, entity, partialTick);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
import dev.engine_room.flywheel.api.instance.Instance;
import dev.engine_room.flywheel.api.task.Plan;
import dev.engine_room.flywheel.api.task.TaskExecutor;
import dev.engine_room.flywheel.api.visual.BlockEntityVisual;
import dev.engine_room.flywheel.api.visual.DynamicVisual;
import dev.engine_room.flywheel.api.visual.Effect;
import dev.engine_room.flywheel.api.visual.TickableVisual;
Expand Down Expand Up @@ -262,23 +261,21 @@ public void renderCrumbling(RenderContext context, Long2ObjectMap<SortedSet<Bloc
continue;
}

var visualList = blockEntities.getStorage()
var visual = blockEntities.getStorage()
.visualAtPos(entry.getLongKey());

if (visualList == null || visualList.isEmpty()) {
if (visual == null) {
// The block doesn't have a visual, this is probably the common case.
continue;
}

List<Instance> instances = new ArrayList<>();

for (BlockEntityVisual<?> visual : visualList) {
visual.collectCrumblingInstances(instance -> {
if (instance != null) {
instances.add(instance);
}
});
}
visual.collectCrumblingInstances(instance -> {
if (instance != null) {
instances.add(instance);
}
});

if (instances.isEmpty()) {
// The visual doesn't want to render anything crumbling.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.engine_room.flywheel.impl.visualization.manager;

import java.util.List;
import java.util.function.Supplier;

import org.jetbrains.annotations.Nullable;
Expand All @@ -17,14 +16,14 @@
import net.minecraft.world.level.block.entity.BlockEntity;

public class BlockEntityStorage extends Storage<BlockEntity> {
private final Long2ObjectMap<List<? extends BlockEntityVisual<?>>> posLookup = new Long2ObjectOpenHashMap<>();
private final Long2ObjectMap<BlockEntityVisual<?>> posLookup = new Long2ObjectOpenHashMap<>();

public BlockEntityStorage(Supplier<VisualizationContext> visualizationContextSupplier) {
super(visualizationContextSupplier);
}

@Nullable
public List<? extends BlockEntityVisual<?>> visualAtPos(long pos) {
public BlockEntityVisual<?> visualAtPos(long pos) {
return posLookup.get(pos);
}

Expand Down Expand Up @@ -53,18 +52,19 @@ public boolean willAccept(BlockEntity blockEntity) {
}

@Override
protected List<? extends BlockEntityVisual<?>> createRaw(BlockEntity obj, float partialTick) {
@Nullable
protected BlockEntityVisual<?> createRaw(BlockEntity obj, float partialTick) {
var visualizer = VisualizationHelper.getVisualizer(obj);
if (visualizer == null) {
return List.of();
return null;
}

var visualList = visualizer.createVisual(visualizationContextSupplier.get(), obj, partialTick);
var visual = visualizer.createVisual(visualizationContextSupplier.get(), obj, partialTick);

BlockPos blockPos = obj.getBlockPos();
posLookup.put(blockPos.asLong(), visualList);
posLookup.put(blockPos.asLong(), visual);

return visualList;
return visual;
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.engine_room.flywheel.impl.visualization.manager;

import java.util.List;
import java.util.function.Supplier;

import dev.engine_room.flywheel.api.visual.Effect;
Expand All @@ -14,7 +13,7 @@ public EffectStorage(Supplier<VisualizationContext> visualizationContextSupplier
}

@Override
protected List<? extends EffectVisual<?>> createRaw(Effect obj, float partialTick) {
protected EffectVisual<?> createRaw(Effect obj, float partialTick) {
return obj.visualize(visualizationContextSupplier.get(), partialTick);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package dev.engine_room.flywheel.impl.visualization.manager;

import java.util.List;
import java.util.function.Supplier;

import dev.engine_room.flywheel.api.visual.EntityVisual;
Expand All @@ -16,10 +15,10 @@ public EntityStorage(Supplier<VisualizationContext> visualizationContextSupplier
}

@Override
protected List<? extends EntityVisual<?>> createRaw(Entity obj, float partialTick) {
protected EntityVisual<?> createRaw(Entity obj, float partialTick) {
var visualizer = VisualizationHelper.getVisualizer(obj);
if (visualizer == null) {
return List.of();
return null;
}

return visualizer.createVisual(visualizationContextSupplier.get(), obj, partialTick);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ public S getStorage() {

@Override
public int getVisualCount() {
return getStorage().visualCount();
return getStorage().getAllVisuals()
.size();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package dev.engine_room.flywheel.impl.visualization.storage;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;

import org.jetbrains.annotations.Nullable;

import dev.engine_room.flywheel.api.task.Plan;
import dev.engine_room.flywheel.api.visual.DynamicVisual;
import dev.engine_room.flywheel.api.visual.LitVisual;
Expand All @@ -26,50 +29,59 @@ public abstract class Storage<T> {
protected final List<SimpleTickableVisual> simpleTickableVisuals = new ArrayList<>();
protected final LitVisualStorage litVisuals = new LitVisualStorage();

private final Map<T, List<? extends Visual>> visuals = new Reference2ObjectOpenHashMap<>();
private final Map<T, Visual> visuals = new Reference2ObjectOpenHashMap<>();

public Storage(Supplier<VisualizationContext> visualizationContextSupplier) {
this.visualizationContextSupplier = visualizationContextSupplier;
}

public int visualCount() {
int out = 0;
for (var visualList : visuals.values()) {
out += visualList.size();
}
return out;
public Collection<Visual> getAllVisuals() {
return visuals.values();
}

public void add(T obj, float partialTick) {
var visualList = this.visuals.get(obj);
Visual visual = visuals.get(obj);

if (visualList == null) {
if (visual == null) {
create(obj, partialTick);
}
}

public void remove(T obj) {
var visualList = this.visuals.remove(obj);
Visual visual = visuals.remove(obj);

if (visualList == null || visualList.isEmpty()) {
if (visual == null) {
return;
}

for (Visual visual : visualList) {
remove(visual);
if (visual instanceof TickableVisual tickable) {
if (visual instanceof SimpleTickableVisual simpleTickable) {
simpleTickableVisuals.remove(simpleTickable);
} else {
tickableVisuals.remove(tickable);
}
}
if (visual instanceof DynamicVisual dynamic) {
if (visual instanceof SimpleDynamicVisual simpleDynamic) {
simpleDynamicVisuals.remove(simpleDynamic);
} else {
dynamicVisuals.remove(dynamic);
}
}
if (visual instanceof LitVisual lit) {
litVisuals.remove(lit);
}
visual.delete();
}

public void update(T obj, float partialTick) {
var visualList = visuals.get(obj);
Visual visual = visuals.get(obj);

if (visualList == null || visualList.isEmpty()) {
if (visual == null) {
return;
}

for (Visual visual : visualList) {
visual.update(partialTick);
}
visual.update(partialTick);
}

public void recreateAll(float partialTick) {
Expand All @@ -78,17 +90,13 @@ public void recreateAll(float partialTick) {
simpleTickableVisuals.clear();
simpleDynamicVisuals.clear();
litVisuals.clear();
visuals.replaceAll((obj, visuals) -> {
visuals.forEach(Visual::delete);
visuals.replaceAll((obj, visual) -> {
visual.delete();

var out = createRaw(obj, partialTick);

if (out.isEmpty()) {
return null;
}

for (Visual visual : out) {
setup(visual);
if (out != null) {
setup(out);
}

return out;
Expand All @@ -99,28 +107,22 @@ public void invalidate() {
tickableVisuals.clear();
dynamicVisuals.clear();
litVisuals.clear();
for (var visualList : visuals.values()) {
for (Visual visual : visualList) {
visual.delete();
}
}
visuals.values()
.forEach(Visual::delete);
visuals.clear();
}

private void create(T obj, float partialTick) {
var visuals = createRaw(obj, partialTick);
var visual = createRaw(obj, partialTick);

if (visuals.isEmpty()) {
return;
}
this.visuals.put(obj, visuals);

for (Visual visual : visuals) {
if (visual != null) {
setup(visual);
visuals.put(obj, visual);
}
}

protected abstract List<? extends Visual> createRaw(T obj, float partialTick);
@Nullable
protected abstract Visual createRaw(T obj, float partialTick);

public Plan<DynamicVisual.Context> framePlan() {
return NestedPlan.of(dynamicVisuals, litVisuals.plan(), ForEachPlan.of(() -> simpleDynamicVisuals, SimpleDynamicVisual::beginFrame));
Expand Down Expand Up @@ -156,27 +158,6 @@ private void setup(Visual visual) {
}
}

private void remove(Visual visual) {
if (visual instanceof TickableVisual tickable) {
if (visual instanceof SimpleTickableVisual simpleTickable) {
simpleTickableVisuals.remove(simpleTickable);
} else {
tickableVisuals.remove(tickable);
}
}
if (visual instanceof DynamicVisual dynamic) {
if (visual instanceof SimpleDynamicVisual simpleDynamic) {
simpleDynamicVisuals.remove(simpleDynamic);
} else {
dynamicVisuals.remove(dynamic);
}
}
if (visual instanceof LitVisual lit) {
litVisuals.remove(lit);
}
visual.delete();
}

/**
* Is the given object currently capable of being added?
*
Expand Down

0 comments on commit b2483de

Please sign in to comment.