Jump to content

Trigger speciali ... circuito di binario


Recommended Posts

Ho fatto caso solo stasera che tra gli oggetti appartenenti a "marcatori di binario", per intenderci dove si trovano trigger e trackmark, ci sono anche 2 oggetti a cui non avevo mai fatto caso ... Circuito di binario e isolatore di binario.

posso intuire a cosa servono ( Trigger asimmetrico ?) ma qualcuno ne sa di più ?

 

image.thumb.png.78b7f5fa8120cf6ac6ef495b0c069b83.png

Link to comment

Questo è il file tipo gs corrispondente .... sostanzialmente permette di valutare se il circuito di binario è occupato.

Nel caso di cambio di stato del circuito di binario viene emesso un messaggio intercettabile.

Lo si può considerare come un trigger asimmetrico o meglio dai limiti configurabili.

 

// ============================================================================
// File: TrackCircuitBlock.gs
// Desc: TrainzScript interface to the Track Circuit Block functionality within
//       Trainz. TCBs are created by placing a uniquely named instace of
//       "kind TrackCircuitDetector" onto a Track. Within Trainz, TCBs are a
//       generic concept of an area of track. TCBs may, but do not have to,
//       correspond with the real-life concept of Track Circuits.
// ============================================================================
include "trackside.gs"


// ============================================================================
// Name: TrackCircuitBlock
// Desc: The TrackCircuitBlock object is created by Trainz and cannot be
//       overridden. This acts as an accessor to the native TCB functionality.
// ============================================================================
final game class TrackCircuitBlock isclass GameObject
{

  // ==========================================================================
  // Name: IsOccupied
  // Desc: Returns whether this block is currently occupied by a Train.
  // Retn: bool - True if block is occupied, false if it is unoccupied.
  // Note: Native code will post a ("TrackCircuit","ChangedState") message to
  //       this TrackCircuitBlock whenever this blocks occupied status changes.
  // ==========================================================================
    public native bool IsOccupied(void);
  
  
  // ==========================================================================
  // Name: GetTCBName
  // Desc: TrackCircuitBlocks are uniquely named. The name is determined from
  //       the "kind TrackCircuitDetector" asset that spawned this block, and
  //       is not localised.
  // Retn: string - The internal unique name of this TrackCircuitBlock.
  // ==========================================================================
  public native string GetTCBName(void);
  
  
  // ==========================================================================
  // Name: GetLocalisedDisplayName
  // Desc: The localised name is determined from the
  //       "kind TrackCircuitDetector" asset that spawned this block, and
  //       is localised. This should be used for display purposes only.
  // Retn: string - The localised display name of this TrackCircuitBlock.
  // ==========================================================================
  public native string GetLocalisedDisplayName(void);
  
  
  // ==========================================================================
  // Name: GetTrackCircuitDetector
  // Desc: Returns the instance of "kind TrackCircuitDetector" which spawned
  //       this block. This can be used by scripts to provide extra parameters
  //       when making custom use of a TCB.
  // Retn: string - The localised display name of this TrackCircuitBlock.
  // ==========================================================================
  public native Trackside GetTrackCircuitDetector(void);
};

Link to comment

Non saprei ... dai comandi si direbbe utilizzato principalmente dalla Interlocking tower per gestire il traffico identificando i tratti liberi da treni e non ... ma di più non capisco 

 

Il seguente codice invece appartiene ad un'altra nuova classe di oggetti che gestisce l'aspetto visivo della striscia verde che si vede nella foto ...

 

//=============================================================================
// File: TrackPathDisplay.gs
// Desc: Script interface used to manage TrackPathDisplay objects
//=============================================================================
include "gstracksearch.gs"
include "InterlockingTowerPath.gs"


//=============================================================================
// Name: TrackPathDisplay
// Desc: Used to create a visual representation of a track path or block. Once
//       created the path will be visual in the 3D world and on the minimap.
//       Markers can be added to the path to denote points of interest, if
//       desired.
//       New instances are created via Constructors.NewTrackPathDisplay().

