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

127 lines
3.2 KiB
Java
Raw Normal View History

2019-03-23 20:49:34 +01:00
package com.minelittlepony.client.pony;
2019-05-27 17:59:15 +02:00
import net.minecraft.client.texture.NativeImage;
2017-06-16 07:41:36 +02:00
import com.google.common.base.MoreObjects;
2019-03-24 18:55:15 +01:00
import com.google.gson.annotations.Expose;
import com.minelittlepony.pony.IPonyData;
import com.minelittlepony.pony.meta.Gender;
import com.minelittlepony.pony.meta.Race;
import com.minelittlepony.pony.meta.Size;
import com.minelittlepony.pony.meta.TailLength;
import com.minelittlepony.pony.meta.TriggerPixels;
import com.minelittlepony.pony.meta.Wearable;
2019-03-23 20:49:34 +01:00
import com.minelittlepony.util.animation.BasicEasingInterpolator;
import com.minelittlepony.util.animation.IInterpolator;
2016-11-25 05:40:19 +01:00
import java.util.UUID;
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
2019-03-24 18:55:15 +01:00
public class PonyData implements IPonyData {
public static final PonyDataSerialiser SERIALISER = new PonyDataSerialiser();
@Expose
2019-03-23 20:49:34 +01:00
private final Race race;
2019-03-24 18:55:15 +01:00
@Expose
2019-03-23 20:49:34 +01:00
private final TailLength tailSize;
2019-03-24 18:55:15 +01:00
@Expose
2019-03-23 20:49:34 +01:00
private final Gender gender;
2019-03-24 18:55:15 +01:00
@Expose
2019-03-23 20:49:34 +01:00
private final Size size;
2019-03-24 18:55:15 +01:00
@Expose
2017-06-16 07:41:36 +02:00
private final int glowColor;
2017-06-13 05:55:50 +02:00
2019-03-24 18:55:15 +01:00
@Expose
private final boolean[] wearables;
2017-06-13 05:55:50 +02:00
public PonyData() {
2019-03-23 20:49:34 +01:00
race = Race.HUMAN;
tailSize = TailLength.FULL;
gender = Gender.MARE;
size = Size.NORMAL;
glowColor = 0x4444aa;
2019-03-23 20:49:34 +01:00
wearables = new boolean[Wearable.values().length];
2017-06-13 05:55:50 +02:00
}
2019-03-24 18:55:15 +01:00
private PonyData(NativeImage 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
2019-03-23 20:49:34 +01:00
public Race getRace() {
2018-06-11 19:50:58 +02:00
return race;
}
@Override
2019-03-23 20:49:34 +01:00
public TailLength getTail() {
return tailSize;
}
@Override
2019-03-23 20:49:34 +01:00
public Gender getGender() {
return gender;
}
@Override
2019-03-23 20:49:34 +01:00
public Size getSize() {
return size.getEffectiveSize();
}
@Override
public int getGlowColor() {
return glowColor;
}
@Override
public boolean hasMagic() {
2018-11-02 22:07:41 +01:00
return getRace() != null && getRace().getEffectiveRace(false).hasHorn() && getGlowColor() != 0;
}
@Override
2019-03-23 20:49:34 +01:00
public boolean isWearing(Wearable 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)
2019-03-23 20:49:34 +01:00
.add("wearables", Wearable.flags(wearables))
2017-06-16 07:41:36 +02:00
.add("glowColor", "#" + Integer.toHexString(glowColor))
.toString();
}
@Override
public IInterpolator getInterpolator(UUID interpolatorId) {
return BasicEasingInterpolator.getInstance(interpolatorId);
}
/**
* Parses an image buffer into a new IPonyData representing the values stored in it's individual trigger pixels.
*/
2019-03-24 18:55:15 +01:00
public static IPonyData parse(NativeImage image) {
return new PonyData(image);
}
}