Weiter am Kampfsystem gearbeitet - hier: Schwert und Schild
This commit is contained in:
@@ -3,10 +3,15 @@ package de.blight.common;
|
||||
import java.util.UUID;
|
||||
|
||||
/** Ein Item-Pickup das auf der Spielwelt liegt (Kartendaten). */
|
||||
public record PlacedItem(String uuid, String itemId, float x, float y, float z) {
|
||||
public record PlacedItem(String uuid, String itemId, float x, float y, float z, float rotX, float rotY, float rotZ) {
|
||||
|
||||
/** Erzeugt ein neues PlacedItem mit automatisch generierter UUID. */
|
||||
/** Erzeugt ein neues PlacedItem mit automatisch generierter UUID (alle Rotationen = 0). */
|
||||
public static PlacedItem create(String itemId, float x, float y, float z) {
|
||||
return new PlacedItem(UUID.randomUUID().toString(), itemId, x, y, z);
|
||||
return new PlacedItem(UUID.randomUUID().toString(), itemId, x, y, z, 0f, 0f, 0f);
|
||||
}
|
||||
|
||||
/** Gibt eine Kopie mit geänderter Position/Rotation zurück. */
|
||||
public PlacedItem withTransform(float nx, float ny, float nz, float nRotX, float nRotY, float nRotZ) {
|
||||
return new PlacedItem(uuid, itemId, nx, ny, nz, nRotX, nRotY, nRotZ);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,11 +25,11 @@ public final class PlacedItemIO {
|
||||
Path p = getPath();
|
||||
Files.createDirectories(p.getParent());
|
||||
try (BufferedWriter w = Files.newBufferedWriter(p)) {
|
||||
w.write("# uuid\titemId\tx\ty\tz");
|
||||
w.write("# uuid\titemId\tx\ty\tz\trotX\trotY\trotZ");
|
||||
w.newLine();
|
||||
for (PlacedItem it : items) {
|
||||
w.write(String.format(Locale.ROOT, "%s\t%s\t%.5f\t%.5f\t%.5f%n",
|
||||
it.uuid(), it.itemId(), it.x(), it.y(), it.z()));
|
||||
w.write(String.format(Locale.ROOT, "%s\t%s\t%.5f\t%.5f\t%.5f\t%.5f\t%.5f\t%.5f%n",
|
||||
it.uuid(), it.itemId(), it.x(), it.y(), it.z(), it.rotX(), it.rotY(), it.rotZ()));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -43,17 +43,29 @@ public final class PlacedItemIO {
|
||||
if (line.isEmpty() || line.startsWith("#")) continue;
|
||||
String[] f = line.split("\t", -1);
|
||||
try {
|
||||
if (f.length >= 5) {
|
||||
// Aktuelles Format: uuid itemId x y z
|
||||
if (f.length >= 8) {
|
||||
// Aktuelles Format: uuid itemId x y z rotX rotY rotZ
|
||||
list.add(new PlacedItem(f[0], f[1],
|
||||
Float.parseFloat(f[2]), Float.parseFloat(f[3]), Float.parseFloat(f[4])));
|
||||
Float.parseFloat(f[2]), Float.parseFloat(f[3]), Float.parseFloat(f[4]),
|
||||
Float.parseFloat(f[5]), Float.parseFloat(f[6]), Float.parseFloat(f[7])));
|
||||
} else if (f.length >= 6) {
|
||||
// Vorherige Version: uuid itemId x y z rotY (kein rotX/rotZ)
|
||||
list.add(new PlacedItem(f[0], f[1],
|
||||
Float.parseFloat(f[2]), Float.parseFloat(f[3]), Float.parseFloat(f[4]),
|
||||
0f, Float.parseFloat(f[5]), 0f));
|
||||
} else if (f.length >= 5) {
|
||||
// uuid itemId x y z (kein rot)
|
||||
list.add(new PlacedItem(f[0], f[1],
|
||||
Float.parseFloat(f[2]), Float.parseFloat(f[3]), Float.parseFloat(f[4]),
|
||||
0f, 0f, 0f));
|
||||
} else if (f.length == 4) {
|
||||
// Altes Format: itemId x y z → UUID deterministisch aus Inhalt ableiten
|
||||
String deterministicId = UUID.nameUUIDFromBytes(
|
||||
("legacy:" + f[0] + ":" + f[1] + ":" + f[2] + ":" + f[3])
|
||||
.getBytes(StandardCharsets.UTF_8)).toString();
|
||||
list.add(new PlacedItem(deterministicId, f[0],
|
||||
Float.parseFloat(f[1]), Float.parseFloat(f[2]), Float.parseFloat(f[3])));
|
||||
Float.parseFloat(f[1]), Float.parseFloat(f[2]), Float.parseFloat(f[3]),
|
||||
0f, 0f, 0f));
|
||||
}
|
||||
} catch (NumberFormatException ignored) {}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ public class ItemCategoryManager {
|
||||
private static final Map<ItemCategory, List<ItemSubCategory>> mapping = new EnumMap<ItemCategory, List<ItemSubCategory>>(ItemCategory.class);
|
||||
|
||||
static {
|
||||
mapping.put(WEAPON, List.of(SWORD, TWO_HANDED_SWORD, STAFF, HALBERD, AXE, BOW, CROSSBOW, MAGIC_CRYSTAL));
|
||||
mapping.put(WEAPON, List.of(SWORD, TWO_HANDED_SWORD, STAFF, HALBERD, AXE, BOW, CROSSBOW, MAGIC_CRYSTAL, SHIELD));
|
||||
mapping.put(GEAR, List.of(RING, NECKLACE, ARMOR, HELM, SHIELD));
|
||||
mapping.put(CONSUMABLES, List.of(POTION, PERMANENT_POTION, FOOD, MAGICAL_ITEM));
|
||||
mapping.put(QUEST_ITEMS, List.of(QUEST_ITEM));
|
||||
|
||||
Reference in New Issue
Block a user