//=============================================================================
final game class TrackPathDisplay isclass GSObject
{

  //=============================================================================
  // Name: InitFromTrackCircuitBlock
  // Desc: Initialises this TrackPathDisplay from a TrackCircuitBlock by name.
  //       This will clear any existing path and points of interest defined on
  //       this object.
  //=============================================================================
  public native bool InitFromTrackCircuitBlock(string name);


  //=============================================================================
  // Name: InitFromSchedule
  // Desc: Initialises this TrackPathDisplay from a train schedule. This will
  //       clear any existing path and points of interest defined on this object.
  //=============================================================================
  public native bool InitFromSchedule(Train train, Schedule schedule);


  //=============================================================================
  // Name: InitFromInterlockingTowerPath
  // Desc: Initialises this TrackPathDisplay from an interlocking tower path.
  //       This will clear any existing path and points of interest defined on
  //       this object.
  //=============================================================================
  public native bool InitFromInterlockingTowerPath(InterlockingTowerPath path);


  //=============================================================================
  // Name: SetDisplaySpline
  // Desc: Sets the spline used to display this track path.
  //=============================================================================
  public native bool SetDisplaySpline(Asset splineAsset);


  //=============================================================================
  // Name: FindAllEndpoints
  // Desc: Locates all enpoints of this path. The search direction at each
  //       endpoint faces into the Path, not out of the Path. Returned array may
  //       be empty if this path is not configured, but will otherwise contain
  //       at least two entries.
  //=============================================================================
  public native GSTrackSearch[] FindAllEndpoints();


  //=============================================================================
  // Name: AddPointOfInterest
  // Desc: Adds a single point of interest marker at the position passed.
  //=============================================================================
  public void AddPointOfInterest(GSTrackSearch position, Asset displayMeshAsset);


  //=============================================================================
  // Name: AddPointsOfInterest
  // Desc: Adds multiple points of interest at the positions passed.
  //=============================================================================
  public native void AddPointsOfInterest(GSTrackSearch[] position, Asset[] displayMeshAsset);


  //=============================================================================
  // Name: ClearPointsOfInterest
  // Desc: Clears all points of interest currently set.
  //=============================================================================
  public native void ClearPointsOfInterest();

  //=============================================================================
  // Name: AddPointOfInterest
  // Desc: Adds a single point of interest marker at the position passed.
  //=============================================================================
  public void AddPointOfInterest(GSTrackSearch position, Asset displayMeshAsset)
  {
    GSTrackSearch[] positionArray;
    Asset[] assetArray;

    positionArray[0] = position;
    assetArray[0] = displayMeshAsset;

    AddPointsOfInterest(positionArray, assetArray);
  }

};
 

Link to comment
  • 3 weeks later...

Si potrebbero creare delle mattonelle con serigrafie uguali a quelle dei banchi ACEI e collegare ogni mattonella ad uno specifico trigger di questo tipo in modo che all'occupazione del c.d.b. corrisponde l'accensione della serigrafia. Altre mattonelle potrebbero rappresentare i segnali o i PL o i segnali bassi .... 

Probabilmente è possibile anche l'inserimento di tasti e funzioni ....

Le mattonelle verrebbero appoggiate a terra con un meccanismo di aggancio tipo fixed-track o dime.

 

Insomma, ricreare un banco.

:ciao:

  • Like 1
Link to comment
  • 7 months later...

Se, posso, mi inserisco nella discussione, al momento sto mettendo su un piccolo progettino legato a un oggetto di tipo scenery da posizionare di fianco alla stazione dal quale, durante il gioco (driver) si può accedere ad un serie di pulsanti (simil banco acei) e selezionare il percorso desiderato... Comprende anche un quadro luminoso (ancora non funzionante ) .. PS. Per i programmatori Esiste un modo via script per capire se viene premuto un tasto dalla tastiera .. io proprio non riesco a trovarlo.. 

 

Link to comment

If I understand The Wiki correctly, those are track circuit block detectors and are intended for use with "Enhanced Interlocking Tower" assets which are 3rd party scripted assets which extend the Interlocking Tower with some extra features. By doing some pre-processing before calling standard interlocking tower processing and doing some post-processing on return, these new assets enable the user to take the best from interlocking towers and to offer some enhanced functionalities by default or on option.

Search the Wiki for Enhanced Interlocking Tower.

Link to comment
7 ore fa, Aniello72 ha scritto:

Se, posso, mi inserisco nella discussione, al momento sto mettendo su un piccolo progettino legato a un oggetto di tipo scenery da posizionare di fianco alla stazione dal quale, durante il gioco (driver) si può accedere ad un serie di pulsanti (simil banco acei) e selezionare il percorso desiderato... Comprende anche un quadro luminoso (ancora non funzionante ) .. PS. Per i programmatori Esiste un modo via script per capire se viene premuto un tasto dalla tastiera .. io proprio non riesco a trovarlo.. 

 

Cerca sulla wiki nel mini browser.

ci sono delle funzioni che intercettano la pressione di tasti nella finestra delle proprietà.

Link to comment
1 minuto fa, Aniello72 ha scritto:

Intendevo durante la guida no in modalità ingegniere

 

Quello che vedi durante la guida o puoi fare è predisposto / programmato in modalità ingegnere.

Lo script che hai descritto sopra ( non ho capito se di tua creazione ) è già in parte o totalmente realizzato ? o sei nella fase "progettuale" ?

 

