rescue mission

26
Rescue Mission Rescue Mission Antonio Dallapè – 115401 Antonio Dallapè – 115401 Gabriele Baronti – 113188 Gabriele Baronti – 113188 Principles of Computer Graphics 2008 - 2009 Relazione esplicativa del codice

Upload: graphitech

Post on 11-May-2015

343 views

Category:

Education


6 download

DESCRIPTION

The objective of this project is to implement an application that can define and display the rescue mission path and the areas of interest visible from the different points of view (car, plane, ship) of the rescue team.

TRANSCRIPT

Page 1: Rescue Mission

Rescue MissionRescue Mission

Antonio Dallapè – 115401Antonio Dallapè – 115401

Gabriele Baronti – 113188Gabriele Baronti – 113188

Principles of Computer Graphics 2008 - 2009

Relazione esplicativa del codice

Page 2: Rescue Mission

LayersLayersRescueMission.Buttons.ButtonBaseLayerRescueMission.Buttons.ButtonBaseLayer

ButtonNewLayerButtonNewLayer

RescueMission.WorldWind.CompassLayerRescueMission.WorldWind.CompassLayer

RescueMission.WorldWind.ScaleBarLayerRescueMission.WorldWind.ScaleBarLayer

RescueMission.WorldWind.WorldMapLayerRescueMission.WorldWind.WorldMapLayer

ButtonsBgLayerButtonsBgLayerButtonPathLayerButtonPathLayerButtonAnimateLayerButtonAnimateLayer

ButtonLOSLayerButtonLOSLayerButtonVisualLayerButtonVisualLayer

Page 3: Rescue Mission

Package ButtonsPackage Buttons Le classi in RescueMission.Buttons sono dei layers che Le classi in RescueMission.Buttons sono dei layers che

per la maggior parte hanno funzione di bottoniper la maggior parte hanno funzione di bottoni Estendono quasi tutti da ButtonBaseLayer tranne Estendono quasi tutti da ButtonBaseLayer tranne

ButtonsBgLayerButtonsBgLayer ButtonNewLayer ButtonPathLayer ButtonLOSLayer e ButtonNewLayer ButtonPathLayer ButtonLOSLayer e

ButtonAnimateLayer sono bottoni molto simili che ButtonAnimateLayer sono bottoni molto simili che fondamentalmente hanno uno stato ‘premuto’ e uno ‘non fondamentalmente hanno uno stato ‘premuto’ e uno ‘non premuto’premuto’

ButtonVisualLayer ha 4 stati possibili che vengono ciclati ButtonVisualLayer ha 4 stati possibili che vengono ciclati cliccandoci sopra (dallo stato 0 si passa all’1, dall’1 al 2, cliccandoci sopra (dallo stato 0 si passa all’1, dall’1 al 2, ecc...)ecc...)

ButtonsBgLayer scrive i suggerimenti e il Flare ButtonsBgLayer scrive i suggerimenti e il Flare selezionatoselezionato

Page 4: Rescue Mission

ButtonBaseLayerButtonBaseLayer Disegna un bottone e la parte di barra di sfondo Disegna un bottone e la parte di barra di sfondo

sottostante alla posizione desiderata sottostante alla posizione desiderata position determina la posizione sull’asse delle y:position determina la posizione sull’asse delle y:

ALIGN_TOP - lo disegna in altoALIGN_TOP - lo disegna in alto ALIGN_CENTER - lo disegna in centroALIGN_CENTER - lo disegna in centro ALIGN_BOTTOM - lo disegna in bassoALIGN_BOTTOM - lo disegna in basso

btnNumber determina la posizione sull’asse delle x:btnNumber determina la posizione sull’asse delle x: 0, 1, 2, … - moltiplicato per la larghezza totale di un bottone 0, 1, 2, … - moltiplicato per la larghezza totale di un bottone

(considerando bordi, la scala, ecc…) mi da l’offset sulle x per (considerando bordi, la scala, ecc…) mi da l’offset sulle x per poter disegnare un bottone al posto prestabilitopoter disegnare un bottone al posto prestabilito

