package polly.rx.core.orion.model;
import java.util.Collections;
import java.util.EnumMap;
import java.util.Map;
import de.skuzzle.polly.tools.Check;
import de.skuzzle.polly.tools.EqualsHelper;
import de.skuzzle.polly.tools.Equatable;
import polly.rx.entities.RxRessource;
public class DefaultResources implements Resources {
private final Map<RxRessource, Number> resources;
public DefaultResources(Map<RxRessource, ? extends Number> drop) {
Check.objects(drop).notNull();
this.resources = new EnumMap<>(RxRessource.class);
this.resources.putAll(drop);
}
public DefaultResources(Resources other) {
Check.objects(other).notNull();
this.resources = new EnumMap<>(RxRessource.class);
for (final RxRessource ress : RxRessource.values()) {
this.resources.put(ress, other.getAmount(ress));
}
}
@Override
public Map<RxRessource, Number> asMap() {
return Collections.unmodifiableMap(this.resources);
}
@Override
public String toString() {
return OrionObjectUtil.resourcesString(this);
}
@Override
public int hashCode() {
return OrionObjectUtil.resourcesHash(this);
}
@Override
public final boolean equals(Object obj) {
return EqualsHelper.testEquality(this, obj);
}
@Override
public Class<?> getEquivalenceClass() {
return Resources.class;
}
@Override
public boolean actualEquals(Equatable o) {
return OrionObjectUtil.resourcesEquals(this, (Resources) o);
}
@Override
public Number getAmount(RxRessource ress) {
final Number amount = this.resources.get(ress);
if (amount == null) {
return 0;
}
return amount;
}
@Override
public Number[] getAmountArray() {
final Number[] values = new Number[this.resources.size()];
this.resources.values().toArray(values);
return values;
}
}