Link to comment

E' di mia creazione, a metà dell'opera.. Da quello che capisco anche tu (se posso dare del tu) ti intendi di programmazione. Il mio progetto si articola così: in modalità ingegniere ( utilizzando un qualsiasi edificio, nel mio progetto ho utilizzato una cabina posto di blocco Fs scaricata da qui) puoi creare un serie di percorsi relativi ad una stazione .. successivamente hai la possibilità di creare un banco acei dal quale (con pulsanti ) puoi attivare i suddetti percorsi .. 

Il tutto richiamabile quando sei in modalità guida(driver) .. ecco perché stavo cercando una funzione che in modalità driver che tenesse sotto controllo la tastiera .. 

Link to comment
1 ora fa, Aniello72 ha scritto:

E' di mia creazione, a metà dell'opera.. Da quello che capisco anche tu (se posso dare del tu)

Ci mancherebbe che mi dai del Voi :rotfl:

 

 

 

1 ora fa, Aniello72 ha scritto:

 

ti intendi di programmazione. Il mio progetto si articola così: in modalità ingegniere ( utilizzando un qualsiasi edificio, nel mio progetto ho utilizzato una cabina posto di blocco Fs scaricata da qui) puoi creare un serie di percorsi relativi ad una stazione .. successivamente hai la possibilità di creare un banco acei dal quale (con pulsanti ) puoi attivare i suddetti percorsi .. 

Il tutto richiamabile quando sei in modalità guida(driver) .. ecco perché stavo cercando una funzione che in modalità driver che tenesse sotto controllo la tastiera .. 

Il progetto è chiaro ... però consentimi, dalla domanda che fai io intuisco che le tue nozioni a riguardo la programmazione sono basiche per cui ribadisco  :

 

Per avere dei tasti/oggetti  che reagiscono in driver nella finestra delle proprietà (quella che si apre con il punto interrogativo) della tua cabina vanno obbligatoriamente scritte delle righe di comando nello script.

 

La classe che si occupa della parte grafica e gestione di questa finestra e soprattutto delle funzioni correlate è :

Class PropertyObject - TrainzOnline (ts2009.com)

 

Con queste funzioni scrivi il codice che in driver ti permette (entrando nella finestra prorietà) di visualizzare,schicciare , manipolare qualcosa, salvare e caricare le impostazioni  ... chiamiamola interfaccia ( per te (Banco Acei)

Fin quì è facile .... poi, devi passare alla parte molto molto molto molto più complicata della creazione dei percorsi, bloccaggi, gestione oggetti etc. etc.

 

Se posti qui il codice o direttamente il file.gs che hai creato fin d'ora ne parliamo.

 

 

 

 

Link to comment

Non riesco a farmi capire ... La parte dei percorsi e dei relativi permessi e già completata.. la costruzione del banco vero e proprio viene fatta in modalità ingegniere ..(qui lo costruisci nella pagina delle proprietà secondo l'esigenza..) e fin qui penso di essermi spiegato.. giusto ?? Ora quando sei in modalità (guida) quindi non in ingegnere, vorrei poter monitorare la tastiera in modo che quando premo il tasto B (per esempio) mi apre la finestra di rappresentazione del banco .. attualmente ci riesco o col crtl+tasto destro del mouse sull'edificio di cui ti dicevo prima . o con un comando macchinista sempre da me creato..  .. PS ho scaricato i segnali It TB..a 1 2 e  3 vele con i relativi aspetti fissi o lampeggianti ecc .ho visto che funzionano benissimo, solo se posizionati a una certa distanza l'uno dall'altro sai se è possibile modificare questa distanza ?? Pultroppo il codice e criptato gsl

Link to comment

A ok.. ascolta un'ultima domanda per la scrittura del codice di programmazione  sto usando context editor perché in aggiunta  ha anche la funzione di compilazione o comunque controlla il codice scritto.. non riesco, però, a raggruppare il testo in blocchi per snellire il codice sapresti indicarmi qualche altro editor di scrittura che abbia la funzione di raggruppamento in blocchi e come configurarlo.. 

Ieri ho  scaricato notepad++, che ha quella funzione , ma non so associargli il compilatore di trainz 

Link to comment

Ok grazie di tutto.. non appena la veste grafica del Banco Acei sara degna e di facile comprensione posterò qualche anteprima da valutare con voi del laboratorio e casomai

rilasciarla a servizio di tutti.. PS per i semafori volevo adattarli ad un piccolo tracciato tipo plastico ferroviario Rivarossi.. ma necessitano di distanze reali per funzionare se ti capitano i file .gs scriptati dimmi qualcosa che poi li adatto io.. Grazie ancora 

Link to comment
×
×
  • Create New...