Per disegnare correttamente il bottone in base alla Per disegnare correttamente il bottone in base alla scala desiderata e alla finestra vengono usate le scala desiderata e alla finestra vengono usate le funzioni: computeScale(...) getScaledButtonWidth(...) funzioni: computeScale(...) getScaledButtonWidth(...) getScaledButtonHeight(...) computeLocation(...)getScaledButtonHeight(...) computeLocation(...)

Page 5: Rescue Mission

ButtonBaseLayerButtonBaseLayer

Viene disegnato nella funzione drawIcon(...)Viene disegnato nella funzione drawIcon(...)Nella fase di picking viene controllata la posizione Nella fase di picking viene controllata la posizione

del mouse e viene stabilito se si trova o meno del mouse e viene stabilito se si trova o meno sopra il bottone.sopra il bottone.

Quindi viene settata la texture corretta a seconda Quindi viene settata la texture corretta a seconda se il mouse è sopra al bottone o meno, se il se il mouse è sopra al bottone o meno, se il bottone è premuto o meno, o se il bottone è bottone è premuto o meno, o se il bottone è disattivatodisattivato

mouseExited(...)mouseExited(...)(Il mouse sicuramente non è sul bottone)(Il mouse sicuramente non è sul bottone)Viene aggiornata la texture a seconda se il bottone Viene aggiornata la texture a seconda se il bottone

è disattivato o menoè disattivato o meno

Page 6: Rescue Mission

ButtonBaseLayerButtonBaseLayer

Per mantenere lo stato di un bottone si usano Per mantenere lo stato di un bottone si usano le variabili:le variabili:isBtnPressed – se il bottone è premuto o menoisBtnPressed – se il bottone è premuto o menoisBtnOver – se il mouse è sopra il bottoneisBtnOver – se il mouse è sopra il bottoneisBtnEnabled – se il bottone è abilitato o menoisBtnEnabled – se il bottone è abilitato o menomousePressed(...) – si setta isBtnPressed nel caso mousePressed(...) – si setta isBtnPressed nel caso

il mouse sia sopra il bottone, e si chiama il mouse sia sopra il bottone, e si chiama buttonClicked(...)buttonClicked(...)

setEnabled(...) – si setta isBtnEnabled true o falsesetEnabled(...) – si setta isBtnEnabled true o falsesetOnOff(...) – si setta isBtnPressed true o false e setOnOff(...) – si setta isBtnPressed true o false e

isBtnEnabled a trueisBtnEnabled a true

Page 7: Rescue Mission

ButtonNewLayerButtonNewLayer

Estende ButtonBaseLayerEstende ButtonBaseLayerNel creatore vengono settate le variabili per Nel creatore vengono settate le variabili per

posizionare il bottone e per trovare le texturesposizionare il bottone e per trovare le texturesbuttonClicked(...)buttonClicked(...)

Set RescueMissionApplication.isNewPressed Set RescueMissionApplication.isNewPressed a true se era false e viceversaa true se era false e viceversa

(sostanzialmente se non era premuto diventa (sostanzialmente se non era premuto diventa premuto e se era premuto non lo è più)premuto e se era premuto non lo è più)

Page 8: Rescue Mission

ButtonPathLayerButtonPathLayer

Estende ButtonBaseLayerEstende ButtonBaseLayerNel creatore vengono settate le variabili per Nel creatore vengono settate le variabili per

posizionare il bottone e per trovare le texturesposizionare il bottone e per trovare le texturesbuttonClicked(...)buttonClicked(...)

Setta, nel Flare selezionato, isArmed a true se Setta, nel Flare selezionato, isArmed a true se era false e viceversaera false e viceversa

isArmed viene usata per sapere quando si sta isArmed viene usata per sapere quando si sta disegnando i percorsodisegnando i percorso

(sostanzialmente se non era premuto diventa (sostanzialmente se non era premuto diventa premuto e se era premuto non lo è più)premuto e se era premuto non lo è più)

Page 9: Rescue Mission

ButtonLOSLayerButtonLOSLayer

