MineLittlePony/src/main/java/com/minelittlepony/pony/data/PonyData.java

106 lines
2.7 KiB
Java
Raw Normal View History

package com.minelittlepony.pony.data;
2017-06-16 07:41:36 +02:00
import com.google.common.base.MoreObjects;
import com.minelittlepony.model.anim.BasicEasingInterpolator;
import com.minelittlepony.model.anim.IInterpolator;
2016-11-25 05:40:19 +01:00
import java.awt.image.BufferedImage;
2017-06-16 07:41:36 +02:00
import javax.annotation.concurrent.Immutable;
/**
* Implementation for IPonyData.
*
*/
2017-06-16 07:41:36 +02:00
@Immutable
2016-11-24 08:01:23 +01:00
public class PonyData implements IPonyData {
2017-06-16 07:41:36 +02:00
private final PonyRace race;
private final TailLengths tailSize;
private final PonyGender gender;
private final PonySize size;
private final int glowColor;
2017-06-13 05:55:50 +02:00
private final boolean[] wearables;
private final IInterpolator interpolator = new BasicEasingInterpolator();
2017-06-13 05:55:50 +02:00
public PonyData() {
race = PonyRace.HUMAN;
tailSize = TailLengths.FULL;
gender = PonyGender.MARE;
size = PonySize.NORMAL;
glowColor = 0x4444aa;
wearables = new boolean[PonyWearable.values().length];
2017-06-13 05:55:50 +02:00
}
private PonyData(BufferedImage image) {
race = TriggerPixels.RACE.readValue(image);
tailSize = TriggerPixels.TAIL.readValue(image);
size = TriggerPixels.SIZE.readValue(image);
gender = TriggerPixels.GENDER.readValue(image);
glowColor = TriggerPixels.GLOW.readColor(image);
wearables = TriggerPixels.WEARABLES.readFlags(image);
2017-06-13 05:55:50 +02:00
}
@Override
public PonyRace getRace() {
2018-06-11 19:50:58 +02:00
return race;
}
@Override
public TailLengths getTail() {
return tailSize;
}
@Override
public PonyGender getGender() {
return gender;
}
@Override
public PonySize getSize() {
return size.getEffectiveSize();
}
@Override
public int getGlowColor() {
return glowColor;
}
@Override
public boolean hasMagic() {
return race != null && getRace().getEffectiveRace(false).hasHorn() && getGlowColor() != 0;
}
@Override
public boolean isWearing(PonyWearable wearable) {
2018-06-11 19:50:58 +02:00
return wearables[wearable.ordinal()];
}
2017-06-16 07:41:36 +02:00
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("race", race)
.add("tailSize", tailSize)
.add("gender", gender)
.add("size", size)
.add("wearables", PonyWearable.flags(wearables))
2017-06-16 07:41:36 +02:00
.add("glowColor", "#" + Integer.toHexString(glowColor))
.toString();
}
@Override
public IInterpolator getInterpolator() {
return interpolator;
}
/**
* Parses an image buffer into a new IPonyData representing the values stored in it's individual trigger pixels.
*/
public static IPonyData parse(BufferedImage image) {
return new PonyData(image);
}
}