添加激光炮的发射功能

This commit is contained in:
Atsuihsio 2024-12-05 18:04:36 +08:00
parent 6a0fb35181
commit 63a0212d74
9 changed files with 573 additions and 397 deletions

View file

@ -16,7 +16,7 @@ public class AnnihilatorModel extends GeoModel<AnnihilatorEntity> {
@Override
public ResourceLocation getAnimationResource(AnnihilatorEntity entity) {
return null;
return ModUtils.loc("animations/annihilator.animation.json");
}
@Override

View file

@ -35,6 +35,7 @@ public class CannonHudOverlay {
public static float health = 0;
public static float maxHealth = 0;
public static float indicatorPosH = 0;
private static final ResourceLocation ARMOR = ModUtils.loc("textures/screens/armor.png");
private static final ResourceLocation HEALTH = ModUtils.loc("textures/screens/armor_value.png");
@ -58,10 +59,28 @@ public class CannonHudOverlay {
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
RenderSystem.setShaderColor(1, 1, 1, 1);
if (cannon instanceof Mk42Entity) {
health = cannon.getEntityData().get(Mk42Entity.HEALTH);
maxHealth = CannonConfig.MK42_HP.get();
indicatorPosH = 1.3f;
}
if (cannon instanceof Mle1934Entity) {
health = cannon.getEntityData().get(Mle1934Entity.HEALTH);
maxHealth = CannonConfig.MLE1934_HP.get();
indicatorPosH = 1.2f;
}
if (cannon instanceof AnnihilatorEntity) {
health = cannon.getEntityData().get(AnnihilatorEntity.HEALTH);
maxHealth = CannonConfig.ANNIHILATOR_HP.get();
indicatorPosH = 0.2f;
}
float yRotOffset = Mth.lerp(event.getPartialTick(), player.yRotO, player.getYRot());
float xRotOffset = Mth.lerp(event.getPartialTick(), player.xRotO, player.getXRot());
float diffY = cannon.getViewYRot(event.getPartialTick()) - yRotOffset;
float diffX = cannon.getViewXRot(event.getPartialTick()) - xRotOffset + 1.3f;
float diffX = cannon.getViewXRot(event.getPartialTick()) - xRotOffset + indicatorPosH;
float fovAdjust = (float) 70 / Minecraft.getInstance().options.fov().get();
if (diffY > 180.0f) {
diffY -= 360.0f;
@ -111,21 +130,6 @@ public class CannonHudOverlay {
.append(Component.literal(new DecimalFormat("##.#").format(-cannon.getXRot()) + "°")),
w / 2 + 14, h / 2 - 29, -1, false);
if (cannon instanceof Mk42Entity) {
health = cannon.getEntityData().get(Mk42Entity.HEALTH);
maxHealth = CannonConfig.MK42_HP.get();
}
if (cannon instanceof Mle1934Entity) {
health = cannon.getEntityData().get(Mle1934Entity.HEALTH);
maxHealth = CannonConfig.MLE1934_HP.get();
}
if (cannon instanceof AnnihilatorEntity) {
health = cannon.getEntityData().get(AnnihilatorEntity.HEALTH);
maxHealth = CannonConfig.ANNIHILATOR_HP.get();
}
GuiGraphics guiGraphics = event.getGuiGraphics();
guiGraphics.pose().pushPose();
guiGraphics.blit(ARMOR, w - 96, h - 14, 0, 0, 12, 12, 12, 12);

View file

@ -5,9 +5,10 @@ import com.atsuishio.superbwarfare.config.server.CannonConfig;
import com.atsuishio.superbwarfare.config.server.ExplosionDestroyConfig;
import com.atsuishio.superbwarfare.init.*;
import com.atsuishio.superbwarfare.item.ContainerBlockItem;
import com.atsuishio.superbwarfare.network.message.ClientIndicatorMessage;
import com.atsuishio.superbwarfare.network.message.ShakeClientMessage;
import com.atsuishio.superbwarfare.tools.CustomExplosion;
import com.atsuishio.superbwarfare.tools.ParticleTool;
import com.atsuishio.superbwarfare.tools.SoundTool;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.core.particles.ParticleTypes;
@ -42,12 +43,17 @@ import org.joml.Vector3d;
import software.bernie.geckolib.animatable.GeoEntity;
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
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 java.util.Comparator;
public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntity {
public static final EntityDataAccessor<Integer> COOL_DOWN = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.INT);
public static final EntityDataAccessor<Integer> TYPE = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.INT);
public static final EntityDataAccessor<Float> HEALTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT);
public static final EntityDataAccessor<Float> LASER_LEFT_LENGTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT);
public static final EntityDataAccessor<Float> LASER_MIDDLE_LENGTH = SynchedEntityData.defineId(AnnihilatorEntity.class, EntityDataSerializers.FLOAT);
@ -73,7 +79,6 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
@Override
protected void defineSynchedData() {
this.entityData.define(COOL_DOWN, 0);
this.entityData.define(TYPE, 0);
this.entityData.define(HEALTH, MAX_HEALTH);
this.entityData.define(LASER_LEFT_LENGTH, 0f);
this.entityData.define(LASER_MIDDLE_LENGTH, 0f);
@ -83,14 +88,12 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
@Override
public void addAdditionalSaveData(CompoundTag compound) {
compound.putInt("CoolDown", this.entityData.get(COOL_DOWN));
compound.putInt("Type", this.entityData.get(TYPE));
compound.putFloat("Health", this.entityData.get(HEALTH));
}
@Override
public void readAdditionalSaveData(CompoundTag compound) {
this.entityData.set(COOL_DOWN, compound.getInt("CoolDown"));
this.entityData.set(TYPE, compound.getInt("Type"));
if (compound.contains("Health")) {
this.entityData.set(HEALTH, compound.getFloat("Health"));
} else {
@ -277,15 +280,24 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
Vec3 BarrelRightPos = new Vec3(BarrelRootPos.x + rightPos.x, BarrelRootPos.y + rightPos.y, BarrelRootPos.z + rightPos.z);
if (this.entityData.get(COOL_DOWN) > 88) {
this.entityData.set(LASER_LEFT_LENGTH, Math.min(laserLength(BarrelLeftPos ,this), laserLengthEntity(BarrelLeftPos ,this)));
this.entityData.set(LASER_MIDDLE_LENGTH, Math.min(laserLength(BarrelMiddlePos ,this), laserLengthEntity(BarrelMiddlePos ,this)));
this.entityData.set(LASER_RIGHT_LENGTH, Math.min(laserLength(BarrelRightPos ,this), laserLengthEntity(BarrelRightPos ,this)));
}
travel();
this.refreshDimensions();
}
private float laserLength (Vec3 pos, Entity cannon) {
if (this.entityData.get(COOL_DOWN) > 98) {
HitResult result = cannon.level().clip(new ClipContext(pos, pos.add(cannon.getViewVector(1).scale(512)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, cannon));
Vec3 hitPos = result.getLocation();
laserExplosion(hitPos);
}
return (float) pos.distanceTo((Vec3.atLowerCornerOf(cannon.level().clip(
new ClipContext(pos, pos.add(cannon.getViewVector(1).scale(512)),
ClipContext.Block.OUTLINE, ClipContext.Fluid.NONE, cannon)).getBlockPos())));
@ -315,28 +327,35 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
hitResult = entityhitresult;
}
if (hitResult.getType() == HitResult.Type.ENTITY) {
Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0);
Entity target = ((EntityHitResult) hitResult).getEntity();
target.hurt(ModDamageTypes.causeLaserDamage(this.level().registryAccess(), passenger, passenger), (float) 100);
target.hurt(ModDamageTypes.causeLaserDamage(this.level().registryAccess(), passenger, passenger), (float) 200);
target.invulnerableTime = 0;
if (passenger instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound(null, serverPlayer.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 0.1f, 1);
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ClientIndicatorMessage(0, 5));
if (this.entityData.get(COOL_DOWN) > 98) {
laserExplosion(targetPos);
}
return (float) pos.distanceTo(target.position());
}
}
return 512;
}
private void laserExplosion(Vec3 pos) {
Entity passenger = this.getPassengers().isEmpty() ? null : this.getPassengers().get(0);
CustomExplosion explosion = new CustomExplosion(this.level(), passenger,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), passenger, passenger), 300f,
pos.x, pos.y, pos.z, 15f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
ParticleTool.spawnHugeExplosionParticles(this.level(), pos);
}
private void destroy() {
CustomExplosion explosion = new CustomExplosion(this.level(), this,
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this), 140f,
this.getX(), this.getY(), this.getZ(), 25f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
ModDamageTypes.causeProjectileBoomDamage(this.level().registryAccess(), this, this), 160f,
this.getX(), this.getY(), this.getZ(), 20f, ExplosionDestroyConfig.EXPLOSION_DESTROY.get() ? Explosion.BlockInteraction.DESTROY : Explosion.BlockInteraction.KEEP).setDamageMultiplier(1);
explosion.explode();
net.minecraftforge.event.ForgeEventFactory.onExplosionStart(this.level(), explosion);
explosion.finalizeExplosion(false);
@ -347,6 +366,34 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
@Override
public void cannonShoot(Player player) {
if (this.entityData.get(COOL_DOWN) > 0) {
return;
}
Level level = player.level();
if (level instanceof ServerLevel server) {
ItemStack stack = player.getMainHandItem();
if (player instanceof ServerPlayer serverPlayer) {
SoundTool.playLocalSound(serverPlayer, ModSounds.ANNIHILATOR_FIRE_1P.get(), 1, 1);
// SoundTool.playLocalSound(serverPlayer, ModSounds.MK_42_RELOAD.get(), 2, 1);
// serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MK_42_FIRE_3P.get(), SoundSource.PLAYERS, 6, 1);
// serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MK_42_FAR.get(), SoundSource.PLAYERS, 16, 1);
// serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.MK_42_VERYFAR.get(), SoundSource.PLAYERS, 32, 1);
}
this.entityData.set(COOL_DOWN, 100);
final Vec3 center = new Vec3(this.getX(), this.getEyeY(), this.getZ());
for (Entity target : level.getEntitiesOfClass(Entity.class, new AABB(center, center).inflate(20), e -> true).stream().sorted(Comparator.comparingDouble(e -> e.distanceToSqr(center))).toList()) {
if (target instanceof ServerPlayer serverPlayer) {
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShakeClientMessage(15, 15, 25, this.getX(), this.getEyeY(), this.getZ()));
}
}
}
}
@Override
@ -369,7 +416,7 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
}
float diffY = passengerY - this.getYRot();
float diffX = entity.getXRot() - 1.2f - this.getXRot();
float diffX = entity.getXRot() - 0.2f - this.getXRot();
if (diffY > 180.0f) {
diffY -= 360.0f;
} else if (diffY < -180.0f) {
@ -379,13 +426,13 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
diffX = diffX * 0.15f;
this.setYRot(this.getYRot() + diffY);
this.setXRot(Mth.clamp(this.getXRot() + Mth.clamp(diffX, -2f, 2f), -45, 6.2f));
this.setXRot(Mth.clamp(this.getXRot() + Mth.clamp(diffX, -2f, 2f), -45, 5.2f));
this.setRot(this.getYRot(), this.getXRot());
}
protected void clampRotation(Entity entity) {
float f = Mth.wrapDegrees(entity.getXRot());
float f1 = Mth.clamp(f, -45.0F, 6.2F);
float f1 = Mth.clamp(f, -45.0F, 5.2F);
entity.xRotO += f1 - f;
entity.setXRot(entity.getXRot() + f1 - f);
}
@ -395,20 +442,16 @@ public class AnnihilatorEntity extends Entity implements GeoEntity, ICannonEntit
this.clampRotation(entity);
}
// private PlayState movementPredicate(AnimationState<AnnihilatorEntity> event) {
// if (this.entityData.get(COOL_DOWN) > 64) {
// if (this.entityData.get(TYPE) == 1) {
// return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mle1934.salvo_fire"));
// } else {
// return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mle1934.fire"));
// }
// }
// return event.setAndContinue(RawAnimation.begin().thenLoop("animation.mle1934.idle"));
// }
private PlayState movementPredicate(AnimationState<AnnihilatorEntity> event) {
if (this.entityData.get(COOL_DOWN) > 88) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.annihilator.fire"));
}
return event.setAndContinue(RawAnimation.begin().thenLoop("animation.annihilator.idle"));
}
@Override
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
// data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate));
data.add(new AnimationController<>(this, "movement", 0, this::movementPredicate));
}
@Override