Estende ButtonBaseLayerEstende ButtonBaseLayerNel creatore vengono settate le variabili per Nel creatore vengono settate le variabili per

posizionare il bottone e per trovare le texturesposizionare il bottone e per trovare le texturesbuttonClicked(...)buttonClicked(...)

Setta, nel Flare selezionato, isOn a true se Setta, nel Flare selezionato, isOn a true se era false e viceversaera false e viceversa

isOn viene usata per sapere se è abilitato il isOn viene usata per sapere se è abilitato il Line Of Sight del FlareLine Of Sight del Flare

(sostanzialmente se non era premuto diventa (sostanzialmente se non era premuto diventa premuto e se era premuto non lo è più)premuto e se era premuto non lo è più)

Page 10: Rescue Mission

ButtonLOSLayerButtonLOSLayer Estende ButtonBaseLayerEstende ButtonBaseLayer

Nel creatore vengono settate le variabili per Nel creatore vengono settate le variabili per posizionare il bottone e per trovare le texturesposizionare il bottone e per trovare le textures

buttonClicked(...)buttonClicked(...) Setta, nel Flare selezionato, isOn a true se era false e Setta, nel Flare selezionato, isOn a true se era false e

viceversaviceversa isOn viene usata per sapere se è abilitato il Line Of isOn viene usata per sapere se è abilitato il Line Of

Sight del FlareSight del Flare Se viene abilitato lo si disegna (si setta isTimeToDo a Se viene abilitato lo si disegna (si setta isTimeToDo a

true) altrimenti lo si cancella (deleteLineOfSight())true) altrimenti lo si cancella (deleteLineOfSight()) (sostanzialmente se non era premuto diventa premuto (sostanzialmente se non era premuto diventa premuto

e se era premuto non lo è più)e se era premuto non lo è più)

Page 11: Rescue Mission

ButtonAnimateLayerButtonAnimateLayer

Estende ButtonBaseLayerEstende ButtonBaseLayerNel creatore vengono settate le variabili per Nel creatore vengono settate le variabili per

posizionare il bottone e per trovare le texturesposizionare il bottone e per trovare le texturesbuttonClicked(...)buttonClicked(...)

Chiama, nel Flare selezionato, setAnimate Chiama, nel Flare selezionato, setAnimate che fa partire o interrompe l’animazione a che fa partire o interrompe l’animazione a seconda se isAnimating era true o falseseconda se isAnimating era true o false

(sostanzialmente se non era premuto diventa (sostanzialmente se non era premuto diventa premuto e se era premuto non lo è più)premuto e se era premuto non lo è più)

Page 12: Rescue Mission

ButtonVisualLayerButtonVisualLayer

Estende ButtonBaseLayerEstende ButtonBaseLayer Nel creatore vengono settate le variabili per Nel creatore vengono settate le variabili per

posizionare il bottone e per trovare le texturesposizionare il bottone e per trovare le textures In drawIcon(...) e mousePressed(...) viene In drawIcon(...) e mousePressed(...) viene

implementata la logica per far funzionare il bottone implementata la logica per far funzionare il bottone come una sorta di lista che seleziona la voce come una sorta di lista che seleziona la voce seguente quando viene cliccataseguente quando viene cliccata

whatVisual – rappresenta la visuale selezionatawhatVisual – rappresenta la visuale selezionata 0 – la visuale libera0 – la visuale libera 1 – la visuale dalla macchina della polizia (car)1 – la visuale dalla macchina della polizia (car) 2 – la visuale dall’F-117 (plane)2 – la visuale dall’F-117 (plane) 3 – la visuale dall’astronave (spaceshio)3 – la visuale dall’astronave (spaceshio)

Page 13: Rescue Mission

ButtonVisualLayerButtonVisualLayer

buttonClicked(...)buttonClicked(...)Setta, nel Flare selezionato, whatVisual al Setta, nel Flare selezionato, whatVisual al

valore di visualSelectedvalore di visualSelectedsetEnabled(...)setEnabled(...)

