添加快艇的发射功能
This commit is contained in:
parent
51dd923b5e
commit
f0e2b02a39
10 changed files with 170 additions and 33 deletions
|
@ -0,0 +1,28 @@
|
||||||
|
package com.atsuishio.superbwarfare.client.layer;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.ModUtils;
|
||||||
|
import com.atsuishio.superbwarfare.entity.SpeedboatEntity;
|
||||||
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
||||||
|
import net.minecraft.client.renderer.MultiBufferSource;
|
||||||
|
import net.minecraft.client.renderer.RenderType;
|
||||||
|
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||||
|
import net.minecraft.resources.ResourceLocation;
|
||||||
|
import software.bernie.geckolib.cache.object.BakedGeoModel;
|
||||||
|
import software.bernie.geckolib.renderer.GeoRenderer;
|
||||||
|
import software.bernie.geckolib.renderer.layer.GeoRenderLayer;
|
||||||
|
|
||||||
|
public class SpeedBoatLayer extends GeoRenderLayer<SpeedboatEntity> {
|
||||||
|
|
||||||
|
private static final ResourceLocation LAYER = ModUtils.loc("textures/entity/speedboat_e.png");
|
||||||
|
|
||||||
|
public SpeedBoatLayer(GeoRenderer<SpeedboatEntity> entityRenderer) {
|
||||||
|
super(entityRenderer);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(PoseStack poseStack, SpeedboatEntity animatable, BakedGeoModel bakedModel, RenderType renderType, MultiBufferSource bufferSource, VertexConsumer buffer, float partialTick, int packedLight, int packedOverlay) {
|
||||||
|
RenderType glowRenderType = RenderType.energySwirl(LAYER,1,1);
|
||||||
|
getRenderer().reRender(getDefaultBakedModel(animatable), poseStack, bufferSource, animatable, glowRenderType, bufferSource.getBuffer(glowRenderType), partialTick, packedLight, OverlayTexture.NO_OVERLAY, 1, 1, 1, 1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -44,7 +44,7 @@ public class ProjectileEntityModel extends GeoModel<ProjectileEntity> {
|
||||||
CoreGeoBone bone = getAnimationProcessor().getBone("bone");
|
CoreGeoBone bone = getAnimationProcessor().getBone("bone");
|
||||||
Player player = Minecraft.getInstance().player;
|
Player player = Minecraft.getInstance().player;
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
bone.setHidden(animatable.position().distanceTo(player.position()) < 3);
|
bone.setHidden(animatable.position().distanceTo(player.position()) < 3 || animatable.tickCount < 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,7 @@ public class SpeedboatModel extends GeoModel<SpeedboatEntity> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResourceLocation getAnimationResource(SpeedboatEntity entity) {
|
public ResourceLocation getAnimationResource(SpeedboatEntity entity) {
|
||||||
return null;
|
return ModUtils.loc("animations/speedboat.animation.json");
|
||||||
// return ModUtils.loc("animations/mk_42.animation.json");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.atsuishio.superbwarfare.client.renderer.entity;
|
package com.atsuishio.superbwarfare.client.renderer.entity;
|
||||||
|
|
||||||
|
import com.atsuishio.superbwarfare.client.layer.SpeedBoatLayer;
|
||||||
import com.atsuishio.superbwarfare.client.model.entity.SpeedboatModel;
|
import com.atsuishio.superbwarfare.client.model.entity.SpeedboatModel;
|
||||||
import com.atsuishio.superbwarfare.entity.SpeedboatEntity;
|
import com.atsuishio.superbwarfare.entity.SpeedboatEntity;
|
||||||
import com.mojang.blaze3d.vertex.PoseStack;
|
import com.mojang.blaze3d.vertex.PoseStack;
|
||||||
|
@ -18,6 +19,7 @@ public class SpeedboatRenderer extends GeoEntityRenderer<SpeedboatEntity> {
|
||||||
|
|
||||||
public SpeedboatRenderer(EntityRendererProvider.Context renderManager) {
|
public SpeedboatRenderer(EntityRendererProvider.Context renderManager) {
|
||||||
super(renderManager, new SpeedboatModel());
|
super(renderManager, new SpeedboatModel());
|
||||||
|
this.addRenderLayer(new SpeedBoatLayer(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -51,6 +53,9 @@ public class SpeedboatRenderer extends GeoEntityRenderer<SpeedboatEntity> {
|
||||||
if (name.equals("gun")) {
|
if (name.equals("gun")) {
|
||||||
bone.setRotX(-Mth.lerp(partialTick, animatable.turretXRotO, animatable.getTurretXRot()) * Mth.DEG_TO_RAD);
|
bone.setRotX(-Mth.lerp(partialTick, animatable.turretXRotO, animatable.getTurretXRot()) * Mth.DEG_TO_RAD);
|
||||||
}
|
}
|
||||||
|
if (name.equals("flare")) {
|
||||||
|
bone.setRotZ((float) (0.5 * (Math.random() - 0.5)));
|
||||||
|
}
|
||||||
super.renderRecursively(poseStack, animatable, bone, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
|
super.renderRecursively(poseStack, animatable, bone, renderType, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, red, green, blue, alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,10 @@ import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig;
|
||||||
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
import com.atsuishio.superbwarfare.entity.projectile.ProjectileEntity;
|
||||||
import com.atsuishio.superbwarfare.init.*;
|
import com.atsuishio.superbwarfare.init.*;
|
||||||
import com.atsuishio.superbwarfare.item.ContainerBlockItem;
|
import com.atsuishio.superbwarfare.item.ContainerBlockItem;
|
||||||
|
import com.atsuishio.superbwarfare.network.ModVariables;
|
||||||
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
import com.atsuishio.superbwarfare.tools.CustomExplosion;
|
||||||
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
import com.atsuishio.superbwarfare.tools.ParticleTool;
|
||||||
|
import com.atsuishio.superbwarfare.tools.SoundTool;
|
||||||
import net.minecraft.core.BlockPos;
|
import net.minecraft.core.BlockPos;
|
||||||
import net.minecraft.nbt.CompoundTag;
|
import net.minecraft.nbt.CompoundTag;
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
|
@ -15,6 +17,7 @@ import net.minecraft.network.syncher.EntityDataAccessor;
|
||||||
import net.minecraft.network.syncher.EntityDataSerializers;
|
import net.minecraft.network.syncher.EntityDataSerializers;
|
||||||
import net.minecraft.network.syncher.SynchedEntityData;
|
import net.minecraft.network.syncher.SynchedEntityData;
|
||||||
import net.minecraft.server.level.ServerLevel;
|
import net.minecraft.server.level.ServerLevel;
|
||||||
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.sounds.SoundEvent;
|
import net.minecraft.sounds.SoundEvent;
|
||||||
import net.minecraft.sounds.SoundSource;
|
import net.minecraft.sounds.SoundSource;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
|
@ -46,6 +49,10 @@ import org.joml.Math;
|
||||||
import software.bernie.geckolib.animatable.GeoEntity;
|
import software.bernie.geckolib.animatable.GeoEntity;
|
||||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
import software.bernie.geckolib.core.animation.AnimatableManager;
|
||||||
|
import software.bernie.geckolib.core.animation.AnimationController;
|
||||||
|
import software.bernie.geckolib.core.animation.AnimationState;
|
||||||
|
import software.bernie.geckolib.core.animation.RawAnimation;
|
||||||
|
import software.bernie.geckolib.core.object.PlayState;
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, IVehicleEntity {
|
public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, IVehicleEntity {
|
||||||
|
@ -56,6 +63,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
public static final EntityDataAccessor<Float> DELTA_ROT = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> DELTA_ROT = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT);
|
||||||
public static final EntityDataAccessor<Float> POWER = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> POWER = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT);
|
||||||
public static final EntityDataAccessor<Float> ROTOR = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT);
|
public static final EntityDataAccessor<Float> ROTOR = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.FLOAT);
|
||||||
|
public static final EntityDataAccessor<Integer> COOL_DOWN = SynchedEntityData.defineId(SpeedboatEntity.class, EntityDataSerializers.INT);
|
||||||
|
|
||||||
public static final float MAX_HEALTH = CannonConfig.MK42_HP.get();
|
public static final float MAX_HEALTH = CannonConfig.MK42_HP.get();
|
||||||
|
|
||||||
|
@ -88,6 +96,7 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
this.entityData.define(DELTA_ROT, 0f);
|
this.entityData.define(DELTA_ROT, 0f);
|
||||||
this.entityData.define(POWER, 0f);
|
this.entityData.define(POWER, 0f);
|
||||||
this.entityData.define(ROTOR, 0f);
|
this.entityData.define(ROTOR, 0f);
|
||||||
|
this.entityData.define(COOL_DOWN, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -214,6 +223,10 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
public void baseTick() {
|
public void baseTick() {
|
||||||
super.baseTick();
|
super.baseTick();
|
||||||
|
|
||||||
|
if (this.entityData.get(COOL_DOWN) > 0) {
|
||||||
|
this.entityData.set(COOL_DOWN, this.entityData.get(COOL_DOWN) - 1);
|
||||||
|
}
|
||||||
|
|
||||||
double fluidFloat;
|
double fluidFloat;
|
||||||
fluidFloat = -0.05 + 0.1 * getSubmergedHeight(this);
|
fluidFloat = -0.05 + 0.1 * getSubmergedHeight(this);
|
||||||
this.setDeltaMovement(this.getDeltaMovement().add(0.0, fluidFloat, 0.0));
|
this.setDeltaMovement(this.getDeltaMovement().add(0.0, fluidFloat, 0.0));
|
||||||
|
@ -247,11 +260,41 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
|
|
||||||
collideBlock();
|
collideBlock();
|
||||||
gunnerAngle();
|
gunnerAngle();
|
||||||
// gunnerFire();
|
gunnerFire();
|
||||||
|
|
||||||
this.refreshDimensions();
|
this.refreshDimensions();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void gunnerFire() {
|
||||||
|
if (this.entityData.get(COOL_DOWN) != 0) return;
|
||||||
|
|
||||||
|
Entity driver = this.getFirstPassenger();
|
||||||
|
if (driver == null) return;
|
||||||
|
if (driver instanceof Player player) {
|
||||||
|
if (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).holdFire) {
|
||||||
|
ProjectileEntity projectile = new ProjectileEntity(driver.level())
|
||||||
|
.shooter(player)
|
||||||
|
.damage(39)
|
||||||
|
.headShot(2.5f)
|
||||||
|
.zoom(false);
|
||||||
|
|
||||||
|
projectile.setPos(this.xo - this.getViewVector(1).scale(0.57).x - this.getDeltaMovement().x, this.yo + 3.0, this.zo - this.getViewVector(1).scale(0.57).z - this.getDeltaMovement().z);
|
||||||
|
projectile.shoot(player, player.getLookAngle().x, player.getLookAngle().y + 0.001f, player.getLookAngle().z, 25,
|
||||||
|
(float) 0.3);
|
||||||
|
this.level().addFreshEntity(projectile);
|
||||||
|
|
||||||
|
if (player instanceof ServerPlayer serverPlayer) {
|
||||||
|
SoundTool.playLocalSound(serverPlayer, ModSounds.MINIGUN_FIRE_1P.get(), 2, 1);
|
||||||
|
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MINIGUN_FIRE_3P.get(), SoundSource.PLAYERS, 6, 1);
|
||||||
|
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MINIGUN_FAR.get(), SoundSource.PLAYERS, 16, 1);
|
||||||
|
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MINIGUN_VERYFAR.get(), SoundSource.PLAYERS, 32, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.entityData.set(COOL_DOWN, 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void crushEntities(Vec3 velocity) {
|
public void crushEntities(Vec3 velocity) {
|
||||||
var frontBox = getBoundingBox().move(velocity.scale(0.5));
|
var frontBox = getBoundingBox().move(velocity.scale(0.5));
|
||||||
var velAdd = velocity.add(0, 0, 0).scale(1.5);
|
var velAdd = velocity.add(0, 0, 0).scale(1.5);
|
||||||
|
@ -494,9 +537,16 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private PlayState firePredicate(AnimationState<SpeedboatEntity> event) {
|
||||||
|
if (this.entityData.get(COOL_DOWN) > 1) {
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.speedboat.fire"));
|
||||||
|
}
|
||||||
|
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.speedboat.idle"));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
||||||
|
data.add(new AnimationController<>(this, "movement", 0, this::firePredicate));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -8,6 +8,7 @@ import com.atsuishio.superbwarfare.tools.EntityFindUtil;
|
||||||
import net.minecraft.client.Camera;
|
import net.minecraft.client.Camera;
|
||||||
import net.minecraft.client.CameraType;
|
import net.minecraft.client.CameraType;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
|
import net.minecraft.client.player.LocalPlayer;
|
||||||
import net.minecraft.util.Mth;
|
import net.minecraft.util.Mth;
|
||||||
import net.minecraft.world.entity.Entity;
|
import net.minecraft.world.entity.Entity;
|
||||||
import net.minecraft.world.entity.player.Player;
|
import net.minecraft.world.entity.player.Player;
|
||||||
|
@ -34,7 +35,7 @@ public abstract class CameraMixin {
|
||||||
cancellable = true)
|
cancellable = true)
|
||||||
private void onSetup(BlockGetter level, Entity entity, boolean detached, boolean mirrored, float partialTicks, CallbackInfo info) {
|
private void onSetup(BlockGetter level, Entity entity, boolean detached, boolean mirrored, float partialTicks, CallbackInfo info) {
|
||||||
Minecraft mc = Minecraft.getInstance();
|
Minecraft mc = Minecraft.getInstance();
|
||||||
Player player = mc.player;
|
LocalPlayer player = mc.player;
|
||||||
|
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
ItemStack stack = player.getMainHandItem();
|
ItemStack stack = player.getMainHandItem();
|
||||||
|
@ -45,10 +46,11 @@ public abstract class CameraMixin {
|
||||||
yRot += 360;
|
yRot += 360;
|
||||||
}
|
}
|
||||||
yRot = yRot + 90 % 360;
|
yRot = yRot + 90 % 360;
|
||||||
var CameraPos = new Vector3d(-0.6, 3.3, 0);
|
var CameraPos = new Vector3d(-0.57, 3.3, 0);
|
||||||
CameraPos.rotateZ(-boat.getXRot() * Mth.DEG_TO_RAD);
|
CameraPos.rotateZ(-boat.getXRot() * Mth.DEG_TO_RAD);
|
||||||
CameraPos.rotateY(-yRot * Mth.DEG_TO_RAD);
|
CameraPos.rotateY(-yRot * Mth.DEG_TO_RAD);
|
||||||
setRotation(player.getViewYRot(partialTicks), player.getViewXRot(partialTicks));
|
|
||||||
|
setRotation(Mth.lerp(partialTicks, player.yBobO, player.yBob), Mth.lerp(partialTicks, player.xBobO, player.xBob));
|
||||||
setPosition(Mth.lerp(partialTicks, boat.xo + CameraPos.x, boat.getX() + CameraPos.x), Mth.lerp(partialTicks, boat.yo + CameraPos.y, boat.getY() + CameraPos.y), Mth.lerp(partialTicks, boat.zo + CameraPos.z, boat.getZ() + CameraPos.z));
|
setPosition(Mth.lerp(partialTicks, boat.xo + CameraPos.x, boat.getX() + CameraPos.x), Mth.lerp(partialTicks, boat.yo + CameraPos.y, boat.getY() + CameraPos.y), Mth.lerp(partialTicks, boat.zo + CameraPos.z, boat.getZ() + CameraPos.z));
|
||||||
info.cancel();
|
info.cancel();
|
||||||
|
|
||||||
|
|
|
@ -2,35 +2,25 @@
|
||||||
"format_version": "1.8.0",
|
"format_version": "1.8.0",
|
||||||
"animations": {
|
"animations": {
|
||||||
"animation.speedboat.idle": {
|
"animation.speedboat.idle": {
|
||||||
"loop": true,
|
"animation_length": 0.1,
|
||||||
"animation_length": 1,
|
|
||||||
"blend_weight": "10",
|
|
||||||
"start_delay": "10"
|
|
||||||
},
|
|
||||||
"animation.speedboat.forward": {
|
|
||||||
"loop": true,
|
|
||||||
"animation_length": 0.5,
|
|
||||||
"blend_weight": "10",
|
|
||||||
"start_delay": "10",
|
|
||||||
"bones": {
|
"bones": {
|
||||||
"Rotor": {
|
"flare": {
|
||||||
"rotation": {
|
"scale": 0
|
||||||
"0.0": [0, 0, 0],
|
|
||||||
"0.5": [0, 0, 720]
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"animation.speedboat.backward": {
|
"animation.speedboat.fire": {
|
||||||
"loop": true,
|
"loop": "hold_on_last_frame",
|
||||||
"animation_length": 0.5,
|
"animation_length": 0.15,
|
||||||
"blend_weight": "10",
|
|
||||||
"start_delay": "10",
|
|
||||||
"bones": {
|
"bones": {
|
||||||
"Rotor": {
|
"flare": {
|
||||||
"rotation": {
|
"scale": {
|
||||||
"0.0": [0, 0, 0],
|
"0.0": [0, 0, 0],
|
||||||
"0.5": [0, 0, -720]
|
"0.0083": [8, 8, 8],
|
||||||
|
"0.05": [8, 8, 8],
|
||||||
|
"0.075": [1, 1, 1],
|
||||||
|
"0.0917": [0, 0, 0],
|
||||||
|
"0.15": [0, 0, 0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
{
|
{
|
||||||
"description": {
|
"description": {
|
||||||
"identifier": "geometry.unknown",
|
"identifier": "geometry.unknown",
|
||||||
"texture_width": 64,
|
"texture_width": 256,
|
||||||
"texture_height": 64,
|
"texture_height": 256,
|
||||||
"visible_bounds_width": 9,
|
"visible_bounds_width": 9,
|
||||||
"visible_bounds_height": 5,
|
"visible_bounds_height": 5,
|
||||||
"visible_bounds_offset": [0, 1.5, 0]
|
"visible_bounds_offset": [0, 1.5, 0]
|
||||||
|
@ -510,6 +510,69 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "flare",
|
||||||
|
"parent": "gun",
|
||||||
|
"pivot": [0, 47.54, -15.18133],
|
||||||
|
"cubes": [
|
||||||
|
{
|
||||||
|
"origin": [-0.60625, 46.93188, -15.25321],
|
||||||
|
"size": [1.2125, 1.2125, 0],
|
||||||
|
"pivot": [0, 47.53813, -15.68133],
|
||||||
|
"rotation": [0, 0, 0],
|
||||||
|
"uv": {
|
||||||
|
"north": {"uv": [256, 0], "uv_size": [-64, 64]},
|
||||||
|
"east": {"uv": [192, 0], "uv_size": [64, 64]},
|
||||||
|
"south": {"uv": [192, 0], "uv_size": [64, 64]},
|
||||||
|
"west": {"uv": [192, 0], "uv_size": [64, 64]},
|
||||||
|
"up": {"uv": [256, 64], "uv_size": [-64, -64]},
|
||||||
|
"down": {"uv": [256, 64], "uv_size": [-64, -64]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"origin": [-1.525, 47.03188, -16.78445],
|
||||||
|
"size": [3.05, 1.0125, 0],
|
||||||
|
"pivot": [0, 47.53813, -16.78445],
|
||||||
|
"rotation": [0, -90, 30],
|
||||||
|
"uv": {
|
||||||
|
"north": {"uv": [256, 0], "uv_size": [-51.5, 64]},
|
||||||
|
"east": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"south": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"west": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"up": {"uv": [256, 64], "uv_size": [-51.5, -64]},
|
||||||
|
"down": {"uv": [256, 64], "uv_size": [-51.5, -64]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"origin": [-1.525, 47.03187, -16.78446],
|
||||||
|
"size": [3.05, 1.0125, 0],
|
||||||
|
"pivot": [0, 47.53813, -16.78445],
|
||||||
|
"rotation": [0, -90, -31],
|
||||||
|
"uv": {
|
||||||
|
"north": {"uv": [256, 0], "uv_size": [-51.5, 64]},
|
||||||
|
"east": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"south": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"west": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"up": {"uv": [256, 64], "uv_size": [-51.5, -64]},
|
||||||
|
"down": {"uv": [256, 64], "uv_size": [-51.5, -64]}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"origin": [-1.525, 47.03187, -16.78445],
|
||||||
|
"size": [3.05, 1.0125, 0],
|
||||||
|
"pivot": [0, 47.53813, -16.78445],
|
||||||
|
"rotation": [0, -90, -91],
|
||||||
|
"uv": {
|
||||||
|
"north": {"uv": [256, 0], "uv_size": [-51.5, 64]},
|
||||||
|
"east": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"south": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"west": {"uv": [204.5, 0], "uv_size": [51.5, 64]},
|
||||||
|
"up": {"uv": [256, 64], "uv_size": [-51.5, -64]},
|
||||||
|
"down": {"uv": [256, 64], "uv_size": [-51.5, -64]}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "bone15",
|
"name": "bone15",
|
||||||
"parent": "paota",
|
"parent": "paota",
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 9.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 211 KiB |
Loading…
Add table
Reference in a new issue