Fix cloning and equality of wind models
This commit is contained in:
parent
4a3b9efe76
commit
db08a4ffc2
@ -6,6 +6,7 @@ import java.util.EventObject;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import info.openrocket.core.util.ChangeSource;
|
import info.openrocket.core.util.ChangeSource;
|
||||||
import info.openrocket.core.util.Coordinate;
|
import info.openrocket.core.util.Coordinate;
|
||||||
@ -131,12 +132,21 @@ public class MultiLevelPinkNoiseWindModel implements WindModel {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
MultiLevelPinkNoiseWindModel that = (MultiLevelPinkNoiseWindModel) o;
|
MultiLevelPinkNoiseWindModel that = (MultiLevelPinkNoiseWindModel) o;
|
||||||
return levels.equals(that.levels);
|
|
||||||
|
// Compare the levels list
|
||||||
|
if (levels.size() != that.levels.size()) return false;
|
||||||
|
for (int i = 0; i < levels.size(); i++) {
|
||||||
|
if (!levels.get(i).equals(that.levels.get(i))) return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we implement any additional fields in the future, we should compare them here
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return levels.hashCode();
|
return Objects.hash(levels);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class LevelWindModel implements Cloneable, ChangeSource {
|
public static class LevelWindModel implements Cloneable, ChangeSource {
|
||||||
@ -203,11 +213,17 @@ public class MultiLevelPinkNoiseWindModel implements WindModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object obj) {
|
public boolean equals(Object o) {
|
||||||
if (this == obj) return true;
|
if (this == o) return true;
|
||||||
if (obj == null || getClass() != obj.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
LevelWindModel that = (LevelWindModel) obj;
|
LevelWindModel that = (LevelWindModel) o;
|
||||||
return Double.compare(that.altitude, altitude) == 0 && model.equals(that.model);
|
return Double.compare(that.altitude, altitude) == 0 &&
|
||||||
|
model.equals(that.model);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(altitude, model);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -81,8 +81,8 @@ public class SimulationOptions implements ChangeSource, Cloneable, SimulationOpt
|
|||||||
private List<EventListener> listeners = new ArrayList<>();
|
private List<EventListener> listeners = new ArrayList<>();
|
||||||
|
|
||||||
private WindModelType windModelType = WindModelType.AVERAGE;
|
private WindModelType windModelType = WindModelType.AVERAGE;
|
||||||
private final PinkNoiseWindModel averageWindModel;
|
private PinkNoiseWindModel averageWindModel;
|
||||||
private final MultiLevelPinkNoiseWindModel multiLevelPinkNoiseWindModel;
|
private MultiLevelPinkNoiseWindModel multiLevelPinkNoiseWindModel;
|
||||||
|
|
||||||
public SimulationOptions() {
|
public SimulationOptions() {
|
||||||
averageWindModel = new PinkNoiseWindModel(randomSeed);
|
averageWindModel = new PinkNoiseWindModel(randomSeed);
|
||||||
@ -338,7 +338,14 @@ public class SimulationOptions implements ChangeSource, Cloneable, SimulationOpt
|
|||||||
public SimulationOptions clone() {
|
public SimulationOptions clone() {
|
||||||
try {
|
try {
|
||||||
SimulationOptions copy = (SimulationOptions) super.clone();
|
SimulationOptions copy = (SimulationOptions) super.clone();
|
||||||
|
|
||||||
|
// Deep clone the wind models
|
||||||
|
copy.averageWindModel = this.averageWindModel.clone();
|
||||||
|
copy.multiLevelPinkNoiseWindModel = this.multiLevelPinkNoiseWindModel.clone();
|
||||||
|
|
||||||
|
// Create a new list for listeners
|
||||||
copy.listeners = new ArrayList<>();
|
copy.listeners = new ArrayList<>();
|
||||||
|
|
||||||
return copy;
|
return copy;
|
||||||
} catch (CloneNotSupportedException e) {
|
} catch (CloneNotSupportedException e) {
|
||||||
throw new BugException(e);
|
throw new BugException(e);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user