Abilita/disabilita il bottone e resetta Abilita/disabilita il bottone e resetta visualSelected e whatVisual del Flare visualSelected e whatVisual del Flare selezionato (vengono settate a 0)selezionato (vengono settate a 0)

Page 14: Rescue Mission

ButtonsBgLayerButtonsBgLayer Disegna la parte di barra sotto i suggerimenti, un Disegna la parte di barra sotto i suggerimenti, un

cerchietto col colore del Flare selezionato e il cerchietto col colore del Flare selezionato e il nome di tale Flarenome di tale Flare

Simile a ButtonBaseLayer ma non implementa Simile a ButtonBaseLayer ma non implementa MouseListener ed è più sempliceMouseListener ed è più semplice

Viene disegnato nella funzione drawIcon(...)Viene disegnato nella funzione drawIcon(...) Scrive suggerimenti diversi nel caso sia selezionato il Scrive suggerimenti diversi nel caso sia selezionato il

bottone ‘New’, ‘Path’, o altrobottone ‘New’, ‘Path’, o altro Disegna un cerchietto con il colore del flare Disegna un cerchietto con il colore del flare

selezionato con drawCircle(...) o una cerchietto vuoto selezionato con drawCircle(...) o una cerchietto vuoto se non è selezionato nulla con drawCirconference(...)se non è selezionato nulla con drawCirconference(...)

Scrive il nome del file selezionato o ‘none selected’Scrive il nome del file selezionato o ‘none selected’

Page 15: Rescue Mission

Package WorldWindPackage WorldWind Le classi in RescueMission.WorldWind sono dei layers e Le classi in RescueMission.WorldWind sono dei layers e

altre classi di JWW che non sono state molto modificatealtre classi di JWW che non sono state molto modificate CompassLayer – è il compass layer ma visualizzato in bassoCompassLayer – è il compass layer ma visualizzato in basso WorldMapLayer – è l’omonimo layer visualizzato in basso e ora WorldMapLayer – è l’omonimo layer visualizzato in basso e ora

importa MouseListener per far selezionare il luogo desiderato, importa MouseListener per far selezionare il luogo desiderato, dove ci si vuol spostare, direttamente da lìdove ci si vuol spostare, direttamente da lì

ScalebarLayer – è l’omonimo layer visualizzato in basso, in ScalebarLayer – è l’omonimo layer visualizzato in basso, in centrocentro

Configuration – è l’omonima classe che però legge i layer da Configuration – è l’omonima classe che però legge i layer da caricare dal Config\worldwind.properties locale, il quale farà caricare dal Config\worldwind.properties locale, il quale farà caricare i layer stabiliticaricare i layer stabiliti

Polyline – è l’omonima classe che non implementa movablePolyline – è l’omonima classe che non implementa movable RayCastingSupport – è la classe che viene usata per calcolare e RayCastingSupport – è la classe che viene usata per calcolare e

disegnare il Line Of Sight di un Flaredisegnare il Line Of Sight di un Flare

Page 16: Rescue Mission

ColorsColors

Questa classe offre delle funzioni per Questa classe offre delle funzioni per ottenere dei colori univociottenere dei colori univocidispatchColor() – per ottenere un colore dispatchColor() – per ottenere un colore

univocounivoco isUsed(...) – per sapere se il colore è stato già isUsed(...) – per sapere se il colore è stato già

usatousatoLa classe ha un array di 1024 elementi per La classe ha un array di 1024 elementi per

memorizzare i colori già utilizzati, supponendo memorizzare i colori già utilizzati, supponendo che nell’applicazione non saranno mai che nell’applicazione non saranno mai posizionati così tanti Flaresposizionati così tanti Flares

Page 17: Rescue Mission

FlareGFXLoaderFlareGFXLoader

Questa classe viene usata per caricare in Questa classe viene usata per caricare in RescueMissionApplication i modelli e le RescueMissionApplication i modelli e le textures che saranno poi utilizzati dai flaretextures che saranno poi utilizzati dai flareViene creata in RescueMissionApplicationViene creata in RescueMissionApplicationEstende Renderable e GLEventListenerEstende Renderable e GLEventListener

