Skip to content

Commit 6094b4b

Browse files
committed
Moved PositionedColor out of CompoundGradient
1 parent 04f5a91 commit 6094b4b

File tree

2 files changed

+46
-34
lines changed

2 files changed

+46
-34
lines changed

src/main/java/dev/latvian/mods/klib/color/CompoundGradient.java

Lines changed: 17 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,36 +8,15 @@
88
import io.netty.buffer.ByteBuf;
99
import net.minecraft.network.codec.ByteBufCodecs;
1010
import net.minecraft.network.codec.StreamCodec;
11-
import org.jetbrains.annotations.NotNull;
1211

1312
import java.util.ArrayList;
1413
import java.util.Arrays;
1514
import java.util.List;
1615
import java.util.function.Function;
1716

18-
public record CompoundGradient(List<PositionedColor> colors, PositionedColor[] sorted) implements Gradient {
19-
public record PositionedColor(float position, Color color, Easing easing) implements Comparable<PositionedColor> {
20-
public static final Codec<PositionedColor> CODEC = RecordCodecBuilder.create(instance -> instance.group(
21-
Codec.FLOAT.fieldOf("position").forGetter(PositionedColor::position),
22-
Color.CODEC.fieldOf("colors").forGetter(PositionedColor::color),
23-
Easing.CODEC.optionalFieldOf("easing", Easing.LINEAR).forGetter(PositionedColor::easing)
24-
).apply(instance, PositionedColor::new));
25-
26-
public static final StreamCodec<ByteBuf, PositionedColor> STREAM_CODEC = StreamCodec.composite(
27-
ByteBufCodecs.FLOAT, PositionedColor::position,
28-
Color.STREAM_CODEC, PositionedColor::color,
29-
Easing.STREAM_CODEC, PositionedColor::easing,
30-
PositionedColor::new
31-
);
32-
33-
@Override
34-
public int compareTo(@NotNull PositionedColor other) {
35-
return Float.compare(position, other.position);
36-
}
37-
}
38-
17+
public record CompoundGradient(PositionedColor[] sorted) implements Gradient {
3918
public static final Codec<CompoundGradient> DIRECT_CODEC = RecordCodecBuilder.create(instance -> instance.group(
40-
PositionedColor.CODEC.listOf().fieldOf("colors").forGetter(CompoundGradient::colors)
19+
PositionedColor.CODEC.listOf().fieldOf("colors").forGetter(CompoundGradient::getColorList)
4120
).apply(instance, CompoundGradient::new));
4221

4322
public static CompoundGradient ofColors(List<Color> colors) {
@@ -51,10 +30,10 @@ public static CompoundGradient ofColors(List<Color> colors) {
5130
}
5231

5332
public static final Codec<CompoundGradient> CODEC = Codec.either(DIRECT_CODEC, Color.CODEC.listOf()).xmap(e -> e.map(Function.identity(), CompoundGradient::ofColors), g -> g.isSimple() ? Either.right(g.rawColors()) : Either.left(g));
54-
public static final StreamCodec<ByteBuf, CompoundGradient> STREAM_CODEC = PositionedColor.STREAM_CODEC.apply(ByteBufCodecs.list()).map(CompoundGradient::new, CompoundGradient::colors);
33+
public static final StreamCodec<ByteBuf, CompoundGradient> STREAM_CODEC = PositionedColor.STREAM_CODEC.apply(ByteBufCodecs.list()).map(CompoundGradient::new, CompoundGradient::getColorList);
5534

5635
public CompoundGradient(List<PositionedColor> colors) {
57-
this(colors, colors.toArray(new PositionedColor[0]));
36+
this(colors.toArray(new PositionedColor[0]));
5837
Arrays.sort(sorted);
5938
}
6039

@@ -63,9 +42,9 @@ public Color get(float delta) {
6342
if (sorted.length == 0) {
6443
return Color.TRANSPARENT;
6544
} else if (delta <= 0F || sorted.length == 1) {
66-
return sorted[0].color;
45+
return sorted[0].color();
6746
} else if (delta >= 1F) {
68-
return sorted[sorted.length - 1].color.get(1F);
47+
return sorted[sorted.length - 1].color().get(1F);
6948
}
7049

7150
var left = sorted[0];
@@ -74,24 +53,24 @@ public Color get(float delta) {
7453
for (int i = sorted.length - 1; i >= 0; i--) {
7554
var c = sorted[i];
7655

77-
if (c.position <= delta) {
56+
if (c.position() <= delta) {
7857
left = c;
7958
right = i < sorted.length - 1 ? sorted[i + 1] : c;
8059
break;
8160
}
8261
}
8362

84-
return left.color.lerp(left.easing.ease(KMath.map(delta, left.position, right.position, 0F, 1F)), right.color);
63+
return left.color().lerp(left.easing().ease(KMath.map(delta, left.position(), right.position(), 0F, 1F)), right.color());
8564
}
8665

8766
@Override
8867
public Gradient resolve() {
8968
if (sorted.length == 0) {
9069
return Color.TRANSPARENT;
91-
} else if (sorted.length == 2 && sorted[0].easing == Easing.LINEAR) {
92-
return new LinearPairGradient(sorted[0].color, sorted[sorted.length - 1].color).resolve();
70+
} else if (sorted.length == 2 && sorted[0].easing() == Easing.LINEAR) {
71+
return new LinearPairGradient(sorted[0].color(), sorted[sorted.length - 1].color()).resolve();
9372
} else if (sorted.length == 1) {
94-
return sorted[0].color.resolve();
73+
return sorted[0].color().resolve();
9574
} else {
9675
return this;
9776
}
@@ -101,19 +80,23 @@ public boolean isSimple() {
10180
for (int i = 0; i < sorted.length; i++) {
10281
var c = sorted[i];
10382

104-
if (c.easing != Easing.LINEAR || Math.abs(c.position - (i / (float) (sorted.length - 1))) > 0.001F) {
83+
if (c.easing() != Easing.LINEAR || Math.abs(c.position() - (i / (float) (sorted.length - 1))) > 0.001F) {
10584
return false;
10685
}
10786
}
10887

10988
return true;
11089
}
11190

91+
public List<PositionedColor> getColorList() {
92+
return Arrays.asList(sorted);
93+
}
94+
11295
public List<Color> rawColors() {
11396
var list = new ArrayList<Color>(sorted.length);
11497

11598
for (var c : sorted) {
116-
list.add(c.color);
99+
list.add(c.color());
117100
}
118101

119102
return list;
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.latvian.mods.klib.color;
2+
3+
import com.mojang.serialization.Codec;
4+
import com.mojang.serialization.codecs.RecordCodecBuilder;
5+
import dev.latvian.mods.klib.easing.Easing;
6+
import io.netty.buffer.ByteBuf;
7+
import net.minecraft.network.codec.ByteBufCodecs;
8+
import net.minecraft.network.codec.StreamCodec;
9+
import org.jetbrains.annotations.NotNull;
10+
11+
public record PositionedColor(float position, Color color, Easing easing) implements Comparable<PositionedColor> {
12+
public static final Codec<PositionedColor> CODEC = RecordCodecBuilder.create(instance -> instance.group(
13+
Codec.FLOAT.fieldOf("position").forGetter(PositionedColor::position),
14+
Color.CODEC.fieldOf("colors").forGetter(PositionedColor::color),
15+
Easing.CODEC.optionalFieldOf("easing", Easing.LINEAR).forGetter(PositionedColor::easing)
16+
).apply(instance, PositionedColor::new));
17+
18+
public static final StreamCodec<ByteBuf, PositionedColor> STREAM_CODEC = StreamCodec.composite(
19+
ByteBufCodecs.FLOAT, PositionedColor::position,
20+
Color.STREAM_CODEC, PositionedColor::color,
21+
Easing.STREAM_CODEC, PositionedColor::easing,
22+
PositionedColor::new
23+
);
24+
25+
@Override
26+
public int compareTo(@NotNull PositionedColor other) {
27+
return Float.compare(position, other.position);
28+
}
29+
}

0 commit comments

Comments
 (0)