View file

@ -336,5 +336,7 @@ public class ModSounds {
public static final RegistryObject<SoundEvent> CHARGE_RIFLE_FIRE_3P = REGISTRY.register("charge_rifle_fire_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_3p")));
public static final RegistryObject<SoundEvent> CHARGE_RIFLE_FIRE_BOOM_1P = REGISTRY.register("charge_rifle_fire_boom_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_boom_1p")));
public static final RegistryObject<SoundEvent> CHARGE_RIFLE_FIRE_BOOM_3P = REGISTRY.register("charge_rifle_fire_boom_3p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "charge_rifle_fire_boom_3p")));
public static final RegistryObject<SoundEvent> ANNIHILATOR_FIRE_1P = REGISTRY.register("annihilator_fire_1p", () -> SoundEvent.createVariableRangeEvent(new ResourceLocation(ModUtils.MODID, "annihilator_fire_1p")));
}

View file

@ -1,5 +1,6 @@
package com.atsuishio.superbwarfare.mixins;
import com.atsuishio.superbwarfare.entity.AnnihilatorEntity;
import com.atsuishio.superbwarfare.entity.DroneEntity;
import com.atsuishio.superbwarfare.entity.Mk42Entity;
import com.atsuishio.superbwarfare.entity.Mle1934Entity;
@ -71,6 +72,10 @@ public abstract class CameraMixin {
move(-getMaxZoom(10), 1.3, 0.0);
return;
}
if (thirdPerson && entity.getVehicle() instanceof AnnihilatorEntity) {
move(-getMaxZoom(16), 1.3, 0.0);
return;
}
if (Minecraft.getInstance().options.getCameraType() == CameraType.THIRD_PERSON_BACK && entity instanceof Player player && player.getMainHandItem().is(ModTags.Items.GUN)) {
move(-getMaxZoom(-2.9 * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos)), 0, -ClientEventHandler.cameraLocation * Math.max(ClientEventHandler.pullPos, ClientEventHandler.zoomPos));
}