Inizialmente il caricamento dei modelli veniva Inizialmente il caricamento dei modelli veniva eseguito all’inizializzazione di ogni Flare ma con eseguito all’inizializzazione di ogni Flare ma con alcune schede video dava errori al caricamento alcune schede video dava errori al caricamento delle textures, inoltre essendo eseguito una volta delle textures, inoltre essendo eseguito una volta sola rende il codice più ottimizzatosola rende il codice più ottimizzato

Page 18: Rescue Mission

FlareDraggerFlareDragger

Questa classe estende SelectListener e Questa classe estende SelectListener e permette di draggare i Flarepermette di draggare i Flare

Permette di selezionare un Flare Permette di selezionare un Flare cliccandoci sopra col tasto sinistro e di cliccandoci sopra col tasto sinistro e di eliminarlo cliccandolo col destroeliminarlo cliccandolo col destro

Nel caso si stia disegnando il percorso di Nel caso si stia disegnando il percorso di un Flare (se isArmed del Flare selezionato un Flare (se isArmed del Flare selezionato è true), le funzioni di selezione, è true), le funzioni di selezione, cancellazione e dragging sono inibitecancellazione e dragging sono inibite

Page 19: Rescue Mission

FlareFlare Viene disegnato nella doRender(...), che viene chiamata Viene disegnato nella doRender(...), che viene chiamata

all’interno della render(...) dopo l’inizializzazione all’interno della render(...) dopo l’inizializzazione avvenuta chiamando la initialize(...)avvenuta chiamando la initialize(...) Initialize(...) viene chiamata una sola volta e crea delle glCallList Initialize(...) viene chiamata una sola volta e crea delle glCallList

contenenti le informazioni per disegnare i modelli 3d e le sfere contenenti le informazioni per disegnare i modelli 3d e le sfere che compongono un Flareche compongono un Flare

doRender(...) viene chiamata dalla render(...) disegnando il doRender(...) viene chiamata dalla render(...) disegnando il contenuto delle glCallList nella posizione attuale del Flare, pos, contenuto delle glCallList nella posizione attuale del Flare, pos, settando l’orientamento dei modelli 3d in base alla direzione del settando l’orientamento dei modelli 3d in base alla direzione del Flare (quando viene draggato o durante le animazioni) e Flare (quando viene draggato o durante le animazioni) e l’inclinazione in base alla curva terrestrel’inclinazione in base alla curva terrestre

L’angolo della direzione viene salvato nella variabile globale angleL’angolo della direzione viene salvato nella variabile globale angle Se isTimeToDo è true chiama la update() che aggiornerà il LOSSe isTimeToDo è true chiama la update() che aggiornerà il LOS La direzione viene calcolata usando pos e oldPosLa direzione viene calcolata usando pos e oldPos

Page 20: Rescue Mission

FlareFlare moveTo(…) aggiorna la posizione pos e oldPos e, se moveTo(…) aggiorna la posizione pos e oldPos e, se

isAnimating è false, modifica il primo punto del percorso isAnimating è false, modifica il primo punto del percorso facendolo combaciare con la posizione attualefacendolo combaciare con la posizione attuale

update(), se isOn è true, chiama la update(), se isOn è true, chiama la computeLineOfSight()computeLineOfSight()

computeLineOfSight(), se isComputing è false, lo setta a computeLineOfSight(), se isComputing è false, lo setta a true, calcola nuovamente il LOS e lo disegna, una volta true, calcola nuovamente il LOS e lo disegna, una volta finito setta nuovamente isComputing a falsefinito setta nuovamente isComputing a false

deleteLineOfSight() cancella il LOS disegnatodeleteLineOfSight() cancella il LOS disegnato mouseReleased(...) e mouseWheelMoved(...) settano mouseReleased(...) e mouseWheelMoved(...) settano

