Skip to content
This repository was archived by the owner on Jan 8, 2023. It is now read-only.

Commit 8695e34

Browse files
committed
Move duplicated states to DmiState::duplicates list
1 parent acd4f81 commit 8695e34

File tree

5 files changed

+20
-15
lines changed

5 files changed

+20
-15
lines changed

src/main/java/io/github/spair/byond/dmi/Dmi.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ public Dmi(final String name, final int width, final int height,
3333
this.states = states;
3434

3535
states.forEach((stateName, dmiState) -> {
36-
if (dmiState.isDuplicate()) {
36+
if (dmiState.hasDuplicates()) {
3737
duplicateStatesNames.add(stateName);
3838
}
3939
});
4040
}
4141

4242
public void addState(final DmiState dmiState) {
4343
states.put(dmiState.getName(), dmiState);
44-
if (dmiState.isDuplicate()) {
44+
if (dmiState.hasDuplicates()) {
4545
duplicateStatesNames.add(dmiState.getName());
4646
}
4747
}

src/main/java/io/github/spair/byond/dmi/DmiState.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class DmiState {
1818

1919
private DmiMetaEntry meta;
2020
private Map<SpriteDir, List<DmiSprite>> sprites = new HashMap<>();
21-
private boolean isDuplicate;
21+
private List<DmiState> duplicates = new ArrayList<>();
2222

2323
public String getName() {
2424
return meta.getName();
@@ -52,11 +52,19 @@ public double[] getHotspot() {
5252
return meta.getHotspot();
5353
}
5454

55+
public boolean hasDuplicates() {
56+
return !duplicates.isEmpty();
57+
}
58+
5559
public void addSprite(final DmiSprite sprite) {
5660
List<DmiSprite> spriteList = sprites.computeIfAbsent(sprite.getDir(), k -> new ArrayList<>());
5761
spriteList.add(sprite);
5862
}
5963

64+
public void addDuplicate(final DmiState dmiState) {
65+
duplicates.add(dmiState);
66+
}
67+
6068
/**
6169
* Returns the first available sprite.
6270
* That means, that sprite will be the first frame and {@link SpriteDir#SOUTH} dir.

src/main/java/io/github/spair/byond/dmi/slurper/StateExtractor.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,7 @@ Map<String, DmiState> extractStates(final BufferedImage dmiImage, final DmiMeta
3535

3636
for (DmiMetaEntry metaEntry : dmiMeta.getMetas()) {
3737
val stateName = metaEntry.getName();
38-
39-
if (dmiStates.containsKey(stateName)) {
40-
dmiStates.get(stateName).setDuplicate(true);
41-
continue;
42-
}
43-
44-
List<DmiSprite> allSprites = new ArrayList<>();
38+
val allSprites = new ArrayList<DmiSprite>();
4539

4640
for (int frameNumber = 1; frameNumber <= metaEntry.getFrames(); frameNumber++) {
4741
for (int dirCount = 1; dirCount <= metaEntry.getDirs(); dirCount++) {
@@ -65,7 +59,11 @@ Map<String, DmiState> extractStates(final BufferedImage dmiImage, final DmiMeta
6559
dmiState.setMeta(metaEntry);
6660
dmiState.setSprites(distributeAllSpritesInMap(allSprites));
6761

68-
dmiStates.put(stateName, dmiState);
62+
if (dmiStates.containsKey(stateName)) {
63+
dmiStates.get(stateName).addDuplicate(dmiState);
64+
} else {
65+
dmiStates.put(stateName, dmiState);
66+
}
6967
}
7068

7169
return dmiStates;

src/test/java/io/github/spair/byond/dmi/DmiTest.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,14 @@ public void setUp() {
2020
@Test
2121
public void testCheckForDuplicatesWhenExists() {
2222
DmiState dmiState1 = new DmiState();
23-
dmiState1.setDuplicate(true);
23+
dmiState1.addDuplicate(new DmiState());
2424
dmiState1.setMeta(new DmiMetaEntry("1", 0, 0, null, false, false, false, null));
2525

2626
DmiState dmiState2 = new DmiState();
27-
dmiState2.setDuplicate(true);
27+
dmiState2.addDuplicate(new DmiState());
2828
dmiState2.setMeta(new DmiMetaEntry("2", 0, 0, null, false, false, false, null));
2929

3030
DmiState dmiState3 = new DmiState();
31-
dmiState3.setDuplicate(false);
3231
dmiState3.setMeta(new DmiMetaEntry("3", 0, 0, null, false, false, false, null));
3332

3433
Dmi dmi = new Dmi();

src/test/java/io/github/spair/byond/dmi/slurper/StateExtractorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ public void testExtractStatesWithDuplicates() throws Exception {
6666

6767
assertEquals(1, states.size());
6868
assertEquals("state extractor should consider first met state as main", 1, states.get("down").getMeta().getDirs());
69-
assertTrue(states.get("down").isDuplicate());
69+
assertTrue(states.get("down").hasDuplicates());
7070
}
7171
}

0 commit comments

Comments
 (0)