View file

@ -0,0 +1,114 @@
{
"format_version": "1.8.0",
"animations": {
"animation.annihilator.idle": {
"animation_length": 0.25,
"bones": {
"glow1": {
"scale": 0
},
"light1": {
"scale": [1, 1, 0]
},
"glow2": {
"scale": 0
},
"light2": {
"scale": [1, 1, 0]
},
"glow3": {
"scale": 0
},
"light3": {
"scale": [1, 1, 0]
},
"laser1": {
"scale": [0, 0, 1]
},
"laser2": {
"scale": [0, 0, 1]
},
"laser3": {
"scale": [0, 0, 1]
}
}
},
"animation.annihilator.fire": {
"animation_length": 1,
"bones": {
"glow1": {
"scale": {
"0.0": [0, 0, 0],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [0, 0, 0]
}
},
"light1": {
"scale": {
"0.0": [1, 1, 0],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [1, 1, 0]
}
},
"glow2": {
"scale": {
"0.0": [0, 0, 0],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [0, 0, 0]
}
},
"light2": {
"scale": {
"0.0": [1, 1, 0],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [1, 1, 0]
}
},
"glow3": {
"scale": {
"0.0": [0, 0, 0],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [0, 0, 0]
}
},
"light3": {
"scale": {
"0.0": [1, 1, 0],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [1, 1, 0]
}
},
"laser1": {
"scale": {
"0.0": [0, 0, 1],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [0, 0, 1]
}
},
"laser2": {
"scale": {
"0.0": [0, 0, 1],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [0, 0, 1]
}
},
"laser3": {
"scale": {
"0.0": [0, 0, 1],
"0.0083": [1, 1, 1],
"0.1917": [1, 1, 1],
"0.5": [0, 0, 1]
}
}
}
}
}
}