isTimeToDo a true, dato che corrispondono ad azioni del isTimeToDo a true, dato che corrispondono ad azioni del mouse che, cambiando posizione o vicinanza alla terra e mouse che, cambiando posizione o vicinanza alla terra e conseguente aggiornamento delle altitudini, devono far conseguente aggiornamento delle altitudini, devono far ricalcolare il LOS ricalcolare il LOS

Page 21: Rescue Mission

FlareFlare addPosition() aggiunge un nodo al percorso e aggiorna la lineaaddPosition() aggiunge un nodo al percorso e aggiorna la linea replacePosition() modifica l’ultimo nodo inserito e aggiorna la lineareplacePosition() modifica l’ultimo nodo inserito e aggiorna la linea removePosition() cancella l’ultimo nodo inserito e aggiorna la linearemovePosition() cancella l’ultimo nodo inserito e aggiorna la linea setAnimate() utilizzando un thread anima il Flare, che segue il setAnimate() utilizzando un thread anima il Flare, che segue il

percorso stabilito, se isAnimating è true, altrimenti interrompe percorso stabilito, se isAnimating è true, altrimenti interrompe l’animazionel’animazione Vengono calcolate lunghezza e posizioni intermedie per rendere la Vengono calcolate lunghezza e posizioni intermedie per rendere la

velocità del Flare uniformevelocità del Flare uniforme Vengono utilizzate le varie visuali (car, plane, spaceship) a seconda Vengono utilizzate le varie visuali (car, plane, spaceship) a seconda

della variabile whatVisualdella variabile whatVisual I modelli 3d vengono orientati in base alla variabile globale angle che è I modelli 3d vengono orientati in base alla variabile globale angle che è

aggiornata alla direzione attualeaggiornata alla direzione attuale Alla creazione del flare viene impostato un numero univoco che Alla creazione del flare viene impostato un numero univoco che

viene salvato in numberviene salvato in number

Page 22: Rescue Mission

RescueMissionApplicationRescueMissionApplication La classe che contiene il mainLa classe che contiene il main Contiene la classe AppFrame che estende JFrame, che Contiene la classe AppFrame che estende JFrame, che

alla creazione inizializza tutto l’ambiente sul quale si alla creazione inizializza tutto l’ambiente sul quale si basa l’applicazionebasa l’applicazione

In variabili globali statiche, sono memorizzatiIn variabili globali statiche, sono memorizzati I modelli 3d (model_spaceship, ...)I modelli 3d (model_spaceship, ...) Le textures (texture_plane, texture_car)Le textures (texture_plane, texture_car) I layer dei bottoni (bottonNewLayer, ...)I layer dei bottoni (bottonNewLayer, ...) Il numero del Flare selezionato (selectedFlare)Il numero del Flare selezionato (selectedFlare) Il layer su cui si disegnano i Flare (layer)Il layer su cui si disegnano i Flare (layer) Un’arraylist contenente i Flare (flares)Un’arraylist contenente i Flare (flares) Lo stato del bottone ‘NEW’ (isNewPressed)Lo stato del bottone ‘NEW’ (isNewPressed)

getFlareFromNumber(...) restituisce, dato il number di un getFlareFromNumber(...) restituisce, dato il number di un Flare, l’indice del Flare all’interno di flaresFlare, l’indice del Flare all’interno di flares

Page 23: Rescue Mission

RescueMissionApplicationRescueMissionApplication selectFlare(...) seleziona il Flare, settando in selectFlare(...) seleziona il Flare, settando in

selectedFlare il number del Flare, e settando lo stato dei selectedFlare il number del Flare, e settando lo stato dei vari bottoni a seconda dello stato delle variabili nel Flarevari bottoni a seconda dello stato delle variabili nel Flare

selectNone(...) deseleziona il Flare, settando selectNone(...) deseleziona il Flare, settando selectedFlare a -1 e disabilitando tutti i bottoni tranne il selectedFlare a -1 e disabilitando tutti i bottoni tranne il ‘NEW’‘NEW’

initialize(...) initialize(...) Inizializza gran parte delle variabili globali staticheInizializza gran parte delle variabili globali statiche Aggiunge a layer la renderizzazione di un’istanza di Aggiunge a layer la renderizzazione di un’istanza di

