Résolu Animation bloc
-
Bonsoir les gens,
Aujourd’hui un bienfaiteur m’a donné un gros coup de pouce pour comprendre un peu mieux comment gérer une animation de bloc (TESR).
Le p’tit soucis que j’ai dans tout ça c’est que certains “shapes” ont un comportement un peu inattendu.Explications:
Je veux faire une machine à sous. Un modèle possédant 3 rouleaux à 8 facettes chacun.
Donc chaque facette de chaque rouleau ont le même repère afin d’appliquer la rotation du coup j’ai la moitié des facettes à 45°, ce sont ces facettes qui posent problème.En image:
Voilà donc l’animation ne se fait pas tant que je n’ai pas cliqué sur le bloc et donc ce screen montre le bloc à l’état de repos.
Cette facette se confond avec une autre sans explication à mes yeux.Les classes:
private void renderTileEntityJackPotAt(TileEntityJackPot tile, double x, double y, double z, float partialRenderTick) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5D, y + 0.35D, z + 0.5D); GL11.glRotatef(180F, 0.0F, 0.0F, 1.0F); GL11.glRotatef((90F * tile.getDirection()) + 180F, 0.0F, 1.0F, 0.0F); GL11.glScaled(0.25F, 0.25F, 0.25F); this.bindTexture(texture); model.Wheel1A.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel1B.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel1C.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel1D.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel1E.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel1F.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel1G.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel1H.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel2A.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel2B.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel2C.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel2D.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel2E.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel2F.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel2G.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel2H.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel3A.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel3B.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel3C.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel3D.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel3E.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel3F.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.Wheel3G.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); // model.Wheel3H.rotateAngleX = (float) Math.toRadians(tile.getAnimateAngle()); model.renderAll(); GL11.glPopMatrix(); }
Les shapes qui sont mals affichés sont en commentaire, le shape qui sert d’exemple sur le screen est** Wheel2B**
Je suppose que mon soucis provient de la classe de mon modèle. Que voici en partie:
package fr.powergame.modpg2.client; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; public class ModelJackPot extends ModelBase { ModelRenderer Wheel1A; ModelRenderer Wheel1B; ModelRenderer Wheel1C; ModelRenderer Wheel1D; […] public ModelJackPot() { textureWidth = 256; textureHeight = 128; Wheel1A = new ModelRenderer(this, 192, 110); // BUG PAS Wheel1A.addBox(-8F, 18.8F, -8.5F, 16, 1, 16); Wheel1A.setRotationPoint(-19F, -8.5F, -5.6F); Wheel1A.setTextureSize(256, 128); Wheel1A.mirror = true; setRotation(Wheel1A, 0F, 0F, 0F); Wheel1B = new ModelRenderer(this, 158, 110); // BUG Wheel1B.addBox(-8F, -8.2F, -20F, 16, 16, 1); Wheel1B.setRotationPoint(-19F, -8.5F, -5.5F); Wheel1B.setTextureSize(256, 128); Wheel1B.mirror = true; setRotation(Wheel1B, 0.7853982F, 0F, 0F); Wheel1C = new ModelRenderer(this, 158, 93); // BUG PAS Wheel1C.addBox(-8F, -7.8F, -20F, 16, 16, 1); Wheel1C.setRotationPoint(-19F, -8.5F, -5.5F); Wheel1C.setTextureSize(256, 128); Wheel1C.mirror = true; setRotation(Wheel1C, 0F, 0F, 0F); Wheel1D = new ModelRenderer(this, 222, 76); //BUG Wheel1D.addBox(-8F, -7.5F, -19.7F, 16, 16, 1); Wheel1D.setRotationPoint(-19F, -8.5F, -5.5F); Wheel1D.setTextureSize(256, 128); Wheel1D.mirror = true; setRotation(Wheel1D, -0.7853982F, 0F, 0F); […] } public void renderAll() { Wheel1A.render(0.0625F); […] } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } }
edit: je n’ai pas mis la logique de la méthode updateEntity() du TileEntity car on m’a certifié qu’elle était hors de cause ^^
-
Essaie d’afficher juste avant d’affecter chaque rotation d’élément la variable tile.getAnimateAngle() et regarde si elle change.
PS : je te conseille de faire un rendu avec les items de minecraft pour que ce soit compatible avec les textures packs
-
Si le problème venait de cette valeur, le problème serait aussi sensiblement visible sur les autres facettes pourtant.
Petit edit:
Peut être insignifiant, mais j’avais essayé de faire .isChild chaque rouleau pour en faire 3 blocs et c’était totalement le bordel (vraiment). -
De ce que je vois, le problème vient de toutes les formes qui ont une rotation sur l’axe X, après pourquoi je ne sais pas.
-
Non justement sur le screen on peut voir 4 shapes à rotationX:
Les 3 shapes avec une texture de nether star et un shape bug que j’ai laissé pour vous montrer.Voici ce qu’il se passe si je rédige mon code comme il est sensé être au final:
Depuis j’ai rajouté le bras de la machine, les trois pièces sont inclinées de 14° de l’axe Z et aucun problème pour la rotation de 45° sur l’axe X et surtout aucun bug d’affichage à l’état de repos du bloc
Bon, texture en cours car si je n’arrive pas à résoudre ce problème je vais devoir faire un système de textures aléatoires. C’est moins beau à voir, mais fonctionnel
EDIT:
Je précise que le modèle a été exporté depuis Techne (vu les compliments que j’entends à ce propos), mais bon je vois ait montré la classe du modèle avec le code des shapes qui posent problème en cas. -
J’ai opté pour la solution Système D. ça fait simplement quelques textures à gérer.
J’ai un dernier soucis de parcours. Mon animation s’exécute également dans l’inventaire. Est ce que cela fera lag? Puis-je corriger ça simplement sinon?
(ce ne sera un bloc accessible qu’en créatif)
-
Pour l’animation dans l’inventaire il suffit d’utiliser un code différent pour le rendu dans l’inventaire et celui en jeu.
-
Houla oui, pas faux. Pardon, ça me permet de passer en résolu.
Merci.