View file

@ -43,7 +43,352 @@
"pivot": [43.25, 36.0004, -275]
},
{
"name": "bone5",
"name": "light1",
"parent": "laser",
"pivot": [43.215, 35.2505, -331.2],
"cubes": [
{
"origin": [43.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, 0],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, -180],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, 90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, -90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, -90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, 0],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, -180],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, 90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, -90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, 0],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, -180],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [43.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [43.215, 35.2505, -331.2],
"rotation": [0, -90, 90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
}
]
},
{
"name": "light2",
"parent": "laser",
"pivot": [-43.215, 35.2505, -331.2],
"cubes": [
{
"origin": [-79.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-79.215, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [-43.215, 35.2505, -331.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
}
]
},
{
"name": "light3",
"parent": "laser",
"pivot": [0, 35.2505, -331.2],
"cubes": [
{
"origin": [-36, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.877, -333.745],
"size": [36, 0, 5.09],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-36, 37.7945, -333.8275],
"size": [36, 0, 5.255],
"pivot": [0, 35.2505, -331.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
}
]
},
{
"name": "glow1",
"parent": "laser",
"pivot": [43.25, 35.2538, -330.9],
"cubes": [
@ -77,122 +422,7 @@
]
},
{
"name": "bone7",
"parent": "bone5",
"pivot": [45.759, 35.33301, -305.2],
"cubes": [
{
"origin": [17.215, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 37.877, -305.2],
"rotation": [0, -90, 0],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [17.215, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 32.624, -305.2],
"rotation": [0, -90, -180],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [19.759, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [45.759, 35.25051, -305.2],
"rotation": [0, -90, 90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [14.671, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [40.671, 35.2505, -305.2],
"rotation": [0, -90, -90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [14.671, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [40.671, 35.2505, -305.2],
"rotation": [0, -90, -90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [17.215, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 37.877, -305.2],
"rotation": [0, -90, 0],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [17.215, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 32.624, -305.2],
"rotation": [0, -90, -180],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [19.759, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [45.759, 35.25051, -305.2],
"rotation": [0, -90, 90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [14.671, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [40.671, 35.2505, -305.2],
"rotation": [0, -90, -90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [17.215, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 37.877, -305.2],
"rotation": [0, -90, 0],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [17.215, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [43.215, 32.624, -305.2],
"rotation": [0, -90, -180],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
},
{
"origin": [19.759, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [45.759, 35.25051, -305.2],
"rotation": [0, -90, 90],
"uv": {
"up": {"uv": [93.625, 108.75], "uv_size": [-23.875, -8.125]}
}
}
]
},
{
"name": "bone8",
"name": "glow2",
"parent": "laser",
"pivot": [-43.25, 35.2538, -330.9],
"cubes": [
@ -226,122 +456,7 @@
]
},
{
"name": "bone9",
"parent": "bone8",
"pivot": [-45.759, 35.33301, -305.2],
"cubes": [
{
"origin": [-53.215, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 37.877, -305.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-53.215, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 32.624, -305.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-55.759, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-45.759, 35.25051, -305.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-50.671, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-40.671, 35.2505, -305.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-50.671, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-40.671, 35.2505, -305.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-53.215, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 37.877, -305.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-53.215, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 32.624, -305.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-55.759, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-45.759, 35.25051, -305.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-50.671, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-40.671, 35.2505, -305.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-53.215, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 37.877, -305.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-53.215, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [-43.215, 32.624, -305.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-55.759, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-45.759, 35.25051, -305.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
}
]
},
{
"name": "bone10",
"name": "glow3",
"parent": "laser",
"pivot": [-0.035, 35.2538, -330.9],
"cubes": [
@ -374,121 +489,6 @@
}
]
},
{
"name": "bone11",
"parent": "bone10",
"pivot": [-2.544, 35.33301, -305.2],
"cubes": [
{
"origin": [-10, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [0, 37.877, -305.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-10, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [0, 32.624, -305.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-12.544, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-2.544, 35.25051, -305.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-7.456, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [2.544, 35.2505, -305.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-7.456, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [2.544, 35.2505, -305.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-10, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [0, 37.877, -305.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-10, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [0, 32.624, -305.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-12.544, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-2.544, 35.25051, -305.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-7.456, 35.2505, -307.8275],
"size": [36, 0, 5.255],
"pivot": [2.544, 35.2505, -305.2],
"rotation": [0, 90, 90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-10, 37.877, -307.745],
"size": [36, 0, 5.09],
"pivot": [0, 37.877, -305.2],
"rotation": [0, 90, 0],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-10, 32.624, -307.745],
"size": [36, 0, 5.09],
"pivot": [0, 32.624, -305.2],
"rotation": [0, 90, 180],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
},
{
"origin": [-12.544, 35.25051, -307.8275],
"size": [36, 0, 5.255],
"pivot": [-2.544, 35.25051, -305.2],
"rotation": [0, 90, -90],
"uv": {
"up": {"uv": [69.75, 108.75], "uv_size": [23.875, -8.125]}
}
}
]
},
{
"name": "laser1",
"parent": "laser",

View file

@ -2389,5 +2389,13 @@
"stream": false
}
]
},
"annihilator_fire_1p": {
"sounds": [
{
"name": "superbwarfare:annihilator/annihilator_fire_1p",
"stream": false
}
]
}
}