FlareGFXLoaderFlareGFXLoader Abilita layer e lo aggiunge ai layers di wwdAbilita layer e lo aggiunge ai layers di wwd Aggiunge il SelectListener FlareDragger a wwdAggiunge il SelectListener FlareDragger a wwd Aggiunge MouseListener MouseMotionListener PositionListener Aggiunge MouseListener MouseMotionListener PositionListener

KeyListenerKeyListener

Page 24: Rescue Mission

RescueMissionApplicationRescueMissionApplication mousePressedmousePressed

Se la posizione è ‘off globe’ esceSe la posizione è ‘off globe’ esce Se era premuto ‘NEW’ crea un Flare alla posizione specificataSe era premuto ‘NEW’ crea un Flare alla posizione specificata

Se era premuto anche il tasto SHIFT permette l’inserimento del Se era premuto anche il tasto SHIFT permette l’inserimento del nomenome

Se era premuto anche il tasto CTRL mantiene il bottone ‘NEW’ Se era premuto anche il tasto CTRL mantiene il bottone ‘NEW’ premuto e permette di creare, di seguito, altri Flarepremuto e permette di creare, di seguito, altri Flare

Se isArmed del Flare selezionato è true (cioè si sta definendo il Se isArmed del Flare selezionato è true (cioè si sta definendo il percorso)percorso)

Aggiunge un nodo chiamando la addPosition()Aggiunge un nodo chiamando la addPosition() Modifica l’ultimo nodo con la replacePosition() premendo SHIFTModifica l’ultimo nodo con la replacePosition() premendo SHIFT Cancella l’ultimo nodo con la removePosition() premendo CTRLCancella l’ultimo nodo con la removePosition() premendo CTRL Se si aggiunge o modifica viene settato isArmed del Flare Se si aggiunge o modifica viene settato isArmed del Flare

selezionato a trueselezionato a true

Page 25: Rescue Mission

RescueMissionApplicationRescueMissionApplication

mouseReleasedmouseReleased Se isArmed del Flare selezionato è true (cioè si sta Se isArmed del Flare selezionato è true (cioè si sta

definendo il percorso)definendo il percorso) Viene settato isArmed del Flare selezionato a falseViene settato isArmed del Flare selezionato a false

keyPressedkeyPressed S – saveToFile(...) – salva i FlareS – saveToFile(...) – salva i Flare L – loadFromFile(...) – carica i Flare L – loadFromFile(...) – carica i Flare 1 – visualizza solo la ‘car’ Flare selezionato1 – visualizza solo la ‘car’ Flare selezionato 2 – visualizza solo il ‘plane’ del Flare selezionato2 – visualizza solo il ‘plane’ del Flare selezionato 3 – visualizza solo la ‘spaceship’ del Flare selezionato3 – visualizza solo la ‘spaceship’ del Flare selezionato 0 – visualizza tutti i modelli del Flare selezionato0 – visualizza tutti i modelli del Flare selezionato

Page 26: Rescue Mission

FlareSerializableFlareSerializable Questa classe viene utilizzata per salvare in un Questa classe viene utilizzata per salvare in un

file delle variabili dalle quali è possibile file delle variabili dalle quali è possibile ricostruire un Flarericostruire un Flare Le variabili di tipo Position sono salvate sotto forma di Le variabili di tipo Position sono salvate sotto forma di

tre double (latitudine, longitudine, altezza)tre double (latitudine, longitudine, altezza) Nella classe Flare è possibile creare un nuovo Nella classe Flare è possibile creare un nuovo

Flare passando come parametro un Flare passando come parametro un FlareSerializable, in questo modo le variabili FlareSerializable, in questo modo le variabili standard vengono inizializzate come di consueto standard vengono inizializzate come di consueto mentre quelle specifiche che caratterizzano il mentre quelle specifiche che caratterizzano il Flare vengono inizializzate utilizzando le variabili Flare vengono inizializzate utilizzando le variabili del FlareSerializabledel FlareSerializable