[No Limits 2] Tuto sur les scripts

  • 265 Réponses
  • 44748 Vues

0 Membres et 1 Invité sur ce sujet

Re : [No Limits 2] Tuto sur les scripts
« Réponse #255 le: 07 avril 2016 à 08:48:52 »
Salut Salut!

Je commence tout juste les scripts et j'ai tenté de juste mettre un objet 3D en rotation de manière permanente via un script trouvé sur le forum de nolimits exchange!

  • J'ai créé une roue dentée sur sketchup que j'ai exporté en Collada dans un dossier "test".
  • J'ai nommé le fichier 3D en question "test".
  • J'ai modifié le script pour coller à ma situation:
    Citer
    import com.nolimitscoaster.*;
    import nlvm.math3d.*;

    public class test extends Script
    {
       private static final float rotationrate = 5;
       private float y = 0;

       SceneObject sco;
       SceneObjectElement elem;

       public bool onInit()
       {
          //Get handle for scenery object file
          sco = sim.getSceneObjectForEntityId(getParentEntityId());
          if (sco == null)
          {
             System.err.println("No scene object was found.");
             return false;
          }
          
          //Get handle for test element
          elem = sco.getElementForName("test");
          if (elem == null)
          {
             System.err.println("No object named 'test' was found.");
             return false;
          }
          
          return true;
       }
          
       public void onNextFrame(float tick)
       {
          y += rotationrate * sim.getCurSimulationTickSec();
          elem.setRotation(new Vector3f(0,y,0));
       }
    }

    • J'ai créé le NLSCO en associant le script à l'objet 3D


    ...Et je reçoit le message d'erreur
    Citer
    No object named 'test' was found

    Quelqu'un peut-il m'expliquer? Si je galère déjà sur ça j'ai peur pour la suite  :-D

*

Hors ligne Jmy

  • *******
  • 1 294
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #256 le: 07 avril 2016 à 10:27:41 »
Dans Sketchup, as tu nommé ton entité "test" ?
Ton script cherche un objet ( SceneObject sco;) et un sous objet ( SceneObjectElement elem;)...
« Modifié: 07 avril 2016 à 10:29:58 par Jmy »

Re : [No Limits 2] Tuto sur les scripts
« Réponse #257 le: 07 avril 2016 à 10:34:19 »
Oui je l'ai nommé "test" aussi mais c'est pas un "élément" c'est un "composant"...Peut-être que c'est ça le problème? Comment changer les script pour régler ça?

*

Hors ligne Jmy

  • *******
  • 1 294
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : [No Limits 2] Tuto sur les scripts
« Réponse #258 le: 07 avril 2016 à 10:45:55 »
Est ce que tu as appelé ton objet "test" dans le scene object instance properties ?
Je suis une burne en script mais je vais essayer de te dépatouiller !

Re : [No Limits 2] Tuto sur les scripts
« Réponse #259 le: 07 avril 2016 à 10:48:47 »
Ah bah en c'est bon en fait j'avais pas nommé le composant "test" en fait et maintenant ça marche ! C'est nickel ! Merci beaucoup!  :wink:

*

Hors ligne Jmy

  • *******
  • 1 294
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #260 le: 07 avril 2016 à 10:50:33 »
Ah bah en c'est bon en fait j'avais pas nommé le composant "test" en fait et maintenant ça marche ! C'est nickel ! Merci beaucoup!  :wink:

De rien, sinon il y a aussi celui ci... Je crois que c'est Benij qui l'avait posté...
import com.nolimitscoaster.*;
//import nlvm.math3d.*;

public class HeliceScript extends Script
{
  private SceneObject m_sco;
  private SceneObjectElement m_mainroue;
 

  private float m_angle;

public bool onInit()

    {

   m_sco = sim.getSceneObjectForEntityId(getParentEntityId());
   
   m_mainroue = m_sco.getElementForName("helice");

   return true;

   }

public void onNextFrame(float tick)
   {
   
   m_angle += tick * 2.0f;

   m_angle = m_angle % (float)(2*Math.PI);

   m_mainroue.setRotation(m_angle, 0, 0);

   }

}

Re : [No Limits 2] Tuto sur les scripts
« Réponse #261 le: 11 avril 2016 à 09:12:14 »
Salut salut!

Je cherche un script qui me permettrait de créer un effet de fumigène du style vapeur sous pression qui fuit d'une canalisation et synchronisée avec le passage du train. J'ai aucune idée de comment faire ça...
Il y a déjà des effets de brume dans le jeu mais c'est clairement pas assez dynamique par rapport à ce que je souhaite  :-P
Quelqu'un aurait une idée?

*

Hors ligne yoyo212

  • ********
  • 1 622
  • EGF what else ? Wildfire !
    • Voir le profil
    • dawaweb.ch
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #262 le: 11 avril 2016 à 09:27:05 »
Quelqu'un aurait une idée?

http://www.dawaweb.ch/dawa/?page_id=2148

A toi de l'adapter. Si t'y connais rien en particules, j'ai ajouté une page http://www.dawaweb.ch/dawa/?page_id=1718
Mumuses toi bien  :mrgreen:

