mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2025-02-23 04:34:33 +01:00
126 lines
3.2 KiB
Java
126 lines
3.2 KiB
Java
package com.minelittlepony.client.pony;
|
|
|
|
import net.minecraft.client.texture.NativeImage;
|
|
|
|
import com.google.common.base.MoreObjects;
|
|
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;
|
|
import com.minelittlepony.util.animation.BasicEasingInterpolator;
|
|
import com.minelittlepony.util.animation.IInterpolator;
|
|
|
|
import java.util.UUID;
|
|
|
|
import javax.annotation.concurrent.Immutable;
|
|
|
|
/**
|
|
* Implementation for IPonyData.
|
|
*
|
|
*/
|
|
@Immutable
|
|
public class PonyData implements IPonyData {
|
|
|
|
public static final PonyDataSerialiser SERIALISER = new PonyDataSerialiser();
|
|
|
|
@Expose
|
|
private final Race race;
|
|
|
|
@Expose
|
|
private final TailLength tailSize;
|
|
|
|
@Expose
|
|
private final Gender gender;
|
|
|
|
@Expose
|
|
private final Size size;
|
|
|
|
@Expose
|
|
private final int glowColor;
|
|
|
|
@Expose
|
|
private final boolean[] wearables;
|
|
|
|
public PonyData() {
|
|
race = Race.HUMAN;
|
|
tailSize = TailLength.FULL;
|
|
gender = Gender.MARE;
|
|
size = Size.NORMAL;
|
|
glowColor = 0x4444aa;
|
|
|
|
wearables = new boolean[Wearable.values().length];
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
@Override
|
|
public Race getRace() {
|
|
return race;
|
|
}
|
|
|
|
@Override
|
|
public TailLength getTail() {
|
|
return tailSize;
|
|
}
|
|
|
|
@Override
|
|
public Gender getGender() {
|
|
return gender;
|
|
}
|
|
|
|
@Override
|
|
public Size getSize() {
|
|
return size.getEffectiveSize();
|
|
}
|
|
|
|
@Override
|
|
public int getGlowColor() {
|
|
return glowColor;
|
|
}
|
|
|
|
@Override
|
|
public boolean hasMagic() {
|
|
return getRace() != null && getRace().getEffectiveRace(false).hasHorn() && getGlowColor() != 0;
|
|
}
|
|
|
|
@Override
|
|
public boolean isWearing(Wearable wearable) {
|
|
return wearables[wearable.ordinal()];
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
return MoreObjects.toStringHelper(this)
|
|
.add("race", race)
|
|
.add("tailSize", tailSize)
|
|
.add("gender", gender)
|
|
.add("size", size)
|
|
.add("wearables", Wearable.flags(wearables))
|
|
.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.
|
|
*/
|
|
public static IPonyData parse(NativeImage image) {
|
|
return new PonyData(image);
|
|
}
|
|
}
|