Добавить общую систему весовых объектов

This commit is contained in:
2026-08-19 07:40:11 +03:00
parent 19bb64edfb
commit 259fcd316b
32 changed files with 1017 additions and 34 deletions
@@ -92,6 +92,41 @@ public final class GameSessionSnapshot {
public String deathType() { return deathType; }
}
public static final class ObjectData {
private final LevelDefinition.PhysicalObjectType type;
private final float x, y, width, height, velocityX, velocityY;
private final int mass;
private final boolean grounded;
private final int supportIndex;
public ObjectData(LevelDefinition.PhysicalObjectType type,
float x, float y, float width, float height,
float velocityX, float velocityY, int mass,
boolean grounded, int supportIndex) {
this.type = type;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.velocityX = velocityX;
this.velocityY = velocityY;
this.mass = mass;
this.grounded = grounded;
this.supportIndex = supportIndex;
}
public LevelDefinition.PhysicalObjectType type() { return type; }
public float x() { return x; }
public float y() { return y; }
public float width() { return width; }
public float height() { return height; }
public float velocityX() { return velocityX; }
public float velocityY() { return velocityY; }
public int mass() { return mass; }
public boolean grounded() { return grounded; }
public int supportIndex() { return supportIndex; }
}
public static final class Builder {
private int saveVersion = VersionedSessionCodec.CURRENT_VERSION;
private final int levelNumber;
@@ -101,6 +136,7 @@ public final class GameSessionSnapshot {
private PlayerData player = new PlayerData(
0f, 0f, 0f, 0f, true, false, 0f, 0f, -1, 1);
private final ArrayList<BodyData> bodies = new ArrayList<>();
private final ArrayList<ObjectData> objects = new ArrayList<>();
private final ArrayList<Float> platformMotionTimes = new ArrayList<>();
private final LinkedHashMap<String, Boolean> toggleSignals = new LinkedHashMap<>();
private final LinkedHashMap<String, Float> timedSignals = new LinkedHashMap<>();
@@ -117,6 +153,7 @@ public final class GameSessionSnapshot {
public Builder respawnSeconds(float value) { respawnSeconds = value; return this; }
public Builder player(PlayerData value) { player = value; return this; }
public Builder addBody(BodyData value) { bodies.add(value); return this; }
public Builder addObject(ObjectData value) { objects.add(value); return this; }
public Builder platformMotionTimes(List<Float> values) {
platformMotionTimes.clear();
if (values != null) platformMotionTimes.addAll(values);
@@ -144,6 +181,7 @@ public final class GameSessionSnapshot {
private final float respawnSeconds;
private final PlayerData player;
private final List<BodyData> bodies;
private final List<ObjectData> objects;
private final List<Float> platformMotionTimes;
private final Map<String, Boolean> toggleSignals;
private final Map<String, Float> timedSignals;
@@ -157,6 +195,7 @@ public final class GameSessionSnapshot {
respawnSeconds = builder.respawnSeconds;
player = builder.player;
bodies = Collections.unmodifiableList(new ArrayList<>(builder.bodies));
objects = Collections.unmodifiableList(new ArrayList<>(builder.objects));
platformMotionTimes = Collections.unmodifiableList(
new ArrayList<>(builder.platformMotionTimes));
toggleSignals = Collections.unmodifiableMap(
@@ -174,6 +213,7 @@ public final class GameSessionSnapshot {
public float respawnSeconds() { return respawnSeconds; }
public PlayerData player() { return player; }
public List<BodyData> bodies() { return bodies; }
public List<ObjectData> objects() { return objects; }
public List<Float> platformMotionTimes() { return platformMotionTimes; }
public Map<String, Boolean> toggleSignals() { return toggleSignals; }
public Map<String, Float> timedSignals() { return timedSignals; }