Re : [No Limits 2] Tuto sur les scripts
« Réponse #263 le: 11 avril 2016 à 12:11:19 »
De base j'y connais rien en script, je vais regarder mais je risque de revenir poser des questions  :-P Merci Yoyo :)

*

Hors ligne Jmy

  • *******
  • 1 294
  • Tous différents mais tous passionnés!
    • Voir le profil
Re : Re : [No Limits 2] Tuto sur les scripts
« Réponse #264 le: 12 avril 2016 à 13:11:59 »
Salut salut!

Je cherche un script qui me permettrait de créer un effet de fumigène du style vapeur sous pression qui fuit d'une canalisation et synchronisée avec le passage du train. J'ai aucune idée de comment faire ça...
Il y a déjà des effets de brume dans le jeu mais c'est clairement pas assez dynamique par rapport à ce que je souhaite  :-P
Quelqu'un aurait une idée?

Toi, tu veux ça !  :wink:
http://www.youtube.com/embed/J3e7ij_MvSM?rel=0
« Modifié: 12 avril 2016 à 13:26:53 par Jmy »

Re : [No Limits 2] Tuto sur les scripts
« Réponse #265 le: 18 juin 2017 à 14:42:28 »
Bonjour! J'ai trouvé le script SplineExport (je l'ai trouvé sur Youtube puis je l'ai recopié et mis le script dans le dossier de Nolimits, dans le parc que je fait, et quand je lance le script (dans l'éditeur), il me marque un message d'erreur:

import com.nolimitscoaster.*;
import nlvm.math3d.*;

public class SplineExport extends Script {
    /////////////////////////////////////////////
    float heartline = 0.3f;
    float seperation = 0.25f;

    float beginDistance = 0.0f;
    int beginIndex = 0;
    /////////////////////////////////////////////

    public Coaster currentCoaster;
    Train fTrain;

    Vector3f last;
    bool first = true;
    float dis = 0.0f;
    bool breakScript = false;

    float totalDistance = 0.0f;
   
    int i=0;

    public bool onInit() {
        currentCoaster = sim.getCoasterForEntityId(getParentEntityId());
        fTrain = currentCoaster.getTrainAt(0);
        last = new Vector3f();

        return true;
    }
   
    public void onNextFrame(float tick) {
        if(breakScript) return;

        Vector3f fo = new Vector3f(0.0f, 0.0f, 0.0f);
        Vector3f to = new Vector3f(0.0f, 0.0f, 0.0f);
        Vector3f ro = new Vector3f(0.0f, 0.0f, 0.0f);
        Vector3f po = new Vector3f(0.0f, 0.0f, 0.0f);

        fTrain.getBogieOrientationAndPosition(0, fo, to, ro, po);

        Vector3f cross = new Vector3f(
            ro.y * fo.z - ro.z * fo.z,
            ro.z * fo.x - ro.x * fo.z,
            ro.z * fo.y - ro.y * fo.x
        );
       
        cross.normalize();
        cross.mul(heartline);
        cross.add(po);

        if(first && beginDistance == 0.0f) {
            System.out.println((i + beginIndex)+ "\t" + po.x + "m\t" + po.y + "m\t" + (po.z * -1.0f) + "m\t");
            System.out.println((i + beginIndex)+ "\t" + cross.x + "m\t" + cross.y + "m\t" + (cross.z * -1.0f) + "m\t");

            first = false;
            i++;
        } else {
            Vector3f v2 = po;
            Vector3f v1 = last;
            float distance = (float) Math.sqrt(Math.pow(v2.x, 2) + Math.pow(v2.y - v1.y, 2) + Math.pow(v2.z - v1.z, 2));
            if(first && beginDistance != 0.0f) {
                first = false;
                distance = 0.0f;
            }

            dis += distance;
            totalDistance += distance;

            if(dis > seperation) {
                if(beginDistance ==0.0f || (beginDistance != 0.0f && totalDistance > beginDistance)) {
                    System.out.println((i + beginIndex)+ "\t" + po.x + "m\t" + po.y + "m\t" + (po.z * -1.0f) + "m\t");
                    System.out.println((i + beginIndex)+ "\t" + cross.x + "m\t" + cross.y + "m\t" + (cross.z * -1.0f) + "m\t");

                    i++;
                }

                dis = 0.0f;
            }
        }
       
        last.x = po.x;
        last.y = po.y;
        last.z = po.z;

        if(i > 490) {
            System.out.println("Change beginDistance to " + totalDistance + "and beginIndex to " + (i + beginIndex));
            breakScript = true;
        }
    }

}
Je ne trouve pas la source de l'erreur
Quelqu'un aurait-il idée de ce qui bloque? Une erreur dans le script? Merci d'avance
Un seul parc d'attraction visité, Aqualud au Touquet.
Coasters fait? Que des coasters aquatique, un à la fête foraine de Lille, les autres étaient les toboggans d'Aqualud! Et aussi les petits coasters enfantin dans les fêtes foraines!