2018-04-25 13:02:10 +02:00
|
|
|
package com.minelittlepony.pony.data;
|
2015-12-09 04:14:42 +01:00
|
|
|
|
2017-06-16 07:41:36 +02:00
|
|
|
import com.google.common.base.MoreObjects;
|
2018-06-11 19:25:02 +02:00
|
|
|
import com.minelittlepony.model.anim.BasicEasingInterpolator;
|
|
|
|
import com.minelittlepony.model.anim.IInterpolator;
|
2016-11-25 05:40:19 +01:00
|
|
|
|
2015-12-09 04:14:42 +01:00
|
|
|
import java.awt.image.BufferedImage;
|
2019-01-06 17:07:42 +01:00
|
|
|
import java.util.UUID;
|
|
|
|
|
2017-06-16 07:41:36 +02:00
|
|
|
import javax.annotation.concurrent.Immutable;
|
2015-12-09 04:14:42 +01:00
|
|
|
|
2018-04-25 21:29:49 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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
|
|
|
|
2018-06-05 20:18:57 +02:00
|
|
|
private final boolean[] wearables;
|
|
|
|
|
2017-06-13 05:55:50 +02:00
|
|
|
public PonyData() {
|
2018-04-27 13:49:33 +02:00
|
|
|
race = PonyRace.HUMAN;
|
|
|
|
tailSize = TailLengths.FULL;
|
|
|
|
gender = PonyGender.MARE;
|
|
|
|
size = PonySize.NORMAL;
|
|
|
|
glowColor = 0x4444aa;
|
2018-06-05 20:18:57 +02:00
|
|
|
|
|
|
|
wearables = new boolean[PonyWearable.values().length];
|
2017-06-13 05:55:50 +02:00
|
|
|
}
|
2018-04-27 13:49:33 +02:00
|
|
|
|
2018-04-25 13:00:18 +02:00
|
|
|
private PonyData(BufferedImage image) {
|
2018-04-27 13:49:33 +02:00
|
|
|
race = TriggerPixels.RACE.readValue(image);
|
|
|
|
tailSize = TriggerPixels.TAIL.readValue(image);
|
|
|
|
size = TriggerPixels.SIZE.readValue(image);
|
|
|
|
gender = TriggerPixels.GENDER.readValue(image);
|
2018-04-29 14:37:51 +02:00
|
|
|
glowColor = TriggerPixels.GLOW.readColor(image);
|
2018-06-05 20:18:57 +02:00
|
|
|
|
|
|
|
wearables = TriggerPixels.WEARABLES.readFlags(image);
|
2017-06-13 05:55:50 +02:00
|
|
|
}
|
2015-12-09 04:14:42 +01:00
|
|
|
|
2018-04-24 14:55:32 +02:00
|
|
|
@Override
|
2015-12-09 04:14:42 +01:00
|
|
|
public PonyRace getRace() {
|
2018-06-11 19:50:58 +02:00
|
|
|
return race;
|
2015-12-09 04:14:42 +01:00
|
|
|
}
|
|
|
|
|
2018-04-24 14:55:32 +02:00
|
|
|
@Override
|
2015-12-09 04:14:42 +01:00
|
|
|
public TailLengths getTail() {
|
|
|
|
return tailSize;
|
|
|
|
}
|
|
|
|
|
2018-04-24 14:55:32 +02:00
|
|
|
@Override
|
2015-12-09 04:14:42 +01:00
|
|
|
public PonyGender getGender() {
|
|
|
|
return gender;
|
|
|
|
}
|
|
|
|
|
2018-04-24 14:55:32 +02:00
|
|
|
@Override
|
2015-12-09 04:14:42 +01:00
|
|
|
public PonySize getSize() {
|
2018-08-30 13:30:23 +02:00
|
|
|
return size.getEffectiveSize();
|
2015-12-09 04:14:42 +01:00
|
|
|
}
|
|
|
|
|
2018-04-24 14:55:32 +02:00
|
|
|
@Override
|
2015-12-09 04:14:42 +01:00
|
|
|
public int getGlowColor() {
|
|
|
|
return glowColor;
|
|
|
|
}
|
|
|
|
|
2018-04-24 14:55:32 +02:00
|
|
|
@Override
|
2016-05-22 05:56:50 +02:00
|
|
|
public boolean hasMagic() {
|
2018-11-02 22:07:41 +01:00
|
|
|
return getRace() != null && getRace().getEffectiveRace(false).hasHorn() && getGlowColor() != 0;
|
2016-05-22 05:56:50 +02:00
|
|
|
}
|
|
|
|
|
2018-06-05 20:18:57 +02:00
|
|
|
@Override
|
|
|
|
public boolean isWearing(PonyWearable wearable) {
|
2018-06-11 19:50:58 +02:00
|
|
|
return wearables[wearable.ordinal()];
|
2018-06-05 20:18:57 +02:00
|
|
|
}
|
|
|
|
|
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)
|
2018-06-05 20:18:57 +02:00
|
|
|
.add("wearables", PonyWearable.flags(wearables))
|
2017-06-16 07:41:36 +02:00
|
|
|
.add("glowColor", "#" + Integer.toHexString(glowColor))
|
|
|
|
.toString();
|
|
|
|
}
|
|
|
|
|
2018-06-11 19:25:02 +02:00
|
|
|
@Override
|
2019-01-06 17:07:42 +01:00
|
|
|
public IInterpolator getInterpolator(UUID interpolatorId) {
|
|
|
|
return BasicEasingInterpolator.getInstance(interpolatorId);
|
2018-06-11 19:25:02 +02:00
|
|
|
}
|
|
|
|
|
2018-04-25 21:29:49 +02:00
|
|
|
/**
|
|
|
|
* Parses an image buffer into a new IPonyData representing the values stored in it's individual trigger pixels.
|
|
|
|
*/
|
2018-08-10 08:32:09 +02:00
|
|
|
public static IPonyData parse(BufferedImage image) {
|
2018-04-25 13:00:18 +02:00
|
|
|
return new PonyData(image);
|
2015-12-09 04:14:42 +01:00
|
|
|
}
|
|
|
|
}
|